- Verdict hero: champion (trophy + flag + name) and a 2/3/4 podium
(runner-up/3rd/4th) above the shared count-up tiles. Gated on the REAL
final via computeVerdict() — getBracketTree()'s FINAL node must be a real
finished result (!simulated), so a user's simulated champion never leaks
into the verdict. Third/fourth from the third-place match, independently.
Falls back to the existing aggregate 'in progress' hero until the final is
in, so an early merge stays correct.
- Goals-by-round chart beside goals-by-stage: group stage split into its 3
matchdays (derived per group; no matchday field exists) plus each knockout
round. Hidden until >=2 rounds have data so it never duplicates the
goals-by-stage Group bar early on.
- stats.js imports getBracketTree from bracket.js (4th circular import with
app.js, render-time only). i18n stats.goalsByRound/matchday/verditTitle/
runnerUp/thirdPlace/fourthPlace (EN/PT); verdict-hero CSS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Append the Stage A entry to project-memory.md, refresh project-map.md
(app.js/stats.js descriptions + optional data layers + branch note), and add
the A-J stage tracker to TODO.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>