The phone menu lists 17 destinations in a 934px panel inside an 812px viewport, with no max-height and no overflow, pinned under a sticky nav. GitHub, Log in and Sign up sat below the fold with no way to scroll to them, and the page behind the open menu kept scrolling instead.
This ports the fix that landed in bughq (its PR 13) and is going into analyticshq as stacksjs/analyticshq#53: the panel is capped at calc(100dvh - 92px) — the 68px nav, the 12px gap, and 12px of breathing room — scrolls internally with overscroll contained, and the page locks while the menu is open. The nav geometry is identical across the three apps, so the offset carries over unchanged.
Measured at 375×812 on the rendered page, before → after:
- panel height 934px → 720px;
overflow-yvisible → auto - unreachable links 3 → 0 ("Sign up" lands at y=737–775 after scrolling the panel)
- body overflow while the menu is open: auto → hidden
tests/unit/mobile-layout.test.ts pins the contract, in the same shape as bughq's.