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 @@