956a7455ebd6b272bd39c65b4f981eea33de6282
VYNDR 2.0 conversion, Phase G (the systems that make the design alive). All 5 wired. Frontend-only; zero backend changes. - lib/parlayMath.js: correlation model (0.62/0.34/0.06/0) + parlayGrade penalty + grade->odds + combined odds (frontend; backend parlayService unchanged). - lib/oddsFormat.js: fmtOdds across american/decimal/fractional/implied with the totals-pass-through rule (safer than the prototype's parseAm, which would mis-convert 228.5) + region presets. - lib/prefs.js: applyPrefs sets <html data-*> (the S33 a11y CSS layer) + load/save. - lib/liveTick.js: single tick engine (SSR/test-safe, no auto-start, fresh state). - lib/checkout.js: checkoutUrl(plan). - LiveLayer (useLive/LiveNumber/HeartbeatBar) under the Nav ticker; GlobalHosts in layout applies prefs + registers __prefs/__goPaywall/__checkout + hosts the Preferences and Paywall modals. Nav read-meter is now a paywall trigger. Gotchas: useEffect can't return a Set.delete unsub directly (boolean != cleanup); header grew to 124px so layout paddingTop + Slate sticky-top updated to match. 18 new tests. Backend 1872 -> 1890, 146 suites, zero regressions. Web build clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Session 38: Design system Phase G — living layer, i18n/odds, a11y, paywall, parlay math (1890 tests)
Session 38: Design system Phase G — living layer, i18n/odds, a11y, paywall, parlay math (1890 tests)
Session 38: Design system Phase G — living layer, i18n/odds, a11y, paywall, parlay math (1890 tests)
Session 38: Design system Phase G — living layer, i18n/odds, a11y, paywall, parlay math (1890 tests)
Description
No description provided
Languages
JavaScript
58.6%
TypeScript
24.9%
Python
13.9%
CSS
1.4%
PLpgSQL
0.7%
Other
0.4%