Let the document scroll, so the scrollbar is the browser's own

Fixkamo-apps
Shipped
September 6, 2026 at 1:23 AM UTC
Author
Kamo
Commit
3705467

Third attempt at this, and the first two were aimed at the wrong thing because the harness was lying. Puppeteer launches Chrome with --hide-scrollbars by default, so every screenshot taken while diagnosing this had no scrollbars in it at all — including the ones I used to conclude a fix had worked. Removing that flag and re-testing showed the bar had never been drawn. With sight restored, the cause reproduced from nothing: a page containing only a scroll container and a `position: fixed; inset: 0` layer carrying blur(3px), scale(1.03) and z-index: 0 — which is precisely BackgroundStage — draws no scrollbar. A positioned layer at z-index 0 paints after the in-flow scroller, and a scroll container's bar is painted with the scroller rather than after it, so the artwork was laid straight over it. The overscale exists to hide the blur's soft edge, so it reaches past the pane on every side and there was no strip of the scroller it did not cover. Rather than keep arranging paint order around a full-bleed backdrop, the scroll moves back to the document. The window's own scrollbar is drawn by the browser outside the page, so nothing the page paints can cover it and no overlay setting can fade it away. That means the pane grows with its content instead of being a scroll container, and the clip changes with it: clip-path instead of overflow plus transform. clip-path still clips the page's `fixed` children to the pane's rounded corners, but unlike a transform it does not become their containing block — so the artwork and the support bubble stay anchored to the viewport and hold still, which is what the previous fix was for. Verified both ways in a minimal page before touching the app. The shadow moves to .kamo-shell, since clip-path would otherwise clip the pane's own shadow away, and a sticky child is held at the pane's top edge rather than the viewport's, which is a gap higher. Measured at 1440x900 and 390x844: window scrollbar 15px wide, document scrollable by 400 and 1085, pane inset exactly 15px on both sides, and the artwork moving 0px while the heading moves the full -400. Eleven viewports sweep clean with the rail at exactly the pane's height. The bar is in the screenshot this time.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing