Last updated 2026-07-13 09:44 WEDT ยท now:
Cody3's mutation found six controls buried in scrolling popups. Five were reading screens and his fix was right. One was this โ and it is the reason the law exists.
Three choices about another person. The card scrolls (maxHeight:88vh ยท overflowY:auto).
The close button is pinned, so the card looks finished. Scroll it.
Same three choices. No scroll. Symbols carry the options; the words about a control appear after it's tapped. This is Davi's own remedy: put less on that level.
| shape | what it is | remedy |
|---|---|---|
| POPUP | A transient layer offering a bounded set of choices about the thing you just tapped. | MUST NOT SCROLL. Ever. Show less at this level (symbols, no prose on the buttons); nest
the detail one level deeper. overflow is never the answer. |
| LIGHTBOX SCREEN | Replaces the surface. Content โ prose, a diagram โ not controls. Has its own close. | Content may scroll. The close and every control must be pinned outside the scroll flow. An essay that scrolls is a book; an essay whose close scrolls away is a trap. |
| PANEL / PALETTE | Persistent tray or list. Not transient, not tapped open. Homogeneous peers. | The list may scroll. A unique control โ Apply, Export all, Done โ may never live inside it. |
One testable rule for all three: a control inside a scrolling region must be PINNED, or be one of a list of peers. And a popup has no scrolling region at all.
DraggablePopup.jsx, in its own contract, says:
"size to fit the viewport; inner content scrolls when it overflows."
The popup primitive documents the exact behaviour the law forbids. Every popup built on it inherits permission to scroll โ so this bug is not a mistake anyone made, it is a bug the primitive mints. A law repealed in a comment. Proposed replacement:
A popup FITS. If content overflows: show less at this level, and nest the detail one level deeper.
overflow is never the answer. If a surface genuinely must scroll, it is not a popup
โ it is a lightbox screen, and it must pin its close and its controls.