From 56036216f83c1fad3093f649993b2f146084f9bb Mon Sep 17 00:00:00 2001 From: KeelrLeek <156356974+KeelrLeek@users.noreply.github.com> Date: Wed, 22 Jul 2026 19:38:10 -0500 Subject: [PATCH] Phase 2C: fix reel centering via window-relative card positioning The transitioned track translateY collapsed to 0 in Chromium (percent- translated zero-height track), leaving the active cover one stride low per step. The track is now a fixed anchor at the reel centre; each card positions itself at (index - activeIndex) * stride and animates its own small `top`, so no coordinate ever exceeds +/-RENDER_RADIUS * stride. Verified with the transition ON: centre offset 0 at every index in the 12- and 500-item fixtures, 5 cards in the DOM at scale, wheel gates, dialog semantics, Tab containment, focus restore, and polite announce all pass. Dev window.__preview*/__ui handles removed from App.svelte. --- src/App.svelte | 11 +------ src/components/PreviewOverlay.svelte | 44 ++++++++++++++++------------ 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index e6c36cb..e597773 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -6,7 +6,7 @@ import ArtworkViewer from "./components/ArtworkViewer.svelte"; import LoginModal from "./components/LoginModal.svelte"; import PreviewOverlay from "./components/PreviewOverlay.svelte"; - import { previewUi, openPreviewFixture } from "./lib/preview/previewSession.svelte.js"; + import { previewUi } from "./lib/preview/previewSession.svelte.js"; import Home from "./views/Home.svelte"; import Search from "./views/Search.svelte"; import Library from "./views/Library.svelte"; @@ -43,15 +43,6 @@ refreshLibrary(); refreshPlaylists(); - // Dev-only hook for the Phase 2 exit-gate check (500-item fixture in a - // plain browser) and for driving the modal without a Tauri backend. - if (import.meta.env.DEV && typeof window !== "undefined") { - window.__previewFixture = (n = 12) => openPreviewFixture(n); - window.__previewUi = previewUi; // debug: the app's own store instance - window.__ui = ui; // debug: known-good reactive store, same instance - window.__togglePv = () => (previewUi.open = !previewUi.open); - window.__toggleNp = () => (ui.nowPlaying = !ui.nowPlaying); - }