Scroll the document, and let the chrome scroll with it #110

Merged
lilleman merged 10 commits from document-scroll into main 2026-09-10 16:24:03 +02:00
Owner

The shell was a 100dvh box with overflow hidden, so a page scrolled only if its own wrapper was a flex child with overflow-y auto. A long page in form-page clipped everything past the window, silently, in every engine.

Now .app is min-height 100dvh and nothing bounds the viewport. The sidebar and topbar scroll with the page. The sticky thead on data-table goes with them: a header only sticks to a scrollport that moves, and there is no longer one.

The principle behind that now leads AGENTS.md priority 1, at the owner's direction: a page is a document, it scrolls, and the chrome scrolls with it. Nothing may bound the viewport to hold content still. Overlays are the exception, since the skip link, the off-canvas nav and its scrim sit above the document rather than holding it still.

One bug the change introduced and this PR fixes: with the document now able to scroll behind the open drawer, closing it teleported the reader to the top, because the nav toggle is a focusable checkbox and a browser scrolls a focused element into view. It is position fixed now, so there is nothing to scroll to. Verified by mutation in all three engines.

Breaking, so HOST_API_VERSION goes to 0.4.0 with every apiVersion sample, the release tripwire pin and a CHANGELOG entry whose upgrade steps say what a plugin loses: the bounded content column and the sticky table header, with no opt-out.

Reviewed to APPROVE WITH NITS by stability and through the architecture pass; typecheck, 547 unit tests, 51 visual across Chromium, Firefox and WebKit, and 12 full-flow all green.

The shell was a 100dvh box with overflow hidden, so a page scrolled only if its own wrapper was a flex child with overflow-y auto. A long page in form-page clipped everything past the window, silently, in every engine. Now .app is min-height 100dvh and nothing bounds the viewport. The sidebar and topbar scroll with the page. The sticky thead on data-table goes with them: a header only sticks to a scrollport that moves, and there is no longer one. The principle behind that now leads AGENTS.md priority 1, at the owner's direction: a page is a document, it scrolls, and the chrome scrolls with it. Nothing may bound the viewport to hold content still. Overlays are the exception, since the skip link, the off-canvas nav and its scrim sit above the document rather than holding it still. One bug the change introduced and this PR fixes: with the document now able to scroll behind the open drawer, closing it teleported the reader to the top, because the nav toggle is a focusable checkbox and a browser scrolls a focused element into view. It is position fixed now, so there is nothing to scroll to. Verified by mutation in all three engines. Breaking, so HOST_API_VERSION goes to 0.4.0 with every apiVersion sample, the release tripwire pin and a CHANGELOG entry whose upgrade steps say what a plugin loses: the bounded content column and the sticky table header, with no opt-out. Reviewed to APPROVE WITH NITS by stability and through the architecture pass; typecheck, 547 unit tests, 51 visual across Chromium, Firefox and WebKit, and 12 full-flow all green.
lilleman changed title from WIP: Scroll the document by default; a bounded region is a page's own opt-in to Scroll the document by default; a bounded frame is fill:true 2026-09-09 15:20:04 +02:00
lilleman changed title from Scroll the document by default; a bounded frame is fill:true to Scroll the document, and let the chrome scroll with it 2026-09-09 16:09:03 +02:00
lilleman added 13 commits 2026-09-10 16:16:50 +02:00
Update renovate/renovate Docker tag to v44.75.1
CI / full-gate (push) Successful in 2m48s
Mirror / github-mirror (push) Successful in 3s
fbc1633a1a
Release-Bump: minor
Regenerate the icon sprite: lucide 1.39.0 redraws circle-check
CI / full-gate (push) Successful in 2m57s
Mirror / github-mirror (push) Successful in 3s
cb4468ff77
Say what the comment is for, not what the bug was
CI / full-gate (push) Successful in 2m49s
Mirror / github-mirror (push) Successful in 3s
Release / retag-image (push) Successful in 17s
Release / publish-overview (push) Successful in 3s
58767cb53e
lilleman force-pushed document-scroll from 25239cd978 to 58767cb53e 2026-09-10 16:16:50 +02:00 Compare
lilleman merged commit 58767cb53e into main 2026-09-10 16:24:03 +02:00
lilleman deleted branch document-scroll 2026-09-10 16:24:03 +02:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: larvit/plainpages#110