diff --git a/src/App.svelte b/src/App.svelte index 61afb2c..08b4b2b 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -44,7 +44,12 @@ here and lives above whichever view is current — see the note at the top of GlassBar.svelte for what a per-view instance cost. Views that do not show it yet hide it; the component is never unmounted, so its crumb - memory survives every navigation, including out to Home and back. */ + memory survives every navigation, including out to Home and back. + + A page added here MUST also take `padding-top: var(--pane-pad)`: the bar + cancels the pane's top padding so a page's artwork can run underneath it, + and the page restores that inset for its own content. Without it the page + renders 24px too high; with it but not listed here, 24px too low. */ const BAR_VIEWS = new Set(["catalogArtist", "catalogAlbum"]); initEvents(); @@ -72,8 +77,9 @@
+ padding. It consumes no flow height of its own AND cancels the + pane's top padding, so the page after it begins flush with the top + of the pane and its artwork runs under the bar. -->
@@ -137,12 +143,16 @@ away with the content, keeping the seam colors identical at every scroll position. */ background-attachment: local; + /* The pane's top padding, named because three other rules are tied to + it: the glass bar bleeds up over it, cancels it for what follows, and + each page under the bar restores it as its own padding-top. */ + --pane-pad: 24px; border-radius: var(--radius); overflow-y: auto; overflow-anchor: none; /* Main scroll pane: no elastic rubber-band at its edges. Inner regions deliberately do NOT set this, so their wheel chains here. */ overscroll-behavior: none; - padding: 24px 28px; + padding: var(--pane-pad) 28px; } diff --git a/src/components/GlassBar.svelte b/src/components/GlassBar.svelte index 3b7b4b4..0c07947 100644 --- a/src/components/GlassBar.svelte +++ b/src/components/GlassBar.svelte @@ -125,23 +125,43 @@