/* ---- Library page header (title + search bar) - see Library.ts/html. ---- Wraps .pageHeader and tiles.css's .searchBar (already sticky on its own) in one sticky block so the title stays put too, instead of scrolling away while the search bar stays behind - reported directly. Needs its own opaque background since .pageHeader's

has none - without it, grid tiles scrolling underneath would show through the title text once stuck. */ .libraryHeader { position: sticky; top: 0; /* Above 2, not just tiles.css's own .searchBar precedent: a tile's .tileOverlay action buttons are ALSO z-index: 2, and (unlike the slim .searchBar this header replaced) this header is tall enough that a scrolling tile's own overlay - always-visible on touch, see tiles.css's (hover: none) block - reaches it well before it's fully scrolled past. Equal z-index ties break on paint order, and a tile (inside #grid, after this header in the DOM) wins that tie - reported directly as buttons rendering over the header while scrolling. z-index: 3 matches shell/Shell.css's own .mobileTopBar, the other sticky header this one already has to stack correctly under on mobile. */ z-index: 3; background: var(--bg); padding-top: 4px; } /* Below 720px, shell/Shell.css's own sticky .mobileTopBar already occupies top:0 - stacking this header at top:0 too would have both fighting over the same spot, with this one (later in paint order) covering the app's brand bar. Stick it right below instead. */ @media (max-width: 720px) { .libraryHeader { top: var(--mobile-topbar-h); } }