Scaffold the post-Cup stats screen (.agents/stats-screen-plan.md) on the
feature/stats-final-screen branch.
- loadData(): fault-tolerant optional data layers (players, player-events,
awards, keeper-stats, curiosities, all-time-baselines) via loadOptional() —
an absent/404 file defaults to empty SILENTLY (graceful degradation, keeps
the console clean), warning only on a present-but-malformed file. The 6 core
files still throw on failure.
- stats.js SECTIONS registry: a section and its sub-nav chip render only when
available(model) holds, else they are omitted from the DOM entirely (no
placeholder / no coming-soon). Overview/Teams live; the 4 future sections
stay dark until later stages.
- Sticky scrollspy sub-nav: hash-safe anchor chips (preventDefault +
scrollIntoView, never touch location.hash so the tab router does not bounce
to Home); position-based scrollspy with an explicit page-bottom -> last
section rule (robust on short pages). --header-h kept live via a
ResizeObserver so the nav sticks correctly under the variable-height header.
- flagImg() monogram fallback: a broken flag SVG becomes a 3-letter code span,
never a broken-image icon.
- i18n stats.nav* keys (EN/PT); stats.css for sub-nav / section / fallback.
No DATA_VERSION bump (no deployed data changed). No index.html change.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
findFeaturedMatch → findFeaturedMatches: returns all matches sharing the
earliest kickoff, enabling the hero to show 2+ simultaneous group-final games
(same phase, shared time/countdown). renderHero splits single-match (unchanged
DOM) vs multi-match (stacked with dividers). heroMatchupHTML extracted for
reusable matchup layout.
CSS: .hero-matchups/match/divider/time for vertical stacking and shared time.
i18n: hero.nextMatches (EN/PT) for multi-match label.
- Remove card chrome (background rect, text duplicates, accent bars) from all 17 stadium SVGs
- Crop viewBox tightly to illustration (~10px padding) and remove fixed width/height attributes
- Update .stadium-img aspect ratio from 16/9 to 4/3 to match cropped SVG ratios and prevent aggressive object-fit clipping
- Added possession %, shots, and card counts to matches 1–7
- Sources verified: ESPN, Opta Analyst, Yahoo Sports, Sofascore, VAVEL USA
- Stats render correctly in match modal for both EN and PT languages
- Documented in project memory with sources and verification notes
Record completion of mock→real tournament data migration (2026-06-12): all 6
data/*.json files now hold verified WC2026 data; stadiums trimmed 30→16;
match ids clarified (1–72 chronological group, 73–104 official knockout numbers);
third-place slot allocations documented. Add daily refresh runbook reference to
project memory workflow section. Mark step 11 complete in TODO.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Self-contained guide for daily maintenance of tournament data during the World
Cup (Jun 11 – Jul 19). Covers: scoring updates to results.json, one-time bracket
assignment fill, rare schedule changes, and verification checklist. Distinguishes
mutable (results) vs. frozen (teams, groups, stadiums) files.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Replace flag SVGs for 10 fictional teams with 10 new qualifiers (BIH, CZE, RSA,
CUW, CPV, HAI, IRQ, NOR, SWE, COD). Remove 14 unused stadium SVGs for venues not
in the 16-stadium tournament roster.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Replace fictional tournament data with official World Cup 2026 roster, groups,
schedule, and initial results. All 48 qualified teams, 16 venues, and 104 matches
(72 group + 32 knockout) now reflect real tournament data with cross-source
verification.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>