Commit graph

112 commits

Author SHA1 Message Date
ddfc656f5d docs: log stats screen Stage C (ranking, favorites, records)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 00:22:24 -03:00
8a521575aa feat(stats): final ranking 1-48, favorite highlight, team records (Stage C)
- Canonical final ranking: each team carries a .rank from the stage-reached
  chain (champion>runner-up>3rd>4th>QF>R16>R32>group, then pts>GD>GF>id),
  computed from REAL knockout results only (simulation never moves it). The #
  column shows this rank and is the default sort; it stays canonical when
  sorting other columns, and clicking # returns to it.
- Favorite-team row highlight (gold inset border + tint); re-renders on
  favchange. No stars in the table (highlight-only, like the bracket).
- Team record cards: biggest win (-> openMatchModal), longest win streak
  (>=2, else hidden), and champion's path (R32->Final route, gated on the
  verdict, rows -> openMatchModal). Each degrades away when its data is null.
- stats.js imports getFavorites (storage) + openMatchModal (modal). i18n
  tip.rank/stats.rankCol/biggestWin/winStreak/championPath (EN/PT); CSS for
  .row-fav, record cards, champion path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 00:22:24 -03:00
beac60518f Merge branch 'master' into feature/stats-final-screen 2026-06-17 00:08:54 -03:00
1312d2327a data: update 16/06/2026 00:05 ARGxALG 3x0 2026-06-17 00:06:02 -03:00
12275b8bcb Merge branch 'master' of https://github.com/LucasKalil-Programador/world-2026-hub 2026-06-16 23:07:41 -03:00
98c84aa5b6 data: update 16/06/2026 23:07 IRQxNOR 1x4 2026-06-16 23:06:14 -03:00
Lucas Kalil
dcb1ea97fa
Update deploy.yml 2026-06-16 20:13:33 -03:00
Lucas Kalil
45ba9c05c7
Update deploy.yml 2026-06-16 20:10:22 -03:00
c10a573cab docs: log stats screen Stage B (verdict hero + goals-by-round)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 19:46:57 -03:00
61e0bb0d0a feat(stats): verdict hero + goals-by-round chart (Stage B)
- 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>
2026-06-16 19:46:57 -03:00
f3751f0042 docs: log stats screen Stage A (feature/stats-final-screen)
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>
2026-06-16 19:36:39 -03:00
387fab3c8b feat(stats): degradation engine + scrollspy sub-nav (Stage A)
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>
2026-06-16 19:36:32 -03:00
79e746e4d4 docs: log daily refresh 16/06/2026 2026-06-16 19:00:12 -03:00
8afbcac9c5 data: update 16/06/2026 19:00 FRAxSEN 3x1 2026-06-16 19:00:12 -03:00
1f23daf120 perf(app): optimize countdown rendering and hero clock polling 2026-06-16 15:54:33 -03:00
715ecedbcb feat(pwa): add Tier 1 support — installable app with manifest and icons 2026-06-16 15:09:34 -03:00
2ad27084d5 docs: log daily refresh 16/06/2026 2026-06-16 00:24:07 -03:00
ae95812269 data: update 16/06/2026 01:00 IRNxNZL 2x2 2026-06-16 00:24:04 -03:00
e488b7c77f docs: record live data refresh design and implementation 2026-06-16 00:12:59 -03:00
5b1707a764 feat(app): poll results.json for live updates without reload 2026-06-16 00:12:50 -03:00
ddc82bba49 docs: log daily refresh 15/06/2026 2026-06-15 22:41:26 -03:00
c937671fdd data: update 15/06/2026 22:00 KSAxURU 1x1 2026-06-15 22:41:26 -03:00
425c27fa37 data: update 15/06/2026 18:00 BELxEGY 1x1 2026-06-15 18:04:56 -03:00
d06a21b5e3 docs: log daily refresh through match 13 (2026-06-15) 2026-06-15 15:34:54 -03:00
8886dcf098 data: update match 13 result and stats (ESP 0-0 CPV) 2026-06-15 15:34:48 -03:00
ad6d7ea616 fix(header): two-row layout with scrollable tabs below 1100px 2026-06-15 15:27:10 -03:00
6e33142c96 feat(hero): display simultaneous group-final matches with shared timer
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.
2026-06-15 14:52:10 -03:00
99ea02a604 feat(schedule): add occurrence filter with pending result status 2026-06-15 14:33:33 -03:00
5cbd3e6f3d docs: log daily refresh through match 12 (2026-06-15)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 02:13:41 -03:00
18d6066849 data: update match 12 result and stats (SWE 5-1 TUN)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 02:13:33 -03:00
a0fe50075c docs: log smart hero countdown in project memory
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 02:07:37 -03:00
fd71bd2c48 feat(hero): advance countdown by clock without JSON updates
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 02:07:29 -03:00
d354db3cf2 docs: log daily refresh through match 11 (2026-06-14) 2026-06-14 22:08:46 -03:00
3e9a60bb9e data: update matches 10-11 results and stats (NED 2-2 JPN, CIV 1-0 ECU) 2026-06-14 22:08:46 -03:00
d5a9dadc5d feat(stats): add tournament-to-date stats tab 2026-06-14 21:38:01 -03:00
ba81e49eac data: update match 9 results and stats (GER 7-1 CUW) 2026-06-14 16:03:35 -03:00
74fa8603f4 data: update match 8 results and stats (AUS 2-0 TUR)
- Match 8 finished: Australia 2-0 Turkey
- Added statistics: possession 28/72, shots 9/30, cards 0/1
- Verified in preview with correct modal display
- Updated project memory with refresh entry and sources
- Bumped DATA_VERSION to 2026-06-14-rev1 for cache busting
2026-06-14 03:01:04 -03:00
0f5889d8d6 refactor(logo): redesign world cup logo SVG with improved football icon 2026-06-14 01:56:44 -03:00
51c390d6e5 docs: document stadium SVG cleanup and aspect ratio rationale 2026-06-14 01:06:16 -03:00
e94aa09ce5 refactor(stadiums): clean up SVG illustrations and fix image aspect ratio
- 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
2026-06-14 01:06:14 -03:00
da8a8838c6 feat(cache): add cache-busting version for data files 2026-06-14 00:06:37 -03:00
6d835b43b9 feat(data): backfill match statistics for completed group stage matches
- 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
2026-06-13 23:50:28 -03:00
8233262d1d fix(deploy): correct FTP server-dir path for Hostinger 2026-06-13 23:30:33 -03:00
08c224ec3e feat(modal): display match stats when available 2026-06-13 23:23:18 -03:00
d2bd5f6c65 ci: deploy to public_html/worldcup2026 subfolder
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:08:20 -03:00
ffda08229b docs(agents): document GitHub Actions FTP deploy pipeline
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:05:01 -03:00
7d6113be85 ci: add GitHub Actions FTP deploy to Hostinger
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:04:03 -03:00
80c0efa508 docs(agents): update project memory with daily refresh 2026-06-13 22:57:26 -03:00
07e4e1a3e7 data: update matches 5-7 results 2026-06-13 22:57:25 -03:00
0ebb66120c assets(flags): replace placeholder flags with realistic designs
Replaces 48 placeholder flag SVGs (simple boxes with country codes) with realistic, detailed flag designs.
2026-06-13 11:57:45 -03:00