Pane elements opt out of the viewport floor: --profile-min-h:0 on the pane mount

The root of the paint-over and of the keyboard regression rega's A/B found.
ProfileLoader's wrapper is min-height: var(--profile-min-h, 100dvh), and a
host that already sizes the element sets --profile-min-h:0 (the Gallery's
.dms-pane, VerticalTabs, plugin-studio). The pane column sizes each element
(inset:0 in its pane) but never set it, so on the standalone leaf each
pane's wrapper was 100dvh = 900 px inside an 843 px pane: the wall's
scroller ran 57 px past its pane, its first row's tapes painted over the
map, and Tab into those tapes scrolled the pane COLUMN (and, with the
clip, onto an invisible control). The Gallery was pane-sized only because
its own host set the variable. The clip stays as belt and braces.
This commit is contained in:
Doxa Maps 2026-09-29 14:09:23 +00:00
parent 9f2a6d6356
commit 2b342f8cbc

View file

@ -70,7 +70,17 @@ export const PANE_GRID_STYLES = `
overflow:clip;
}
/* The live custom element fills its pane. */
.pane > .pane-mount{ position:absolute; inset:0; }
.pane > .pane-mount{
position:absolute; inset:0;
/* ★ THE PANE ALREADY SIZES ITS ELEMENT, SO THE ELEMENT OPTS OUT OF THE VIEWPORT FLOOR. ProfileLoader's
wrapper has min-height: var(--profile-min-h, 100dvh) (library/ProfileLoader.vue), and a host that
gives the element a definite height sets --profile-min-h:0 — the Gallery (.dms-pane), VerticalTabs
and plugin-studio all do. The pane column never did, so on the standalone leaf each pane's wrapper
was 100dvh (900) inside an 843 pane: the wall scroller ran 57 px past its pane (its tapes painted
over the map, and Tab into row 1 scrolled the COLUMN instead of the wall). Inherited, so it crosses
into each element's shadow root, where no selector here can reach. */
--profile-min-h:0;
}
/* Placeholder copy for a pane whose profile is not built yet — same card styling
as the wrapper's own placeholder so an unbuilt pane never looks broken. */
.pane-placeholder{