fix: make header sticky on scroll (#593)

* fix: make header sticky on scroll

- change overflow-x from hidden to clip on .app-layout to preserve
position: sticky on descendants
- add position: sticky and background to header so it sticks to top
when scrolling through long lists

previously, scrolling down a long track list required scrolling all the
way back up to access search or navigation. now the header stays visible.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: update STATUS.md with Dec 14-15 work

- performance improvements (PRs #590-591)
- moderation agent (PRs #586, #588)
- bug fixes (PRs #589, #592, #593)
- iOS Safari fixes (PRs #573-576)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

authored by zzstoatzz.io Claude Opus 4.5 and committed by GitHub c78e0948 2ffe1437

Changed files
+27 -3
frontend
src
lib
components
routes
+23 -1
STATUS.md
··· 47 47 48 48 ### December 2025 49 49 50 + #### performance & UX polish (PRs #586-593, Dec 14-15) 51 + 52 + **performance improvements** (PRs #590-591): 53 + - removed moderation service call from `/tracks/` listing endpoint 54 + - removed copyright check from tag listing endpoint 55 + - faster page loads for track feeds 56 + 57 + **moderation agent** (PRs #586, #588): 58 + - added moderation agent script with audit trail support 59 + - improved moderation prompt and UI layout 60 + 61 + **bug fixes** (PRs #589, #592, #593): 62 + - fixed liked state display on playlist detail page 63 + - preserved album track order during ATProto sync 64 + - made header sticky on scroll for better mobile navigation 65 + 66 + **iOS Safari fixes** (PRs #573-576): 67 + - fixed AddToMenu visibility issue on iOS Safari 68 + - menu now correctly opens upward when near viewport bottom 69 + 70 + --- 71 + 50 72 #### confidential OAuth client (PRs #578, #580-582, Dec 12-13) 51 73 52 74 **confidential client support** (PR #578): ··· 396 418 397 419 --- 398 420 399 - this is a living document. last updated 2025-12-13. 421 + this is a living document. last updated 2025-12-15.
+3 -1
frontend/src/lib/components/Header.svelte
··· 153 153 header { 154 154 border-bottom: 1px solid var(--border-default); 155 155 margin-bottom: 2rem; 156 - position: relative; 156 + position: sticky; 157 + top: 0; 157 158 z-index: 50; 159 + background: var(--bg-primary); 158 160 } 159 161 160 162 .header-content {
+1 -1
frontend/src/routes/+layout.svelte
··· 474 474 display: flex; 475 475 min-height: 100vh; /* fallback for browsers without dvh support */ 476 476 width: 100%; 477 - overflow-x: hidden; 477 + overflow-x: clip; /* clip instead of hidden to preserve position: sticky on descendants */ 478 478 } 479 479 480 480 @supports (min-height: 100dvh) {