diff --git a/.agents/project-memory.md b/.agents/project-memory.md index c563048..410ac36 100644 --- a/.agents/project-memory.md +++ b/.agents/project-memory.md @@ -302,6 +302,11 @@ Static web app showing the FIFA World Cup 2026 (Mexico/USA/Canada, 48 teams) — - **Merge to `master`:** the pure-UI build (A–F) + this polish was merged to `master` for release. Sequence used: merge latest `master`→branch first (resolve conflicts on the branch, never on master), re-verify, then `master` ← branch (`--no-ff`). **Pushing to origin** (which triggers the Hostinger FTP deploy via `deploy.yml`) is the user's explicit final go — production. - **Remaining (TODO §7):** Stage G (Layer-2 schema, schedule late — conflicts with daily refreshes), H (players + the deferred comparator Teams/Players toggle), I (editorial), and **a second polish J round 2** over those new features. +### Stats sub-nav polish — inner track + edge fades + spy-suppress (2026-06-17) +Two fixes on the stats sub-nav, committed directly on `master` (finalizing the release): +- **Edge fades (mirror the header tabs):** the chips now live in an inner **`.stats-subnav-track`** (the scroll container) inside the `.stats-subnav` pill. The fade `mask-image` is applied to the **track, not the pill**, so the pill's background + rounded ends stay crisp while only the chips fade at the edges. `.stats-subnav` is now `overflow:hidden` (clips the track to the pill radius); `.stats-subnav-track` is `position:relative` + `overflow-x:auto`. `updateSubnavFades(nav)` toggles `.fade-left`/`.fade-right` on the pill from the **track's** scroll metrics — called on track scroll, window resize (module-level `subnavResizeHandler`), `setActiveChip`, and init. All sub-nav JS that reads/sets horizontal scroll now targets the **track** (`scrollLeft`/`scrollWidth`), not the nav. +- **Scrollspy "jump" on chip click fixed:** clicking a chip set the active chip immediately, but the page-scroll spy then fired mid-animation (viewport still over the old section) and flipped active back → forward (a visible jump). Now a chip click sets `suppressSpyUntil = Date.now() + 700` (0 under reduced-motion = instant scroll) and `updateSpy()` early-returns while suppressed, so the clicked chip owns the active state until the smooth scroll settles, then the spy resumes. Verified: clicking Teams from Overview stays Teams through the scroll; manual scroll still tracks (records mid-page, comparator at the true bottom via the existing bottom-override). + ### How to update real-world data (scores, schedule) Follow `how-refresh-data.md` (project root). In short: 1. Edit `data/results.json` (scores/status) or `data/matches.json` (schedule, rare).