Adds calculate_game_importance() that boosts Priority for high-stakes
regular-season matchups based on season progress (sharp ramp after game
55), playoff bubble proximity (wildcard rank ~17-19 = max relevance),
and divisional/conference rivalry (1.4x/1.2x multipliers). Max bonus
150 pts applied to both LIVE and PRE games; playoff and FINAL games
are unaffected. Extends standings schema with division, conference,
games_played, and wildcard_sequence fields fetched from the NHL API.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shows a red pill below the team rows when a PP is active, displaying
the team on the power play and a ticking countdown. PP clock always
resyncs from the API (no local anchoring) since 2-minute penalties
are short enough that accuracy matters throughout. Removed the old
inline PP text from team rows.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Snapshot the locally-computed clock state before each re-render and
restore it afterwards, so the API response doesn't cause a visible
jump. Only resync to the API value in the final 60 seconds, where
accuracy matters.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Store seconds + received-at timestamp on time badge. A 1s interval
decrements locally so the clock never stutters between API polls.
Drift-corrected: always computed from the anchored API value, not
accumulated ticks. Re-render on each API response reanchors to the
real value.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Period base: playoff OT escalates indefinitely (P4=600, P5=750…),
reg season P4=5-min OT (600), P5=shootout (700)
- Time priority range increased (max ~300 vs old ~120), calibrated
to period length so 5-min reg season OT reads correctly
- Matchup multiplier inverted: higher period = less weight (any OT
is exciting regardless of teams)
- Replace unconditional score_total with closeness bonus: rewards
tight games regardless of goal volume (5-4 == 1-0 at same diff)
- Power play bonus: 30 (P1/P2) → 50/100/150 (P3 by time) → 200 (OT)
- Comeback bonus: one-time pulse (+50/75/100 by period) when trailing
team scores to within 2 goals; keyed on team names, clears after
firing, skips intermission
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- utc_to_eastern: use zoneinfo instead of hardcoded EDT offset (-4)
so start times are correct in both EST and EDT
- standings: fetch before truncate so a failed API call doesn't wipe
existing standings data
- routes: call parse_games() once per request instead of three times
- scheduler: wrap run_pending() in try/except so an unhandled exception
doesn't kill the background thread
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- larger scores (1.6rem), logos (40px), and card width (290px)
- green top border accent on live game cards
- section headings reduced to small muted caps
- more breathing room in team rows
- slightly larger card radius and gap
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>