Estimate preview fits perfectly in one viewport

Fixed double-scrolling in the estimate preview — page now stays in place while editor and spreadsheet scroll internally.

Bug Fixes

The estimate preview page had multiple sections scrolling independently (iframe, editor panel, spreadsheet panel), but the outer wrapper didn't pin itself to viewport height. This stacked 78vh sections on top of the header and status row, pushing the page past 100vh and causing the outer document to scroll as well — clipping the editor from view and forcing awkward horizontal reflow.

Now the preview container pins to the remaining viewport height, and inner sections use min-h-0 to respect their container bounds. The page stays still while content scrolls where it should.