@sensiblestats/widget-react 0.86.1 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/StatsWidget.tsx
2
- import { useCallback as useCallback23, useEffect as useEffect34, useMemo as useMemo6, useRef as useRef31, useState as useState55 } from "react";
2
+ import { useCallback as useCallback23, useEffect as useEffect34, useMemo as useMemo6, useRef as useRef31, useState as useState56 } from "react";
3
3
  import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
4
4
 
5
5
  // src/kickoff.ts
@@ -111,6 +111,7 @@ var STRINGS = {
111
111
  inSlipLabel: "In slip",
112
112
  oddsUnavailable: "Odds unavailable right now",
113
113
  momentumLabel: "Momentum",
114
+ formAndH2HLabel: "Form & Head-to-head",
114
115
  liveFactLabel: "Live fact",
115
116
  liveFactAsk: "Ask about this",
116
117
  liveFactEarlier: (n) => `Earlier facts (${n})`,
@@ -578,6 +579,7 @@ var STRINGS = {
578
579
  inSlipLabel: "Kuponda",
579
580
  oddsUnavailable: "Oranlar \u015Fu anda kullan\u0131lam\u0131yor",
580
581
  momentumLabel: "Momentum",
582
+ formAndH2HLabel: "Form ve Kar\u015F\u0131l\u0131kl\u0131 Ma\xE7lar",
581
583
  liveFactLabel: "Canl\u0131 bilgi",
582
584
  liveFactAsk: "Bunu sor",
583
585
  liveFactEarlier: (n) => `\xD6nceki bilgiler (${n})`,
@@ -1168,6 +1170,7 @@ function normalizeUi(cfg) {
1168
1170
  inSlipLabel: strings.inSlipLabel,
1169
1171
  oddsUnavailable: strings.oddsUnavailable,
1170
1172
  momentumLabel: strings.momentumLabel,
1173
+ formAndH2HLabel: strings.formAndH2HLabel,
1171
1174
  liveFactLabel: strings.liveFactLabel,
1172
1175
  liveFactAsk: strings.liveFactAsk,
1173
1176
  liveFactEarlier: strings.liveFactEarlier,
@@ -3935,7 +3938,7 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
3935
3938
  }
3936
3939
 
3937
3940
  // src/components/ChatPanel.tsx
3938
- import { useCallback as useCallback22, useEffect as useEffect33, useLayoutEffect, useMemo as useMemo5, useRef as useRef30, useState as useState54 } from "react";
3941
+ import { useCallback as useCallback22, useEffect as useEffect33, useLayoutEffect, useMemo as useMemo5, useRef as useRef30, useState as useState55 } from "react";
3939
3942
 
3940
3943
  // src/components/ChatHeader.tsx
3941
3944
  import { useEffect as useEffect16, useRef as useRef17, useState as useState15 } from "react";
@@ -6267,8 +6270,100 @@ function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
6267
6270
  ] });
6268
6271
  }
6269
6272
 
6273
+ // src/components/MonitorFormH2H.tsx
6274
+ import { useState as useState32 } from "react";
6275
+ import { Fragment as Fragment8, jsx as jsx53, jsxs as jsxs48 } from "react/jsx-runtime";
6276
+ function resultClass2(result) {
6277
+ if (result === "W") return "ss-w-h2h-result--win";
6278
+ if (result === "L") return "ss-w-h2h-result--loss";
6279
+ return "ss-w-h2h-result--draw";
6280
+ }
6281
+ function resultLabel(result, ui) {
6282
+ if (result === "W") return ui.standingsColWon;
6283
+ if (result === "L") return ui.standingsColLost;
6284
+ return ui.standingsColDrawn;
6285
+ }
6286
+ function FormDots({ form, ui }) {
6287
+ return /* @__PURE__ */ jsx53("div", { className: "ss-w-h2h-dots", children: form.map((m, i) => /* @__PURE__ */ jsx53("span", { className: `ss-w-h2h-result ${resultClass2(m.result)}`, children: resultLabel(m.result, ui) }, i)) });
6288
+ }
6289
+ function MonitorFormH2H({ formAndH2H, homeTeamName, awayTeamName, ui }) {
6290
+ const [expanded, setExpanded] = useState32(false);
6291
+ const { homeForm, awayForm, h2h } = formAndH2H;
6292
+ if (homeForm.length === 0 && awayForm.length === 0 && !h2h) {
6293
+ return /* @__PURE__ */ jsx53(Fragment8, {});
6294
+ }
6295
+ const total = h2h ? h2h.wins + h2h.draws + h2h.losses : 0;
6296
+ const winsPct = total > 0 && h2h ? h2h.wins / total * 100 : 0;
6297
+ const drawsPct = total > 0 && h2h ? h2h.draws / total * 100 : 0;
6298
+ const lossesPct = total > 0 && h2h ? h2h.losses / total * 100 : 0;
6299
+ return /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h", children: [
6300
+ /* @__PURE__ */ jsxs48("button", { type: "button", className: "ss-w-h2h-head", "aria-expanded": expanded, onClick: () => setExpanded((v) => !v), children: [
6301
+ /* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-head-l", children: [
6302
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-dot", "aria-hidden": "true" }),
6303
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-title", children: ui.formAndH2HLabel })
6304
+ ] }),
6305
+ /* @__PURE__ */ jsx53(
6306
+ "svg",
6307
+ {
6308
+ className: expanded ? "ss-w-h2h-chevron ss-w-h2h-chevron--open" : "ss-w-h2h-chevron",
6309
+ width: "16",
6310
+ height: "16",
6311
+ viewBox: "0 0 24 24",
6312
+ fill: "none",
6313
+ stroke: "currentColor",
6314
+ strokeWidth: "2",
6315
+ strokeLinecap: "round",
6316
+ strokeLinejoin: "round",
6317
+ "aria-hidden": "true",
6318
+ children: /* @__PURE__ */ jsx53("path", { d: "M6 9l6 6 6-6" })
6319
+ }
6320
+ )
6321
+ ] }),
6322
+ expanded && /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-body", children: [
6323
+ /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-forms", children: [
6324
+ /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-form-col", children: [
6325
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-form-team", children: homeTeamName }),
6326
+ /* @__PURE__ */ jsx53(FormDots, { form: homeForm, ui })
6327
+ ] }),
6328
+ /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-form-col ss-w-h2h-form-col--away", children: [
6329
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-form-team", children: awayTeamName }),
6330
+ /* @__PURE__ */ jsx53(FormDots, { form: awayForm, ui })
6331
+ ] })
6332
+ ] }),
6333
+ h2h && /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-record", children: [
6334
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-meta", children: h2h.label }),
6335
+ /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-bar", children: [
6336
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--win", style: { width: `${winsPct}%` } }),
6337
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--draw", style: { width: `${drawsPct}%` } }),
6338
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--loss", style: { width: `${lossesPct}%` } })
6339
+ ] }),
6340
+ /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-legend", children: [
6341
+ /* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
6342
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--win", "aria-hidden": "true" }),
6343
+ h2h.wins,
6344
+ " ",
6345
+ h2h.homeWinsLabel
6346
+ ] }),
6347
+ /* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
6348
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--draw", "aria-hidden": "true" }),
6349
+ h2h.draws,
6350
+ " ",
6351
+ h2h.drawsLabel
6352
+ ] }),
6353
+ /* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
6354
+ /* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--loss", "aria-hidden": "true" }),
6355
+ h2h.losses,
6356
+ " ",
6357
+ h2h.awayWinsLabel
6358
+ ] })
6359
+ ] })
6360
+ ] })
6361
+ ] })
6362
+ ] });
6363
+ }
6364
+
6270
6365
  // src/components/MonitorMatchCard.tsx
6271
- import { jsx as jsx53, jsxs as jsxs48 } from "react/jsx-runtime";
6366
+ import { jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
6272
6367
  function isPromoted(row, promotedPins) {
6273
6368
  const chip = row.market;
6274
6369
  if (!chip) return false;
@@ -6303,68 +6398,77 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip, onAsk }) {
6303
6398
  const otherRows = match.statRows.filter((row) => !isPromoted(row, promotedPins));
6304
6399
  const orderedRows = [...promotedRows, ...otherRows];
6305
6400
  const kickoff = match.phase === "preMatch" && match.kickoffUtc ? ui.bettingKickoff(match.kickoffUtc) : void 0;
6306
- return /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon", children: [
6307
- /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-top", children: [
6308
- live && /* @__PURE__ */ jsxs48("span", { className: "ss-w-fandash-live-pill", children: [
6309
- /* @__PURE__ */ jsx53("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
6401
+ return /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon", children: [
6402
+ /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-top", children: [
6403
+ live && /* @__PURE__ */ jsxs49("span", { className: "ss-w-fandash-live-pill", children: [
6404
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
6310
6405
  ui.liveLabel
6311
6406
  ] }),
6312
- match.phase === "fullTime" && /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
6313
- kickoff && /* @__PURE__ */ jsxs48("span", { className: "ss-w-mon-pill", children: [
6407
+ match.phase === "fullTime" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
6408
+ kickoff && /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-pill", children: [
6314
6409
  kickoff.dayLabel,
6315
6410
  " \xB7 ",
6316
6411
  kickoff.time
6317
6412
  ] }),
6318
- live && match.minuteLabel && /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
6319
- match.competitionName && /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-comp", children: match.competitionName }),
6320
- /* @__PURE__ */ jsx53(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
6413
+ live && match.minuteLabel && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
6414
+ match.competitionName && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-comp", children: match.competitionName }),
6415
+ /* @__PURE__ */ jsx54(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
6321
6416
  ] }),
6322
- /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-main", children: [
6323
- /* @__PURE__ */ jsxs48("span", { className: "ss-w-mon-side", children: [
6324
- /* @__PURE__ */ jsx53(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
6325
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-name", children: match.homeTeamName })
6417
+ /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-main", children: [
6418
+ /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-side", children: [
6419
+ /* @__PURE__ */ jsx54(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
6420
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-name", children: match.homeTeamName })
6326
6421
  ] }),
6327
- match.phase === "preMatch" ? /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs48("span", { className: "ss-w-mon-score", children: [
6422
+ match.phase === "preMatch" ? /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-score", children: [
6328
6423
  match.homeScore,
6329
- /* @__PURE__ */ jsx53("i", { children: "\u2013" }),
6424
+ /* @__PURE__ */ jsx54("i", { children: "\u2013" }),
6330
6425
  match.awayScore
6331
6426
  ] }),
6332
- /* @__PURE__ */ jsxs48("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
6333
- /* @__PURE__ */ jsx53(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
6334
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-name", children: match.awayTeamName })
6427
+ /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
6428
+ /* @__PURE__ */ jsx54(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
6429
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-name", children: match.awayTeamName })
6335
6430
  ] })
6336
6431
  ] }),
6337
- (homeScorers.length > 0 || awayScorers.length > 0) && /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-scorers", children: [
6338
- /* @__PURE__ */ jsx53("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-home", children: homeScorers.map((s, i) => /* @__PURE__ */ jsx53("li", { children: s.label }, `${s.player}-${i}`)) }),
6339
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-scorers-ball", "aria-hidden": "true", children: "\u26BD" }),
6340
- /* @__PURE__ */ jsx53("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-away", children: awayScorers.map((s, i) => /* @__PURE__ */ jsx53("li", { children: s.label }, `${s.player}-${i}`)) })
6432
+ match.phase === "preMatch" && match.formAndH2H && /* @__PURE__ */ jsx54(
6433
+ MonitorFormH2H,
6434
+ {
6435
+ formAndH2H: match.formAndH2H,
6436
+ homeTeamName: match.homeTeamName,
6437
+ awayTeamName: match.awayTeamName,
6438
+ ui
6439
+ }
6440
+ ),
6441
+ (homeScorers.length > 0 || awayScorers.length > 0) && /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-scorers", children: [
6442
+ /* @__PURE__ */ jsx54("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-home", children: homeScorers.map((s, i) => /* @__PURE__ */ jsx54("li", { children: s.label }, `${s.player}-${i}`)) }),
6443
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-scorers-ball", "aria-hidden": "true", children: "\u26BD" }),
6444
+ /* @__PURE__ */ jsx54("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-away", children: awayScorers.map((s, i) => /* @__PURE__ */ jsx54("li", { children: s.label }, `${s.player}-${i}`)) })
6341
6445
  ] }),
6342
- live && match.facts && match.facts.length > 0 && /* @__PURE__ */ jsx53(LiveFactBlock, { facts: match.facts, matchId: match.matchId, ui, slip, onAsk }),
6343
- /* @__PURE__ */ jsx53("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
6446
+ live && match.facts && match.facts.length > 0 && /* @__PURE__ */ jsx54(LiveFactBlock, { facts: match.facts, matchId: match.matchId, ui, slip, onAsk }),
6447
+ /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
6344
6448
  const total = row.homeNum + row.awayNum;
6345
6449
  const homePct = total > 0 ? row.homeNum / total * 75 : 0;
6346
6450
  const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
6347
6451
  const promoted = isPromoted(row, promotedPins);
6348
6452
  const selection = chipSelection(row.market, match.matchId, slip.conversationId);
6349
- return /* @__PURE__ */ jsxs48("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
6350
- /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-stat-row", children: [
6351
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
6352
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-stat-l", children: row.label }),
6353
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
6453
+ return /* @__PURE__ */ jsxs49("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
6454
+ /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-stat-row", children: [
6455
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
6456
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-l", children: row.label }),
6457
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
6354
6458
  ] }),
6355
- /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-bar", children: [
6356
- /* @__PURE__ */ jsx53("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
6357
- /* @__PURE__ */ jsx53("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
6459
+ /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-bar", children: [
6460
+ /* @__PURE__ */ jsx54("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
6461
+ /* @__PURE__ */ jsx54("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
6358
6462
  ] }),
6359
- row.market && !row.market.isSuspended && /* @__PURE__ */ jsxs48("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
6360
- /* @__PURE__ */ jsxs48("span", { children: [
6463
+ row.market && !row.market.isSuspended && /* @__PURE__ */ jsxs49("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
6464
+ /* @__PURE__ */ jsxs49("span", { children: [
6361
6465
  row.market.marketLabel,
6362
6466
  " \xB7 ",
6363
6467
  row.market.selectionLabel
6364
6468
  ] }),
6365
- /* @__PURE__ */ jsxs48("span", { className: "ss-w-mon-stat-mkt-right", children: [
6366
- typeof row.market.price === "number" && /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
6367
- /* @__PURE__ */ jsx53(
6469
+ /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-stat-mkt-right", children: [
6470
+ typeof row.market.price === "number" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
6471
+ /* @__PURE__ */ jsx54(
6368
6472
  SlipButton,
6369
6473
  {
6370
6474
  selection,
@@ -6379,23 +6483,23 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip, onAsk }) {
6379
6483
  ] })
6380
6484
  ] }, row.label);
6381
6485
  }) }),
6382
- match.status === "stale" && /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
6383
- match.momentum.length > 0 && /* @__PURE__ */ jsxs48("div", { className: "ss-w-mon-mom", children: [
6384
- /* @__PURE__ */ jsx53("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
6385
- /* @__PURE__ */ jsx53(MomentumWave, { points: match.momentum, clubIsHome: true })
6486
+ match.status === "stale" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
6487
+ match.momentum.length > 0 && /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-mom", children: [
6488
+ /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
6489
+ /* @__PURE__ */ jsx54(MomentumWave, { points: match.momentum, clubIsHome: true })
6386
6490
  ] }),
6387
- match.phase === "fullTime" && /* @__PURE__ */ jsx53("div", { className: "ss-w-mon-grace", children: ui.graceNote })
6491
+ match.phase === "fullTime" && /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-grace", children: ui.graceNote })
6388
6492
  ] });
6389
6493
  }
6390
6494
 
6391
6495
  // src/components/MonitorTabs.tsx
6392
- import { jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
6496
+ import { jsx as jsx55, jsxs as jsxs50 } from "react/jsx-runtime";
6393
6497
  function OddsLiveStrip({ m, ui }) {
6394
6498
  const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
6395
6499
  const stale = m.status === "stale";
6396
6500
  if (!showScore && !m.minuteLabel && !(m.isSuspended && !m.isSettled) && !m.isSettled && !stale) return null;
6397
- return /* @__PURE__ */ jsxs49("div", { className: "ss-w-mk-live", children: [
6398
- showScore && /* @__PURE__ */ jsxs49("b", { className: "ss-w-mk-live-score", children: [
6501
+ return /* @__PURE__ */ jsxs50("div", { className: "ss-w-mk-live", children: [
6502
+ showScore && /* @__PURE__ */ jsxs50("b", { className: "ss-w-mk-live-score", children: [
6399
6503
  m.homeTeamName,
6400
6504
  " ",
6401
6505
  m.homeScore,
@@ -6404,19 +6508,19 @@ function OddsLiveStrip({ m, ui }) {
6404
6508
  " ",
6405
6509
  m.awayTeamName
6406
6510
  ] }),
6407
- m.minuteLabel && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
6408
- m.isSuspended && !m.isSettled && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
6409
- m.isSettled && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
6410
- stale && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) })
6511
+ m.minuteLabel && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
6512
+ m.isSuspended && !m.isSettled && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
6513
+ m.isSettled && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
6514
+ stale && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) })
6411
6515
  ] });
6412
6516
  }
6413
6517
  function MatchesPanel({ monitor, ui, slip, onAsk }) {
6414
6518
  const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
6415
6519
  if (matches.length === 0) {
6416
- return monitor.pins.some((p) => p.kind === "match") ? /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-list" }) : /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
6520
+ return monitor.pins.some((p) => p.kind === "match") ? /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list" }) : /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
6417
6521
  }
6418
- return /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-item", children: [
6419
- /* @__PURE__ */ jsx54(
6522
+ return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs50("div", { className: "ss-w-mon-item", children: [
6523
+ /* @__PURE__ */ jsx55(
6420
6524
  MonitorMatchCard,
6421
6525
  {
6422
6526
  match: m,
@@ -6427,7 +6531,7 @@ function MatchesPanel({ monitor, ui, slip, onAsk }) {
6427
6531
  onAsk
6428
6532
  }
6429
6533
  ),
6430
- /* @__PURE__ */ jsx54(MarketAccordion, { match: m, monitor, ui, slip })
6534
+ /* @__PURE__ */ jsx55(MarketAccordion, { match: m, monitor, ui, slip })
6431
6535
  ] }, m.matchId)) });
6432
6536
  }
6433
6537
  function withSinceViewMovement(vm, prev) {
@@ -6443,12 +6547,12 @@ function withSinceViewMovement(vm, prev) {
6443
6547
  function OddsPanel({ monitor, ui, slip }) {
6444
6548
  const slipState = useSlipState();
6445
6549
  const markets = (monitor.snapshot?.markets ?? []).filter((m) => monitor.pins.some((p) => p.key === m.key));
6446
- if (markets.length === 0) return /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
6447
- return /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-list", children: markets.map((m) => {
6550
+ if (markets.length === 0) return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
6551
+ return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list", children: markets.map((m) => {
6448
6552
  const pin = monitor.pins.find((p) => p.key === m.key);
6449
- return /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
6450
- /* @__PURE__ */ jsx54(OddsLiveStrip, { m, ui }),
6451
- m.card && /* @__PURE__ */ jsx54(
6553
+ return /* @__PURE__ */ jsxs50("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
6554
+ /* @__PURE__ */ jsx55(OddsLiveStrip, { m, ui }),
6555
+ m.card && /* @__PURE__ */ jsx55(
6452
6556
  MarketOddsCardList,
6453
6557
  {
6454
6558
  cards: [withSinceViewMovement(toMarketOddsVM(m.card), monitor.lastViewedPrices[m.key])],
@@ -6459,14 +6563,14 @@ function OddsPanel({ monitor, ui, slip }) {
6459
6563
  inSlipIds: slipState?.added
6460
6564
  }
6461
6565
  ),
6462
- m.history && /* @__PURE__ */ jsx54(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
6463
- !m.card && !m.history && /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
6566
+ m.history && /* @__PURE__ */ jsx55(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
6567
+ !m.card && !m.history && /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
6464
6568
  ] }, m.key);
6465
6569
  }) });
6466
6570
  }
6467
6571
 
6468
6572
  // src/components/TodayPanel.tsx
6469
- import { useEffect as useEffect26, useId as useId2, useMemo as useMemo4, useState as useState34 } from "react";
6573
+ import { useEffect as useEffect26, useId as useId2, useMemo as useMemo4, useState as useState35 } from "react";
6470
6574
 
6471
6575
  // src/placement.ts
6472
6576
  function placeLeagues(visible, pinnedMatchIds) {
@@ -6529,9 +6633,9 @@ function matchingFixtures(group, query) {
6529
6633
  }
6530
6634
 
6531
6635
  // src/useStarTap.ts
6532
- import { useCallback as useCallback18, useRef as useRef23, useState as useState32 } from "react";
6636
+ import { useCallback as useCallback18, useRef as useRef23, useState as useState33 } from "react";
6533
6637
  function useStarTap(starLeague) {
6534
- const [pendingId, setPendingId] = useState32(null);
6638
+ const [pendingId, setPendingId] = useState33(null);
6535
6639
  const pendingRef = useRef23(null);
6536
6640
  const tap = useCallback18(async (competitionId, next) => {
6537
6641
  if (pendingRef.current !== null) return false;
@@ -6548,25 +6652,25 @@ function useStarTap(starLeague) {
6548
6652
  }
6549
6653
 
6550
6654
  // src/components/LeagueTile.tsx
6551
- import { jsx as jsx55, jsxs as jsxs50 } from "react/jsx-runtime";
6655
+ import { jsx as jsx56, jsxs as jsxs51 } from "react/jsx-runtime";
6552
6656
  var STAR_PATH = "M12 2.5l2.9 5.9 6.5.95-4.7 4.58 1.1 6.47L12 17.35 6.1 20.4l1.1-6.47L2.5 9.35l6.5-.95z";
6553
6657
  function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen, starTap, ui }) {
6554
6658
  const onStarClick = () => {
6555
6659
  void starTap.tap(group.competitionId, !group.isStarred);
6556
6660
  };
6557
- return /* @__PURE__ */ jsxs50("div", { className: "ss-w-today-tile", children: [
6558
- /* @__PURE__ */ jsxs50("button", { type: "button", className: "ss-w-today-tile-body", onClick: onOpen, children: [
6559
- /* @__PURE__ */ jsx55(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6560
- /* @__PURE__ */ jsxs50("span", { className: "ss-w-today-tile-name", children: [
6661
+ return /* @__PURE__ */ jsxs51("div", { className: "ss-w-today-tile", children: [
6662
+ /* @__PURE__ */ jsxs51("button", { type: "button", className: "ss-w-today-tile-body", onClick: onOpen, children: [
6663
+ /* @__PURE__ */ jsx56(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6664
+ /* @__PURE__ */ jsxs51("span", { className: "ss-w-today-tile-name", children: [
6561
6665
  group.competitionName,
6562
- disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs50("span", { className: "ss-w-today-tile-country", children: [
6666
+ disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs51("span", { className: "ss-w-today-tile-country", children: [
6563
6667
  " (",
6564
6668
  group.competitionCountry,
6565
6669
  ")"
6566
6670
  ] }) : null
6567
6671
  ] })
6568
6672
  ] }),
6569
- /* @__PURE__ */ jsx55(
6673
+ /* @__PURE__ */ jsx56(
6570
6674
  "button",
6571
6675
  {
6572
6676
  type: "button",
@@ -6575,7 +6679,7 @@ function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen
6575
6679
  "aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
6576
6680
  disabled: !starClickable2 || starTap.pendingId !== null,
6577
6681
  onClick: onStarClick,
6578
- children: /* @__PURE__ */ jsx55("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx55(
6682
+ children: /* @__PURE__ */ jsx56("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx56(
6579
6683
  "path",
6580
6684
  {
6581
6685
  d: STAR_PATH,
@@ -6592,18 +6696,18 @@ function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen
6592
6696
  }
6593
6697
 
6594
6698
  // src/components/LeagueDetail.tsx
6595
- import { useEffect as useEffect25, useState as useState33 } from "react";
6699
+ import { useEffect as useEffect25, useState as useState34 } from "react";
6596
6700
 
6597
6701
  // src/components/FixtureRow.tsx
6598
- import { jsx as jsx56, jsxs as jsxs51 } from "react/jsx-runtime";
6702
+ import { jsx as jsx57, jsxs as jsxs52 } from "react/jsx-runtime";
6599
6703
  function kickoffLabel(kickoffUnix) {
6600
6704
  const d = new Date(kickoffUnix * 1e3);
6601
6705
  return `${`${d.getHours()}`.padStart(2, "0")}:${`${d.getMinutes()}`.padStart(2, "0")}`;
6602
6706
  }
6603
6707
  function Side({ name, crest, away = false }) {
6604
- return /* @__PURE__ */ jsxs51("span", { className: away ? "ss-w-drow-side ss-w-drow-side--away" : "ss-w-drow-side", children: [
6605
- crest ? /* @__PURE__ */ jsx56("img", { className: "ss-w-drow-crest", src: crest, alt: "" }) : null,
6606
- /* @__PURE__ */ jsx56("span", { className: "ss-w-drow-nm", children: name })
6708
+ return /* @__PURE__ */ jsxs52("span", { className: away ? "ss-w-drow-side ss-w-drow-side--away" : "ss-w-drow-side", children: [
6709
+ crest ? /* @__PURE__ */ jsx57("img", { className: "ss-w-drow-crest", src: crest, alt: "" }) : null,
6710
+ /* @__PURE__ */ jsx57("span", { className: "ss-w-drow-nm", children: name })
6607
6711
  ] });
6608
6712
  }
6609
6713
  function FixtureRow({ match, state, stale, ui, monitor }) {
@@ -6612,22 +6716,22 @@ function FixtureRow({ match, state, stale, ui, monitor }) {
6612
6716
  const score = hasScore ? `${state.homeScore}\u2013${state.awayScore}` : void 0;
6613
6717
  const ticked = state?.phase === "live" ? state.minuteLabel ?? null : null;
6614
6718
  const when = state?.isHalfTime && !stale ? ui.halfTime : isLive ? ticked ?? "\u2014" : state?.phase === "live" ? "\u2014" : kickoffLabel(match.kickoffUnix);
6615
- return /* @__PURE__ */ jsxs51("div", { className: isLive || state?.isHalfTime ? "ss-w-drow ss-w-drow--live" : "ss-w-drow", children: [
6616
- /* @__PURE__ */ jsx56("span", { className: isLive || state?.isHalfTime ? "ss-w-drow-when ss-w-drow-when--live" : "ss-w-drow-when", children: when }),
6617
- /* @__PURE__ */ jsxs51("span", { className: "ss-w-drow-fx", children: [
6618
- /* @__PURE__ */ jsx56(Side, { name: match.homeTeamName, crest: match.homeTeamImagePath }),
6619
- /* @__PURE__ */ jsx56("span", { className: hasScore ? "ss-w-drow-sc" : "ss-w-drow-sc ss-w-drow-sc--idle", children: score ?? "\u2013" }),
6620
- /* @__PURE__ */ jsx56(Side, { name: match.awayTeamName, crest: match.awayTeamImagePath, away: true })
6719
+ return /* @__PURE__ */ jsxs52("div", { className: isLive || state?.isHalfTime ? "ss-w-drow ss-w-drow--live" : "ss-w-drow", children: [
6720
+ /* @__PURE__ */ jsx57("span", { className: isLive || state?.isHalfTime ? "ss-w-drow-when ss-w-drow-when--live" : "ss-w-drow-when", children: when }),
6721
+ /* @__PURE__ */ jsxs52("span", { className: "ss-w-drow-fx", children: [
6722
+ /* @__PURE__ */ jsx57(Side, { name: match.homeTeamName, crest: match.homeTeamImagePath }),
6723
+ /* @__PURE__ */ jsx57("span", { className: hasScore ? "ss-w-drow-sc" : "ss-w-drow-sc ss-w-drow-sc--idle", children: score ?? "\u2013" }),
6724
+ /* @__PURE__ */ jsx57(Side, { name: match.awayTeamName, crest: match.awayTeamImagePath, away: true })
6621
6725
  ] }),
6622
- /* @__PURE__ */ jsx56(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
6726
+ /* @__PURE__ */ jsx57(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
6623
6727
  ] });
6624
6728
  }
6625
6729
 
6626
6730
  // src/components/LeagueDetail.tsx
6627
- import { jsx as jsx57, jsxs as jsxs52 } from "react/jsx-runtime";
6731
+ import { jsx as jsx58, jsxs as jsxs53 } from "react/jsx-runtime";
6628
6732
  var STAR_PATH2 = "M12 2.5l2.9 5.9 6.5.95-4.7 4.58 1.1 6.47L12 17.35 6.1 20.4l1.1-6.47L2.5 9.35l6.5-.95z";
6629
6733
  function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, onBack, onPrev, onNext }) {
6630
- const [toast, setToast] = useState33(null);
6734
+ const [toast, setToast] = useState34(null);
6631
6735
  useEffect25(() => {
6632
6736
  setToast(null);
6633
6737
  }, [group.competitionId]);
@@ -6643,12 +6747,12 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6643
6747
  if (ok) setToast(next ? ui.starredToast : ui.unstarredToast);
6644
6748
  });
6645
6749
  };
6646
- return /* @__PURE__ */ jsxs52("div", { className: "ss-w-today-detail", children: [
6647
- /* @__PURE__ */ jsxs52("div", { className: "ss-w-today-detail-head", children: [
6648
- /* @__PURE__ */ jsx57("button", { type: "button", className: "ss-w-today-detail-back", "aria-label": ui.back, onClick: onBack, children: /* @__PURE__ */ jsx57(ChevronIcon, {}) }),
6649
- /* @__PURE__ */ jsx57(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6650
- /* @__PURE__ */ jsx57("span", { className: "ss-w-today-detail-name", children: group.competitionName }),
6651
- /* @__PURE__ */ jsx57(
6750
+ return /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail", children: [
6751
+ /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-head", children: [
6752
+ /* @__PURE__ */ jsx58("button", { type: "button", className: "ss-w-today-detail-back", "aria-label": ui.back, onClick: onBack, children: /* @__PURE__ */ jsx58(ChevronIcon, {}) }),
6753
+ /* @__PURE__ */ jsx58(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6754
+ /* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-name", children: group.competitionName }),
6755
+ /* @__PURE__ */ jsx58(
6652
6756
  "button",
6653
6757
  {
6654
6758
  type: "button",
@@ -6657,7 +6761,7 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6657
6761
  "aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
6658
6762
  disabled: starTap.pendingId !== null,
6659
6763
  onClick: onStarClick,
6660
- children: /* @__PURE__ */ jsx57("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx57(
6764
+ children: /* @__PURE__ */ jsx58("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx58(
6661
6765
  "path",
6662
6766
  {
6663
6767
  d: STAR_PATH2,
@@ -6671,8 +6775,8 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6671
6775
  }
6672
6776
  )
6673
6777
  ] }),
6674
- /* @__PURE__ */ jsxs52("div", { className: "ss-w-today-detail-nav", children: [
6675
- /* @__PURE__ */ jsx57(
6778
+ /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-nav", children: [
6779
+ /* @__PURE__ */ jsx58(
6676
6780
  "button",
6677
6781
  {
6678
6782
  type: "button",
@@ -6680,11 +6784,11 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6680
6784
  "aria-label": ui.prevLeagueLabel,
6681
6785
  disabled: position.index <= 1,
6682
6786
  onClick: onPrev,
6683
- children: /* @__PURE__ */ jsx57(ChevronIcon, {})
6787
+ children: /* @__PURE__ */ jsx58(ChevronIcon, {})
6684
6788
  }
6685
6789
  ),
6686
- /* @__PURE__ */ jsx57("span", { className: "ss-w-today-detail-pos", children: ui.leagueDetailPosition(position.index, position.total) }),
6687
- /* @__PURE__ */ jsx57(
6790
+ /* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-pos", children: ui.leagueDetailPosition(position.index, position.total) }),
6791
+ /* @__PURE__ */ jsx58(
6688
6792
  "button",
6689
6793
  {
6690
6794
  type: "button",
@@ -6692,20 +6796,20 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6692
6796
  "aria-label": ui.nextLeagueLabel,
6693
6797
  disabled: position.index >= position.total,
6694
6798
  onClick: onNext,
6695
- children: /* @__PURE__ */ jsx57(ChevronIcon, {})
6799
+ children: /* @__PURE__ */ jsx58(ChevronIcon, {})
6696
6800
  }
6697
6801
  )
6698
6802
  ] }),
6699
- /* @__PURE__ */ jsxs52("div", { className: "ss-w-today-detail-body", children: [
6700
- /* @__PURE__ */ jsx57("span", { className: "ss-w-today-detail-count", children: own.length }),
6701
- own.map((m) => /* @__PURE__ */ jsx57(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId))
6803
+ /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-body", children: [
6804
+ /* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-count", children: own.length }),
6805
+ own.map((m) => /* @__PURE__ */ jsx58(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId))
6702
6806
  ] }),
6703
- toast !== null && /* @__PURE__ */ jsx57("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast })
6807
+ toast !== null && /* @__PURE__ */ jsx58("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast })
6704
6808
  ] });
6705
6809
  }
6706
6810
 
6707
6811
  // src/components/LeagueRowGroup.tsx
6708
- import { jsx as jsx58, jsxs as jsxs53 } from "react/jsx-runtime";
6812
+ import { jsx as jsx59, jsxs as jsxs54 } from "react/jsx-runtime";
6709
6813
  var ROW_CAP_PER_LEAGUE = 3;
6710
6814
  var SECTION_ROW_BUDGET = 12;
6711
6815
  function rowsFor(group, states, stale) {
@@ -6721,20 +6825,20 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
6721
6825
  const onStarClick = () => {
6722
6826
  void starTap.tap(group.competitionId, !group.isStarred);
6723
6827
  };
6724
- return /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-rowgroup", children: [
6725
- /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-rowgroup-head", children: [
6726
- /* @__PURE__ */ jsxs53("button", { type: "button", className: "ss-w-today-rowgroup-head-body", onClick: onOpen, children: [
6727
- /* @__PURE__ */ jsx58(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6728
- /* @__PURE__ */ jsxs53("span", { className: "ss-w-today-rowgroup-name", children: [
6828
+ return /* @__PURE__ */ jsxs54("div", { className: "ss-w-today-rowgroup", children: [
6829
+ /* @__PURE__ */ jsxs54("div", { className: "ss-w-today-rowgroup-head", children: [
6830
+ /* @__PURE__ */ jsxs54("button", { type: "button", className: "ss-w-today-rowgroup-head-body", onClick: onOpen, children: [
6831
+ /* @__PURE__ */ jsx59(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6832
+ /* @__PURE__ */ jsxs54("span", { className: "ss-w-today-rowgroup-name", children: [
6729
6833
  group.competitionName,
6730
- disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs53("span", { className: "ss-w-today-tile-country", children: [
6834
+ disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs54("span", { className: "ss-w-today-tile-country", children: [
6731
6835
  " (",
6732
6836
  group.competitionCountry,
6733
6837
  ")"
6734
6838
  ] }) : null
6735
6839
  ] })
6736
6840
  ] }),
6737
- /* @__PURE__ */ jsx58(
6841
+ /* @__PURE__ */ jsx59(
6738
6842
  "button",
6739
6843
  {
6740
6844
  type: "button",
@@ -6743,7 +6847,7 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
6743
6847
  "aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
6744
6848
  disabled: !starClickable2 || starTap.pendingId !== null,
6745
6849
  onClick: onStarClick,
6746
- children: /* @__PURE__ */ jsx58("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx58(
6850
+ children: /* @__PURE__ */ jsx59("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx59(
6747
6851
  "path",
6748
6852
  {
6749
6853
  d: STAR_PATH3,
@@ -6757,8 +6861,8 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
6757
6861
  }
6758
6862
  )
6759
6863
  ] }),
6760
- /* @__PURE__ */ jsx58("div", { className: "ss-w-today-rowgroup-rows", children: shown.map((m) => /* @__PURE__ */ jsx58(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) }),
6761
- overflow > 0 && /* @__PURE__ */ jsx58("button", { type: "button", className: "ss-w-today-rowgroup-seeall", onClick: onOpen, children: ui.seeAllFixturesLabel(sorted.length) })
6864
+ /* @__PURE__ */ jsx59("div", { className: "ss-w-today-rowgroup-rows", children: shown.map((m) => /* @__PURE__ */ jsx59(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) }),
6865
+ overflow > 0 && /* @__PURE__ */ jsx59("button", { type: "button", className: "ss-w-today-rowgroup-seeall", onClick: onOpen, children: ui.seeAllFixturesLabel(sorted.length) })
6762
6866
  ] });
6763
6867
  }
6764
6868
 
@@ -6766,8 +6870,8 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
6766
6870
  import { useCallback as useCallback19, useRef as useRef24 } from "react";
6767
6871
 
6768
6872
  // src/components/games/ui/icons.tsx
6769
- import { jsx as jsx59 } from "react/jsx-runtime";
6770
- var svg = (size, children, fill = false) => /* @__PURE__ */ jsx59(
6873
+ import { jsx as jsx60 } from "react/jsx-runtime";
6874
+ var svg = (size, children, fill = false) => /* @__PURE__ */ jsx60(
6771
6875
  "svg",
6772
6876
  {
6773
6877
  width: size,
@@ -6782,25 +6886,25 @@ var svg = (size, children, fill = false) => /* @__PURE__ */ jsx59(
6782
6886
  children
6783
6887
  }
6784
6888
  );
6785
- var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M15 18l-6-6 6-6" }));
6786
- var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ jsx59("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ jsx59("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
6787
- var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M5 12l5 5 9-10" }));
6788
- var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M6 6l12 12M18 6L6 18" }));
6789
- var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx59("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ jsx59("path", { d: "M20 20l-3.5-3.5" }, "b")]);
6790
- var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M12 5v14M5 12h14" }));
6791
- var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ jsx59("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ jsx59("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
6792
- var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M12 19V5M5 12l7-7 7 7" }));
6793
- var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
6794
- var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx59("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ jsx59("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
6795
- var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
6796
- var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
6797
- var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx59("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ jsx59("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
6798
- var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
6799
- var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M7 21v-8l-2-3V6a1.5 1.5 0 0 1 3 0v3V4a1.5 1.5 0 0 1 3 0v5V3.5a1.5 1.5 0 0 1 3 0V9V5a1.5 1.5 0 0 1 3 0v9l-2 3v4z" }));
6800
- var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx59("path", { d: "M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-3 2-4 2-7 1.5 1 2 2 2 3 1-2 1-4 1-6z" }), true);
6889
+ var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M15 18l-6-6 6-6" }));
6890
+ var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ jsx60("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
6891
+ var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M5 12l5 5 9-10" }));
6892
+ var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M6 6l12 12M18 6L6 18" }));
6893
+ var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M20 20l-3.5-3.5" }, "b")]);
6894
+ var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 5v14M5 12h14" }));
6895
+ var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ jsx60("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
6896
+ var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 19V5M5 12l7-7 7 7" }));
6897
+ var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
6898
+ var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
6899
+ var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
6900
+ var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
6901
+ var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
6902
+ var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
6903
+ var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M7 21v-8l-2-3V6a1.5 1.5 0 0 1 3 0v3V4a1.5 1.5 0 0 1 3 0v5V3.5a1.5 1.5 0 0 1 3 0V9V5a1.5 1.5 0 0 1 3 0v9l-2 3v4z" }));
6904
+ var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-3 2-4 2-7 1.5 1 2 2 2 3 1-2 1-4 1-6z" }), true);
6801
6905
 
6802
6906
  // src/components/games/ui/SearchField.tsx
6803
- import { jsx as jsx60, jsxs as jsxs54 } from "react/jsx-runtime";
6907
+ import { jsx as jsx61, jsxs as jsxs55 } from "react/jsx-runtime";
6804
6908
  function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown, clearLabel }) {
6805
6909
  const localRef = useRef24(null);
6806
6910
  const setInputRef = useCallback19((node) => {
@@ -6808,11 +6912,11 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6808
6912
  if (typeof inputRef === "function") inputRef(node);
6809
6913
  else if (inputRef) inputRef.current = node;
6810
6914
  }, [inputRef]);
6811
- return /* @__PURE__ */ jsxs54("div", { className: "ss-g-search", children: [
6812
- /* @__PURE__ */ jsx60("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
6813
- /* @__PURE__ */ jsxs54("div", { className: "ss-g-search-box", children: [
6814
- /* @__PURE__ */ jsx60(IconSearch, {}),
6815
- /* @__PURE__ */ jsx60(
6915
+ return /* @__PURE__ */ jsxs55("div", { className: "ss-g-search", children: [
6916
+ /* @__PURE__ */ jsx61("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
6917
+ /* @__PURE__ */ jsxs55("div", { className: "ss-g-search-box", children: [
6918
+ /* @__PURE__ */ jsx61(IconSearch, {}),
6919
+ /* @__PURE__ */ jsx61(
6816
6920
  "input",
6817
6921
  {
6818
6922
  id,
@@ -6826,7 +6930,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6826
6930
  onChange: (e) => onChange(e.target.value)
6827
6931
  }
6828
6932
  ),
6829
- clearLabel && value.length > 0 ? /* @__PURE__ */ jsx60(
6933
+ clearLabel && value.length > 0 ? /* @__PURE__ */ jsx61(
6830
6934
  "button",
6831
6935
  {
6832
6936
  type: "button",
@@ -6836,7 +6940,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6836
6940
  onChange("");
6837
6941
  localRef.current?.focus();
6838
6942
  },
6839
- children: /* @__PURE__ */ jsx60(IconClose, { size: 11 })
6943
+ children: /* @__PURE__ */ jsx61(IconClose, { size: 11 })
6840
6944
  }
6841
6945
  ) : null
6842
6946
  ] })
@@ -6844,13 +6948,13 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6844
6948
  }
6845
6949
 
6846
6950
  // src/components/TodayPanel.tsx
6847
- import { Fragment as Fragment8, jsx as jsx61, jsxs as jsxs55 } from "react/jsx-runtime";
6951
+ import { Fragment as Fragment9, jsx as jsx62, jsxs as jsxs56 } from "react/jsx-runtime";
6848
6952
  function TodayPanel({ discovery, ui, monitor }) {
6849
6953
  const { groups, states, stale, starLeague } = discovery;
6850
6954
  const searchId = useId2();
6851
- const [query, setQuery] = useState34("");
6852
- const [selectedCompetitionId, setSelectedCompetitionId] = useState34(null);
6853
- const [toast, setToast] = useState34(null);
6955
+ const [query, setQuery] = useState35("");
6956
+ const [selectedCompetitionId, setSelectedCompetitionId] = useState35(null);
6957
+ const [toast, setToast] = useState35(null);
6854
6958
  useEffect26(() => {
6855
6959
  if (toast === null) return;
6856
6960
  const id = setTimeout(() => setToast(null), 4e3);
@@ -6901,12 +7005,12 @@ function TodayPanel({ discovery, ui, monitor }) {
6901
7005
  if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
6902
7006
  }, [selectedCompetitionId, openGroup]);
6903
7007
  const liveRows = stale ? [] : visibleGroups.flatMap((group) => group.matches.filter((m) => isTreatedLive(states[m.matchId], stale)).map((match) => ({ match, rank: group.rank }))).sort((a, b) => a.rank - b.rank);
6904
- const liveBand = liveRows.length > 0 && /* @__PURE__ */ jsxs55(Fragment8, { children: [
6905
- /* @__PURE__ */ jsxs55("div", { className: "ss-w-sec-head", children: [
6906
- /* @__PURE__ */ jsx61("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
7008
+ const liveBand = liveRows.length > 0 && /* @__PURE__ */ jsxs56(Fragment9, { children: [
7009
+ /* @__PURE__ */ jsxs56("div", { className: "ss-w-sec-head", children: [
7010
+ /* @__PURE__ */ jsx62("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
6907
7011
  ui.sectionLive
6908
7012
  ] }),
6909
- /* @__PURE__ */ jsx61("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ jsx61(
7013
+ /* @__PURE__ */ jsx62("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ jsx62(
6910
7014
  FixtureRow,
6911
7015
  {
6912
7016
  match,
@@ -6919,10 +7023,10 @@ function TodayPanel({ discovery, ui, monitor }) {
6919
7023
  )) })
6920
7024
  ] });
6921
7025
  if (openGroup !== void 0) {
6922
- return /* @__PURE__ */ jsx61("div", { className: "ss-w-today-root", children: /* @__PURE__ */ jsxs55("div", { className: "ss-w-mon-list", children: [
6923
- stale && /* @__PURE__ */ jsx61("div", { className: "ss-w-stale", children: ui.staleStates }),
7026
+ return /* @__PURE__ */ jsx62("div", { className: "ss-w-today-root", children: /* @__PURE__ */ jsxs56("div", { className: "ss-w-mon-list", children: [
7027
+ stale && /* @__PURE__ */ jsx62("div", { className: "ss-w-stale", children: ui.staleStates }),
6924
7028
  liveBand,
6925
- /* @__PURE__ */ jsx61(
7029
+ /* @__PURE__ */ jsx62(
6926
7030
  LeagueDetail,
6927
7031
  {
6928
7032
  group: openGroup,
@@ -6943,11 +7047,11 @@ function TodayPanel({ discovery, ui, monitor }) {
6943
7047
  }
6944
7048
  const searching = query.trim().length > 0;
6945
7049
  const searchResults = searching ? placement.order.filter((g) => matchesQuery(g, query)) : [];
6946
- return /* @__PURE__ */ jsxs55("div", { className: "ss-w-today-root", children: [
6947
- /* @__PURE__ */ jsxs55("div", { className: "ss-w-mon-list", children: [
6948
- stale && /* @__PURE__ */ jsx61("div", { className: "ss-w-stale", children: ui.staleStates }),
7050
+ return /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-root", children: [
7051
+ /* @__PURE__ */ jsxs56("div", { className: "ss-w-mon-list", children: [
7052
+ stale && /* @__PURE__ */ jsx62("div", { className: "ss-w-stale", children: ui.staleStates }),
6949
7053
  !searching && liveBand,
6950
- /* @__PURE__ */ jsx61(
7054
+ /* @__PURE__ */ jsx62(
6951
7055
  SearchField,
6952
7056
  {
6953
7057
  id: searchId,
@@ -6959,19 +7063,19 @@ function TodayPanel({ discovery, ui, monitor }) {
6959
7063
  clearLabel: ui.clearSearchLabel
6960
7064
  }
6961
7065
  ),
6962
- searching ? searchResults.length === 0 ? /* @__PURE__ */ jsx61("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ jsx61(Fragment8, { children: searchResults.map((group) => /* @__PURE__ */ jsxs55("div", { className: "ss-w-today-search-block", children: [
6963
- /* @__PURE__ */ jsxs55("div", { className: "ss-w-today-search-group", children: [
6964
- /* @__PURE__ */ jsx61(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6965
- /* @__PURE__ */ jsxs55("span", { className: "ss-w-today-search-group-name", children: [
7066
+ searching ? searchResults.length === 0 ? /* @__PURE__ */ jsx62("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ jsx62(Fragment9, { children: searchResults.map((group) => /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-search-block", children: [
7067
+ /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-search-group", children: [
7068
+ /* @__PURE__ */ jsx62(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
7069
+ /* @__PURE__ */ jsxs56("span", { className: "ss-w-today-search-group-name", children: [
6966
7070
  group.competitionName,
6967
- (nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ jsxs55("span", { className: "ss-w-today-tile-country", children: [
7071
+ (nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ jsxs56("span", { className: "ss-w-today-tile-country", children: [
6968
7072
  " (",
6969
7073
  group.competitionCountry,
6970
7074
  ")"
6971
7075
  ] }) : null
6972
7076
  ] })
6973
7077
  ] }),
6974
- matchingFixtures(group, query).map((match) => /* @__PURE__ */ jsx61(
7078
+ matchingFixtures(group, query).map((match) => /* @__PURE__ */ jsx62(
6975
7079
  "div",
6976
7080
  {
6977
7081
  role: "button",
@@ -6985,17 +7089,17 @@ function TodayPanel({ discovery, ui, monitor }) {
6985
7089
  setSelectedCompetitionId(group.competitionId);
6986
7090
  }
6987
7091
  },
6988
- children: /* @__PURE__ */ jsx61(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
7092
+ children: /* @__PURE__ */ jsx62(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
6989
7093
  },
6990
7094
  match.matchId
6991
7095
  ))
6992
- ] }, group.competitionId)) }) : /* @__PURE__ */ jsxs55(Fragment8, { children: [
6993
- /* @__PURE__ */ jsxs55("div", { className: "ss-w-today-sec", children: [
7096
+ ] }, group.competitionId)) }) : /* @__PURE__ */ jsxs56(Fragment9, { children: [
7097
+ /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-sec", children: [
6994
7098
  placement.personal ? ui.yourLeagues : ui.topLeagues,
6995
- !placement.personal && /* @__PURE__ */ jsx61("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
7099
+ !placement.personal && /* @__PURE__ */ jsx62("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
6996
7100
  ] }),
6997
- /* @__PURE__ */ jsxs55("div", { className: "ss-w-today-rowsection", children: [
6998
- rowedCandidates.map((group) => /* @__PURE__ */ jsx61(
7101
+ /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-rowsection", children: [
7102
+ rowedCandidates.map((group) => /* @__PURE__ */ jsx62(
6999
7103
  LeagueRowGroup,
7000
7104
  {
7001
7105
  group,
@@ -7011,7 +7115,7 @@ function TodayPanel({ discovery, ui, monitor }) {
7011
7115
  },
7012
7116
  group.competitionId
7013
7117
  )),
7014
- tiledCandidates.length > 0 && /* @__PURE__ */ jsx61("div", { className: "ss-w-today-tiles", children: tiledCandidates.map((group) => /* @__PURE__ */ jsx61(
7118
+ tiledCandidates.length > 0 && /* @__PURE__ */ jsx62("div", { className: "ss-w-today-tiles", children: tiledCandidates.map((group) => /* @__PURE__ */ jsx62(
7015
7119
  LeagueTile,
7016
7120
  {
7017
7121
  group,
@@ -7024,8 +7128,8 @@ function TodayPanel({ discovery, ui, monitor }) {
7024
7128
  group.competitionId
7025
7129
  )) })
7026
7130
  ] }),
7027
- /* @__PURE__ */ jsx61("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
7028
- /* @__PURE__ */ jsx61("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ jsx61(
7131
+ /* @__PURE__ */ jsx62("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
7132
+ /* @__PURE__ */ jsx62("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ jsx62(
7029
7133
  LeagueTile,
7030
7134
  {
7031
7135
  group,
@@ -7039,21 +7143,21 @@ function TodayPanel({ discovery, ui, monitor }) {
7039
7143
  )) })
7040
7144
  ] })
7041
7145
  ] }),
7042
- toast !== null && /* @__PURE__ */ jsx61("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
7146
+ toast !== null && /* @__PURE__ */ jsx62("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
7043
7147
  ] });
7044
7148
  }
7045
7149
 
7046
7150
  // src/components/GamesPanel.tsx
7047
- import { useEffect as useEffect30, useState as useState49 } from "react";
7151
+ import { useEffect as useEffect30, useState as useState50 } from "react";
7048
7152
 
7049
7153
  // src/components/GamesLoginWall.tsx
7050
- import { jsx as jsx62 } from "react/jsx-runtime";
7154
+ import { jsx as jsx63 } from "react/jsx-runtime";
7051
7155
  function GamesLoginWall({ ui }) {
7052
- return /* @__PURE__ */ jsx62("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx62("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ jsx62("p", { children: ui.gamesLoginRequired }) }) });
7156
+ return /* @__PURE__ */ jsx63("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ jsx63("p", { children: ui.gamesLoginRequired }) }) });
7053
7157
  }
7054
7158
 
7055
7159
  // src/components/GamesHub.tsx
7056
- import { useEffect as useEffect27, useState as useState35 } from "react";
7160
+ import { useEffect as useEffect27, useState as useState36 } from "react";
7057
7161
 
7058
7162
  // src/components/games/ui/gameMeta.ts
7059
7163
  function prettifyGameId(gameId) {
@@ -7069,74 +7173,74 @@ function splitName(full) {
7069
7173
  }
7070
7174
 
7071
7175
  // src/components/GameTileArt.tsx
7072
- import { Fragment as Fragment9, jsx as jsx63, jsxs as jsxs56 } from "react/jsx-runtime";
7176
+ import { Fragment as Fragment10, jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
7073
7177
  function GameTileArt({ gameId }) {
7074
- return /* @__PURE__ */ jsx63("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
7178
+ return /* @__PURE__ */ jsx64("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
7075
7179
  }
7076
- var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ jsxs56("g", { className: cls, children: [
7077
- /* @__PURE__ */ jsx63("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
7078
- /* @__PURE__ */ jsx63("path", { d: `M${cx - r} ${cy + r}c0-${r * 0.8} ${r * 0.45}-${r * 1.1} ${r}-${r * 1.1}s${r} ${r * 0.3} ${r} ${r * 1.1}z` })
7180
+ var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ jsxs57("g", { className: cls, children: [
7181
+ /* @__PURE__ */ jsx64("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
7182
+ /* @__PURE__ */ jsx64("path", { d: `M${cx - r} ${cy + r}c0-${r * 0.8} ${r * 0.45}-${r * 1.1} ${r}-${r * 1.1}s${r} ${r * 0.3} ${r} ${r * 1.1}z` })
7079
7183
  ] });
7080
7184
  var ART = {
7081
- "mystery-tiger": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7185
+ "mystery-tiger": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7082
7186
  head(60, 38, 26, "ss-g-art-fg"),
7083
- /* @__PURE__ */ jsx63("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
7187
+ /* @__PURE__ */ jsx64("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
7084
7188
  ] }),
7085
- "higher-or-lower": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7189
+ "higher-or-lower": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7086
7190
  head(32, 38, 20),
7087
7191
  head(88, 38, 20),
7088
- /* @__PURE__ */ jsx63("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
7089
- /* @__PURE__ */ jsx63("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
7192
+ /* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
7193
+ /* @__PURE__ */ jsx64("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
7090
7194
  ] }),
7091
- "guess-the-xi": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7092
- /* @__PURE__ */ jsx63("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
7093
- [[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ jsx63("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
7195
+ "guess-the-xi": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7196
+ /* @__PURE__ */ jsx64("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
7197
+ [[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ jsx64("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
7094
7198
  ] }),
7095
- "daily-quiz": /* @__PURE__ */ jsx63(Fragment9, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ jsx63("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
7096
- "career-path": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7097
- /* @__PURE__ */ jsx63("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
7098
- /* @__PURE__ */ jsx63("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
7099
- /* @__PURE__ */ jsx63("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
7100
- /* @__PURE__ */ jsx63("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
7101
- /* @__PURE__ */ jsx63("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
7199
+ "daily-quiz": /* @__PURE__ */ jsx64(Fragment10, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ jsx64("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
7200
+ "career-path": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7201
+ /* @__PURE__ */ jsx64("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
7202
+ /* @__PURE__ */ jsx64("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
7203
+ /* @__PURE__ */ jsx64("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
7204
+ /* @__PURE__ */ jsx64("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
7205
+ /* @__PURE__ */ jsx64("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
7102
7206
  ] }),
7103
- "beat-the-grid": /* @__PURE__ */ jsx63(Fragment9, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ jsx63("rect", { x: 33 + c * 19, y: 10 + r * 19, width: "16", height: "16", rx: "3", className: (r + c) % 3 === 0 ? "ss-g-art-accent" : "ss-g-art-block" }, `${r}${c}`))) }),
7104
- "matchday-predictor": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7105
- /* @__PURE__ */ jsx63("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
7106
- /* @__PURE__ */ jsx63("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
7107
- /* @__PURE__ */ jsx63("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
7108
- /* @__PURE__ */ jsx63("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
7207
+ "beat-the-grid": /* @__PURE__ */ jsx64(Fragment10, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ jsx64("rect", { x: 33 + c * 19, y: 10 + r * 19, width: "16", height: "16", rx: "3", className: (r + c) % 3 === 0 ? "ss-g-art-accent" : "ss-g-art-block" }, `${r}${c}`))) }),
7208
+ "matchday-predictor": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7209
+ /* @__PURE__ */ jsx64("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
7210
+ /* @__PURE__ */ jsx64("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
7211
+ /* @__PURE__ */ jsx64("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
7212
+ /* @__PURE__ */ jsx64("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
7109
7213
  ] }),
7110
- "starting-xi": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7111
- /* @__PURE__ */ jsx63("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
7112
- [[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ jsx63("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
7214
+ "starting-xi": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7215
+ /* @__PURE__ */ jsx64("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
7216
+ [[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ jsx64("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
7113
7217
  ] }),
7114
- "stat-ladder": /* @__PURE__ */ jsx63(Fragment9, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ jsx63("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
7115
- "fan-motm": /* @__PURE__ */ jsxs56(Fragment9, { children: [
7116
- /* @__PURE__ */ jsx63("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
7218
+ "stat-ladder": /* @__PURE__ */ jsx64(Fragment10, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ jsx64("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
7219
+ "fan-motm": /* @__PURE__ */ jsxs57(Fragment10, { children: [
7220
+ /* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
7117
7221
  head(60, 40, 18),
7118
- /* @__PURE__ */ jsx63("path", { d: "M84 8l2.4 5 5.4.6-4 3.7 1.1 5.4-4.9-2.7-4.9 2.7 1.1-5.4-4-3.7 5.4-.6z", className: "ss-g-art-accent" })
7222
+ /* @__PURE__ */ jsx64("path", { d: "M84 8l2.4 5 5.4.6-4 3.7 1.1 5.4-4.9-2.7-4.9 2.7 1.1-5.4-4-3.7 5.4-.6z", className: "ss-g-art-accent" })
7119
7223
  ] }),
7120
- default: /* @__PURE__ */ jsx63("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
7224
+ default: /* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
7121
7225
  };
7122
7226
 
7123
7227
  // src/components/games/ui/Chip.tsx
7124
- import { jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
7228
+ import { jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
7125
7229
  function Chip({ variant = "neutral", icon, children, className }) {
7126
- return /* @__PURE__ */ jsxs57("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
7230
+ return /* @__PURE__ */ jsxs58("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
7127
7231
  icon,
7128
7232
  children
7129
7233
  ] });
7130
7234
  }
7131
7235
  function StatStack({ value, label }) {
7132
- return /* @__PURE__ */ jsxs57("span", { className: "ss-g-statstack", children: [
7133
- /* @__PURE__ */ jsx64("span", { className: "ss-g-statstack-v", children: value }),
7134
- /* @__PURE__ */ jsx64("span", { className: "ss-g-statstack-l", children: label })
7236
+ return /* @__PURE__ */ jsxs58("span", { className: "ss-g-statstack", children: [
7237
+ /* @__PURE__ */ jsx65("span", { className: "ss-g-statstack-v", children: value }),
7238
+ /* @__PURE__ */ jsx65("span", { className: "ss-g-statstack-l", children: label })
7135
7239
  ] });
7136
7240
  }
7137
7241
 
7138
7242
  // src/components/GameTile.tsx
7139
- import { Fragment as Fragment10, jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
7243
+ import { Fragment as Fragment11, jsx as jsx66, jsxs as jsxs59 } from "react/jsx-runtime";
7140
7244
  function tileStatus(game, ui) {
7141
7245
  switch (game.status) {
7142
7246
  case "locked":
@@ -7160,38 +7264,38 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
7160
7264
  const status = tileStatus(game, ui);
7161
7265
  const disabled = DISABLED.has(game.status);
7162
7266
  const title = gameTitle(game, ui.games.titles);
7163
- const body = variant === "hero" ? /* @__PURE__ */ jsxs58(Fragment10, { children: [
7164
- /* @__PURE__ */ jsxs58("span", { className: "ss-g-hero-text", children: [
7165
- /* @__PURE__ */ jsx65("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
7166
- status.tone === "new" && /* @__PURE__ */ jsx65(Chip, { variant: "badge", children: ui.games.newToday }),
7167
- /* @__PURE__ */ jsx65("span", { className: "ss-g-hero-title", children: title }),
7168
- /* @__PURE__ */ jsx65("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
7169
- status.tone === "success" ? /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ jsxs58("span", { className: "ss-g-hero-cta", children: [
7267
+ const body = variant === "hero" ? /* @__PURE__ */ jsxs59(Fragment11, { children: [
7268
+ /* @__PURE__ */ jsxs59("span", { className: "ss-g-hero-text", children: [
7269
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
7270
+ status.tone === "new" && /* @__PURE__ */ jsx66(Chip, { variant: "badge", children: ui.games.newToday }),
7271
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-hero-title", children: title }),
7272
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
7273
+ status.tone === "success" ? /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ jsxs59("span", { className: "ss-g-hero-cta", children: [
7170
7274
  status.tone === "accent" ? ui.games.resume : ui.games.playNow,
7171
7275
  " \u2192"
7172
7276
  ] })
7173
7277
  ] }),
7174
- /* @__PURE__ */ jsx65("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ jsx65(GameTileArt, { gameId: game.gameId }) })
7175
- ] }) : variant === "wide" ? /* @__PURE__ */ jsxs58(Fragment10, { children: [
7176
- /* @__PURE__ */ jsx65("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ jsx65(GameTileArt, { gameId: game.gameId }) }),
7177
- /* @__PURE__ */ jsxs58("span", { className: "ss-g-wide-text", children: [
7178
- /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-title", children: title }),
7179
- /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
7180
- status.tone === "new" && /* @__PURE__ */ jsx65(Chip, { variant: "badge", children: ui.games.newToday })
7278
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) })
7279
+ ] }) : variant === "wide" ? /* @__PURE__ */ jsxs59(Fragment11, { children: [
7280
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) }),
7281
+ /* @__PURE__ */ jsxs59("span", { className: "ss-g-wide-text", children: [
7282
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-title", children: title }),
7283
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
7284
+ status.tone === "new" && /* @__PURE__ */ jsx66(Chip, { variant: "badge", children: ui.games.newToday })
7181
7285
  ] }),
7182
- /* @__PURE__ */ jsx65("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ jsx65(IconChevronLeft, { size: 18 }) })
7183
- ] }) : /* @__PURE__ */ jsxs58(Fragment10, { children: [
7184
- /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ jsx65(GameTileArt, { gameId: game.gameId }) }),
7185
- /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-title", children: title }),
7186
- /* @__PURE__ */ jsx65("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
7286
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ jsx66(IconChevronLeft, { size: 18 }) })
7287
+ ] }) : /* @__PURE__ */ jsxs59(Fragment11, { children: [
7288
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) }),
7289
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-title", children: title }),
7290
+ /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
7187
7291
  ] });
7188
7292
  const cls = `ss-g-tile ss-g-tile--${variant}`;
7189
- if (disabled) return /* @__PURE__ */ jsx65("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
7190
- return /* @__PURE__ */ jsx65("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
7293
+ if (disabled) return /* @__PURE__ */ jsx66("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
7294
+ return /* @__PURE__ */ jsx66("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
7191
7295
  }
7192
7296
 
7193
7297
  // src/components/GamesHub.tsx
7194
- import { Fragment as Fragment11, jsx as jsx66, jsxs as jsxs59 } from "react/jsx-runtime";
7298
+ import { Fragment as Fragment12, jsx as jsx67, jsxs as jsxs60 } from "react/jsx-runtime";
7195
7299
  var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
7196
7300
  var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
7197
7301
  function pickHeroGame(games) {
@@ -7204,7 +7308,7 @@ function pickHeroGame(games) {
7204
7308
  }
7205
7309
  var tileKey = (g) => `${g.gameId}-${g.gameDay}-${g.fixtureId}`;
7206
7310
  function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
7207
- const [, setTick] = useState35(0);
7311
+ const [, setTick] = useState36(0);
7208
7312
  useEffect27(() => {
7209
7313
  const id = setInterval(() => setTick((t) => t + 1), 6e4);
7210
7314
  return () => clearInterval(id);
@@ -7217,58 +7321,58 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
7217
7321
  const kickoffs = fixtures.map((g) => g.kickoffUtc).filter((k) => !!k).sort();
7218
7322
  const todayPts = games.filter((g) => DONE.has(g.status)).reduce((s, g) => s + (g.score ?? 0), 0);
7219
7323
  const dash = "\u2014";
7220
- return /* @__PURE__ */ jsxs59("div", { className: "ss-g-hub", children: [
7221
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-stats", children: [
7222
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-stat", children: [
7223
- /* @__PURE__ */ jsx66("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
7224
- /* @__PURE__ */ jsxs59("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
7225
- myWeeklyRow ? /* @__PURE__ */ jsxs59(Fragment11, { children: [
7226
- /* @__PURE__ */ jsx66(IconFlame, {}),
7324
+ return /* @__PURE__ */ jsxs60("div", { className: "ss-g-hub", children: [
7325
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-stats", children: [
7326
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
7327
+ /* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
7328
+ /* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
7329
+ myWeeklyRow ? /* @__PURE__ */ jsxs60(Fragment12, { children: [
7330
+ /* @__PURE__ */ jsx67(IconFlame, {}),
7227
7331
  myWeeklyRow.currentStreak
7228
7332
  ] }) : dash,
7229
- myWeeklyRow && /* @__PURE__ */ jsx66("small", { children: ui.games.unitDays })
7333
+ myWeeklyRow && /* @__PURE__ */ jsx67("small", { children: ui.games.unitDays })
7230
7334
  ] })
7231
7335
  ] }),
7232
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-stat", children: [
7233
- /* @__PURE__ */ jsx66("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
7234
- /* @__PURE__ */ jsxs59("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
7336
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
7337
+ /* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
7338
+ /* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
7235
7339
  ui.games.formatPts(todayPts),
7236
- /* @__PURE__ */ jsx66("small", { children: ui.games.unitPts })
7340
+ /* @__PURE__ */ jsx67("small", { children: ui.games.unitPts })
7237
7341
  ] })
7238
7342
  ] }),
7239
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-stat", children: [
7240
- /* @__PURE__ */ jsx66("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
7241
- /* @__PURE__ */ jsxs59("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
7343
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
7344
+ /* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
7345
+ /* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
7242
7346
  myWeeklyRow ? `#${myWeeklyRow.rank}` : dash,
7243
- myWeeklyRow && /* @__PURE__ */ jsx66("small", { children: ui.games.thisWeek })
7347
+ myWeeklyRow && /* @__PURE__ */ jsx67("small", { children: ui.games.thisWeek })
7244
7348
  ] })
7245
7349
  ] })
7246
7350
  ] }),
7247
- weeklyPrize && /* @__PURE__ */ jsx66(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
7248
- hero && /* @__PURE__ */ jsx66(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
7249
- (grid.length > 0 || wide) && /* @__PURE__ */ jsxs59("section", { className: "ss-g-sec", children: [
7250
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-sec-head", children: [
7251
- /* @__PURE__ */ jsx66("h3", { children: ui.games.dailyGames }),
7252
- /* @__PURE__ */ jsx66("span", { children: ui.games.newSetAtMidnight })
7351
+ weeklyPrize && /* @__PURE__ */ jsx67(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
7352
+ hero && /* @__PURE__ */ jsx67(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
7353
+ (grid.length > 0 || wide) && /* @__PURE__ */ jsxs60("section", { className: "ss-g-sec", children: [
7354
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-sec-head", children: [
7355
+ /* @__PURE__ */ jsx67("h3", { children: ui.games.dailyGames }),
7356
+ /* @__PURE__ */ jsx67("span", { children: ui.games.newSetAtMidnight })
7253
7357
  ] }),
7254
- grid.length > 0 && /* @__PURE__ */ jsx66("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ jsx66(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
7255
- wide && /* @__PURE__ */ jsx66(GameTile, { game: wide, onOpen, ui, variant: "wide" })
7358
+ grid.length > 0 && /* @__PURE__ */ jsx67("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ jsx67(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
7359
+ wide && /* @__PURE__ */ jsx67(GameTile, { game: wide, onOpen, ui, variant: "wide" })
7256
7360
  ] }),
7257
- fixtures.length > 0 && /* @__PURE__ */ jsxs59("section", { className: "ss-g-sec", children: [
7258
- /* @__PURE__ */ jsxs59("div", { className: "ss-g-sec-head", children: [
7259
- /* @__PURE__ */ jsx66("h3", { children: ui.games.matchdayGames }),
7260
- kickoffs[0] && /* @__PURE__ */ jsx66("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
7361
+ fixtures.length > 0 && /* @__PURE__ */ jsxs60("section", { className: "ss-g-sec", children: [
7362
+ /* @__PURE__ */ jsxs60("div", { className: "ss-g-sec-head", children: [
7363
+ /* @__PURE__ */ jsx67("h3", { children: ui.games.matchdayGames }),
7364
+ kickoffs[0] && /* @__PURE__ */ jsx67("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
7261
7365
  ] }),
7262
- /* @__PURE__ */ jsx66("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ jsx66(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
7366
+ /* @__PURE__ */ jsx67("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ jsx67(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
7263
7367
  ] })
7264
7368
  ] });
7265
7369
  }
7266
7370
 
7267
7371
  // src/components/GameScreenHost.tsx
7268
- import { useEffect as useEffect29, useRef as useRef27, useState as useState47 } from "react";
7372
+ import { useEffect as useEffect29, useRef as useRef27, useState as useState48 } from "react";
7269
7373
 
7270
7374
  // src/useGamePlay.ts
7271
- import { useCallback as useCallback20, useRef as useRef25, useState as useState36 } from "react";
7375
+ import { useCallback as useCallback20, useRef as useRef25, useState as useState37 } from "react";
7272
7376
  function toSubmitResult(payload) {
7273
7377
  return {
7274
7378
  // 'pending' means the play is recorded but awaiting resolution (fixture games)
@@ -7280,9 +7384,9 @@ function toSubmitResult(payload) {
7280
7384
  };
7281
7385
  }
7282
7386
  function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh }) {
7283
- const [result, setResult] = useState36(null);
7284
- const [submitting, setSubmitting] = useState36(false);
7285
- const [rawStatus, setRawStatus] = useState36(null);
7387
+ const [result, setResult] = useState37(null);
7388
+ const [submitting, setSubmitting] = useState37(false);
7389
+ const [rawStatus, setRawStatus] = useState37(null);
7286
7390
  const inFlightRef = useRef25(false);
7287
7391
  const convRef = useRef25(conversation);
7288
7392
  convRef.current = conversation;
@@ -7340,7 +7444,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
7340
7444
  }
7341
7445
 
7342
7446
  // src/components/games/MysteryTigerGame.tsx
7343
- import { useState as useState38, useId as useId3 } from "react";
7447
+ import { useState as useState39, useId as useId3 } from "react";
7344
7448
 
7345
7449
  // src/components/games/nationFlags.ts
7346
7450
  var FLAGS = {
@@ -7551,8 +7655,8 @@ function isNationCode(flag) {
7551
7655
  }
7552
7656
 
7553
7657
  // src/components/games/PlayerAvatar.tsx
7554
- import { useState as useState37 } from "react";
7555
- import { jsx as jsx67 } from "react/jsx-runtime";
7658
+ import { useState as useState38 } from "react";
7659
+ import { jsx as jsx68 } from "react/jsx-runtime";
7556
7660
  function initialsOf(name) {
7557
7661
  const parts = name.trim().split(/\s+/).filter(Boolean);
7558
7662
  const first = parts[0];
@@ -7569,41 +7673,41 @@ function PlayerAvatar({
7569
7673
  imagePath,
7570
7674
  className
7571
7675
  }) {
7572
- const [failed, setFailed] = useState37(false);
7676
+ const [failed, setFailed] = useState38(false);
7573
7677
  const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
7574
- return /* @__PURE__ */ jsx67("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ jsx67("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx67("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
7678
+ return /* @__PURE__ */ jsx68("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ jsx68("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx68("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
7575
7679
  }
7576
7680
 
7577
7681
  // src/components/games/ui/GameHeader.tsx
7578
- import { jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
7682
+ import { jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
7579
7683
  function GameHeader({ title, eyebrow, right, onBack, backLabel }) {
7580
- return /* @__PURE__ */ jsxs60("div", { className: "ss-g-head", children: [
7581
- onBack && /* @__PURE__ */ jsx68("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ jsx68(IconChevronLeft, {}) }),
7582
- /* @__PURE__ */ jsxs60("div", { className: "ss-g-head-text", children: [
7583
- eyebrow && /* @__PURE__ */ jsx68("span", { className: "ss-g-eyebrow", children: eyebrow }),
7584
- /* @__PURE__ */ jsx68("h2", { className: "ss-g-title", children: title })
7684
+ return /* @__PURE__ */ jsxs61("div", { className: "ss-g-head", children: [
7685
+ onBack && /* @__PURE__ */ jsx69("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ jsx69(IconChevronLeft, {}) }),
7686
+ /* @__PURE__ */ jsxs61("div", { className: "ss-g-head-text", children: [
7687
+ eyebrow && /* @__PURE__ */ jsx69("span", { className: "ss-g-eyebrow", children: eyebrow }),
7688
+ /* @__PURE__ */ jsx69("h2", { className: "ss-g-title", children: title })
7585
7689
  ] }),
7586
- right && /* @__PURE__ */ jsx68("div", { className: "ss-g-head-right", children: right })
7690
+ right && /* @__PURE__ */ jsx69("div", { className: "ss-g-head-right", children: right })
7587
7691
  ] });
7588
7692
  }
7589
7693
 
7590
7694
  // src/components/games/ui/SegmentProgress.tsx
7591
- import { jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
7695
+ import { jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
7592
7696
  function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right }) {
7593
- return /* @__PURE__ */ jsxs61("div", { className: "ss-g-progress", children: [
7594
- /* @__PURE__ */ jsxs61("div", { className: "ss-g-progress-main", children: [
7595
- (leftLabel || rightLabel) && /* @__PURE__ */ jsxs61("div", { className: "ss-g-progress-labels", children: [
7596
- /* @__PURE__ */ jsx69("span", { children: leftLabel }),
7597
- /* @__PURE__ */ jsx69("span", { className: "ss-g-progress-rl", children: rightLabel })
7697
+ return /* @__PURE__ */ jsxs62("div", { className: "ss-g-progress", children: [
7698
+ /* @__PURE__ */ jsxs62("div", { className: "ss-g-progress-main", children: [
7699
+ (leftLabel || rightLabel) && /* @__PURE__ */ jsxs62("div", { className: "ss-g-progress-labels", children: [
7700
+ /* @__PURE__ */ jsx70("span", { children: leftLabel }),
7701
+ /* @__PURE__ */ jsx70("span", { className: "ss-g-progress-rl", children: rightLabel })
7598
7702
  ] }),
7599
- /* @__PURE__ */ jsx69(
7703
+ /* @__PURE__ */ jsx70(
7600
7704
  "div",
7601
7705
  {
7602
7706
  className: "ss-g-segs",
7603
7707
  role: "img",
7604
7708
  "aria-label": ariaLabel,
7605
7709
  style: { gridTemplateColumns: `repeat(${segments.length}, minmax(0, 1fr))` },
7606
- children: segments.map((s, i) => /* @__PURE__ */ jsx69("span", { className: "ss-g-seg", "data-state": s }, i))
7710
+ children: segments.map((s, i) => /* @__PURE__ */ jsx70("span", { className: "ss-g-seg", "data-state": s }, i))
7607
7711
  }
7608
7712
  )
7609
7713
  ] }),
@@ -7612,12 +7716,12 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
7612
7716
  }
7613
7717
 
7614
7718
  // src/components/games/ui/AnswerTray.tsx
7615
- import { Fragment as Fragment12, jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
7719
+ import { Fragment as Fragment13, jsx as jsx71, jsxs as jsxs63 } from "react/jsx-runtime";
7616
7720
  function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
7617
7721
  const needle = query.trim().toLowerCase();
7618
7722
  const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
7619
- return /* @__PURE__ */ jsxs62(Fragment12, { children: [
7620
- /* @__PURE__ */ jsx70(
7723
+ return /* @__PURE__ */ jsxs63(Fragment13, { children: [
7724
+ /* @__PURE__ */ jsx71(
7621
7725
  SearchField,
7622
7726
  {
7623
7727
  id,
@@ -7629,9 +7733,9 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7629
7733
  disabled
7630
7734
  }
7631
7735
  ),
7632
- shown.length > 0 && /* @__PURE__ */ jsx70("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
7736
+ shown.length > 0 && /* @__PURE__ */ jsx71("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
7633
7737
  const { first, last } = splitName(o.name);
7634
- return /* @__PURE__ */ jsxs62(
7738
+ return /* @__PURE__ */ jsxs63(
7635
7739
  "button",
7636
7740
  {
7637
7741
  type: "button",
@@ -7642,10 +7746,10 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7642
7746
  disabled,
7643
7747
  onClick: () => onPick(o.id),
7644
7748
  children: [
7645
- /* @__PURE__ */ jsx70(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
7646
- /* @__PURE__ */ jsxs62("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
7647
- first && /* @__PURE__ */ jsx70("span", { className: "ss-g-tray-first", children: first }),
7648
- /* @__PURE__ */ jsx70("span", { className: "ss-g-tray-last", children: last })
7749
+ /* @__PURE__ */ jsx71(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
7750
+ /* @__PURE__ */ jsxs63("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
7751
+ first && /* @__PURE__ */ jsx71("span", { className: "ss-g-tray-first", children: first }),
7752
+ /* @__PURE__ */ jsx71("span", { className: "ss-g-tray-last", children: last })
7649
7753
  ] })
7650
7754
  ]
7651
7755
  },
@@ -7656,59 +7760,59 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7656
7760
  }
7657
7761
 
7658
7762
  // src/components/games/ui/FooterBar.tsx
7659
- import { jsx as jsx71 } from "react/jsx-runtime";
7763
+ import { jsx as jsx72 } from "react/jsx-runtime";
7660
7764
  function FooterBar({ children }) {
7661
- return /* @__PURE__ */ jsx71("div", { className: "ss-g-footer", children });
7765
+ return /* @__PURE__ */ jsx72("div", { className: "ss-g-footer", children });
7662
7766
  }
7663
7767
 
7664
7768
  // src/components/games/ui/Silhouette.tsx
7665
- import { jsx as jsx72, jsxs as jsxs63 } from "react/jsx-runtime";
7769
+ import { jsx as jsx73, jsxs as jsxs64 } from "react/jsx-runtime";
7666
7770
  function Silhouette({ size, variant = "default" }) {
7667
- return /* @__PURE__ */ jsxs63("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
7668
- /* @__PURE__ */ jsxs63("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
7669
- /* @__PURE__ */ jsx72("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
7670
- /* @__PURE__ */ jsx72("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
7771
+ return /* @__PURE__ */ jsxs64("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
7772
+ /* @__PURE__ */ jsxs64("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
7773
+ /* @__PURE__ */ jsx73("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
7774
+ /* @__PURE__ */ jsx73("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
7671
7775
  ] }),
7672
- variant === "mystery" && /* @__PURE__ */ jsx72("span", { className: "ss-g-sil-q", children: "?" })
7776
+ variant === "mystery" && /* @__PURE__ */ jsx73("span", { className: "ss-g-sil-q", children: "?" })
7673
7777
  ] });
7674
7778
  }
7675
7779
 
7676
7780
  // src/components/games/ui/GameButton.tsx
7677
- import { jsx as jsx73 } from "react/jsx-runtime";
7781
+ import { jsx as jsx74 } from "react/jsx-runtime";
7678
7782
  function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
7679
7783
  const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
7680
- return /* @__PURE__ */ jsx73("button", { type, className: cls, ...rest });
7784
+ return /* @__PURE__ */ jsx74("button", { type, className: cls, ...rest });
7681
7785
  }
7682
7786
 
7683
7787
  // src/components/games/ui/ResultCard.tsx
7684
- import { jsx as jsx74, jsxs as jsxs64 } from "react/jsx-runtime";
7788
+ import { jsx as jsx75, jsxs as jsxs65 } from "react/jsx-runtime";
7685
7789
  function ResultCard({ tone, title, score, detail, onBack, ui }) {
7686
- return /* @__PURE__ */ jsxs64("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
7687
- /* @__PURE__ */ jsx74("span", { className: "ss-g-result-title", children: title }),
7688
- score !== void 0 && /* @__PURE__ */ jsxs64("span", { className: "ss-g-result-score", children: [
7689
- /* @__PURE__ */ jsx74("span", { className: "ss-g-result-num", children: score }),
7790
+ return /* @__PURE__ */ jsxs65("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
7791
+ /* @__PURE__ */ jsx75("span", { className: "ss-g-result-title", children: title }),
7792
+ score !== void 0 && /* @__PURE__ */ jsxs65("span", { className: "ss-g-result-score", children: [
7793
+ /* @__PURE__ */ jsx75("span", { className: "ss-g-result-num", children: score }),
7690
7794
  ui.games.unitPts
7691
7795
  ] }),
7692
- detail && /* @__PURE__ */ jsx74("span", { className: "ss-g-result-detail", children: detail }),
7693
- onBack && /* @__PURE__ */ jsx74(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
7796
+ detail && /* @__PURE__ */ jsx75("span", { className: "ss-g-result-detail", children: detail }),
7797
+ onBack && /* @__PURE__ */ jsx75(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
7694
7798
  ] });
7695
7799
  }
7696
7800
 
7697
7801
  // src/components/games/ui/PointsLadderRow.tsx
7698
- import { jsx as jsx75, jsxs as jsxs65 } from "react/jsx-runtime";
7802
+ import { jsx as jsx76, jsxs as jsxs66 } from "react/jsx-runtime";
7699
7803
  function PointsLadderRow({ ladder, guessesUsed, ui }) {
7700
7804
  if (!ladder || ladder.length === 0) return null;
7701
7805
  const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
7702
7806
  const next = ladder[guessesUsed + 1];
7703
7807
  if (now === void 0) return null;
7704
- return /* @__PURE__ */ jsxs65("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
7705
- /* @__PURE__ */ jsx75("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
7706
- next !== void 0 && next !== now && /* @__PURE__ */ jsx75("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
7808
+ return /* @__PURE__ */ jsxs66("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
7809
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
7810
+ next !== void 0 && next !== now && /* @__PURE__ */ jsx76("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
7707
7811
  ] });
7708
7812
  }
7709
7813
 
7710
7814
  // src/components/games/MysteryTigerGame.tsx
7711
- import { Fragment as Fragment13, jsx as jsx76, jsxs as jsxs66 } from "react/jsx-runtime";
7815
+ import { Fragment as Fragment14, jsx as jsx77, jsxs as jsxs67 } from "react/jsx-runtime";
7712
7816
  function parseClientState(json) {
7713
7817
  if (!json) return null;
7714
7818
  try {
@@ -7810,7 +7914,7 @@ function MysteryTigerGame({
7810
7914
  onBack
7811
7915
  }) {
7812
7916
  const t = ui.games.mysteryTiger;
7813
- const [query, setQuery] = useState38("");
7917
+ const [query, setQuery] = useState39("");
7814
7918
  const inputId = useId3();
7815
7919
  const clientState = parseClientState(result?.clientStateJson);
7816
7920
  const guessResults = clientState?.guessResults ?? [];
@@ -7830,22 +7934,22 @@ function MysteryTigerGame({
7830
7934
  setQuery("");
7831
7935
  onSubmit(JSON.stringify({ guesses: newGuesses }));
7832
7936
  }
7833
- const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs66(Chip, { variant: "accent", children: [
7937
+ const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs67(Chip, { variant: "accent", children: [
7834
7938
  score,
7835
7939
  " ",
7836
7940
  ui.games.unitPts
7837
- ] }) : /* @__PURE__ */ jsx76("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs66(Chip, { children: [
7941
+ ] }) : /* @__PURE__ */ jsx77("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs67(Chip, { children: [
7838
7942
  ui.games.guess,
7839
7943
  " ",
7840
- /* @__PURE__ */ jsx76("span", { className: "ss-g-num", children: guessesUsed + 1 }),
7944
+ /* @__PURE__ */ jsx77("span", { className: "ss-g-num", children: guessesUsed + 1 }),
7841
7945
  " / ",
7842
7946
  totalGuesses
7843
7947
  ] }) });
7844
7948
  const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
7845
7949
  const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
7846
7950
  const known = deriveKnownAttributes(guessResults, keys);
7847
- return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
7848
- /* @__PURE__ */ jsx76(
7951
+ return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
7952
+ /* @__PURE__ */ jsx77(
7849
7953
  GameHeader,
7850
7954
  {
7851
7955
  title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
@@ -7855,41 +7959,41 @@ function MysteryTigerGame({
7855
7959
  backLabel: ui.back
7856
7960
  }
7857
7961
  ),
7858
- !config && /* @__PURE__ */ jsx76("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7859
- config && /* @__PURE__ */ jsxs66(Fragment13, { children: [
7860
- /* @__PURE__ */ jsxs66("div", { className: "ss-g-body", children: [
7861
- !isOver && /* @__PURE__ */ jsx76(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
7862
- /* @__PURE__ */ jsxs66("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
7863
- /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-portrait", children: [
7864
- revealName ? /* @__PURE__ */ jsx76(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx76(Silhouette, { size: 150, variant: "mystery" }),
7865
- revealName && /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-reveal-name", children: revealName })
7962
+ !config && /* @__PURE__ */ jsx77("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7963
+ config && /* @__PURE__ */ jsxs67(Fragment14, { children: [
7964
+ /* @__PURE__ */ jsxs67("div", { className: "ss-g-body", children: [
7965
+ !isOver && /* @__PURE__ */ jsx77(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
7966
+ /* @__PURE__ */ jsxs67("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
7967
+ /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-portrait", children: [
7968
+ revealName ? /* @__PURE__ */ jsx77(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx77(Silhouette, { size: 150, variant: "mystery" }),
7969
+ revealName && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-reveal-name", children: revealName })
7866
7970
  ] }),
7867
- /* @__PURE__ */ jsx76("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-known-cell", children: [
7868
- /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
7869
- /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
7971
+ /* @__PURE__ */ jsx77("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-known-cell", children: [
7972
+ /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
7973
+ /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
7870
7974
  ] }, k.key)) })
7871
7975
  ] }),
7872
- !isOver && /* @__PURE__ */ jsx76(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
7873
- guessResults.length > 0 && /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-table", children: [
7874
- /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-thead", style: cols, children: [
7875
- /* @__PURE__ */ jsx76("span", { children: t.yourGuesses }),
7876
- keys.map((k) => /* @__PURE__ */ jsx76("span", { children: t.labels[k] }, k))
7976
+ !isOver && /* @__PURE__ */ jsx77(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
7977
+ guessResults.length > 0 && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-table", children: [
7978
+ /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-thead", style: cols, children: [
7979
+ /* @__PURE__ */ jsx77("span", { children: t.yourGuesses }),
7980
+ keys.map((k) => /* @__PURE__ */ jsx77("span", { children: t.labels[k] }, k))
7877
7981
  ] }),
7878
7982
  guessResults.map((gr, i) => {
7879
7983
  const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
7880
7984
  const { first, last } = splitName(name);
7881
- return /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-row", style: cols, children: [
7882
- /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-who", children: [
7883
- /* @__PURE__ */ jsx76(PlayerAvatar, { className: "ss-g-mt-av", name }),
7884
- /* @__PURE__ */ jsxs66("span", { className: "ss-g-mt-names", children: [
7885
- first && /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-first", children: first }),
7886
- /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-last", children: last })
7985
+ return /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-row", style: cols, children: [
7986
+ /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-who", children: [
7987
+ /* @__PURE__ */ jsx77(PlayerAvatar, { className: "ss-g-mt-av", name }),
7988
+ /* @__PURE__ */ jsxs67("span", { className: "ss-g-mt-names", children: [
7989
+ first && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-first", children: first }),
7990
+ /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-last", children: last })
7887
7991
  ] })
7888
7992
  ] }),
7889
7993
  keys.map((key) => {
7890
7994
  const v = gr[key];
7891
7995
  const arrow = directionArrow(v);
7892
- return /* @__PURE__ */ jsxs66(
7996
+ return /* @__PURE__ */ jsxs67(
7893
7997
  "div",
7894
7998
  {
7895
7999
  className: "ss-g-mt-cell",
@@ -7897,8 +8001,8 @@ function MysteryTigerGame({
7897
8001
  "data-verdict": v.verdict,
7898
8002
  "aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
7899
8003
  children: [
7900
- /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
7901
- arrow && /* @__PURE__ */ jsx76("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
8004
+ /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
8005
+ arrow && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
7902
8006
  ]
7903
8007
  },
7904
8008
  key
@@ -7907,25 +8011,25 @@ function MysteryTigerGame({
7907
8011
  ] }, gr.playerId);
7908
8012
  })
7909
8013
  ] }),
7910
- !isOver && /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-legend", children: [
7911
- /* @__PURE__ */ jsxs66("span", { children: [
7912
- /* @__PURE__ */ jsx76("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
8014
+ !isOver && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-legend", children: [
8015
+ /* @__PURE__ */ jsxs67("span", { children: [
8016
+ /* @__PURE__ */ jsx77("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
7913
8017
  t.legendMatch
7914
8018
  ] }),
7915
- /* @__PURE__ */ jsxs66("span", { children: [
7916
- /* @__PURE__ */ jsx76("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
8019
+ /* @__PURE__ */ jsxs67("span", { children: [
8020
+ /* @__PURE__ */ jsx77("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
7917
8021
  t.legendClose
7918
8022
  ] }),
7919
- /* @__PURE__ */ jsxs66("span", { children: [
8023
+ /* @__PURE__ */ jsxs67("span", { children: [
7920
8024
  "\u25B2 ",
7921
8025
  t.legendHigher
7922
8026
  ] })
7923
8027
  ] }),
7924
- clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs66("div", { className: "ss-g-mt-hint", children: [
7925
- /* @__PURE__ */ jsx76(IconBulb, {}),
7926
- /* @__PURE__ */ jsx76("span", { children: clientState.hintLine })
8028
+ clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-hint", children: [
8029
+ /* @__PURE__ */ jsx77(IconBulb, {}),
8030
+ /* @__PURE__ */ jsx77("span", { children: clientState.hintLine })
7927
8031
  ] }),
7928
- isOver && /* @__PURE__ */ jsx76(
8032
+ isOver && /* @__PURE__ */ jsx77(
7929
8033
  ResultCard,
7930
8034
  {
7931
8035
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -7937,7 +8041,7 @@ function MysteryTigerGame({
7937
8041
  }
7938
8042
  )
7939
8043
  ] }),
7940
- !isOver && /* @__PURE__ */ jsx76(FooterBar, { children: /* @__PURE__ */ jsx76(
8044
+ !isOver && /* @__PURE__ */ jsx77(FooterBar, { children: /* @__PURE__ */ jsx77(
7941
8045
  AnswerTray,
7942
8046
  {
7943
8047
  id: inputId,
@@ -7956,7 +8060,7 @@ function MysteryTigerGame({
7956
8060
  }
7957
8061
 
7958
8062
  // src/components/games/HigherOrLowerGame.tsx
7959
- import { Fragment as Fragment14, jsx as jsx77, jsxs as jsxs67 } from "react/jsx-runtime";
8063
+ import { Fragment as Fragment15, jsx as jsx78, jsxs as jsxs68 } from "react/jsx-runtime";
7960
8064
  var POINTS_PER_CORRECT = 10;
7961
8065
  function parseClientState2(json) {
7962
8066
  if (!json) return null;
@@ -7968,11 +8072,11 @@ function parseClientState2(json) {
7968
8072
  }
7969
8073
  function PlayerCard({ name, imagePath, highlight, children }) {
7970
8074
  const { first, last } = splitName(name);
7971
- return /* @__PURE__ */ jsxs67("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
7972
- /* @__PURE__ */ jsx77("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx77(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx77(Silhouette, { size: 150 }) }),
7973
- /* @__PURE__ */ jsxs67("div", { className: "ss-g-hl-info", children: [
7974
- first && /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-first", children: first }),
7975
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-surname", children: last }),
8075
+ return /* @__PURE__ */ jsxs68("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
8076
+ /* @__PURE__ */ jsx78("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx78(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx78(Silhouette, { size: 150 }) }),
8077
+ /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-info", children: [
8078
+ first && /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-first", children: first }),
8079
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-surname", children: last }),
7976
8080
  children
7977
8081
  ] })
7978
8082
  ] });
@@ -8004,47 +8108,47 @@ function HigherOrLowerGame({
8004
8108
  const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
8005
8109
  onSubmit(JSON.stringify({ answers: newAnswers }));
8006
8110
  }
8007
- return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
8008
- /* @__PURE__ */ jsx77(
8111
+ return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
8112
+ /* @__PURE__ */ jsx78(
8009
8113
  GameHeader,
8010
8114
  {
8011
8115
  title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
8012
8116
  eyebrow: t.eyebrow(POINTS_PER_CORRECT),
8013
- right: config ? /* @__PURE__ */ jsx77(StatStack, { value: runLength, label: t.streak }) : void 0,
8117
+ right: config ? /* @__PURE__ */ jsx78(StatStack, { value: runLength, label: t.streak }) : void 0,
8014
8118
  onBack,
8015
8119
  backLabel: ui.back
8016
8120
  }
8017
8121
  ),
8018
- !config && /* @__PURE__ */ jsx77("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8019
- config && /* @__PURE__ */ jsxs67(Fragment14, { children: [
8020
- /* @__PURE__ */ jsxs67("div", { className: "ss-g-body", children: [
8021
- /* @__PURE__ */ jsxs67("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
8022
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
8023
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
8024
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
8122
+ !config && /* @__PURE__ */ jsx78("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8123
+ config && /* @__PURE__ */ jsxs68(Fragment15, { children: [
8124
+ /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
8125
+ /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
8126
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
8127
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
8128
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
8025
8129
  ] }),
8026
- currentPair && /* @__PURE__ */ jsxs67("div", { className: "ss-g-hl-pair", children: [
8027
- /* @__PURE__ */ jsxs67(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
8028
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
8029
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-stat", children: config.statLabel })
8130
+ currentPair && /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-pair", children: [
8131
+ /* @__PURE__ */ jsxs68(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
8132
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
8133
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-stat", children: config.statLabel })
8030
8134
  ] }),
8031
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
8032
- /* @__PURE__ */ jsx77(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs67("div", { className: "ss-g-hl-btns", children: [
8033
- /* @__PURE__ */ jsxs67(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
8034
- /* @__PURE__ */ jsx77(IconArrowUp, { size: 16 }),
8135
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
8136
+ /* @__PURE__ */ jsx78(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-btns", children: [
8137
+ /* @__PURE__ */ jsxs68(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
8138
+ /* @__PURE__ */ jsx78(IconArrowUp, { size: 16 }),
8035
8139
  t.higher
8036
8140
  ] }),
8037
- /* @__PURE__ */ jsxs67(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
8038
- /* @__PURE__ */ jsx77(IconArrowDown, { size: 16 }),
8141
+ /* @__PURE__ */ jsxs68(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
8142
+ /* @__PURE__ */ jsx78(IconArrowDown, { size: 16 }),
8039
8143
  t.lower
8040
8144
  ] })
8041
8145
  ] }) })
8042
8146
  ] }),
8043
- lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs67("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
8044
- lastAnswer.wasCorrect ? /* @__PURE__ */ jsx77(IconCheck, {}) : /* @__PURE__ */ jsx77(IconClose, {}),
8147
+ lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs68("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
8148
+ lastAnswer.wasCorrect ? /* @__PURE__ */ jsx78(IconCheck, {}) : /* @__PURE__ */ jsx78(IconClose, {}),
8045
8149
  t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
8046
8150
  ] }),
8047
- isOver && /* @__PURE__ */ jsx77(
8151
+ isOver && /* @__PURE__ */ jsx78(
8048
8152
  ResultCard,
8049
8153
  {
8050
8154
  tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
@@ -8056,15 +8160,15 @@ function HigherOrLowerGame({
8056
8160
  }
8057
8161
  )
8058
8162
  ] }),
8059
- !isOver && /* @__PURE__ */ jsx77(FooterBar, { children: /* @__PURE__ */ jsxs67("div", { className: "ss-g-hl-foot", children: [
8060
- /* @__PURE__ */ jsx77("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
8163
+ !isOver && /* @__PURE__ */ jsx78(FooterBar, { children: /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-foot", children: [
8164
+ /* @__PURE__ */ jsx78("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
8061
8165
  const a = answeredPairs[i];
8062
- return /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
8166
+ return /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
8063
8167
  }) }),
8064
- /* @__PURE__ */ jsxs67("span", { className: "ss-g-hl-pts", children: [
8065
- /* @__PURE__ */ jsx77("span", { "data-testid": "hol-score", children: score }),
8168
+ /* @__PURE__ */ jsxs68("span", { className: "ss-g-hl-pts", children: [
8169
+ /* @__PURE__ */ jsx78("span", { "data-testid": "hol-score", children: score }),
8066
8170
  " ",
8067
- /* @__PURE__ */ jsx77("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
8171
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
8068
8172
  ] })
8069
8173
  ] }) })
8070
8174
  ] })
@@ -8072,21 +8176,21 @@ function HigherOrLowerGame({
8072
8176
  }
8073
8177
 
8074
8178
  // src/components/games/CareerPathGame.tsx
8075
- import { useState as useState40, useId as useId4 } from "react";
8179
+ import { useState as useState41, useId as useId4 } from "react";
8076
8180
 
8077
8181
  // src/components/games/ui/CrestShield.tsx
8078
- import { useState as useState39 } from "react";
8079
- import { jsx as jsx78 } from "react/jsx-runtime";
8182
+ import { useState as useState40 } from "react";
8183
+ import { jsx as jsx79 } from "react/jsx-runtime";
8080
8184
  function CrestShield({ src, name, size = 28 }) {
8081
- const [failed, setFailed] = useState39(false);
8185
+ const [failed, setFailed] = useState40(false);
8082
8186
  if (src && !isPlaceholderImage(src) && !failed) {
8083
- return /* @__PURE__ */ jsx78("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
8187
+ return /* @__PURE__ */ jsx79("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
8084
8188
  }
8085
- return /* @__PURE__ */ jsx78("svg", { className: "ss-g-crest ss-g-crest--ph", width: size, height: size * 32 / 28, viewBox: "0 0 28 32", role: "img", "aria-label": name, children: /* @__PURE__ */ jsx78("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
8189
+ return /* @__PURE__ */ jsx79("svg", { className: "ss-g-crest ss-g-crest--ph", width: size, height: size * 32 / 28, viewBox: "0 0 28 32", role: "img", "aria-label": name, children: /* @__PURE__ */ jsx79("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
8086
8190
  }
8087
8191
 
8088
8192
  // src/components/games/CareerPathGame.tsx
8089
- import { Fragment as Fragment15, jsx as jsx79, jsxs as jsxs68 } from "react/jsx-runtime";
8193
+ import { Fragment as Fragment16, jsx as jsx80, jsxs as jsxs69 } from "react/jsx-runtime";
8090
8194
  function parseClientState3(json) {
8091
8195
  if (!json) return null;
8092
8196
  try {
@@ -8110,15 +8214,15 @@ function CareerPathGame({
8110
8214
  }) {
8111
8215
  const s = ui.games.careerPath;
8112
8216
  const title = gameTitle({ gameId: "career-path" }, ui.games.titles);
8113
- const [query, setQuery] = useState40("");
8217
+ const [query, setQuery] = useState41("");
8114
8218
  const inputId = useId4();
8115
8219
  const clientState = parseClientState3(result?.clientStateJson);
8116
8220
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
8117
8221
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
8118
8222
  if (!config) {
8119
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
8120
- /* @__PURE__ */ jsx79(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8121
- /* @__PURE__ */ jsx79("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8223
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
8224
+ /* @__PURE__ */ jsx80(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8225
+ /* @__PURE__ */ jsx80("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8122
8226
  ] });
8123
8227
  }
8124
8228
  const visiblePath = clientState?.visiblePath ?? config.initialPath;
@@ -8132,61 +8236,61 @@ function CareerPathGame({
8132
8236
  setQuery("");
8133
8237
  onSubmit(JSON.stringify({ guesses: newGuesses }));
8134
8238
  }
8135
- const right = !isOver && clientState ? /* @__PURE__ */ jsx79("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs68(Chip, { variant: "neutral", children: [
8239
+ const right = !isOver && clientState ? /* @__PURE__ */ jsx80("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs69(Chip, { variant: "neutral", children: [
8136
8240
  ui.games.guess,
8137
8241
  " ",
8138
- /* @__PURE__ */ jsx79("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
8242
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
8139
8243
  " / ",
8140
8244
  clientState.guessesUsed + clientState.guessesRemaining
8141
8245
  ] }) }) : void 0;
8142
8246
  const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
8143
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
8144
- /* @__PURE__ */ jsx79(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
8145
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
8146
- !isOver && /* @__PURE__ */ jsx79(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
8147
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-cp-card", children: [
8148
- isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx79(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx79(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
8149
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-cp-card-text", children: [
8150
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
8151
- clientState?.hintLine ? /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs68("span", { className: "ss-g-cp-locks", children: [
8152
- /* @__PURE__ */ jsx79(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx79(IconLock, { size: 11 }), children: s.lockPosition }),
8153
- /* @__PURE__ */ jsx79(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx79(IconLock, { size: 11 }), children: s.lockNationality })
8247
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
8248
+ /* @__PURE__ */ jsx80(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
8249
+ /* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
8250
+ !isOver && /* @__PURE__ */ jsx80(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
8251
+ /* @__PURE__ */ jsxs69("div", { className: "ss-g-cp-card", children: [
8252
+ isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx80(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx80(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
8253
+ /* @__PURE__ */ jsxs69("div", { className: "ss-g-cp-card-text", children: [
8254
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
8255
+ clientState?.hintLine ? /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-locks", children: [
8256
+ /* @__PURE__ */ jsx80(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx80(IconLock, { size: 11 }), children: s.lockPosition }),
8257
+ /* @__PURE__ */ jsx80(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx80(IconLock, { size: 11 }), children: s.lockNationality })
8154
8258
  ] }) : null
8155
8259
  ] })
8156
8260
  ] }),
8157
- /* @__PURE__ */ jsxs68("ol", { className: "ss-g-cp-line", children: [
8261
+ /* @__PURE__ */ jsxs69("ol", { className: "ss-g-cp-line", children: [
8158
8262
  visiblePath.map((spell, i) => {
8159
8263
  const years = i === 0 ? s.firstClub : spellYears(spell);
8160
- return /* @__PURE__ */ jsxs68("li", { className: "ss-g-cp-step", children: [
8161
- /* @__PURE__ */ jsxs68("span", { className: "ss-g-cp-rail", children: [
8162
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx79(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
8163
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
8264
+ return /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step", children: [
8265
+ /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-rail", children: [
8266
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx80(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
8267
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
8164
8268
  ] }),
8165
- /* @__PURE__ */ jsxs68("span", { className: "ss-g-cp-step-text", children: [
8166
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-club", children: spell.clubName }),
8167
- /* @__PURE__ */ jsxs68("span", { className: "ss-g-cp-sub", children: [
8168
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-years", children: years }),
8169
- spell.isLoan && /* @__PURE__ */ jsxs68(Fragment15, { children: [
8269
+ /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-step-text", children: [
8270
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-club", children: spell.clubName }),
8271
+ /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-sub", children: [
8272
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-years", children: years }),
8273
+ spell.isLoan && /* @__PURE__ */ jsxs69(Fragment16, { children: [
8170
8274
  years ? " \xB7 " : "",
8171
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-loan", children: s.loan })
8275
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-loan", children: s.loan })
8172
8276
  ] })
8173
8277
  ] })
8174
8278
  ] })
8175
8279
  ] }, `${spell.clubName}-${i}`);
8176
8280
  }),
8177
- hidden > 0 && /* @__PURE__ */ jsxs68("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
8178
- /* @__PURE__ */ jsxs68("span", { className: "ss-g-cp-rail", children: [
8179
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx79(IconLock, { size: 18 }) }),
8180
- hidden > 1 && /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
8281
+ hidden > 0 && /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
8282
+ /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-rail", children: [
8283
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx80(IconLock, { size: 18 }) }),
8284
+ hidden > 1 && /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
8181
8285
  ] }),
8182
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
8286
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
8183
8287
  ] }),
8184
- hidden > 1 && /* @__PURE__ */ jsxs68("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
8185
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx79(IconLock, { size: 18 }) }) }),
8186
- /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx79("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
8288
+ hidden > 1 && /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
8289
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx80(IconLock, { size: 18 }) }) }),
8290
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
8187
8291
  ] })
8188
8292
  ] }),
8189
- isOver && /* @__PURE__ */ jsx79(
8293
+ isOver && /* @__PURE__ */ jsx80(
8190
8294
  ResultCard,
8191
8295
  {
8192
8296
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -8198,7 +8302,7 @@ function CareerPathGame({
8198
8302
  }
8199
8303
  )
8200
8304
  ] }),
8201
- !isOver && /* @__PURE__ */ jsx79(FooterBar, { children: /* @__PURE__ */ jsx79(
8305
+ !isOver && /* @__PURE__ */ jsx80(FooterBar, { children: /* @__PURE__ */ jsx80(
8202
8306
  AnswerTray,
8203
8307
  {
8204
8308
  id: inputId,
@@ -8217,16 +8321,16 @@ function CareerPathGame({
8217
8321
  }
8218
8322
 
8219
8323
  // src/components/games/BeatTheGridGame.tsx
8220
- import React, { useEffect as useEffect28, useId as useId5, useRef as useRef26, useState as useState41 } from "react";
8324
+ import React, { useEffect as useEffect28, useId as useId5, useRef as useRef26, useState as useState42 } from "react";
8221
8325
 
8222
8326
  // src/components/games/ui/OptionList.tsx
8223
- import { jsx as jsx80 } from "react/jsx-runtime";
8327
+ import { jsx as jsx81 } from "react/jsx-runtime";
8224
8328
  function OptionList({ label, options, onPick }) {
8225
- return /* @__PURE__ */ jsx80("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx80("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
8329
+ return /* @__PURE__ */ jsx81("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx81("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
8226
8330
  }
8227
8331
 
8228
8332
  // src/components/games/BeatTheGridGame.tsx
8229
- import { Fragment as Fragment16, jsx as jsx81, jsxs as jsxs69 } from "react/jsx-runtime";
8333
+ import { Fragment as Fragment17, jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
8230
8334
  function criterionIconKind(label, key) {
8231
8335
  const l = (key ?? label).toLowerCase();
8232
8336
  if (l.includes("app")) return "calendar";
@@ -8244,34 +8348,34 @@ function rowAbbrev(label, map, key) {
8244
8348
  function CriterionIcon({ kind }) {
8245
8349
  switch (kind) {
8246
8350
  case "calendar":
8247
- return /* @__PURE__ */ jsx81(IconCalendar, {});
8351
+ return /* @__PURE__ */ jsx82(IconCalendar, {});
8248
8352
  case "ball":
8249
- return /* @__PURE__ */ jsx81(IconBall, {});
8353
+ return /* @__PURE__ */ jsx82(IconBall, {});
8250
8354
  case "boot":
8251
- return /* @__PURE__ */ jsx81(IconBoot, {});
8355
+ return /* @__PURE__ */ jsx82(IconBoot, {});
8252
8356
  case "gloves":
8253
- return /* @__PURE__ */ jsx81(IconGloves, {});
8357
+ return /* @__PURE__ */ jsx82(IconGloves, {});
8254
8358
  case "shield":
8255
- return /* @__PURE__ */ jsx81(IconShield, {});
8359
+ return /* @__PURE__ */ jsx82(IconShield, {});
8256
8360
  default:
8257
- return /* @__PURE__ */ jsx81(IconFlag, {});
8361
+ return /* @__PURE__ */ jsx82(IconFlag, {});
8258
8362
  }
8259
8363
  }
8260
8364
  function HeaderVisual({ label, textKey: iKey, meta }) {
8261
8365
  if (!meta) {
8262
- return /* @__PURE__ */ jsx81(CriterionIcon, { kind: criterionIconKind(label, iKey) });
8366
+ return /* @__PURE__ */ jsx82(CriterionIcon, { kind: criterionIconKind(label, iKey) });
8263
8367
  }
8264
8368
  switch (meta.kind) {
8265
8369
  case "club":
8266
- return /* @__PURE__ */ jsx81(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
8370
+ return /* @__PURE__ */ jsx82(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
8267
8371
  case "coach":
8268
- return /* @__PURE__ */ jsx81(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
8372
+ return /* @__PURE__ */ jsx82(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
8269
8373
  case "country":
8270
- return /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
8374
+ return /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
8271
8375
  case "position":
8272
- return /* @__PURE__ */ jsx81(Fragment16, {});
8376
+ return /* @__PURE__ */ jsx82(Fragment17, {});
8273
8377
  default:
8274
- return /* @__PURE__ */ jsx81(CriterionIcon, { kind: criterionIconKind(label, iKey) });
8378
+ return /* @__PURE__ */ jsx82(CriterionIcon, { kind: criterionIconKind(label, iKey) });
8275
8379
  }
8276
8380
  }
8277
8381
  function parseClientState4(json) {
@@ -8306,7 +8410,7 @@ function SearchSheet({
8306
8410
  ui
8307
8411
  }) {
8308
8412
  const s = ui.games.beatTheGrid;
8309
- const [query, setQuery] = useState41("");
8413
+ const [query, setQuery] = useState42("");
8310
8414
  const inputId = useId5();
8311
8415
  const inputRef = useRef26(null);
8312
8416
  useEffect28(() => {
@@ -8315,12 +8419,12 @@ function SearchSheet({
8315
8419
  const filtered = playerPool.filter(
8316
8420
  (p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
8317
8421
  );
8318
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
8319
- /* @__PURE__ */ jsxs69("div", { className: "ss-g-btg-sheet-hdr", children: [
8320
- /* @__PURE__ */ jsx81(Chip, { variant: "neutral", children: rowLabel }),
8321
- /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx81(IconClose, { size: 12 }) }),
8322
- /* @__PURE__ */ jsx81(Chip, { variant: "accent", children: colLabel }),
8323
- /* @__PURE__ */ jsx81(
8422
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
8423
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-sheet-hdr", children: [
8424
+ /* @__PURE__ */ jsx82(Chip, { variant: "neutral", children: rowLabel }),
8425
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconClose, { size: 12 }) }),
8426
+ /* @__PURE__ */ jsx82(Chip, { variant: "accent", children: colLabel }),
8427
+ /* @__PURE__ */ jsx82(
8324
8428
  "button",
8325
8429
  {
8326
8430
  type: "button",
@@ -8328,12 +8432,12 @@ function SearchSheet({
8328
8432
  "data-testid": "btg-sheet-dismiss",
8329
8433
  "aria-label": s.closeSearch,
8330
8434
  onClick: onDismiss,
8331
- children: /* @__PURE__ */ jsx81(IconClose, {})
8435
+ children: /* @__PURE__ */ jsx82(IconClose, {})
8332
8436
  }
8333
8437
  )
8334
8438
  ] }),
8335
- playerPool.length === 0 ? /* @__PURE__ */ jsx81("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs69(Fragment16, { children: [
8336
- /* @__PURE__ */ jsx81(
8439
+ playerPool.length === 0 ? /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs70(Fragment17, { children: [
8440
+ /* @__PURE__ */ jsx82(
8337
8441
  SearchField,
8338
8442
  {
8339
8443
  id: inputId,
@@ -8345,16 +8449,16 @@ function SearchSheet({
8345
8449
  inputRef
8346
8450
  }
8347
8451
  ),
8348
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx81(
8452
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx82(
8349
8453
  OptionList,
8350
8454
  {
8351
8455
  label: s.searchLabel(rowLabel, colLabel),
8352
8456
  options: filtered.map((p) => ({
8353
8457
  key: p.id,
8354
- content: /* @__PURE__ */ jsxs69(Fragment16, { children: [
8355
- /* @__PURE__ */ jsx81(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
8356
- /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-result-name", children: p.name }),
8357
- /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx81(IconPlus, { size: 18 }) })
8458
+ content: /* @__PURE__ */ jsxs70(Fragment17, { children: [
8459
+ /* @__PURE__ */ jsx82(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
8460
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-result-name", children: p.name }),
8461
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconPlus, { size: 18 }) })
8358
8462
  ] })
8359
8463
  })),
8360
8464
  onPick: (k) => onPick(row, col, Number(k))
@@ -8374,7 +8478,7 @@ function BeatTheGridGame({
8374
8478
  }) {
8375
8479
  const s = ui.games.beatTheGrid;
8376
8480
  const title = gameTitle({ gameId: "beat-the-grid" }, ui.games.titles);
8377
- const [activeCell, setActiveCell] = useState41(null);
8481
+ const [activeCell, setActiveCell] = useState42(null);
8378
8482
  const clientState = parseClientState4(result?.clientStateJson);
8379
8483
  const filledCells = clientState?.cells ?? [];
8380
8484
  const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
@@ -8392,9 +8496,9 @@ function BeatTheGridGame({
8392
8496
  onSubmit(JSON.stringify({ cells: newCells }));
8393
8497
  }
8394
8498
  if (!config) {
8395
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
8396
- /* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8397
- /* @__PURE__ */ jsx81("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8499
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
8500
+ /* @__PURE__ */ jsx82(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8501
+ /* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8398
8502
  ] });
8399
8503
  }
8400
8504
  const rows = config.rows;
@@ -8407,20 +8511,20 @@ function BeatTheGridGame({
8407
8511
  (_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
8408
8512
  );
8409
8513
  const totalScore = clientState?.totalScore ?? result?.score ?? 0;
8410
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
8411
- /* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8412
- /* @__PURE__ */ jsx81(
8514
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
8515
+ /* @__PURE__ */ jsx82(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
8516
+ /* @__PURE__ */ jsx82(
8413
8517
  SegmentProgress,
8414
8518
  {
8415
8519
  segments,
8416
8520
  ariaLabel: s.progressAria(filledCells.length, total),
8417
8521
  leftLabel: s.filled(filledCells.length, total),
8418
8522
  rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
8419
- right: /* @__PURE__ */ jsx81(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
8523
+ right: /* @__PURE__ */ jsx82(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
8420
8524
  }
8421
8525
  ),
8422
- /* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
8423
- /* @__PURE__ */ jsxs69(
8526
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
8527
+ /* @__PURE__ */ jsxs70(
8424
8528
  "div",
8425
8529
  {
8426
8530
  className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
@@ -8430,31 +8534,31 @@ function BeatTheGridGame({
8430
8534
  },
8431
8535
  role: "grid",
8432
8536
  children: [
8433
- /* @__PURE__ */ jsx81("div", { className: "ss-g-btg-corner" }),
8537
+ /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-corner" }),
8434
8538
  cols.map((col, colIdx) => {
8435
8539
  const colMeta = config.colsMeta?.[colIdx];
8436
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
8437
- /* @__PURE__ */ jsx81(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
8438
- /* @__PURE__ */ jsx81("span", { children: col })
8540
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
8541
+ /* @__PURE__ */ jsx82(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
8542
+ /* @__PURE__ */ jsx82("span", { children: col })
8439
8543
  ] }, col);
8440
8544
  }),
8441
8545
  rows.map((rowLabel, rowIdx) => {
8442
8546
  const rowMeta = config.rowsMeta?.[rowIdx];
8443
8547
  const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
8444
- const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs69(Fragment16, { children: [
8445
- /* @__PURE__ */ jsx81(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
8446
- /* @__PURE__ */ jsx81("span", { children: rowLabel })
8447
- ] }) : abbr === rowLabel ? /* @__PURE__ */ jsx81("span", { children: rowLabel }) : /* @__PURE__ */ jsxs69(Fragment16, { children: [
8448
- /* @__PURE__ */ jsx81("span", { "aria-hidden": "true", children: abbr }),
8449
- /* @__PURE__ */ jsx81("span", { className: "ss-g-sr", children: rowLabel })
8548
+ const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs70(Fragment17, { children: [
8549
+ /* @__PURE__ */ jsx82(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
8550
+ /* @__PURE__ */ jsx82("span", { children: rowLabel })
8551
+ ] }) : abbr === rowLabel ? /* @__PURE__ */ jsx82("span", { children: rowLabel }) : /* @__PURE__ */ jsxs70(Fragment17, { children: [
8552
+ /* @__PURE__ */ jsx82("span", { "aria-hidden": "true", children: abbr }),
8553
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-sr", children: rowLabel })
8450
8554
  ] });
8451
- return /* @__PURE__ */ jsxs69(React.Fragment, { children: [
8452
- /* @__PURE__ */ jsx81("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
8555
+ return /* @__PURE__ */ jsxs70(React.Fragment, { children: [
8556
+ /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
8453
8557
  cols.map((colLabel, colIdx) => {
8454
8558
  const filled = findCellResult(filledCells, rowIdx, colIdx);
8455
8559
  const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
8456
8560
  const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
8457
- return /* @__PURE__ */ jsx81(
8561
+ return /* @__PURE__ */ jsx82(
8458
8562
  "button",
8459
8563
  {
8460
8564
  type: "button",
@@ -8465,20 +8569,20 @@ function BeatTheGridGame({
8465
8569
  className: "ss-g-btg-cell",
8466
8570
  disabled: isLocked2 || submitting,
8467
8571
  onClick: () => handleCellClick(rowIdx, colIdx),
8468
- children: filled ? /* @__PURE__ */ jsxs69(Fragment16, { children: [
8469
- /* @__PURE__ */ jsx81(
8572
+ children: filled ? /* @__PURE__ */ jsxs70(Fragment17, { children: [
8573
+ /* @__PURE__ */ jsx82(
8470
8574
  "span",
8471
8575
  {
8472
8576
  className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
8473
8577
  role: "img",
8474
8578
  "aria-label": filled.isCorrect ? s.correct : s.wrong,
8475
- children: filled.isCorrect ? /* @__PURE__ */ jsx81(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx81(IconClose, { size: 11 })
8579
+ children: filled.isCorrect ? /* @__PURE__ */ jsx82(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx82(IconClose, { size: 11 })
8476
8580
  }
8477
8581
  ),
8478
- /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
8582
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
8479
8583
  (() => {
8480
8584
  const entry = playerPool.find((p) => p.id === filled.playerId);
8481
- return /* @__PURE__ */ jsx81(
8585
+ return /* @__PURE__ */ jsx82(
8482
8586
  PlayerAvatar,
8483
8587
  {
8484
8588
  name: entry?.name ?? "",
@@ -8487,8 +8591,8 @@ function BeatTheGridGame({
8487
8591
  }
8488
8592
  );
8489
8593
  })(),
8490
- /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
8491
- ] }) : /* @__PURE__ */ jsx81("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx81(IconPlus, { size: 22 }) })
8594
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
8595
+ ] }) : /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconPlus, { size: 22 }) })
8492
8596
  },
8493
8597
  `cell-${rowIdx}-${colIdx}`
8494
8598
  );
@@ -8498,7 +8602,7 @@ function BeatTheGridGame({
8498
8602
  ]
8499
8603
  }
8500
8604
  ),
8501
- isLocked2 && /* @__PURE__ */ jsx81(
8605
+ isLocked2 && /* @__PURE__ */ jsx82(
8502
8606
  ResultCard,
8503
8607
  {
8504
8608
  tone: "neutral",
@@ -8510,7 +8614,7 @@ function BeatTheGridGame({
8510
8614
  }
8511
8615
  )
8512
8616
  ] }),
8513
- activeCell !== null && /* @__PURE__ */ jsx81("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx81(
8617
+ activeCell !== null && /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx82(
8514
8618
  SearchSheet,
8515
8619
  {
8516
8620
  row: activeCell.row,
@@ -8529,21 +8633,21 @@ function BeatTheGridGame({
8529
8633
  }
8530
8634
 
8531
8635
  // src/components/games/GuessTheXiGame.tsx
8532
- import { useState as useState42, useId as useId6 } from "react";
8636
+ import { useState as useState43, useId as useId6 } from "react";
8533
8637
 
8534
8638
  // src/components/games/ui/PitchSvg.tsx
8535
- import { Fragment as Fragment17, jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
8639
+ import { Fragment as Fragment18, jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
8536
8640
  function PitchSvg({ variant }) {
8537
- return /* @__PURE__ */ jsxs70("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
8538
- /* @__PURE__ */ jsx82("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
8539
- variant === "full" ? /* @__PURE__ */ jsxs70(Fragment17, { children: [
8540
- /* @__PURE__ */ jsx82("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
8541
- /* @__PURE__ */ jsx82("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
8542
- /* @__PURE__ */ jsx82("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
8543
- /* @__PURE__ */ jsx82("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
8544
- ] }) : /* @__PURE__ */ jsxs70(Fragment17, { children: [
8545
- /* @__PURE__ */ jsx82("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
8546
- /* @__PURE__ */ jsx82("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
8641
+ return /* @__PURE__ */ jsxs71("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
8642
+ /* @__PURE__ */ jsx83("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
8643
+ variant === "full" ? /* @__PURE__ */ jsxs71(Fragment18, { children: [
8644
+ /* @__PURE__ */ jsx83("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
8645
+ /* @__PURE__ */ jsx83("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
8646
+ /* @__PURE__ */ jsx83("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
8647
+ /* @__PURE__ */ jsx83("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
8648
+ ] }) : /* @__PURE__ */ jsxs71(Fragment18, { children: [
8649
+ /* @__PURE__ */ jsx83("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
8650
+ /* @__PURE__ */ jsx83("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
8547
8651
  ] })
8548
8652
  ] });
8549
8653
  }
@@ -8599,7 +8703,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
8599
8703
  }
8600
8704
 
8601
8705
  // src/components/games/GuessTheXiGame.tsx
8602
- import { Fragment as Fragment18, jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
8706
+ import { Fragment as Fragment19, jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
8603
8707
  var MAX_GUESSES2 = 3;
8604
8708
  function parseClientState5(json) {
8605
8709
  if (!json) return null;
@@ -8618,7 +8722,7 @@ function GuessTheXiGame({
8618
8722
  onBack
8619
8723
  }) {
8620
8724
  const t = ui.games.guessTheXi;
8621
- const [query, setQuery] = useState42("");
8725
+ const [query, setQuery] = useState43("");
8622
8726
  const inputId = useId6();
8623
8727
  const clientState = parseClientState5(result?.clientStateJson);
8624
8728
  const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
@@ -8649,31 +8753,31 @@ function GuessTheXiGame({
8649
8753
  const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
8650
8754
  const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
8651
8755
  const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
8652
- return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
8653
- /* @__PURE__ */ jsx83(
8756
+ return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
8757
+ /* @__PURE__ */ jsx84(
8654
8758
  GameHeader,
8655
8759
  {
8656
8760
  title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
8657
8761
  eyebrow: config?.poolLabel,
8658
- right: formation ? /* @__PURE__ */ jsx83(Chip, { variant: "accent", children: formation }) : void 0,
8762
+ right: formation ? /* @__PURE__ */ jsx84(Chip, { variant: "accent", children: formation }) : void 0,
8659
8763
  onBack,
8660
8764
  backLabel: ui.back
8661
8765
  }
8662
8766
  ),
8663
- !config && /* @__PURE__ */ jsx83("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8664
- config && /* @__PURE__ */ jsxs71(Fragment18, { children: [
8665
- /* @__PURE__ */ jsxs71("div", { className: "ss-g-body", children: [
8666
- !isOver && /* @__PURE__ */ jsx83(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
8667
- rows.length > 0 && /* @__PURE__ */ jsxs71("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
8668
- /* @__PURE__ */ jsx83(PitchSvg, { variant: "full" }),
8669
- /* @__PURE__ */ jsx83("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx83("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
8767
+ !config && /* @__PURE__ */ jsx84("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8768
+ config && /* @__PURE__ */ jsxs72(Fragment19, { children: [
8769
+ /* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
8770
+ !isOver && /* @__PURE__ */ jsx84(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
8771
+ rows.length > 0 && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
8772
+ /* @__PURE__ */ jsx84(PitchSvg, { variant: "full" }),
8773
+ /* @__PURE__ */ jsx84("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx84("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
8670
8774
  const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
8671
8775
  const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
8672
8776
  const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
8673
8777
  const flag = nationalityFlag(pos.nationality);
8674
8778
  if (lineupEntry) {
8675
- return /* @__PURE__ */ jsxs71("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
8676
- /* @__PURE__ */ jsx83(
8779
+ return /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
8780
+ /* @__PURE__ */ jsx84(
8677
8781
  PlayerAvatar,
8678
8782
  {
8679
8783
  name: lineupEntry.name,
@@ -8681,11 +8785,11 @@ function GuessTheXiGame({
8681
8785
  className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
8682
8786
  }
8683
8787
  ),
8684
- /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
8788
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
8685
8789
  ] }, `${pos.slot}-${c}`);
8686
8790
  }
8687
- return /* @__PURE__ */ jsxs71("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
8688
- /* @__PURE__ */ jsx83(
8791
+ return /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
8792
+ /* @__PURE__ */ jsx84(
8689
8793
  "span",
8690
8794
  {
8691
8795
  className: "ss-g-gxi-disc",
@@ -8696,22 +8800,22 @@ function GuessTheXiGame({
8696
8800
  children: flag
8697
8801
  }
8698
8802
  ),
8699
- name ? /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-pos", children: posLabel })
8803
+ name ? /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos", children: posLabel })
8700
8804
  ] }, `${pos.slot}-${c}`);
8701
8805
  }) }, r)) })
8702
8806
  ] }),
8703
- !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs71("div", { className: "ss-g-gxi-wrong", children: [
8704
- /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
8807
+ !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-wrong", children: [
8808
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
8705
8809
  wrongGuesses.map((g) => {
8706
8810
  const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
8707
- return /* @__PURE__ */ jsxs71("span", { className: "ss-g-gxi-wrong-chip", children: [
8708
- /* @__PURE__ */ jsx83(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
8709
- /* @__PURE__ */ jsx83("s", { children: teamName(g.teamId) })
8811
+ return /* @__PURE__ */ jsxs72("span", { className: "ss-g-gxi-wrong-chip", children: [
8812
+ /* @__PURE__ */ jsx84(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
8813
+ /* @__PURE__ */ jsx84("s", { children: teamName(g.teamId) })
8710
8814
  ] }, g.teamId);
8711
8815
  })
8712
8816
  ] }),
8713
- isOver && /* @__PURE__ */ jsxs71(Fragment18, { children: [
8714
- /* @__PURE__ */ jsx83(
8817
+ isOver && /* @__PURE__ */ jsxs72(Fragment19, { children: [
8818
+ /* @__PURE__ */ jsx84(
8715
8819
  ResultCard,
8716
8820
  {
8717
8821
  tone: solved ? "win" : failed ? "lose" : "neutral",
@@ -8722,29 +8826,29 @@ function GuessTheXiGame({
8722
8826
  ui
8723
8827
  }
8724
8828
  ),
8725
- (solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs71("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
8726
- /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
8727
- /* @__PURE__ */ jsx83(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
8728
- /* @__PURE__ */ jsx83("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
8829
+ (solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
8830
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
8831
+ /* @__PURE__ */ jsx84(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
8832
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
8729
8833
  ] })
8730
8834
  ] })
8731
8835
  ] }),
8732
- !isOver && /* @__PURE__ */ jsxs71(FooterBar, { children: [
8733
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx83(
8836
+ !isOver && /* @__PURE__ */ jsxs72(FooterBar, { children: [
8837
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx84(
8734
8838
  OptionList,
8735
8839
  {
8736
8840
  label: t.optionsLabel,
8737
8841
  options: filtered.map((tm) => ({
8738
8842
  key: tm.teamId,
8739
- content: /* @__PURE__ */ jsxs71(Fragment18, { children: [
8740
- /* @__PURE__ */ jsx83(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
8741
- /* @__PURE__ */ jsx83("span", { children: tm.teamName })
8843
+ content: /* @__PURE__ */ jsxs72(Fragment19, { children: [
8844
+ /* @__PURE__ */ jsx84(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
8845
+ /* @__PURE__ */ jsx84("span", { children: tm.teamName })
8742
8846
  ] })
8743
8847
  })),
8744
8848
  onPick: (k) => handlePick(Number(k))
8745
8849
  }
8746
8850
  ),
8747
- /* @__PURE__ */ jsx83(
8851
+ /* @__PURE__ */ jsx84(
8748
8852
  SearchField,
8749
8853
  {
8750
8854
  id: inputId,
@@ -8761,8 +8865,8 @@ function GuessTheXiGame({
8761
8865
  }
8762
8866
 
8763
8867
  // src/components/games/DailyQuizGame.tsx
8764
- import { useState as useState43 } from "react";
8765
- import { Fragment as Fragment19, jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
8868
+ import { useState as useState44 } from "react";
8869
+ import { Fragment as Fragment20, jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
8766
8870
  function parseClientState6(json) {
8767
8871
  if (!json) return null;
8768
8872
  try {
@@ -8783,13 +8887,13 @@ function OptionName({ text }) {
8783
8887
  const tokens = base.split(/\s+/).filter(Boolean);
8784
8888
  const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
8785
8889
  if (!isPlainName || base === "") {
8786
- return /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-opt-full", children: text }) });
8890
+ return /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-full", children: text }) });
8787
8891
  }
8788
8892
  const { first, last } = splitName(base);
8789
- return /* @__PURE__ */ jsxs72("span", { className: "ss-g-dq-opt-name", children: [
8790
- first && /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-opt-first", children: first }),
8791
- /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-opt-last", children: last }),
8792
- suffix && /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-opt-suffix", children: suffix })
8893
+ return /* @__PURE__ */ jsxs73("span", { className: "ss-g-dq-opt-name", children: [
8894
+ first && /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-first", children: first }),
8895
+ /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-last", children: last }),
8896
+ suffix && /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-suffix", children: suffix })
8793
8897
  ] });
8794
8898
  }
8795
8899
  function DailyQuizGame({
@@ -8802,15 +8906,15 @@ function DailyQuizGame({
8802
8906
  }) {
8803
8907
  const s = ui.games.dailyQuiz;
8804
8908
  const title = gameTitle({ gameId: "daily-quiz" }, ui.games.titles);
8805
- const [selections, setSelections] = useState43(/* @__PURE__ */ new Map());
8806
- const [page, setPage] = useState43(0);
8909
+ const [selections, setSelections] = useState44(/* @__PURE__ */ new Map());
8910
+ const [page, setPage] = useState44(0);
8807
8911
  const clientState = parseClientState6(result?.clientStateJson);
8808
8912
  const results = clientState?.results ?? [];
8809
8913
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
8810
8914
  if (!config) {
8811
- return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8812
- /* @__PURE__ */ jsx84(GameHeader, { title, onBack, backLabel: ui.back }),
8813
- /* @__PURE__ */ jsx84("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8915
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8916
+ /* @__PURE__ */ jsx85(GameHeader, { title, onBack, backLabel: ui.back }),
8917
+ /* @__PURE__ */ jsx85("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8814
8918
  ] });
8815
8919
  }
8816
8920
  const questions = config.questions;
@@ -8845,11 +8949,11 @@ function DailyQuizGame({
8845
8949
  return r.isCorrect ? "correct" : "wrong";
8846
8950
  });
8847
8951
  const correctCount = results.filter((r) => r.isCorrect).length;
8848
- return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8849
- /* @__PURE__ */ jsx84(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
8850
- /* @__PURE__ */ jsx84(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
8851
- /* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
8852
- /* @__PURE__ */ jsx84(
8952
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8953
+ /* @__PURE__ */ jsx85(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
8954
+ /* @__PURE__ */ jsx85(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
8955
+ /* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
8956
+ /* @__PURE__ */ jsx85(
8853
8957
  ResultCard,
8854
8958
  {
8855
8959
  tone: "neutral",
@@ -8862,15 +8966,15 @@ function DailyQuizGame({
8862
8966
  questions.map((q) => {
8863
8967
  const r = findResult(results, q.index);
8864
8968
  const picked = selections.get(q.index);
8865
- return /* @__PURE__ */ jsxs72("div", { className: "ss-g-dq-rq", children: [
8866
- /* @__PURE__ */ jsx84("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
8867
- r && /* @__PURE__ */ jsx84("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
8969
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-dq-rq", children: [
8970
+ /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
8971
+ r && /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
8868
8972
  let cls = "ss-g-dq-rq-opt";
8869
8973
  if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
8870
8974
  else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
8871
- return /* @__PURE__ */ jsx84("span", { className: cls, children: opt }, optIdx);
8975
+ return /* @__PURE__ */ jsx85("span", { className: cls, children: opt }, optIdx);
8872
8976
  }) }),
8873
- r?.revealText && /* @__PURE__ */ jsx84("div", { className: "ss-g-dq-why", children: r.revealText })
8977
+ r?.revealText && /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-why", children: r.revealText })
8874
8978
  ] }, q.index);
8875
8979
  })
8876
8980
  ] })
@@ -8878,16 +8982,16 @@ function DailyQuizGame({
8878
8982
  }
8879
8983
  const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
8880
8984
  const selectedIdx = current ? selections.get(current.index) : void 0;
8881
- return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8882
- /* @__PURE__ */ jsx84(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
8883
- /* @__PURE__ */ jsx84(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
8884
- /* @__PURE__ */ jsx84("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs72(Fragment19, { children: [
8885
- /* @__PURE__ */ jsx84("h3", { className: "ss-g-dq-stem", children: current.stem }),
8886
- /* @__PURE__ */ jsx84("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
8985
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8986
+ /* @__PURE__ */ jsx85(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
8987
+ /* @__PURE__ */ jsx85(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
8988
+ /* @__PURE__ */ jsx85("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs73(Fragment20, { children: [
8989
+ /* @__PURE__ */ jsx85("h3", { className: "ss-g-dq-stem", children: current.stem }),
8990
+ /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
8887
8991
  const selected = optIdx === selectedIdx;
8888
8992
  const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
8889
8993
  const playerName = opt;
8890
- return /* @__PURE__ */ jsxs72(
8994
+ return /* @__PURE__ */ jsxs73(
8891
8995
  "button",
8892
8996
  {
8893
8997
  type: "button",
@@ -8896,25 +9000,25 @@ function DailyQuizGame({
8896
9000
  disabled: submitting,
8897
9001
  onClick: () => handleSelect(current.index, optIdx),
8898
9002
  children: [
8899
- current.optionImagePaths && /* @__PURE__ */ jsx84(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
8900
- /* @__PURE__ */ jsx84("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx84(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
8901
- /* @__PURE__ */ jsx84(OptionName, { text: opt })
9003
+ current.optionImagePaths && /* @__PURE__ */ jsx85(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
9004
+ /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx85(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
9005
+ /* @__PURE__ */ jsx85(OptionName, { text: opt })
8902
9006
  ]
8903
9007
  },
8904
9008
  optIdx
8905
9009
  );
8906
9010
  }) })
8907
9011
  ] }) }),
8908
- /* @__PURE__ */ jsx84(FooterBar, { children: /* @__PURE__ */ jsxs72("div", { className: "ss-g-dq-nav", children: [
8909
- page > 0 && /* @__PURE__ */ jsx84(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
8910
- isLast ? /* @__PURE__ */ jsx84(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx84(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
9012
+ /* @__PURE__ */ jsx85(FooterBar, { children: /* @__PURE__ */ jsxs73("div", { className: "ss-g-dq-nav", children: [
9013
+ page > 0 && /* @__PURE__ */ jsx85(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
9014
+ isLast ? /* @__PURE__ */ jsx85(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx85(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
8911
9015
  ] }) })
8912
9016
  ] });
8913
9017
  }
8914
9018
 
8915
9019
  // src/components/games/MatchdayPredictorGame.tsx
8916
- import { useId as useId7, useState as useState44 } from "react";
8917
- import { jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
9020
+ import { useId as useId7, useState as useState45 } from "react";
9021
+ import { jsx as jsx86, jsxs as jsxs74 } from "react/jsx-runtime";
8918
9022
  var SCORER_SEARCH_THRESHOLD = 9;
8919
9023
  function parseClientState7(json) {
8920
9024
  if (!json) return null;
@@ -8932,7 +9036,7 @@ function isLocked(kickoffUtc) {
8932
9036
  }
8933
9037
  }
8934
9038
  function IconMinus() {
8935
- return /* @__PURE__ */ jsx85(
9039
+ return /* @__PURE__ */ jsx86(
8936
9040
  "svg",
8937
9041
  {
8938
9042
  width: 18,
@@ -8943,20 +9047,20 @@ function IconMinus() {
8943
9047
  strokeWidth: 2.2,
8944
9048
  strokeLinecap: "round",
8945
9049
  "aria-hidden": "true",
8946
- children: /* @__PURE__ */ jsx85("path", { d: "M5 12h14" })
9050
+ children: /* @__PURE__ */ jsx86("path", { d: "M5 12h14" })
8947
9051
  }
8948
9052
  );
8949
9053
  }
8950
9054
  function TeamBadge({ team, label }) {
8951
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-mp-team", children: [
8952
- /* @__PURE__ */ jsx85(CrestShield, { name: team.name, size: 44 }),
8953
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-team-name", children: team.name }),
8954
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-team-side", children: label })
9055
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-team", children: [
9056
+ /* @__PURE__ */ jsx86(CrestShield, { name: team.name, size: 44 }),
9057
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-team-name", children: team.name }),
9058
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-team-side", children: label })
8955
9059
  ] });
8956
9060
  }
8957
9061
  function ScoreCard({ home, away, h, a, t, edit }) {
8958
- const col = (side, team, value) => /* @__PURE__ */ jsxs73("div", { className: "ss-g-mp-col", children: [
8959
- edit && /* @__PURE__ */ jsx85(
9062
+ const col = (side, team, value) => /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-col", children: [
9063
+ edit && /* @__PURE__ */ jsx86(
8960
9064
  "button",
8961
9065
  {
8962
9066
  type: "button",
@@ -8964,11 +9068,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
8964
9068
  "aria-label": t.goalsUp(team.name),
8965
9069
  disabled: edit.disabled,
8966
9070
  onClick: () => edit.onStep(side, 1),
8967
- children: /* @__PURE__ */ jsx85(IconPlus, { size: 18 })
9071
+ children: /* @__PURE__ */ jsx86(IconPlus, { size: 18 })
8968
9072
  }
8969
9073
  ),
8970
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
8971
- edit && /* @__PURE__ */ jsx85(
9074
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
9075
+ edit && /* @__PURE__ */ jsx86(
8972
9076
  "button",
8973
9077
  {
8974
9078
  type: "button",
@@ -8976,27 +9080,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
8976
9080
  "aria-label": t.goalsDown(team.name),
8977
9081
  disabled: edit.disabled || value <= 0,
8978
9082
  onClick: () => edit.onStep(side, -1),
8979
- children: /* @__PURE__ */ jsx85(IconMinus, {})
9083
+ children: /* @__PURE__ */ jsx86(IconMinus, {})
8980
9084
  }
8981
9085
  )
8982
9086
  ] });
8983
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-mp-card", children: [
8984
- /* @__PURE__ */ jsx85(TeamBadge, { team: home, label: t.home }),
8985
- /* @__PURE__ */ jsxs73("div", { className: "ss-g-mp-scores", children: [
9087
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-card", children: [
9088
+ /* @__PURE__ */ jsx86(TeamBadge, { team: home, label: t.home }),
9089
+ /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-scores", children: [
8986
9090
  col("home", home, h),
8987
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
9091
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
8988
9092
  col("away", away, a)
8989
9093
  ] }),
8990
- /* @__PURE__ */ jsx85(TeamBadge, { team: away, label: t.away })
9094
+ /* @__PURE__ */ jsx86(TeamBadge, { team: away, label: t.away })
8991
9095
  ] });
8992
9096
  }
8993
9097
  function OutcomeRow({ label, ok, detail, t }) {
8994
- return /* @__PURE__ */ jsxs73("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
8995
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-row-k", children: label }),
8996
- /* @__PURE__ */ jsxs73("span", { className: "ss-g-mp-row-v", children: [
8997
- ok ? /* @__PURE__ */ jsx85(IconCheck, {}) : /* @__PURE__ */ jsx85(IconClose, { size: 14 }),
8998
- /* @__PURE__ */ jsx85("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
8999
- detail ? /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-row-d", children: detail }) : null
9098
+ return /* @__PURE__ */ jsxs74("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
9099
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-row-k", children: label }),
9100
+ /* @__PURE__ */ jsxs74("span", { className: "ss-g-mp-row-v", children: [
9101
+ ok ? /* @__PURE__ */ jsx86(IconCheck, {}) : /* @__PURE__ */ jsx86(IconClose, { size: 14 }),
9102
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
9103
+ detail ? /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-row-d", children: detail }) : null
9000
9104
  ] })
9001
9105
  ] });
9002
9106
  }
@@ -9009,20 +9113,20 @@ function MatchdayPredictorGame({
9009
9113
  onBack
9010
9114
  }) {
9011
9115
  const t = ui.games.predictor;
9012
- const [homeScore, setHomeScore] = useState44(0);
9013
- const [awayScore, setAwayScore] = useState44(0);
9014
- const [firstScorerPlayerId, setFirstScorerPlayerId] = useState44(null);
9015
- const [lastEdited, setLastEdited] = useState44("home");
9016
- const [query, setQuery] = useState44("");
9116
+ const [homeScore, setHomeScore] = useState45(0);
9117
+ const [awayScore, setAwayScore] = useState45(0);
9118
+ const [firstScorerPlayerId, setFirstScorerPlayerId] = useState45(null);
9119
+ const [lastEdited, setLastEdited] = useState45("home");
9120
+ const [query, setQuery] = useState45("");
9017
9121
  const searchId = useId7();
9018
9122
  const clientState = parseClientState7(result?.clientStateJson);
9019
9123
  const alreadyPlayed = result?.alreadyPlayed === true;
9020
- const header = /* @__PURE__ */ jsx85(
9124
+ const header = /* @__PURE__ */ jsx86(
9021
9125
  GameHeader,
9022
9126
  {
9023
9127
  title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
9024
9128
  eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
9025
- right: config ? /* @__PURE__ */ jsx85(Chip, { icon: /* @__PURE__ */ jsx85(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
9129
+ right: config ? /* @__PURE__ */ jsx86(Chip, { icon: /* @__PURE__ */ jsx86(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
9026
9130
  onBack,
9027
9131
  backLabel: ui.back
9028
9132
  }
@@ -9030,10 +9134,10 @@ function MatchdayPredictorGame({
9030
9134
  if (alreadyPlayed && clientState) {
9031
9135
  if (!clientState.graded) {
9032
9136
  const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
9033
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9137
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9034
9138
  header,
9035
- /* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
9036
- config && /* @__PURE__ */ jsx85(
9139
+ /* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
9140
+ config && /* @__PURE__ */ jsx86(
9037
9141
  ScoreCard,
9038
9142
  {
9039
9143
  home: config.homeTeam,
@@ -9043,7 +9147,7 @@ function MatchdayPredictorGame({
9043
9147
  t
9044
9148
  }
9045
9149
  ),
9046
- /* @__PURE__ */ jsx85(
9150
+ /* @__PURE__ */ jsx86(
9047
9151
  ResultCard,
9048
9152
  {
9049
9153
  tone: "neutral",
@@ -9060,28 +9164,28 @@ function MatchdayPredictorGame({
9060
9164
  }
9061
9165
  )
9062
9166
  ] }),
9063
- /* @__PURE__ */ jsx85(FooterBar, { children: /* @__PURE__ */ jsx85("p", { className: "ss-g-mp-fun", children: t.forFun }) })
9167
+ /* @__PURE__ */ jsx86(FooterBar, { children: /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun }) })
9064
9168
  ] });
9065
9169
  }
9066
9170
  const r = clientState.result;
9067
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9171
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9068
9172
  header,
9069
- /* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
9070
- config && /* @__PURE__ */ jsx85(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
9071
- /* @__PURE__ */ jsx85(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
9072
- /* @__PURE__ */ jsxs73("ul", { className: "ss-g-mp-rows", children: [
9073
- /* @__PURE__ */ jsx85(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
9074
- /* @__PURE__ */ jsx85(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
9075
- !clientState.firstScorerVoid && /* @__PURE__ */ jsx85(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
9173
+ /* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
9174
+ config && /* @__PURE__ */ jsx86(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
9175
+ /* @__PURE__ */ jsx86(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
9176
+ /* @__PURE__ */ jsxs74("ul", { className: "ss-g-mp-rows", children: [
9177
+ /* @__PURE__ */ jsx86(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
9178
+ /* @__PURE__ */ jsx86(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
9179
+ !clientState.firstScorerVoid && /* @__PURE__ */ jsx86(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
9076
9180
  ] })
9077
9181
  ] }),
9078
- /* @__PURE__ */ jsx85(FooterBar, { children: /* @__PURE__ */ jsx85("p", { className: "ss-g-mp-fun", children: t.forFun }) })
9182
+ /* @__PURE__ */ jsx86(FooterBar, { children: /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun }) })
9079
9183
  ] });
9080
9184
  }
9081
9185
  if (!config) {
9082
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9186
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9083
9187
  header,
9084
- /* @__PURE__ */ jsx85("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9188
+ /* @__PURE__ */ jsx86("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9085
9189
  ] });
9086
9190
  }
9087
9191
  const locked = isLocked(config.kickoffUtc);
@@ -9105,10 +9209,10 @@ function MatchdayPredictorGame({
9105
9209
  const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
9106
9210
  const q = query.trim().toLowerCase();
9107
9211
  const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
9108
- return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9212
+ return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
9109
9213
  header,
9110
- /* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
9111
- /* @__PURE__ */ jsx85(
9214
+ /* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
9215
+ /* @__PURE__ */ jsx86(
9112
9216
  ScoreCard,
9113
9217
  {
9114
9218
  home: config.homeTeam,
@@ -9119,12 +9223,12 @@ function MatchdayPredictorGame({
9119
9223
  edit: { disabled, active: lastEdited, onStep: step }
9120
9224
  }
9121
9225
  ),
9122
- pool.length > 0 && /* @__PURE__ */ jsxs73("section", { className: "ss-g-mp-scorer", children: [
9123
- /* @__PURE__ */ jsxs73("div", { className: "ss-g-mp-sec-head", children: [
9124
- /* @__PURE__ */ jsx85("h3", { children: t.firstScorer }),
9125
- /* @__PURE__ */ jsx85("span", { children: t.optional })
9226
+ pool.length > 0 && /* @__PURE__ */ jsxs74("section", { className: "ss-g-mp-scorer", children: [
9227
+ /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-sec-head", children: [
9228
+ /* @__PURE__ */ jsx86("h3", { children: t.firstScorer }),
9229
+ /* @__PURE__ */ jsx86("span", { children: t.optional })
9126
9230
  ] }),
9127
- showSearch && /* @__PURE__ */ jsx85(
9231
+ showSearch && /* @__PURE__ */ jsx86(
9128
9232
  SearchField,
9129
9233
  {
9130
9234
  id: searchId,
@@ -9136,9 +9240,9 @@ function MatchdayPredictorGame({
9136
9240
  disabled
9137
9241
  }
9138
9242
  ),
9139
- /* @__PURE__ */ jsx85("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
9243
+ /* @__PURE__ */ jsx86("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
9140
9244
  const selected = firstScorerPlayerId === p.playerId;
9141
- return /* @__PURE__ */ jsxs73(
9245
+ return /* @__PURE__ */ jsxs74(
9142
9246
  "button",
9143
9247
  {
9144
9248
  type: "button",
@@ -9148,15 +9252,15 @@ function MatchdayPredictorGame({
9148
9252
  disabled,
9149
9253
  onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
9150
9254
  children: [
9151
- selected && /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx85(IconCheck, { size: 12 }) }),
9152
- /* @__PURE__ */ jsx85(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
9153
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
9255
+ selected && /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx86(IconCheck, { size: 12 }) }),
9256
+ /* @__PURE__ */ jsx86(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
9257
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
9154
9258
  ]
9155
9259
  },
9156
9260
  p.playerId
9157
9261
  );
9158
9262
  }) }),
9159
- /* @__PURE__ */ jsxs73(
9263
+ /* @__PURE__ */ jsxs74(
9160
9264
  "button",
9161
9265
  {
9162
9266
  type: "button",
@@ -9165,24 +9269,24 @@ function MatchdayPredictorGame({
9165
9269
  disabled,
9166
9270
  onClick: () => setFirstScorerPlayerId(null),
9167
9271
  children: [
9168
- /* @__PURE__ */ jsx85("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
9272
+ /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
9169
9273
  t.noScorer
9170
9274
  ]
9171
9275
  }
9172
9276
  )
9173
9277
  ] }),
9174
- locked && /* @__PURE__ */ jsx85("p", { className: "ss-g-mp-closed", children: t.closed })
9278
+ locked && /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-closed", children: t.closed })
9175
9279
  ] }),
9176
- /* @__PURE__ */ jsxs73(FooterBar, { children: [
9177
- /* @__PURE__ */ jsx85(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
9178
- /* @__PURE__ */ jsx85("p", { className: "ss-g-mp-fun", children: t.forFun })
9280
+ /* @__PURE__ */ jsxs74(FooterBar, { children: [
9281
+ /* @__PURE__ */ jsx86(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
9282
+ /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun })
9179
9283
  ] })
9180
9284
  ] });
9181
9285
  }
9182
9286
 
9183
9287
  // src/components/games/StartingXiGame.tsx
9184
- import { useId as useId8, useState as useState45 } from "react";
9185
- import { Fragment as Fragment20, jsx as jsx86, jsxs as jsxs74 } from "react/jsx-runtime";
9288
+ import { useId as useId8, useState as useState46 } from "react";
9289
+ import { Fragment as Fragment21, jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
9186
9290
  var POINTS_PER_STARTER = 8;
9187
9291
  var XI_SIZE = 11;
9188
9292
  var DEFAULT_FORMATION = "4-3-3";
@@ -9225,26 +9329,26 @@ function StartingXiGame({
9225
9329
  lockAtUtc
9226
9330
  }) {
9227
9331
  const t = ui.games.startingXi;
9228
- const [slotPlayers, setSlotPlayers] = useState45(() => Array(XI_SIZE).fill(null));
9229
- const [active, setActive] = useState45(0);
9230
- const [query, setQuery] = useState45("");
9332
+ const [slotPlayers, setSlotPlayers] = useState46(() => Array(XI_SIZE).fill(null));
9333
+ const [active, setActive] = useState46(0);
9334
+ const [query, setQuery] = useState46("");
9231
9335
  const searchId = useId8();
9232
9336
  const clientState = parseClientState8(result?.clientStateJson);
9233
9337
  const alreadyPlayed = result?.alreadyPlayed === true;
9234
- const header = /* @__PURE__ */ jsx86(
9338
+ const header = /* @__PURE__ */ jsx87(
9235
9339
  GameHeader,
9236
9340
  {
9237
9341
  title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
9238
9342
  eyebrow: t.eyebrow,
9239
- right: /* @__PURE__ */ jsx86(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
9343
+ right: /* @__PURE__ */ jsx87(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
9240
9344
  onBack,
9241
9345
  backLabel: ui.back
9242
9346
  }
9243
9347
  );
9244
9348
  function statusScreen(title, score) {
9245
- return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9349
+ return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9246
9350
  header,
9247
- /* @__PURE__ */ jsx86("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx86(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
9351
+ /* @__PURE__ */ jsx87("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx87(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
9248
9352
  ] });
9249
9353
  }
9250
9354
  if (alreadyPlayed) {
@@ -9253,9 +9357,9 @@ function StartingXiGame({
9253
9357
  if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
9254
9358
  }
9255
9359
  if (!config) {
9256
- return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9360
+ return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9257
9361
  header,
9258
- /* @__PURE__ */ jsx86("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9362
+ /* @__PURE__ */ jsx87("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9259
9363
  ] });
9260
9364
  }
9261
9365
  const { formation, slots } = formationSlots(config.formation);
@@ -9290,27 +9394,27 @@ function StartingXiGame({
9290
9394
  onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
9291
9395
  }
9292
9396
  const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
9293
- return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9397
+ return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
9294
9398
  header,
9295
- /* @__PURE__ */ jsx86(
9399
+ /* @__PURE__ */ jsx87(
9296
9400
  SegmentProgress,
9297
9401
  {
9298
9402
  segments,
9299
9403
  ariaLabel: t.picked(pickedCount),
9300
9404
  leftLabel: t.picked(pickedCount),
9301
9405
  rightLabel: t.toGo(XI_SIZE - pickedCount),
9302
- right: /* @__PURE__ */ jsx86(Chip, { children: formation })
9406
+ right: /* @__PURE__ */ jsx87(Chip, { children: formation })
9303
9407
  }
9304
9408
  ),
9305
- /* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
9306
- /* @__PURE__ */ jsxs74("div", { className: "ss-g-xi-pitch", children: [
9307
- /* @__PURE__ */ jsx86(PitchSvg, { variant: "half" }),
9409
+ /* @__PURE__ */ jsxs75("div", { className: "ss-g-body", children: [
9410
+ /* @__PURE__ */ jsxs75("div", { className: "ss-g-xi-pitch", children: [
9411
+ /* @__PURE__ */ jsx87(PitchSvg, { variant: "half" }),
9308
9412
  slots.map((s) => {
9309
9413
  const playerId = slotPlayers[s.index] ?? null;
9310
9414
  const player = playerId !== null ? byId.get(playerId) ?? null : null;
9311
9415
  const name = player?.playerName ?? "";
9312
9416
  const state = player ? "filled" : active === s.index ? "active" : "empty";
9313
- return /* @__PURE__ */ jsxs74(
9417
+ return /* @__PURE__ */ jsxs75(
9314
9418
  "button",
9315
9419
  {
9316
9420
  type: "button",
@@ -9322,21 +9426,21 @@ function StartingXiGame({
9322
9426
  disabled: submitting,
9323
9427
  onClick: () => tapSlot(s.index),
9324
9428
  children: [
9325
- /* @__PURE__ */ jsx86("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx86(IconPlus, { size: 18 }) }),
9326
- /* @__PURE__ */ jsx86("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
9429
+ /* @__PURE__ */ jsx87("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx87(IconPlus, { size: 18 }) }),
9430
+ /* @__PURE__ */ jsx87("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
9327
9431
  ]
9328
9432
  },
9329
9433
  s.index
9330
9434
  );
9331
9435
  })
9332
9436
  ] }),
9333
- /* @__PURE__ */ jsxs74("div", { className: "ss-g-xi-picker", children: [
9334
- /* @__PURE__ */ jsx86("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs74(Fragment20, { children: [
9335
- /* @__PURE__ */ jsx86(Chip, { variant: "badge", children: activeSlot.label }),
9336
- /* @__PURE__ */ jsx86("strong", { children: t.pickFor(activeSlot.label) })
9337
- ] }) : /* @__PURE__ */ jsx86("strong", { children: t.allPicked }) }),
9338
- activeSlot && /* @__PURE__ */ jsxs74(Fragment20, { children: [
9339
- /* @__PURE__ */ jsx86(
9437
+ /* @__PURE__ */ jsxs75("div", { className: "ss-g-xi-picker", children: [
9438
+ /* @__PURE__ */ jsx87("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs75(Fragment21, { children: [
9439
+ /* @__PURE__ */ jsx87(Chip, { variant: "badge", children: activeSlot.label }),
9440
+ /* @__PURE__ */ jsx87("strong", { children: t.pickFor(activeSlot.label) })
9441
+ ] }) : /* @__PURE__ */ jsx87("strong", { children: t.allPicked }) }),
9442
+ activeSlot && /* @__PURE__ */ jsxs75(Fragment21, { children: [
9443
+ /* @__PURE__ */ jsx87(
9340
9444
  SearchField,
9341
9445
  {
9342
9446
  id: searchId,
@@ -9348,18 +9452,18 @@ function StartingXiGame({
9348
9452
  disabled: submitting
9349
9453
  }
9350
9454
  ),
9351
- /* @__PURE__ */ jsx86("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx86("li", { children: /* @__PURE__ */ jsxs74("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
9352
- /* @__PURE__ */ jsx86("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
9353
- /* @__PURE__ */ jsx86("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
9354
- /* @__PURE__ */ jsx86("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
9455
+ /* @__PURE__ */ jsx87("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx87("li", { children: /* @__PURE__ */ jsxs75("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
9456
+ /* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
9457
+ /* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
9458
+ /* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
9355
9459
  ] }) }, p.playerId)) })
9356
9460
  ] })
9357
9461
  ] })
9358
9462
  ] }),
9359
- /* @__PURE__ */ jsxs74(FooterBar, { children: [
9360
- /* @__PURE__ */ jsx86(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
9361
- /* @__PURE__ */ jsxs74("p", { className: "ss-g-xi-lock", children: [
9362
- /* @__PURE__ */ jsx86(IconLock, {}),
9463
+ /* @__PURE__ */ jsxs75(FooterBar, { children: [
9464
+ /* @__PURE__ */ jsx87(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
9465
+ /* @__PURE__ */ jsxs75("p", { className: "ss-g-xi-lock", children: [
9466
+ /* @__PURE__ */ jsx87(IconLock, {}),
9363
9467
  lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
9364
9468
  ] })
9365
9469
  ] })
@@ -9367,8 +9471,8 @@ function StartingXiGame({
9367
9471
  }
9368
9472
 
9369
9473
  // src/components/games/StatLadderGame.tsx
9370
- import { useId as useId9, useState as useState46 } from "react";
9371
- import { jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
9474
+ import { useId as useId9, useState as useState47 } from "react";
9475
+ import { jsx as jsx88, jsxs as jsxs76 } from "react/jsx-runtime";
9372
9476
  function ladderClue(ladder) {
9373
9477
  const mystery = ladder.find((r) => r.rank === 2);
9374
9478
  if (!mystery) return null;
@@ -9390,9 +9494,9 @@ function parseClientState9(json) {
9390
9494
  }
9391
9495
  function NameStack({ name }) {
9392
9496
  const { first, last } = splitName(name);
9393
- return /* @__PURE__ */ jsxs75("span", { className: "ss-g-sl-name", children: [
9394
- first && /* @__PURE__ */ jsx87("small", { children: `${first[0]}.` }),
9395
- /* @__PURE__ */ jsx87("b", { children: last })
9497
+ return /* @__PURE__ */ jsxs76("span", { className: "ss-g-sl-name", children: [
9498
+ first && /* @__PURE__ */ jsx88("small", { children: `${first[0]}.` }),
9499
+ /* @__PURE__ */ jsx88("b", { children: last })
9396
9500
  ] });
9397
9501
  }
9398
9502
  function StatLadderGame({
@@ -9404,16 +9508,16 @@ function StatLadderGame({
9404
9508
  onBack
9405
9509
  }) {
9406
9510
  const t = ui.games.statLadder;
9407
- const [query, setQuery] = useState46("");
9408
- const [selectedId, setSelectedId] = useState46(null);
9511
+ const [query, setQuery] = useState47("");
9512
+ const [selectedId, setSelectedId] = useState47(null);
9409
9513
  const searchId = useId9();
9410
9514
  const clientState = parseClientState9(result?.clientStateJson);
9411
9515
  const revealed = clientState != null;
9412
- const header = /* @__PURE__ */ jsx87(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
9516
+ const header = /* @__PURE__ */ jsx88(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
9413
9517
  if (!config) {
9414
- return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
9518
+ return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
9415
9519
  header,
9416
- /* @__PURE__ */ jsx87("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9520
+ /* @__PURE__ */ jsx88("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9417
9521
  ] });
9418
9522
  }
9419
9523
  const question = t.question(config.statLabel);
@@ -9425,45 +9529,45 @@ function StatLadderGame({
9425
9529
  if (selectedId === null || submitting || revealed) return;
9426
9530
  onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
9427
9531
  }
9428
- return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
9532
+ return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
9429
9533
  header,
9430
- /* @__PURE__ */ jsxs75("div", { className: "ss-g-body", children: [
9431
- !revealed && /* @__PURE__ */ jsx87(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
9432
- /* @__PURE__ */ jsxs75("div", { className: "ss-g-sl-prompt", children: [
9433
- /* @__PURE__ */ jsx87(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx87(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
9434
- /* @__PURE__ */ jsxs75("h3", { className: "ss-g-sl-q", children: [
9534
+ /* @__PURE__ */ jsxs76("div", { className: "ss-g-body", children: [
9535
+ !revealed && /* @__PURE__ */ jsx88(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
9536
+ /* @__PURE__ */ jsxs76("div", { className: "ss-g-sl-prompt", children: [
9537
+ /* @__PURE__ */ jsx88(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx88(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
9538
+ /* @__PURE__ */ jsxs76("h3", { className: "ss-g-sl-q", children: [
9435
9539
  question.pre,
9436
- /* @__PURE__ */ jsx87("em", { children: question.emph }),
9540
+ /* @__PURE__ */ jsx88("em", { children: question.emph }),
9437
9541
  question.post
9438
9542
  ] })
9439
9543
  ] }),
9440
- /* @__PURE__ */ jsx87("ol", { className: "ss-g-sl-rungs", children: rungs.map(
9441
- (rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs75(
9544
+ /* @__PURE__ */ jsx88("ol", { className: "ss-g-sl-rungs", children: rungs.map(
9545
+ (rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs76(
9442
9546
  "li",
9443
9547
  {
9444
9548
  className: "ss-g-sl-rung ss-g-sl-rung--mystery",
9445
9549
  "data-testid": "sl-mystery-rung",
9446
9550
  "data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
9447
9551
  children: [
9448
- /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-rank", children: "2" }),
9449
- revealed ? /* @__PURE__ */ jsx87(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx87(Silhouette, { size: 52, variant: "mystery" }),
9450
- revealed ? /* @__PURE__ */ jsx87(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-who", children: t.whoSecond }),
9451
- /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
9552
+ /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-rank", children: "2" }),
9553
+ revealed ? /* @__PURE__ */ jsx88(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx88(Silhouette, { size: 52, variant: "mystery" }),
9554
+ revealed ? /* @__PURE__ */ jsx88(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-who", children: t.whoSecond }),
9555
+ /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
9452
9556
  ]
9453
9557
  },
9454
9558
  rung.rank
9455
- ) : /* @__PURE__ */ jsxs75("li", { className: "ss-g-sl-rung", children: [
9456
- /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-rank", children: rung.rank }),
9457
- /* @__PURE__ */ jsx87(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
9458
- /* @__PURE__ */ jsx87(NameStack, { name: rung.playerName ?? "?" }),
9459
- /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-val", children: rung.statValue })
9559
+ ) : /* @__PURE__ */ jsxs76("li", { className: "ss-g-sl-rung", children: [
9560
+ /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-rank", children: rung.rank }),
9561
+ /* @__PURE__ */ jsx88(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
9562
+ /* @__PURE__ */ jsx88(NameStack, { name: rung.playerName ?? "?" }),
9563
+ /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-val", children: rung.statValue })
9460
9564
  ] }, rung.rank)
9461
9565
  ) }),
9462
- clue && /* @__PURE__ */ jsxs75("p", { className: "ss-g-sl-clue", children: [
9463
- /* @__PURE__ */ jsx87(IconBulb, {}),
9464
- /* @__PURE__ */ jsx87("span", { children: t.clue(clue, config.statLabel) })
9566
+ clue && /* @__PURE__ */ jsxs76("p", { className: "ss-g-sl-clue", children: [
9567
+ /* @__PURE__ */ jsx88(IconBulb, {}),
9568
+ /* @__PURE__ */ jsx88("span", { children: t.clue(clue, config.statLabel) })
9465
9569
  ] }),
9466
- !revealed && /* @__PURE__ */ jsx87("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx87("li", { children: /* @__PURE__ */ jsxs75(
9570
+ !revealed && /* @__PURE__ */ jsx88("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx88("li", { children: /* @__PURE__ */ jsxs76(
9467
9571
  "button",
9468
9572
  {
9469
9573
  type: "button",
@@ -9476,13 +9580,13 @@ function StatLadderGame({
9476
9580
  setQuery(p.playerName);
9477
9581
  },
9478
9582
  children: [
9479
- /* @__PURE__ */ jsx87(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
9480
- /* @__PURE__ */ jsx87("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
9481
- selectedId === p.playerId && /* @__PURE__ */ jsx87(IconCheck, {})
9583
+ /* @__PURE__ */ jsx88(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
9584
+ /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
9585
+ selectedId === p.playerId && /* @__PURE__ */ jsx88(IconCheck, {})
9482
9586
  ]
9483
9587
  }
9484
9588
  ) }, p.playerId)) }),
9485
- revealed && /* @__PURE__ */ jsx87(
9589
+ revealed && /* @__PURE__ */ jsx88(
9486
9590
  ResultCard,
9487
9591
  {
9488
9592
  tone: clientState.isCorrect ? "win" : "lose",
@@ -9493,8 +9597,8 @@ function StatLadderGame({
9493
9597
  }
9494
9598
  )
9495
9599
  ] }),
9496
- !revealed && /* @__PURE__ */ jsx87(FooterBar, { children: /* @__PURE__ */ jsxs75("div", { className: "ss-g-sl-guess", children: [
9497
- /* @__PURE__ */ jsx87(
9600
+ !revealed && /* @__PURE__ */ jsx88(FooterBar, { children: /* @__PURE__ */ jsxs76("div", { className: "ss-g-sl-guess", children: [
9601
+ /* @__PURE__ */ jsx88(
9498
9602
  SearchField,
9499
9603
  {
9500
9604
  id: searchId,
@@ -9509,13 +9613,13 @@ function StatLadderGame({
9509
9613
  disabled: submitting
9510
9614
  }
9511
9615
  ),
9512
- /* @__PURE__ */ jsx87(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
9616
+ /* @__PURE__ */ jsx88(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
9513
9617
  ] }) })
9514
9618
  ] });
9515
9619
  }
9516
9620
 
9517
9621
  // src/components/games/FanMotmGame.tsx
9518
- import { jsx as jsx88, jsxs as jsxs76 } from "react/jsx-runtime";
9622
+ import { jsx as jsx89, jsxs as jsxs77 } from "react/jsx-runtime";
9519
9623
  function parseClientState10(json) {
9520
9624
  if (!json) return null;
9521
9625
  try {
@@ -9536,20 +9640,20 @@ function FanMotmGame({
9536
9640
  const clientState = parseClientState10(result?.clientStateJson);
9537
9641
  const alreadyVoted = result?.alreadyPlayed === true;
9538
9642
  const pickedId = clientState?.pickedPlayerId ?? null;
9539
- const header = /* @__PURE__ */ jsx88(
9643
+ const header = /* @__PURE__ */ jsx89(
9540
9644
  GameHeader,
9541
9645
  {
9542
9646
  title: t.title,
9543
9647
  eyebrow: t.eyebrow,
9544
- right: alreadyVoted ? /* @__PURE__ */ jsx88(Chip, { variant: "success", icon: /* @__PURE__ */ jsx88(IconCheck, {}), children: t.voted }) : void 0,
9648
+ right: alreadyVoted ? /* @__PURE__ */ jsx89(Chip, { variant: "success", icon: /* @__PURE__ */ jsx89(IconCheck, {}), children: t.voted }) : void 0,
9545
9649
  onBack,
9546
9650
  backLabel: ui.back
9547
9651
  }
9548
9652
  );
9549
9653
  if (!config) {
9550
- return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9654
+ return /* @__PURE__ */ jsxs77("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9551
9655
  header,
9552
- /* @__PURE__ */ jsx88("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9656
+ /* @__PURE__ */ jsx89("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9553
9657
  ] });
9554
9658
  }
9555
9659
  const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
@@ -9557,12 +9661,12 @@ function FanMotmGame({
9557
9661
  if (alreadyVoted || submitting) return;
9558
9662
  onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
9559
9663
  }
9560
- return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9664
+ return /* @__PURE__ */ jsxs77("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9561
9665
  header,
9562
- /* @__PURE__ */ jsxs76("div", { className: "ss-g-body", children: [
9563
- /* @__PURE__ */ jsx88("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
9666
+ /* @__PURE__ */ jsxs77("div", { className: "ss-g-body", children: [
9667
+ /* @__PURE__ */ jsx89("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
9564
9668
  const isVoted = alreadyVoted && pickedId === c.playerId;
9565
- return /* @__PURE__ */ jsx88("li", { children: /* @__PURE__ */ jsxs76(
9669
+ return /* @__PURE__ */ jsx89("li", { children: /* @__PURE__ */ jsxs77(
9566
9670
  "button",
9567
9671
  {
9568
9672
  type: "button",
@@ -9571,24 +9675,24 @@ function FanMotmGame({
9571
9675
  disabled: alreadyVoted || submitting,
9572
9676
  onClick: () => handleVote(c.playerId),
9573
9677
  children: [
9574
- /* @__PURE__ */ jsx88(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
9575
- /* @__PURE__ */ jsx88("span", { className: "ss-g-motm-name", children: c.playerName }),
9576
- isVoted && /* @__PURE__ */ jsx88(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
9678
+ /* @__PURE__ */ jsx89(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
9679
+ /* @__PURE__ */ jsx89("span", { className: "ss-g-motm-name", children: c.playerName }),
9680
+ isVoted && /* @__PURE__ */ jsx89(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
9577
9681
  ]
9578
9682
  }
9579
9683
  ) }, c.playerId);
9580
9684
  }) }),
9581
- alreadyVoted && picked && /* @__PURE__ */ jsx88(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
9685
+ alreadyVoted && picked && /* @__PURE__ */ jsx89(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
9582
9686
  ] }),
9583
- /* @__PURE__ */ jsxs76(FooterBar, { children: [
9584
- !alreadyVoted && /* @__PURE__ */ jsx88("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
9585
- /* @__PURE__ */ jsx88("p", { className: "ss-g-motm-fun", children: t.forFun })
9687
+ /* @__PURE__ */ jsxs77(FooterBar, { children: [
9688
+ !alreadyVoted && /* @__PURE__ */ jsx89("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
9689
+ /* @__PURE__ */ jsx89("p", { className: "ss-g-motm-fun", children: t.forFun })
9586
9690
  ] })
9587
9691
  ] });
9588
9692
  }
9589
9693
 
9590
9694
  // src/components/GameScreenHost.tsx
9591
- import { jsx as jsx89 } from "react/jsx-runtime";
9695
+ import { jsx as jsx90 } from "react/jsx-runtime";
9592
9696
  var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
9593
9697
  "matchday-predictor",
9594
9698
  "starting-xi",
@@ -9612,7 +9716,7 @@ function GameScreenHost({
9612
9716
  ui
9613
9717
  }) {
9614
9718
  const { gameId, fixtureId, gameDay = "", lockAtUtc = null } = selected;
9615
- const [configJson, setConfigJson] = useState47(null);
9719
+ const [configJson, setConfigJson] = useState48(null);
9616
9720
  useEffect29(() => {
9617
9721
  setConfigJson(null);
9618
9722
  if (!conversation) return;
@@ -9664,7 +9768,7 @@ function GameScreenHost({
9664
9768
  function renderScreen() {
9665
9769
  switch (gameId) {
9666
9770
  case "mystery-tiger":
9667
- return /* @__PURE__ */ jsx89(
9771
+ return /* @__PURE__ */ jsx90(
9668
9772
  MysteryTigerGame,
9669
9773
  {
9670
9774
  ...sharedProps,
@@ -9672,7 +9776,7 @@ function GameScreenHost({
9672
9776
  }
9673
9777
  );
9674
9778
  case "higher-or-lower":
9675
- return /* @__PURE__ */ jsx89(
9779
+ return /* @__PURE__ */ jsx90(
9676
9780
  HigherOrLowerGame,
9677
9781
  {
9678
9782
  ...sharedProps,
@@ -9680,7 +9784,7 @@ function GameScreenHost({
9680
9784
  }
9681
9785
  );
9682
9786
  case "career-path":
9683
- return /* @__PURE__ */ jsx89(
9787
+ return /* @__PURE__ */ jsx90(
9684
9788
  CareerPathGame,
9685
9789
  {
9686
9790
  ...sharedProps,
@@ -9689,7 +9793,7 @@ function GameScreenHost({
9689
9793
  );
9690
9794
  case "beat-the-grid": {
9691
9795
  const btgConfig = safeParseConfig(configJson);
9692
- return /* @__PURE__ */ jsx89(
9796
+ return /* @__PURE__ */ jsx90(
9693
9797
  BeatTheGridGame,
9694
9798
  {
9695
9799
  ...sharedProps,
@@ -9699,7 +9803,7 @@ function GameScreenHost({
9699
9803
  );
9700
9804
  }
9701
9805
  case "guess-the-xi":
9702
- return /* @__PURE__ */ jsx89(
9806
+ return /* @__PURE__ */ jsx90(
9703
9807
  GuessTheXiGame,
9704
9808
  {
9705
9809
  ...sharedProps,
@@ -9707,7 +9811,7 @@ function GameScreenHost({
9707
9811
  }
9708
9812
  );
9709
9813
  case "daily-quiz":
9710
- return /* @__PURE__ */ jsx89(
9814
+ return /* @__PURE__ */ jsx90(
9711
9815
  DailyQuizGame,
9712
9816
  {
9713
9817
  ...sharedProps,
@@ -9715,7 +9819,7 @@ function GameScreenHost({
9715
9819
  }
9716
9820
  );
9717
9821
  case "matchday-predictor":
9718
- return /* @__PURE__ */ jsx89(
9822
+ return /* @__PURE__ */ jsx90(
9719
9823
  MatchdayPredictorGame,
9720
9824
  {
9721
9825
  ...sharedProps,
@@ -9723,7 +9827,7 @@ function GameScreenHost({
9723
9827
  }
9724
9828
  );
9725
9829
  case "starting-xi":
9726
- return /* @__PURE__ */ jsx89(
9830
+ return /* @__PURE__ */ jsx90(
9727
9831
  StartingXiGame,
9728
9832
  {
9729
9833
  ...sharedProps,
@@ -9731,7 +9835,7 @@ function GameScreenHost({
9731
9835
  }
9732
9836
  );
9733
9837
  case "stat-ladder":
9734
- return /* @__PURE__ */ jsx89(
9838
+ return /* @__PURE__ */ jsx90(
9735
9839
  StatLadderGame,
9736
9840
  {
9737
9841
  ...sharedProps,
@@ -9739,7 +9843,7 @@ function GameScreenHost({
9739
9843
  }
9740
9844
  );
9741
9845
  case "fan-motm":
9742
- return /* @__PURE__ */ jsx89(
9846
+ return /* @__PURE__ */ jsx90(
9743
9847
  FanMotmGame,
9744
9848
  {
9745
9849
  ...sharedProps,
@@ -9747,17 +9851,17 @@ function GameScreenHost({
9747
9851
  }
9748
9852
  );
9749
9853
  default:
9750
- return /* @__PURE__ */ jsx89("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx89(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
9854
+ return /* @__PURE__ */ jsx90("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx90(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
9751
9855
  }
9752
9856
  }
9753
- return /* @__PURE__ */ jsx89("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
9857
+ return /* @__PURE__ */ jsx90("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
9754
9858
  }
9755
9859
 
9756
9860
  // src/components/Leaderboard.tsx
9757
- import { useState as useState48 } from "react";
9861
+ import { useState as useState49 } from "react";
9758
9862
 
9759
9863
  // src/components/LeaderboardRow.tsx
9760
- import { jsx as jsx90, jsxs as jsxs77 } from "react/jsx-runtime";
9864
+ import { jsx as jsx91, jsxs as jsxs78 } from "react/jsx-runtime";
9761
9865
  function formatPoints(n) {
9762
9866
  return n.toLocaleString("en");
9763
9867
  }
@@ -9766,14 +9870,14 @@ function LeaderboardWeeklyRow({
9766
9870
  isMe
9767
9871
  }) {
9768
9872
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
9769
- return /* @__PURE__ */ jsxs77("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9770
- /* @__PURE__ */ jsxs77("span", { className: rankClass, children: [
9873
+ return /* @__PURE__ */ jsxs78("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9874
+ /* @__PURE__ */ jsxs78("span", { className: rankClass, children: [
9771
9875
  "#",
9772
9876
  row.rank
9773
9877
  ] }),
9774
- /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: row.handle }),
9775
- /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9776
- row.currentStreak > 0 && /* @__PURE__ */ jsxs77("span", { className: "ss-w-lb2-streak", children: [
9878
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
9879
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9880
+ row.currentStreak > 0 && /* @__PURE__ */ jsxs78("span", { className: "ss-w-lb2-streak", children: [
9777
9881
  "\u{1F525} ",
9778
9882
  row.currentStreak
9779
9883
  ] })
@@ -9784,18 +9888,18 @@ function LeaderboardAllTimeRow({
9784
9888
  isMe
9785
9889
  }) {
9786
9890
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
9787
- return /* @__PURE__ */ jsxs77("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9788
- /* @__PURE__ */ jsxs77("span", { className: rankClass, children: [
9891
+ return /* @__PURE__ */ jsxs78("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9892
+ /* @__PURE__ */ jsxs78("span", { className: rankClass, children: [
9789
9893
  "#",
9790
9894
  row.rank
9791
9895
  ] }),
9792
- /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: row.handle }),
9793
- /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9896
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
9897
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9794
9898
  ] });
9795
9899
  }
9796
9900
 
9797
9901
  // src/components/LeaderboardEmpty.tsx
9798
- import { jsx as jsx91, jsxs as jsxs78 } from "react/jsx-runtime";
9902
+ import { jsx as jsx92, jsxs as jsxs79 } from "react/jsx-runtime";
9799
9903
  function LeaderboardEmpty({
9800
9904
  segment,
9801
9905
  lastWeek,
@@ -9804,48 +9908,48 @@ function LeaderboardEmpty({
9804
9908
  ui
9805
9909
  }) {
9806
9910
  if (segment === "alltime") {
9807
- return /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
9808
- /* @__PURE__ */ jsx91("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9809
- /* @__PURE__ */ jsx91("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9911
+ return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
9912
+ /* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9913
+ /* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9810
9914
  ] });
9811
9915
  }
9812
9916
  const fresh = lastWeek != null;
9813
9917
  const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
9814
9918
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
9815
- return /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty", children: [
9816
- weeklyPrize && /* @__PURE__ */ jsxs78("div", { className: "ss-w-prize", children: [
9817
- /* @__PURE__ */ jsx91("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9818
- /* @__PURE__ */ jsx91("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx91("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9919
+ return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty", children: [
9920
+ weeklyPrize && /* @__PURE__ */ jsxs79("div", { className: "ss-w-prize", children: [
9921
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9922
+ /* @__PURE__ */ jsx92("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx92("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9819
9923
  ] }),
9820
- /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty-hero", children: [
9821
- /* @__PURE__ */ jsx91("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9822
- /* @__PURE__ */ jsx91("h4", { className: "ss-w-lb-empty-title", children: title }),
9823
- /* @__PURE__ */ jsx91("p", { className: "ss-w-lb-empty-body", children: body }),
9824
- onPlay && /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9924
+ /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty-hero", children: [
9925
+ /* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9926
+ /* @__PURE__ */ jsx92("h4", { className: "ss-w-lb-empty-title", children: title }),
9927
+ /* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: body }),
9928
+ onPlay && /* @__PURE__ */ jsx92("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9825
9929
  ] }),
9826
- fresh && lastWeek && /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-last", children: [
9827
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9828
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9829
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9830
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9930
+ fresh && lastWeek && /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-last", children: [
9931
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9932
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9933
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9934
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9831
9935
  ] })
9832
9936
  ] });
9833
9937
  }
9834
9938
 
9835
9939
  // src/components/Leaderboard.tsx
9836
- import { Fragment as Fragment21, jsx as jsx92, jsxs as jsxs79 } from "react/jsx-runtime";
9940
+ import { Fragment as Fragment22, jsx as jsx93, jsxs as jsxs80 } from "react/jsx-runtime";
9837
9941
  function Leaderboard({
9838
9942
  data,
9839
9943
  ui,
9840
9944
  onPlay
9841
9945
  }) {
9842
- const [segment, setSegment] = useState48("weekly");
9946
+ const [segment, setSegment] = useState49("weekly");
9843
9947
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
9844
9948
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
9845
9949
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
9846
- return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb2", children: [
9847
- /* @__PURE__ */ jsxs79("div", { className: "ss-w-seg", children: [
9848
- /* @__PURE__ */ jsx92(
9950
+ return /* @__PURE__ */ jsxs80("div", { className: "ss-w-lb2", children: [
9951
+ /* @__PURE__ */ jsxs80("div", { className: "ss-w-seg", children: [
9952
+ /* @__PURE__ */ jsx93(
9849
9953
  "button",
9850
9954
  {
9851
9955
  type: "button",
@@ -9855,7 +9959,7 @@ function Leaderboard({
9855
9959
  children: ui.leaderboardThisWeek
9856
9960
  }
9857
9961
  ),
9858
- /* @__PURE__ */ jsx92(
9962
+ /* @__PURE__ */ jsx93(
9859
9963
  "button",
9860
9964
  {
9861
9965
  type: "button",
@@ -9866,7 +9970,7 @@ function Leaderboard({
9866
9970
  }
9867
9971
  )
9868
9972
  ] }),
9869
- isEmpty ? /* @__PURE__ */ jsx92(
9973
+ isEmpty ? /* @__PURE__ */ jsx93(
9870
9974
  LeaderboardEmpty,
9871
9975
  {
9872
9976
  segment,
@@ -9875,15 +9979,15 @@ function Leaderboard({
9875
9979
  onPlay,
9876
9980
  ui
9877
9981
  }
9878
- ) : /* @__PURE__ */ jsxs79(Fragment21, { children: [
9879
- /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx92(
9982
+ ) : /* @__PURE__ */ jsxs80(Fragment22, { children: [
9983
+ /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx93(
9880
9984
  LeaderboardWeeklyRow,
9881
9985
  {
9882
9986
  row,
9883
9987
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
9884
9988
  },
9885
9989
  row.operatorUserId
9886
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx92(
9990
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx93(
9887
9991
  LeaderboardAllTimeRow,
9888
9992
  {
9889
9993
  row,
@@ -9891,18 +9995,18 @@ function Leaderboard({
9891
9995
  },
9892
9996
  row.operatorUserId
9893
9997
  )) }),
9894
- /* @__PURE__ */ jsx92("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9895
- myRow != null && (offBoard ? /* @__PURE__ */ jsx92("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb2-rows", children: [
9896
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx92(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
9897
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx92(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9998
+ /* @__PURE__ */ jsx93("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9999
+ myRow != null && (offBoard ? /* @__PURE__ */ jsx93("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs80("div", { className: "ss-w-lb2-rows", children: [
10000
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx93(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
10001
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx93(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9898
10002
  ] })),
9899
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx92("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
10003
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx93("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
9900
10004
  ] })
9901
10005
  ] });
9902
10006
  }
9903
10007
 
9904
10008
  // src/components/LeaderboardPanel.tsx
9905
- import { jsx as jsx93 } from "react/jsx-runtime";
10009
+ import { jsx as jsx94 } from "react/jsx-runtime";
9906
10010
  var EMPTY_PAYLOAD = {
9907
10011
  week: "",
9908
10012
  weeklyTop: [],
@@ -9913,9 +10017,9 @@ var EMPTY_PAYLOAD = {
9913
10017
  lastWeek: null
9914
10018
  };
9915
10019
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
9916
- if (!loggedIn) return /* @__PURE__ */ jsx93(GamesLoginWall, { ui });
9917
- if (data === null && loading) return /* @__PURE__ */ jsx93("div", { className: "ss-w-mon-list" });
9918
- return /* @__PURE__ */ jsx93("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx93(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
10020
+ if (!loggedIn) return /* @__PURE__ */ jsx94(GamesLoginWall, { ui });
10021
+ if (data === null && loading) return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list" });
10022
+ return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx94(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
9919
10023
  }
9920
10024
 
9921
10025
  // src/components/games/ui/fonts.ts
@@ -9932,7 +10036,7 @@ function ensureGamesFonts(doc = document) {
9932
10036
  }
9933
10037
 
9934
10038
  // src/components/GamesPanel.tsx
9935
- import { jsx as jsx94, jsxs as jsxs80 } from "react/jsx-runtime";
10039
+ import { jsx as jsx95, jsxs as jsxs81 } from "react/jsx-runtime";
9936
10040
  function GamesPanel({
9937
10041
  loggedIn,
9938
10042
  games,
@@ -9942,14 +10046,14 @@ function GamesPanel({
9942
10046
  leaderboardLoading,
9943
10047
  refreshHub
9944
10048
  }) {
9945
- const [selected, setSelected] = useState49(null);
9946
- const [segment, setSegment] = useState49("play");
10049
+ const [selected, setSelected] = useState50(null);
10050
+ const [segment, setSegment] = useState50("play");
9947
10051
  useEffect30(() => {
9948
10052
  ensureGamesFonts();
9949
10053
  }, []);
9950
- if (!loggedIn) return /* @__PURE__ */ jsx94(GamesLoginWall, { ui });
10054
+ if (!loggedIn) return /* @__PURE__ */ jsx95(GamesLoginWall, { ui });
9951
10055
  if (selected !== null) {
9952
- return /* @__PURE__ */ jsx94("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx94(
10056
+ return /* @__PURE__ */ jsx95("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx95(
9953
10057
  GameScreenHost,
9954
10058
  {
9955
10059
  selected,
@@ -9963,9 +10067,9 @@ function GamesPanel({
9963
10067
  }
9964
10068
  ) });
9965
10069
  }
9966
- return /* @__PURE__ */ jsxs80("div", { className: "ss-g-hub-wrap", lang: ui.games.lang, children: [
9967
- /* @__PURE__ */ jsxs80("div", { className: "ss-w-seg", children: [
9968
- /* @__PURE__ */ jsx94(
10070
+ return /* @__PURE__ */ jsxs81("div", { className: "ss-g-hub-wrap", lang: ui.games.lang, children: [
10071
+ /* @__PURE__ */ jsxs81("div", { className: "ss-w-seg", children: [
10072
+ /* @__PURE__ */ jsx95(
9969
10073
  "button",
9970
10074
  {
9971
10075
  type: "button",
@@ -9975,7 +10079,7 @@ function GamesPanel({
9975
10079
  children: ui.gamesPlaySegment
9976
10080
  }
9977
10081
  ),
9978
- /* @__PURE__ */ jsx94(
10082
+ /* @__PURE__ */ jsx95(
9979
10083
  "button",
9980
10084
  {
9981
10085
  type: "button",
@@ -9986,7 +10090,7 @@ function GamesPanel({
9986
10090
  }
9987
10091
  )
9988
10092
  ] }),
9989
- segment === "play" ? /* @__PURE__ */ jsx94("div", { "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx94(
10093
+ segment === "play" ? /* @__PURE__ */ jsx95("div", { "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx95(
9990
10094
  GamesHub,
9991
10095
  {
9992
10096
  games,
@@ -9994,7 +10098,7 @@ function GamesPanel({
9994
10098
  myWeeklyRow: leaderboard?.myWeeklyRow ?? null,
9995
10099
  ui
9996
10100
  }
9997
- ) }) : /* @__PURE__ */ jsx94(
10101
+ ) }) : /* @__PURE__ */ jsx95(
9998
10102
  LeaderboardPanel,
9999
10103
  {
10000
10104
  loggedIn,
@@ -10008,7 +10112,7 @@ function GamesPanel({
10008
10112
  }
10009
10113
 
10010
10114
  // src/components/Fixtures.tsx
10011
- import { jsx as jsx95, jsxs as jsxs81 } from "react/jsx-runtime";
10115
+ import { jsx as jsx96, jsxs as jsxs82 } from "react/jsx-runtime";
10012
10116
  function groupByRound(fixtures) {
10013
10117
  const groups = [];
10014
10118
  for (const fx of fixtures) {
@@ -10020,31 +10124,31 @@ function groupByRound(fixtures) {
10020
10124
  }
10021
10125
  function Fixtures({ fixtures, loading, ui }) {
10022
10126
  if (fixtures.length === 0) {
10023
- if (loading) return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-list" });
10024
- return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-empty", children: ui.clubFixturesEmpty });
10127
+ if (loading) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list" });
10128
+ return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-empty", children: ui.clubFixturesEmpty });
10025
10129
  }
10026
- return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-list", children: groupByRound(fixtures).map((group, gi) => /* @__PURE__ */ jsxs81("div", { children: [
10027
- group.round && /* @__PURE__ */ jsx95("div", { className: "ss-w-club-eyebrow", children: group.round }),
10130
+ return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list", children: groupByRound(fixtures).map((group, gi) => /* @__PURE__ */ jsxs82("div", { children: [
10131
+ group.round && /* @__PURE__ */ jsx96("div", { className: "ss-w-club-eyebrow", children: group.round }),
10028
10132
  group.items.map((fx) => {
10029
10133
  const played = fx.homeScore !== null && fx.awayScore !== null;
10030
10134
  const kickoff = fx.matchDateTime ? ui.bettingKickoff(fx.matchDateTime) : null;
10031
- return /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon", children: [
10032
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon-top", children: [
10033
- fx.competitionName && /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-comp", children: fx.competitionName }),
10034
- !played && kickoff && /* @__PURE__ */ jsxs81("span", { className: "ss-w-mon-pill", children: [
10135
+ return /* @__PURE__ */ jsxs82("div", { className: "ss-w-mon", children: [
10136
+ /* @__PURE__ */ jsxs82("div", { className: "ss-w-mon-top", children: [
10137
+ fx.competitionName && /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-comp", children: fx.competitionName }),
10138
+ !played && kickoff && /* @__PURE__ */ jsxs82("span", { className: "ss-w-mon-pill", children: [
10035
10139
  kickoff.dayLabel,
10036
10140
  " \xB7 ",
10037
10141
  kickoff.time
10038
10142
  ] })
10039
10143
  ] }),
10040
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon-main", children: [
10041
- /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-side", children: /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-name", children: fx.homeTeamName }) }),
10042
- played ? /* @__PURE__ */ jsxs81("span", { className: "ss-w-mon-score", children: [
10144
+ /* @__PURE__ */ jsxs82("div", { className: "ss-w-mon-main", children: [
10145
+ /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-side", children: /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-name", children: fx.homeTeamName }) }),
10146
+ played ? /* @__PURE__ */ jsxs82("span", { className: "ss-w-mon-score", children: [
10043
10147
  fx.homeScore,
10044
- /* @__PURE__ */ jsx95("i", { children: "-" }),
10148
+ /* @__PURE__ */ jsx96("i", { children: "-" }),
10045
10149
  fx.awayScore
10046
- ] }) : /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-vs", children: "vs" }),
10047
- /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-name", children: fx.awayTeamName }) })
10150
+ ] }) : /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-vs", children: "vs" }),
10151
+ /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-name", children: fx.awayTeamName }) })
10048
10152
  ] })
10049
10153
  ] }, fx.id);
10050
10154
  })
@@ -10052,7 +10156,7 @@ function Fixtures({ fixtures, loading, ui }) {
10052
10156
  }
10053
10157
 
10054
10158
  // src/components/Standings.tsx
10055
- import { jsx as jsx96, jsxs as jsxs82 } from "react/jsx-runtime";
10159
+ import { jsx as jsx97, jsxs as jsxs83 } from "react/jsx-runtime";
10056
10160
  function groupByTable(rows) {
10057
10161
  const groups = [];
10058
10162
  for (const row of rows) {
@@ -10063,30 +10167,30 @@ function groupByTable(rows) {
10063
10167
  return groups;
10064
10168
  }
10065
10169
  function Standings({ standings, loading, ui }) {
10066
- if (standings === null && loading) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list" });
10067
- if (standings === null || standings.length === 0) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-empty", children: ui.clubStandingsEmpty });
10068
- return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list", children: groupByTable(standings).map((group, gi) => /* @__PURE__ */ jsxs82("div", { className: "ss-w-table-wrap", children: [
10069
- group.table && /* @__PURE__ */ jsx96("div", { className: "ss-w-club-eyebrow", children: group.table }),
10070
- /* @__PURE__ */ jsxs82("table", { className: "ss-w-md-table", children: [
10071
- /* @__PURE__ */ jsx96("thead", { children: /* @__PURE__ */ jsxs82("tr", { children: [
10072
- /* @__PURE__ */ jsx96("th", { children: "#" }),
10073
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColClub }),
10074
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColPlayed }),
10075
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColWon }),
10076
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColDrawn }),
10077
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColLost }),
10078
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColGoalDiff }),
10079
- /* @__PURE__ */ jsx96("th", { children: ui.standingsColPoints })
10170
+ if (standings === null && loading) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list" });
10171
+ if (standings === null || standings.length === 0) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-empty", children: ui.clubStandingsEmpty });
10172
+ return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list", children: groupByTable(standings).map((group, gi) => /* @__PURE__ */ jsxs83("div", { className: "ss-w-table-wrap", children: [
10173
+ group.table && /* @__PURE__ */ jsx97("div", { className: "ss-w-club-eyebrow", children: group.table }),
10174
+ /* @__PURE__ */ jsxs83("table", { className: "ss-w-md-table", children: [
10175
+ /* @__PURE__ */ jsx97("thead", { children: /* @__PURE__ */ jsxs83("tr", { children: [
10176
+ /* @__PURE__ */ jsx97("th", { children: "#" }),
10177
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColClub }),
10178
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColPlayed }),
10179
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColWon }),
10180
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColDrawn }),
10181
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColLost }),
10182
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColGoalDiff }),
10183
+ /* @__PURE__ */ jsx97("th", { children: ui.standingsColPoints })
10080
10184
  ] }) }),
10081
- /* @__PURE__ */ jsx96("tbody", { children: group.items.map((row) => /* @__PURE__ */ jsxs82("tr", { children: [
10082
- /* @__PURE__ */ jsx96("td", { children: row.position }),
10083
- /* @__PURE__ */ jsx96("td", { children: row.teamName }),
10084
- /* @__PURE__ */ jsx96("td", { children: row.playedGames }),
10085
- /* @__PURE__ */ jsx96("td", { children: row.wins }),
10086
- /* @__PURE__ */ jsx96("td", { children: row.draws }),
10087
- /* @__PURE__ */ jsx96("td", { children: row.losses }),
10088
- /* @__PURE__ */ jsx96("td", { children: row.goalDifference }),
10089
- /* @__PURE__ */ jsx96("td", { children: row.points })
10185
+ /* @__PURE__ */ jsx97("tbody", { children: group.items.map((row) => /* @__PURE__ */ jsxs83("tr", { children: [
10186
+ /* @__PURE__ */ jsx97("td", { children: row.position }),
10187
+ /* @__PURE__ */ jsx97("td", { children: row.teamName }),
10188
+ /* @__PURE__ */ jsx97("td", { children: row.playedGames }),
10189
+ /* @__PURE__ */ jsx97("td", { children: row.wins }),
10190
+ /* @__PURE__ */ jsx97("td", { children: row.draws }),
10191
+ /* @__PURE__ */ jsx97("td", { children: row.losses }),
10192
+ /* @__PURE__ */ jsx97("td", { children: row.goalDifference }),
10193
+ /* @__PURE__ */ jsx97("td", { children: row.points })
10090
10194
  ] }, row.teamId)) })
10091
10195
  ] })
10092
10196
  ] }, `${gi}-${group.table ?? "none"}`)) });
@@ -10144,7 +10248,7 @@ function statsEyebrow(ui, season, competition, matches) {
10144
10248
  }
10145
10249
 
10146
10250
  // src/components/SquadStats.tsx
10147
- import { jsx as jsx97, jsxs as jsxs83 } from "react/jsx-runtime";
10251
+ import { jsx as jsx98, jsxs as jsxs84 } from "react/jsx-runtime";
10148
10252
  function leader(stats, pick) {
10149
10253
  let best = null;
10150
10254
  for (const p of stats) {
@@ -10158,53 +10262,53 @@ function ratingClass(rating) {
10158
10262
  return Number(rating.toFixed(1)) >= 7 ? "ss-w-sq-c36 ss-w-sq-rtg ss-w-pos-ink" : "ss-w-sq-c36 ss-w-sq-rtg";
10159
10263
  }
10160
10264
  function SquadStats({ stats, loading, ui, onSelectPlayer }) {
10161
- if (stats === null && loading) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list" });
10162
- if (stats === null || stats.length === 0) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-empty", children: ui.clubSquadStatsEmpty });
10265
+ if (stats === null && loading) return /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-list" });
10266
+ if (stats === null || stats.length === 0) return /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-empty", children: ui.clubSquadStatsEmpty });
10163
10267
  const scorer = leader(stats, (p) => p.goals);
10164
10268
  const assister = leader(stats, (p) => p.assists);
10165
10269
  const footer = [
10166
10270
  scorer && ui.squadTopScorer(scorer.playerName, scorer.goals),
10167
10271
  assister && ui.squadTopAssists(assister.playerName, assister.assists)
10168
10272
  ].filter((part) => !!part).join(" \xB7 ");
10169
- return /* @__PURE__ */ jsxs83("div", { className: "ss-w-mon-list ss-w-sq-stats", children: [
10170
- /* @__PURE__ */ jsxs83("div", { className: "ss-w-sq-card", children: [
10171
- /* @__PURE__ */ jsxs83("div", { className: "ss-w-sq-row ss-w-sq-head", "aria-hidden": "true", children: [
10172
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-name" }),
10173
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-pos", children: ui.statHeadPos }),
10174
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c30", children: ui.statColApps }),
10175
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c36", children: ui.statHeadMins }),
10176
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20", children: ui.statHeadGoals }),
10177
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20", children: ui.statHeadAssists }),
10178
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadYellow }),
10179
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadRed }),
10180
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c36", children: ui.statHeadRating })
10273
+ return /* @__PURE__ */ jsxs84("div", { className: "ss-w-mon-list ss-w-sq-stats", children: [
10274
+ /* @__PURE__ */ jsxs84("div", { className: "ss-w-sq-card", children: [
10275
+ /* @__PURE__ */ jsxs84("div", { className: "ss-w-sq-row ss-w-sq-head", "aria-hidden": "true", children: [
10276
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-name" }),
10277
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-pos", children: ui.statHeadPos }),
10278
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c30", children: ui.statColApps }),
10279
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: ui.statHeadMins }),
10280
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: ui.statHeadGoals }),
10281
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: ui.statHeadAssists }),
10282
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadYellow }),
10283
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadRed }),
10284
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: ui.statHeadRating })
10181
10285
  ] }),
10182
- stats.map((p) => /* @__PURE__ */ jsxs83("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
10183
- /* @__PURE__ */ jsxs83("span", { className: "ss-w-sq-player", children: [
10184
- p.jerseyNumber !== null && /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-badge", children: p.jerseyNumber }),
10185
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-name ss-w-sq-name-1", children: p.playerName })
10286
+ stats.map((p) => /* @__PURE__ */ jsxs84("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
10287
+ /* @__PURE__ */ jsxs84("span", { className: "ss-w-sq-player", children: [
10288
+ p.jerseyNumber !== null && /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-badge", children: p.jerseyNumber }),
10289
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-name ss-w-sq-name-1", children: p.playerName })
10186
10290
  ] }),
10187
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-pos", children: positionShort(p.positionCode, p.positionName) }),
10188
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c30", children: p.appearances }),
10189
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c36", children: p.minutesPlayed }),
10190
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20", children: p.goals }),
10191
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20", children: p.assists }),
10192
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.yellowCards }),
10193
- /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.redCards }),
10194
- /* @__PURE__ */ jsx97("span", { className: ratingClass(p.averageRating), children: p.averageRating === null ? "\u2013" : p.averageRating.toFixed(1) })
10291
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-pos", children: positionShort(p.positionCode, p.positionName) }),
10292
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c30", children: p.appearances }),
10293
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: p.minutesPlayed }),
10294
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: p.goals }),
10295
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: p.assists }),
10296
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.yellowCards }),
10297
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.redCards }),
10298
+ /* @__PURE__ */ jsx98("span", { className: ratingClass(p.averageRating), children: p.averageRating === null ? "\u2013" : p.averageRating.toFixed(1) })
10195
10299
  ] }, p.playerId))
10196
10300
  ] }),
10197
- footer !== "" && /* @__PURE__ */ jsx97("div", { className: "ss-w-sq-foot", children: footer })
10301
+ footer !== "" && /* @__PURE__ */ jsx98("div", { className: "ss-w-sq-foot", children: footer })
10198
10302
  ] });
10199
10303
  }
10200
10304
 
10201
10305
  // src/components/Squad.tsx
10202
- import { Fragment as Fragment22, jsx as jsx98, jsxs as jsxs84 } from "react/jsx-runtime";
10306
+ import { Fragment as Fragment23, jsx as jsx99, jsxs as jsxs85 } from "react/jsx-runtime";
10203
10307
  function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, seasonName = null, competitionName = null, matchesPlayed = null, onSelectPlayer }) {
10204
10308
  const eyebrow = view === "stats" ? statsEyebrow(ui, seasonName, competitionName, matchesPlayed) : null;
10205
- const toggle = /* @__PURE__ */ jsxs84("div", { className: "ss-w-sq-bar", children: [
10206
- eyebrow !== null && /* @__PURE__ */ jsx98("div", { className: "ss-w-sq-eyebrow", children: eyebrow }),
10207
- /* @__PURE__ */ jsx98("div", { className: "ss-w-sq-seg", role: "group", children: ["roster", "stats"].map((v) => /* @__PURE__ */ jsx98(
10309
+ const toggle = /* @__PURE__ */ jsxs85("div", { className: "ss-w-sq-bar", children: [
10310
+ eyebrow !== null && /* @__PURE__ */ jsx99("div", { className: "ss-w-sq-eyebrow", children: eyebrow }),
10311
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-sq-seg", role: "group", children: ["roster", "stats"].map((v) => /* @__PURE__ */ jsx99(
10208
10312
  "button",
10209
10313
  {
10210
10314
  type: "button",
@@ -10219,45 +10323,45 @@ function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, se
10219
10323
  )) })
10220
10324
  ] });
10221
10325
  if (view === "stats") {
10222
- return /* @__PURE__ */ jsxs84(Fragment22, { children: [
10326
+ return /* @__PURE__ */ jsxs85(Fragment23, { children: [
10223
10327
  toggle,
10224
- /* @__PURE__ */ jsx98(SquadStats, { stats, loading: statsLoading, ui, onSelectPlayer })
10328
+ /* @__PURE__ */ jsx99(SquadStats, { stats, loading: statsLoading, ui, onSelectPlayer })
10225
10329
  ] });
10226
10330
  }
10227
- if (squad === null && loading) return /* @__PURE__ */ jsxs84(Fragment22, { children: [
10331
+ if (squad === null && loading) return /* @__PURE__ */ jsxs85(Fragment23, { children: [
10228
10332
  toggle,
10229
- /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-list" })
10333
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-mon-list" })
10230
10334
  ] });
10231
- if (squad === null || squad.length === 0) return /* @__PURE__ */ jsxs84(Fragment22, { children: [
10335
+ if (squad === null || squad.length === 0) return /* @__PURE__ */ jsxs85(Fragment23, { children: [
10232
10336
  toggle,
10233
- /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-empty", children: ui.clubSquadEmpty })
10337
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-mon-empty", children: ui.clubSquadEmpty })
10234
10338
  ] });
10235
- return /* @__PURE__ */ jsxs84(Fragment22, { children: [
10339
+ return /* @__PURE__ */ jsxs85(Fragment23, { children: [
10236
10340
  toggle,
10237
- /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-list", children: groupByPosition(squad).map((group, gi) => /* @__PURE__ */ jsxs84("div", { children: [
10238
- group.positionName && /* @__PURE__ */ jsx98("div", { className: "ss-w-club-eyebrow", children: positionLabel(ui, group.positionName) }),
10239
- group.items.map((p) => /* @__PURE__ */ jsxs84("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
10240
- /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-num", children: p.jerseyNumber ?? "" }),
10241
- /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-name", children: p.playerName })
10341
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-mon-list", children: groupByPosition(squad).map((group, gi) => /* @__PURE__ */ jsxs85("div", { children: [
10342
+ group.positionName && /* @__PURE__ */ jsx99("div", { className: "ss-w-club-eyebrow", children: positionLabel(ui, group.positionName) }),
10343
+ group.items.map((p) => /* @__PURE__ */ jsxs85("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
10344
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-sq-num", children: p.jerseyNumber ?? "" }),
10345
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-sq-name", children: p.playerName })
10242
10346
  ] }, p.playerId))
10243
10347
  ] }, `${gi}-${group.positionName ?? "none"}`)) })
10244
10348
  ] });
10245
10349
  }
10246
10350
 
10247
10351
  // src/components/PlayerPhoto.tsx
10248
- import { useState as useState50 } from "react";
10249
- import { jsx as jsx99 } from "react/jsx-runtime";
10352
+ import { useState as useState51 } from "react";
10353
+ import { jsx as jsx100 } from "react/jsx-runtime";
10250
10354
  function PlayerPhoto({ photoUrl, jerseyNumber, size }) {
10251
- const [failed, setFailed] = useState50(false);
10355
+ const [failed, setFailed] = useState51(false);
10252
10356
  const box = { width: size, height: size };
10253
10357
  if (photoUrl && !failed) {
10254
- return /* @__PURE__ */ jsx99("img", { className: "ss-w-pd-photo", style: box, src: photoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
10358
+ return /* @__PURE__ */ jsx100("img", { className: "ss-w-pd-photo", style: box, src: photoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
10255
10359
  }
10256
- return /* @__PURE__ */ jsx99("span", { className: "ss-w-pd-photo ss-w-pd-avatar", style: { ...box, fontSize: Math.round(size * 0.35) }, "aria-hidden": "true", children: jerseyNumber ?? "" });
10360
+ return /* @__PURE__ */ jsx100("span", { className: "ss-w-pd-photo ss-w-pd-avatar", style: { ...box, fontSize: Math.round(size * 0.35) }, "aria-hidden": "true", children: jerseyNumber ?? "" });
10257
10361
  }
10258
10362
 
10259
10363
  // src/components/MiniPitch.tsx
10260
- import { jsx as jsx100 } from "react/jsx-runtime";
10364
+ import { jsx as jsx101 } from "react/jsx-runtime";
10261
10365
  var SPOT = {
10262
10366
  GK: [50, 90],
10263
10367
  CB: [50, 75],
@@ -10279,12 +10383,12 @@ var SPOT = {
10279
10383
  function MiniPitch({ positionCode }) {
10280
10384
  const spot = SPOT[positionCode?.trim().toUpperCase() ?? ""];
10281
10385
  if (spot === void 0) return null;
10282
- return /* @__PURE__ */ jsx100("div", { className: "ss-w-pd-pitch", "aria-hidden": "true", children: /* @__PURE__ */ jsx100("div", { className: "ss-w-pd-pitch-dot", style: { left: `${spot[0]}%`, top: `${spot[1]}%` } }) });
10386
+ return /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-pitch", "aria-hidden": "true", children: /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-pitch-dot", style: { left: `${spot[0]}%`, top: `${spot[1]}%` } }) });
10283
10387
  }
10284
10388
 
10285
10389
  // src/components/PerformanceBars.tsx
10286
- import { useState as useState51 } from "react";
10287
- import { jsx as jsx101, jsxs as jsxs85 } from "react/jsx-runtime";
10390
+ import { useState as useState52 } from "react";
10391
+ import { jsx as jsx102, jsxs as jsxs86 } from "react/jsx-runtime";
10288
10392
  var GROUPS = ["shooting", "passing", "possession", "defending"];
10289
10393
  function finite3(v) {
10290
10394
  return typeof v === "number" && Number.isFinite(v) ? v : null;
@@ -10329,40 +10433,40 @@ function unrankedLine(ui, reason) {
10329
10433
  }
10330
10434
  }
10331
10435
  function PerformanceBars({ performance, competitionName, strings }) {
10332
- const [mode, setMode] = useState51("total");
10436
+ const [mode, setMode] = useState52("total");
10333
10437
  const labelled = performance.metrics.filter((m) => Object.prototype.hasOwnProperty.call(strings.perfMetric, m.key));
10334
10438
  if (!labelled.some((m) => valueOf(m, "total") !== null || valueOf(m, "per90") !== null)) return null;
10335
10439
  const subtitle = !performance.ranked ? unrankedLine(strings, performance.unrankedReason) : competitionName ? strings.perfRankedAgainst(competitionName, performance.positionGroup) : null;
10336
10440
  const cards = GROUPS.map((g) => {
10337
10441
  const rows = labelled.filter((m) => m.group === g && valueOf(m, mode) !== null);
10338
10442
  if (rows.length === 0) return null;
10339
- return /* @__PURE__ */ jsxs85("div", { className: "ss-w-pd-card ss-w-pd-perf-card", children: [
10340
- /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-perf-group", children: groupTitle(strings, g) }),
10443
+ return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-card ss-w-pd-perf-card", children: [
10444
+ /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-group", children: groupTitle(strings, g) }),
10341
10445
  rows.map((m) => {
10342
10446
  const v = valueOf(m, mode);
10343
10447
  const rank = performance.ranked ? rankOf(m, mode) : null;
10344
- return /* @__PURE__ */ jsxs85("div", { className: "ss-w-pd-bar-row", children: [
10345
- /* @__PURE__ */ jsxs85("div", { className: "ss-w-pd-bar-top", children: [
10346
- /* @__PURE__ */ jsx101("span", { className: "ss-w-pd-bar-label", children: strings.perfMetric[m.key] }),
10347
- /* @__PURE__ */ jsx101("span", { className: "ss-w-pd-bar-value", children: format(m, v, mode) })
10448
+ return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bar-row", children: [
10449
+ /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bar-top", children: [
10450
+ /* @__PURE__ */ jsx102("span", { className: "ss-w-pd-bar-label", children: strings.perfMetric[m.key] }),
10451
+ /* @__PURE__ */ jsx102("span", { className: "ss-w-pd-bar-value", children: format(m, v, mode) })
10348
10452
  ] }),
10349
- rank !== null && /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-track", children: /* @__PURE__ */ jsx101("div", { className: `ss-w-pd-fill ss-w-pd-fill--${band(rank)}`, style: { width: `${rank}%` } }) })
10453
+ rank !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-track", children: /* @__PURE__ */ jsx102("div", { className: `ss-w-pd-fill ss-w-pd-fill--${band(rank)}`, style: { width: `${rank}%` } }) })
10350
10454
  ] }, m.key);
10351
10455
  })
10352
10456
  ] }, g);
10353
10457
  });
10354
- return /* @__PURE__ */ jsxs85("div", { children: [
10355
- /* @__PURE__ */ jsxs85("div", { className: "ss-w-pd-perf-head", children: [
10356
- /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-eyebrow", children: strings.perfTitle }),
10357
- /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-seg", role: "group", children: ["total", "per90"].map((m) => /* @__PURE__ */ jsx101("button", { type: "button", className: "ss-w-pd-seg-btn", "aria-pressed": mode === m, onClick: () => setMode(m), children: m === "total" ? strings.perfTotal : strings.perfPer90 }, m)) })
10458
+ return /* @__PURE__ */ jsxs86("div", { children: [
10459
+ /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-perf-head", children: [
10460
+ /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-eyebrow", children: strings.perfTitle }),
10461
+ /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-seg", role: "group", children: ["total", "per90"].map((m) => /* @__PURE__ */ jsx102("button", { type: "button", className: "ss-w-pd-seg-btn", "aria-pressed": mode === m, onClick: () => setMode(m), children: m === "total" ? strings.perfTotal : strings.perfPer90 }, m)) })
10358
10462
  ] }),
10359
- subtitle !== null && /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-perf-sub", children: subtitle }),
10360
- /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-perf-cards", children: cards })
10463
+ subtitle !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-sub", children: subtitle }),
10464
+ /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-cards", children: cards })
10361
10465
  ] });
10362
10466
  }
10363
10467
 
10364
10468
  // src/components/PlayerDetail.tsx
10365
- import { Fragment as Fragment23, jsx as jsx102, jsxs as jsxs86 } from "react/jsx-runtime";
10469
+ import { Fragment as Fragment24, jsx as jsx103, jsxs as jsxs87 } from "react/jsx-runtime";
10366
10470
  var DASH = "\u2014";
10367
10471
  function ageFrom(dobMs) {
10368
10472
  if (dobMs === null) return DASH;
@@ -10382,16 +10486,16 @@ function ratingTone(rounded) {
10382
10486
  return "neg";
10383
10487
  }
10384
10488
  function Bio({ label, value }) {
10385
- return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bio-item", children: [
10386
- /* @__PURE__ */ jsx102("span", { className: "ss-w-pd-faint", children: label }),
10489
+ return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-bio-item", children: [
10490
+ /* @__PURE__ */ jsx103("span", { className: "ss-w-pd-faint", children: label }),
10387
10491
  " ",
10388
- /* @__PURE__ */ jsx102("span", { children: value })
10492
+ /* @__PURE__ */ jsx103("span", { children: value })
10389
10493
  ] });
10390
10494
  }
10391
10495
  function Tile({ label, value, pos }) {
10392
- return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-tile", children: [
10393
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-tile-label", children: label }),
10394
- /* @__PURE__ */ jsx102("div", { className: pos ? "ss-w-pd-tile-value ss-w-pd-pos-ink" : "ss-w-pd-tile-value", children: value })
10496
+ return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-tile", children: [
10497
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-tile-label", children: label }),
10498
+ /* @__PURE__ */ jsx103("div", { className: pos ? "ss-w-pd-tile-value ss-w-pd-pos-ink" : "ss-w-pd-tile-value", children: value })
10395
10499
  ] });
10396
10500
  }
10397
10501
  function AvailabilityCard({ ui, next, availability }) {
@@ -10407,12 +10511,12 @@ function AvailabilityCard({ ui, next, availability }) {
10407
10511
  pill = availability.status === "injured" ? { text: ui.availabilityInjured, tone: "neg" } : availability.status === "suspended" ? { text: ui.availabilitySuspended, tone: "warn" } : { text: ui.availabilityUnavailable, tone: "warn" };
10408
10512
  }
10409
10513
  }
10410
- return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-card ss-w-pd-avail", children: [
10411
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-avail-text", children: [
10412
- next !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-avail-next", children: ui.availabilityNext(next.opponentName, next.isHome, validMs(next.kickoffUnixMs)) }),
10413
- note !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-avail-note", children: note })
10514
+ return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-card ss-w-pd-avail", children: [
10515
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-avail-text", children: [
10516
+ next !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-avail-next", children: ui.availabilityNext(next.opponentName, next.isHome, validMs(next.kickoffUnixMs)) }),
10517
+ note !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-avail-note", children: note })
10414
10518
  ] }),
10415
- pill !== null && /* @__PURE__ */ jsx102("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pill.tone}`, children: pill.text })
10519
+ pill !== null && /* @__PURE__ */ jsx103("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pill.tone}`, children: pill.text })
10416
10520
  ] });
10417
10521
  }
10418
10522
  function MatchRow({ ui, row }) {
@@ -10426,28 +10530,28 @@ function MatchRow({ ui, row }) {
10426
10530
  const sub = [`${ui.resultLetter[row.result]} ${row.goalsFor}\u2013${row.goalsAgainst}`, `${row.minutes}\u2032`, ...extras].join(" \xB7 ");
10427
10531
  const rating = typeof row.rating === "number" && Number.isFinite(row.rating) ? Math.round(row.rating * 10) / 10 : null;
10428
10532
  const pillTone = row.result === "W" ? "pos" : row.result === "L" ? "neg" : "draw";
10429
- return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-match", children: [
10430
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-match-date", children: date === null ? "" : ui.logShortDate(date) }),
10431
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-match-main", children: [
10432
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-match-opp", children: ui.matchLogOpponent(row.opponentName, row.isHome) }),
10433
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-match-sub", children: sub })
10533
+ return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-match", children: [
10534
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-date", children: date === null ? "" : ui.logShortDate(date) }),
10535
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-match-main", children: [
10536
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-opp", children: ui.matchLogOpponent(row.opponentName, row.isHome) }),
10537
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-sub", children: sub })
10434
10538
  ] }),
10435
- /* @__PURE__ */ jsx102("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pillTone}`, children: ui.resultLetter[row.result] }),
10436
- rating === null ? /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-chip-empty" }) : /* @__PURE__ */ jsx102("div", { className: `ss-w-pd-chip ss-w-pd-chip--${ratingTone(rating)}`, children: rating.toFixed(1) })
10539
+ /* @__PURE__ */ jsx103("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pillTone}`, children: ui.resultLetter[row.result] }),
10540
+ rating === null ? /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-chip-empty" }) : /* @__PURE__ */ jsx103("div", { className: `ss-w-pd-chip ss-w-pd-chip--${ratingTone(rating)}`, children: rating.toFixed(1) })
10437
10541
  ] });
10438
10542
  }
10439
10543
  function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
10440
- const back = /* @__PURE__ */ jsxs86("button", { type: "button", className: "ss-w-pd-back", onClick: onClose, children: [
10441
- /* @__PURE__ */ jsx102("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx102("path", { d: "M15 18l-6-6 6-6" }) }),
10544
+ const back = /* @__PURE__ */ jsxs87("button", { type: "button", className: "ss-w-pd-back", onClick: onClose, children: [
10545
+ /* @__PURE__ */ jsx103("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx103("path", { d: "M15 18l-6-6 6-6" }) }),
10442
10546
  ui.clubPlayerBack
10443
10547
  ] });
10444
10548
  if (detail === null) {
10445
- return loading ? /* @__PURE__ */ jsxs86(Fragment23, { children: [
10446
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-bar", children: back }),
10447
- /* @__PURE__ */ jsx102("div", { className: "ss-w-mon-list" })
10448
- ] }) : /* @__PURE__ */ jsxs86(Fragment23, { children: [
10449
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-bar", children: back }),
10450
- /* @__PURE__ */ jsx102("div", { className: "ss-w-mon-empty", children: ui.clubPlayerDetailEmpty })
10549
+ return loading ? /* @__PURE__ */ jsxs87(Fragment24, { children: [
10550
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
10551
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-mon-list" })
10552
+ ] }) : /* @__PURE__ */ jsxs87(Fragment24, { children: [
10553
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
10554
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-mon-empty", children: ui.clubPlayerDetailEmpty })
10451
10555
  ] });
10452
10556
  }
10453
10557
  const s = detail.seasonStats;
@@ -10460,41 +10564,41 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
10460
10564
  const next = detail.nextFixture ?? null;
10461
10565
  const availability = detail.availability ?? null;
10462
10566
  const log = detail.matchLog ?? [];
10463
- return /* @__PURE__ */ jsxs86(Fragment23, { children: [
10464
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-bar", children: back }),
10465
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-mon-list ss-w-pd-list", children: [
10466
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-card ss-w-pd-profile", children: [
10467
- /* @__PURE__ */ jsx102(PlayerPhoto, { photoUrl: detail.photoUrl, jerseyNumber: detail.jerseyNumber, size: 52 }, detail.photoUrl ?? ""),
10468
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-profile-main", children: [
10469
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-name", children: detail.playerName }),
10470
- subLine !== "" && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-sub", children: subLine }),
10471
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bio", children: [
10472
- /* @__PURE__ */ jsx102(Bio, { label: ui.detailAge, value: ageFrom(detail.dateOfBirthUnixMs) }),
10473
- /* @__PURE__ */ jsx102(Bio, { label: ui.detailHeight, value: detail.heightCm === null ? DASH : `${detail.heightCm} cm` }),
10474
- foot !== null && /* @__PURE__ */ jsx102(Bio, { label: ui.detailFoot, value: foot }),
10475
- /* @__PURE__ */ jsx102(Bio, { label: ui.detailNatShort, value: detail.nationality ?? DASH })
10567
+ return /* @__PURE__ */ jsxs87(Fragment24, { children: [
10568
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
10569
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-mon-list ss-w-pd-list", children: [
10570
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-card ss-w-pd-profile", children: [
10571
+ /* @__PURE__ */ jsx103(PlayerPhoto, { photoUrl: detail.photoUrl, jerseyNumber: detail.jerseyNumber, size: 52 }, detail.photoUrl ?? ""),
10572
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-profile-main", children: [
10573
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-name", children: detail.playerName }),
10574
+ subLine !== "" && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-sub", children: subLine }),
10575
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-bio", children: [
10576
+ /* @__PURE__ */ jsx103(Bio, { label: ui.detailAge, value: ageFrom(detail.dateOfBirthUnixMs) }),
10577
+ /* @__PURE__ */ jsx103(Bio, { label: ui.detailHeight, value: detail.heightCm === null ? DASH : `${detail.heightCm} cm` }),
10578
+ foot !== null && /* @__PURE__ */ jsx103(Bio, { label: ui.detailFoot, value: foot }),
10579
+ /* @__PURE__ */ jsx103(Bio, { label: ui.detailNatShort, value: detail.nationality ?? DASH })
10476
10580
  ] })
10477
10581
  ] }),
10478
- /* @__PURE__ */ jsx102(MiniPitch, { positionCode: detail.positionCode })
10582
+ /* @__PURE__ */ jsx103(MiniPitch, { positionCode: detail.positionCode })
10479
10583
  ] }),
10480
- (next !== null || availability !== null) && /* @__PURE__ */ jsx102(AvailabilityCard, { ui, next, availability }),
10481
- /* @__PURE__ */ jsxs86("div", { children: [
10482
- eyebrow !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: eyebrow }),
10483
- /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-tiles", children: [
10484
- /* @__PURE__ */ jsx102(Tile, { label: ui.statColGoals, value: String(s.goals) }),
10485
- /* @__PURE__ */ jsx102(Tile, { label: ui.statColAssists, value: String(s.assists) }),
10486
- typeof s.starts === "number" && /* @__PURE__ */ jsx102(Tile, { label: ui.detailStarted, value: String(s.starts) }),
10487
- /* @__PURE__ */ jsx102(Tile, { label: ui.detailMatches, value: String(s.appearances) }),
10488
- /* @__PURE__ */ jsx102(Tile, { label: ui.statColMinutes, value: String(s.minutesPlayed) }),
10489
- rating !== null && /* @__PURE__ */ jsx102(Tile, { label: ui.statColRating, value: rating.toFixed(2), pos: Math.round(rating * 100) / 100 >= 7 }),
10490
- /* @__PURE__ */ jsx102(Tile, { label: ui.detailYellows, value: String(s.yellowCards) }),
10491
- /* @__PURE__ */ jsx102(Tile, { label: ui.detailReds, value: String(s.redCards) })
10584
+ (next !== null || availability !== null) && /* @__PURE__ */ jsx103(AvailabilityCard, { ui, next, availability }),
10585
+ /* @__PURE__ */ jsxs87("div", { children: [
10586
+ eyebrow !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: eyebrow }),
10587
+ /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-tiles", children: [
10588
+ /* @__PURE__ */ jsx103(Tile, { label: ui.statColGoals, value: String(s.goals) }),
10589
+ /* @__PURE__ */ jsx103(Tile, { label: ui.statColAssists, value: String(s.assists) }),
10590
+ typeof s.starts === "number" && /* @__PURE__ */ jsx103(Tile, { label: ui.detailStarted, value: String(s.starts) }),
10591
+ /* @__PURE__ */ jsx103(Tile, { label: ui.detailMatches, value: String(s.appearances) }),
10592
+ /* @__PURE__ */ jsx103(Tile, { label: ui.statColMinutes, value: String(s.minutesPlayed) }),
10593
+ rating !== null && /* @__PURE__ */ jsx103(Tile, { label: ui.statColRating, value: rating.toFixed(2), pos: Math.round(rating * 100) / 100 >= 7 }),
10594
+ /* @__PURE__ */ jsx103(Tile, { label: ui.detailYellows, value: String(s.yellowCards) }),
10595
+ /* @__PURE__ */ jsx103(Tile, { label: ui.detailReds, value: String(s.redCards) })
10492
10596
  ] })
10493
10597
  ] }),
10494
- detail.performance != null && /* @__PURE__ */ jsx102(PerformanceBars, { performance: detail.performance, competitionName: competition, strings: ui }),
10495
- log.length > 0 && /* @__PURE__ */ jsxs86("div", { children: [
10496
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: ui.matchLogTitle }),
10497
- /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-card ss-w-pd-log", children: log.map((row) => /* @__PURE__ */ jsx102(MatchRow, { ui, row }, row.matchId)) })
10598
+ detail.performance != null && /* @__PURE__ */ jsx103(PerformanceBars, { performance: detail.performance, competitionName: competition, strings: ui }),
10599
+ log.length > 0 && /* @__PURE__ */ jsxs87("div", { children: [
10600
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: ui.matchLogTitle }),
10601
+ /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-card ss-w-pd-log", children: log.map((row) => /* @__PURE__ */ jsx103(MatchRow, { ui, row }, row.matchId)) })
10498
10602
  ] })
10499
10603
  ] })
10500
10604
  ] });
@@ -10502,12 +10606,12 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
10502
10606
 
10503
10607
  // src/components/PresetSpeedDial.tsx
10504
10608
  import { useId as useId10 } from "react";
10505
- import { jsx as jsx103, jsxs as jsxs87 } from "react/jsx-runtime";
10609
+ import { jsx as jsx104, jsxs as jsxs88 } from "react/jsx-runtime";
10506
10610
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
10507
10611
  const pillsId = useId10();
10508
10612
  const tabIndex = expanded ? 0 : -1;
10509
- return /* @__PURE__ */ jsxs87("div", { ref: rootRef, className: "ss-w-dial", children: [
10510
- /* @__PURE__ */ jsxs87(
10613
+ return /* @__PURE__ */ jsxs88("div", { ref: rootRef, className: "ss-w-dial", children: [
10614
+ /* @__PURE__ */ jsxs88(
10511
10615
  "button",
10512
10616
  {
10513
10617
  ref: buttonRef,
@@ -10518,28 +10622,28 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
10518
10622
  "aria-label": strings.dialName,
10519
10623
  onClick: onToggle,
10520
10624
  children: [
10521
- /* @__PURE__ */ jsx103("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx103(SlidersIcon, {}) }),
10522
- /* @__PURE__ */ jsx103("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx103(CloseIcon, {}) }),
10523
- showDot && !expanded ? /* @__PURE__ */ jsx103("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
10625
+ /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx104(SlidersIcon, {}) }),
10626
+ /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx104(CloseIcon, {}) }),
10627
+ showDot && !expanded ? /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
10524
10628
  ]
10525
10629
  }
10526
10630
  ),
10527
- /* @__PURE__ */ jsxs87("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
10528
- /* @__PURE__ */ jsxs87("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
10529
- /* @__PURE__ */ jsx103(SlidersIcon, {}),
10530
- /* @__PURE__ */ jsx103("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
10631
+ /* @__PURE__ */ jsxs88("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
10632
+ /* @__PURE__ */ jsxs88("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
10633
+ /* @__PURE__ */ jsx104(SlidersIcon, {}),
10634
+ /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
10531
10635
  ] }),
10532
- /* @__PURE__ */ jsxs87("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
10533
- /* @__PURE__ */ jsx103(ComboIcon, {}),
10534
- /* @__PURE__ */ jsx103("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
10636
+ /* @__PURE__ */ jsxs88("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
10637
+ /* @__PURE__ */ jsx104(ComboIcon, {}),
10638
+ /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
10535
10639
  ] })
10536
10640
  ] })
10537
10641
  ] });
10538
10642
  }
10539
10643
 
10540
10644
  // src/components/PresetTools.tsx
10541
- import { Fragment as Fragment24, useEffect as useEffect31, useId as useId11, useRef as useRef28, useState as useState52 } from "react";
10542
- import { Fragment as Fragment25, jsx as jsx104, jsxs as jsxs88 } from "react/jsx-runtime";
10645
+ import { Fragment as Fragment25, useEffect as useEffect31, useId as useId11, useRef as useRef28, useState as useState53 } from "react";
10646
+ import { Fragment as Fragment26, jsx as jsx105, jsxs as jsxs89 } from "react/jsx-runtime";
10543
10647
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
10544
10648
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
10545
10649
  const dialogRef = useRef28(null);
@@ -10577,79 +10681,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
10577
10681
  first.focus();
10578
10682
  }
10579
10683
  };
10580
- return /* @__PURE__ */ jsx104("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs88("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
10581
- /* @__PURE__ */ jsxs88("div", { className: "ss-w-tool-head", children: [
10582
- /* @__PURE__ */ jsx104("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
10583
- /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx104(CloseIcon, {}) })
10684
+ return /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs89("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
10685
+ /* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-head", children: [
10686
+ /* @__PURE__ */ jsx105("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
10687
+ /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx105(CloseIcon, {}) })
10584
10688
  ] }),
10585
- /* @__PURE__ */ jsx104("div", { className: "ss-w-tool-body", children }),
10586
- footer ? /* @__PURE__ */ jsx104("div", { className: "ss-w-tool-foot", children: footer }) : null
10689
+ /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-body", children }),
10690
+ footer ? /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-foot", children: footer }) : null
10587
10691
  ] }) });
10588
10692
  }
10589
10693
  function fillTemplate(template, slots) {
10590
10694
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
10591
10695
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
10592
- return /* @__PURE__ */ jsx104(Fragment24, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
10696
+ return /* @__PURE__ */ jsx105(Fragment25, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
10593
10697
  });
10594
10698
  }
10595
10699
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
10596
10700
  const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
10597
- return /* @__PURE__ */ jsxs88("span", { className: "ss-w-tool-num", children: [
10598
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
10599
- /* @__PURE__ */ jsx104("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
10701
+ return /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-num", children: [
10702
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
10703
+ /* @__PURE__ */ jsx105("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
10600
10704
  const c = choices2[Number(e.target.value)];
10601
10705
  if (c) onChoose(c.value);
10602
- }, children: choices2.map((c, i) => /* @__PURE__ */ jsx104("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
10706
+ }, children: choices2.map((c, i) => /* @__PURE__ */ jsx105("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
10603
10707
  ] });
10604
10708
  }
10605
10709
  function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
10606
10710
  const sizeText = sizeLabels[currentIdx] ?? "";
10607
- return /* @__PURE__ */ jsxs88("span", { className: "ss-w-tool-num", children: [
10608
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
10609
- /* @__PURE__ */ jsx104("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ jsx104("option", { value: String(i), children: opt }, i)) })
10711
+ return /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-num", children: [
10712
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
10713
+ /* @__PURE__ */ jsx105("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ jsx105("option", { value: String(i), children: opt }, i)) })
10610
10714
  ] });
10611
10715
  }
10612
10716
  function SendButton({ label, display, disabled, onClick }) {
10613
- return /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
10717
+ return /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
10614
10718
  }
10615
10719
  function PickList({ picks, formatKickoff }) {
10616
- return /* @__PURE__ */ jsx104("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs88("li", { className: "ss-w-tool-pick", children: [
10617
- /* @__PURE__ */ jsxs88("span", { className: "ss-w-tool-pick-match", children: [
10720
+ return /* @__PURE__ */ jsx105("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs89("li", { className: "ss-w-tool-pick", children: [
10721
+ /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-pick-match", children: [
10618
10722
  p.homeTeamName,
10619
10723
  " \u2013 ",
10620
10724
  p.awayTeamName
10621
10725
  ] }),
10622
- /* @__PURE__ */ jsxs88("span", { className: "ss-w-tool-pick-sel", children: [
10726
+ /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-pick-sel", children: [
10623
10727
  p.marketLabel,
10624
10728
  ": ",
10625
10729
  p.selectionLabel,
10626
10730
  p.line ? ` ${p.line}` : ""
10627
10731
  ] }),
10628
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
10629
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
10732
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
10733
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
10630
10734
  ] }, p.matchOddsId)) });
10631
10735
  }
10632
10736
  function ComboPreview({ cell, formatKickoff }) {
10633
- return /* @__PURE__ */ jsxs88(Fragment25, { children: [
10634
- /* @__PURE__ */ jsx104(PickList, { picks: cell.combo.legs, formatKickoff }),
10635
- /* @__PURE__ */ jsx104("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
10737
+ return /* @__PURE__ */ jsxs89(Fragment26, { children: [
10738
+ /* @__PURE__ */ jsx105(PickList, { picks: cell.combo.legs, formatKickoff }),
10739
+ /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
10636
10740
  ] });
10637
10741
  }
10638
10742
  function Unavailable({ text }) {
10639
- return /* @__PURE__ */ jsx104("p", { className: "ss-w-tool-unavailable", children: text });
10743
+ return /* @__PURE__ */ jsx105("p", { className: "ss-w-tool-unavailable", children: text });
10640
10744
  }
10641
10745
  function AskRow({ icon, ask, ready, send }) {
10642
- return /* @__PURE__ */ jsxs88("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
10643
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
10644
- /* @__PURE__ */ jsxs88("div", { className: "ss-w-tool-main", children: [
10645
- /* @__PURE__ */ jsx104("p", { className: "ss-w-tool-ask", children: ask }),
10646
- ready ? /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-ready", children: ready }) : null
10746
+ return /* @__PURE__ */ jsxs89("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
10747
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
10748
+ /* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-main", children: [
10749
+ /* @__PURE__ */ jsx105("p", { className: "ss-w-tool-ask", children: ask }),
10750
+ ready ? /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-ready", children: ready }) : null
10647
10751
  ] }),
10648
10752
  send
10649
10753
  ] });
10650
10754
  }
10651
10755
  function RoundSend({ label, display, disabled, onClick }) {
10652
- return /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx104(SendIcon, {}) });
10756
+ return /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx105(SendIcon, {}) });
10653
10757
  }
10654
10758
  var BIG_COMBO = { total: 50, legs: 6 };
10655
10759
  function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
@@ -10658,15 +10762,15 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
10658
10762
  const totals = comboTotals(grid);
10659
10763
  const legChoices = comboLegChoices(grid);
10660
10764
  const count = FIXED_SINGLES_COUNT;
10661
- const [maxPrice, setMaxPrice] = useState52(() => startSingles(grid.singles, limits, START.maxPrice, count));
10662
- const [minPrice, setMinPrice] = useState52(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
10663
- const [start] = useState52(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
10664
- const [total, setTotal] = useState52(start.total);
10665
- const [legs, setLegs] = useState52(start.legs);
10666
- const [bigStart] = useState52(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
10667
- const [bigTotal, setBigTotal] = useState52(bigStart.total);
10668
- const [bigLegs, setBigLegs] = useState52(bigStart.legs);
10669
- const [announcement, setAnnouncement] = useState52("");
10765
+ const [maxPrice, setMaxPrice] = useState53(() => startSingles(grid.singles, limits, START.maxPrice, count));
10766
+ const [minPrice, setMinPrice] = useState53(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
10767
+ const [start] = useState53(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
10768
+ const [total, setTotal] = useState53(start.total);
10769
+ const [legs, setLegs] = useState53(start.legs);
10770
+ const [bigStart] = useState53(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
10771
+ const [bigTotal, setBigTotal] = useState53(bigStart.total);
10772
+ const [bigLegs, setBigLegs] = useState53(bigStart.legs);
10773
+ const [announcement, setAnnouncement] = useState53("");
10670
10774
  const maxCell = findSingles(grid.singles, maxPrice, count);
10671
10775
  const minCell = findSingles(grid.singlesFrom, minPrice, count);
10672
10776
  const comboCell = findCombo(grid, total, legs);
@@ -10710,95 +10814,95 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
10710
10814
  const totalChoices = totals.map((v) => ({ value: v, text: v.toFixed(1), available: legChoices.some((n) => !!findCombo(grid, v, n)) }));
10711
10815
  const legChoicesFor = (t) => legChoices.map((n) => ({ value: n, text: String(n), available: !!findCombo(grid, t, n) }));
10712
10816
  const markets = grid.markets ?? [];
10713
- const [marketIdx, setMarketIdx] = useState52(0);
10817
+ const [marketIdx, setMarketIdx] = useState53(0);
10714
10818
  const marketCell = markets[marketIdx] ?? null;
10715
10819
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
10716
10820
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
10717
10821
  const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
10718
- return /* @__PURE__ */ jsxs88(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
10719
- /* @__PURE__ */ jsx104(
10822
+ return /* @__PURE__ */ jsxs89(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
10823
+ /* @__PURE__ */ jsx105(
10720
10824
  AskRow,
10721
10825
  {
10722
10826
  icon: "\u{1F3AF}",
10723
10827
  ask: fillTemplate(strings.maxPriceRow, {
10724
10828
  count: String(count),
10725
- price: /* @__PURE__ */ jsx104(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
10829
+ price: /* @__PURE__ */ jsx105(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
10726
10830
  }),
10727
10831
  ready: singlesReady(maxCell),
10728
- send: /* @__PURE__ */ jsx104(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
10832
+ send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
10729
10833
  if (maxCell) onSend(maxPriceAsk(maxCell, strings));
10730
10834
  } })
10731
10835
  }
10732
10836
  ),
10733
- /* @__PURE__ */ jsx104(
10837
+ /* @__PURE__ */ jsx105(
10734
10838
  AskRow,
10735
10839
  {
10736
10840
  icon: "\u{1F4C8}",
10737
10841
  ask: fillTemplate(strings.minPriceRow, {
10738
10842
  count: String(count),
10739
- price: /* @__PURE__ */ jsx104(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
10843
+ price: /* @__PURE__ */ jsx105(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
10740
10844
  }),
10741
10845
  ready: singlesReady(minCell),
10742
- send: /* @__PURE__ */ jsx104(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
10846
+ send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
10743
10847
  if (minCell) onSend(minPriceAsk(minCell, strings));
10744
10848
  } })
10745
10849
  }
10746
10850
  ),
10747
- /* @__PURE__ */ jsx104(
10851
+ /* @__PURE__ */ jsx105(
10748
10852
  AskRow,
10749
10853
  {
10750
10854
  icon: "\u2728",
10751
10855
  ask: fillTemplate(strings.comboRow, {
10752
- legs: /* @__PURE__ */ jsx104(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
10753
- total: /* @__PURE__ */ jsx104(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
10856
+ legs: /* @__PURE__ */ jsx105(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
10857
+ total: /* @__PURE__ */ jsx105(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
10754
10858
  }),
10755
10859
  ready: comboReady(comboCell),
10756
- send: /* @__PURE__ */ jsx104(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
10860
+ send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
10757
10861
  if (comboCell) onSend(comboAsk(comboCell, strings));
10758
10862
  } })
10759
10863
  }
10760
10864
  ),
10761
- /* @__PURE__ */ jsx104(
10865
+ /* @__PURE__ */ jsx105(
10762
10866
  AskRow,
10763
10867
  {
10764
10868
  icon: "\u{1F3C6}",
10765
10869
  ask: fillTemplate(strings.bigComboRow, {
10766
- legs: /* @__PURE__ */ jsx104(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
10767
- total: /* @__PURE__ */ jsx104(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
10870
+ legs: /* @__PURE__ */ jsx105(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
10871
+ total: /* @__PURE__ */ jsx105(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
10768
10872
  }),
10769
10873
  ready: comboReady(bigCell),
10770
- send: /* @__PURE__ */ jsx104(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
10874
+ send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
10771
10875
  if (bigCell) onSend(comboAsk(bigCell, strings));
10772
10876
  } })
10773
10877
  }
10774
10878
  ),
10775
- markets.length > 0 && /* @__PURE__ */ jsx104(
10879
+ markets.length > 0 && /* @__PURE__ */ jsx105(
10776
10880
  AskRow,
10777
10881
  {
10778
10882
  icon: "\u26BD",
10779
10883
  ask: fillTemplate(strings.marketRow, {
10780
- market: /* @__PURE__ */ jsx104(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
10884
+ market: /* @__PURE__ */ jsx105(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
10781
10885
  }),
10782
10886
  ready: marketCell ? strings.readyCount(marketCell.count) : null,
10783
- send: /* @__PURE__ */ jsx104(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
10887
+ send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
10784
10888
  if (marketCell) onSend(marketAsk(marketCell, strings));
10785
10889
  } })
10786
10890
  }
10787
10891
  ),
10788
- /* @__PURE__ */ jsx104("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10892
+ /* @__PURE__ */ jsx105("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10789
10893
  ] });
10790
10894
  }
10791
10895
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
10792
10896
  const totals = comboTotals(grid);
10793
10897
  const legChoices = comboLegChoices(grid);
10794
- const [start] = useState52(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
10795
- const [total, setTotal] = useState52(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
10796
- const [legs, setLegs] = useState52(() => {
10898
+ const [start] = useState53(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
10899
+ const [total, setTotal] = useState53(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
10900
+ const [legs, setLegs] = useState53(() => {
10797
10901
  if (initialTotal === void 0) return initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : start.legs;
10798
10902
  const from = initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : startValue(legChoices, START.comboLegs);
10799
10903
  return legsForTotal(grid, nearest(totals, initialTotal), from);
10800
10904
  });
10801
- const [announcement, setAnnouncement] = useState52("");
10905
+ const [announcement, setAnnouncement] = useState53("");
10802
10906
  const cell = findCombo(grid, total, legs);
10803
10907
  const minLegs = legChoices[0] ?? legs;
10804
10908
  const maxLegs = legChoices[legChoices.length - 1] ?? legs;
@@ -10809,29 +10913,29 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
10809
10913
  const d = strings.comboDisplay(nextLegs, nextTotal);
10810
10914
  setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
10811
10915
  };
10812
- const footer = /* @__PURE__ */ jsx104(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
10916
+ const footer = /* @__PURE__ */ jsx105(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
10813
10917
  if (cell) onSend(comboAsk(cell, strings));
10814
10918
  } });
10815
- return /* @__PURE__ */ jsxs88(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
10816
- /* @__PURE__ */ jsxs88("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
10817
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
10818
- /* @__PURE__ */ jsx104("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
10919
+ return /* @__PURE__ */ jsxs89(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
10920
+ /* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
10921
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
10922
+ /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
10819
10923
  ] }),
10820
- /* @__PURE__ */ jsxs88("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
10821
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
10822
- /* @__PURE__ */ jsxs88("div", { className: "ss-w-tool-stepper", children: [
10823
- /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
10824
- /* @__PURE__ */ jsx104("span", { className: "ss-w-tool-count", children: legs }),
10825
- /* @__PURE__ */ jsx104("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
10924
+ /* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
10925
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
10926
+ /* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-stepper", children: [
10927
+ /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
10928
+ /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-count", children: legs }),
10929
+ /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
10826
10930
  ] })
10827
10931
  ] }),
10828
- cell ? /* @__PURE__ */ jsx104(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx104(Unavailable, { text: strings.unavailable }),
10829
- /* @__PURE__ */ jsx104("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10932
+ cell ? /* @__PURE__ */ jsx105(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx105(Unavailable, { text: strings.unavailable }),
10933
+ /* @__PURE__ */ jsx105("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10830
10934
  ] });
10831
10935
  }
10832
10936
 
10833
10937
  // src/usePresetDial.ts
10834
- import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef29, useState as useState53 } from "react";
10938
+ import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef29, useState as useState54 } from "react";
10835
10939
  function sendInFlight(messages, isStreaming) {
10836
10940
  const last = messages[messages.length - 1];
10837
10941
  return isStreaming && !!last && last.role === "assistant" && !last.done && !last.isGreeting;
@@ -10845,7 +10949,7 @@ function lastUserId(messages) {
10845
10949
  }
10846
10950
  var SCROLL_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " "]);
10847
10951
  function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming, activeTab }) {
10848
- const [expanded, setExpanded] = useState53(() => !sendInFlight(messages, isStreaming));
10952
+ const [expanded, setExpanded] = useState54(() => !sendInFlight(messages, isStreaming));
10849
10953
  const fold = useCallback21(() => setExpanded(false), []);
10850
10954
  const toggle = useCallback21(() => setExpanded((e) => !e), []);
10851
10955
  const currentUserId = lastUserId(messages);
@@ -10928,10 +11032,10 @@ function markToolSeen() {
10928
11032
  }
10929
11033
 
10930
11034
  // src/components/ChatPanel.tsx
10931
- import { Fragment as Fragment26, jsx as jsx105, jsxs as jsxs89 } from "react/jsx-runtime";
11035
+ import { Fragment as Fragment27, jsx as jsx106, jsxs as jsxs90 } from "react/jsx-runtime";
10932
11036
  var FULLSCREEN_QUERY = "(max-width: 639px)";
10933
11037
  function useIsModal() {
10934
- const [modal, setModal] = useState54(false);
11038
+ const [modal, setModal] = useState55(false);
10935
11039
  useEffect33(() => {
10936
11040
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
10937
11041
  const mql = window.matchMedia(FULLSCREEN_QUERY);
@@ -10946,8 +11050,8 @@ var HIDDEN_LAYER_STYLE = { position: "absolute", inset: 0, visibility: "hidden",
10946
11050
  var SQUAD_LAYER_STYLE = { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 };
10947
11051
  function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, clubFixturesResult, clubStandingsResult, clubSquadResult, clubSquadStatsResult, clubPlayerDetailResult, loggedIn, conversation, presetGrid }) {
10948
11052
  const { state, close, stop, send, reset } = controller;
10949
- const [squadView, setSquadView] = useState54("roster");
10950
- const [selectedPlayerId, setSelectedPlayerId] = useState54(null);
11053
+ const [squadView, setSquadView] = useState55("roster");
11054
+ const [selectedPlayerId, setSelectedPlayerId] = useState55(null);
10951
11055
  const clearPlayerDetail = clubPlayerDetailResult?.clear;
10952
11056
  const fetchPlayerDetail = clubPlayerDetailResult?.fetch;
10953
11057
  const squadLayerRef = useRef30(null);
@@ -11001,8 +11105,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11001
11105
  const limitRef = useRef30(null);
11002
11106
  const typedSendRef = useRef30(false);
11003
11107
  const focusAfterCloseRef = useRef30(null);
11004
- const [tool, setTool] = useState54(null);
11005
- const [toolSeen, setToolSeen] = useState54(readToolSeen);
11108
+ const [tool, setTool] = useState55(null);
11109
+ const [toolSeen, setToolSeen] = useState55(readToolSeen);
11006
11110
  const dial = usePresetDial({
11007
11111
  layerRef,
11008
11112
  dialRef,
@@ -11059,8 +11163,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11059
11163
  focusAfterCloseRef.current = "composer";
11060
11164
  setTool(null);
11061
11165
  }, [tool, onChatTab, presetGrid]);
11062
- return /* @__PURE__ */ jsxs89("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
11063
- /* @__PURE__ */ jsx105(
11166
+ return /* @__PURE__ */ jsxs90("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
11167
+ /* @__PURE__ */ jsx106(
11064
11168
  ChatHeader,
11065
11169
  {
11066
11170
  onClose: close,
@@ -11073,7 +11177,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11073
11177
  moreOptionsLabel: ui.moreOptions
11074
11178
  }
11075
11179
  ),
11076
- monitor && /* @__PURE__ */ jsx105(
11180
+ monitor && /* @__PURE__ */ jsx106(
11077
11181
  TabBar,
11078
11182
  {
11079
11183
  monitor,
@@ -11086,9 +11190,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11086
11190
  clubEnabled: clubFixturesResult?.enabled ?? false
11087
11191
  }
11088
11192
  ),
11089
- /* @__PURE__ */ jsxs89("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
11090
- /* @__PURE__ */ jsx105(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx105(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
11091
- showDial ? /* @__PURE__ */ jsx105(
11193
+ /* @__PURE__ */ jsxs90("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
11194
+ /* @__PURE__ */ jsx106(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx106(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
11195
+ showDial ? /* @__PURE__ */ jsx106(
11092
11196
  PresetSpeedDial,
11093
11197
  {
11094
11198
  expanded: dial.expanded,
@@ -11100,21 +11204,21 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11100
11204
  buttonRef: dialButtonRef
11101
11205
  }
11102
11206
  ) : null,
11103
- tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ jsx105(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx105(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
11207
+ tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ jsx106(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx106(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
11104
11208
  ] }),
11105
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx105(TodayPanel, { discovery, ui, monitor }),
11106
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx105(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
11107
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx105(OddsPanel, { monitor, ui, slip }),
11108
- monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */ jsx105(Fixtures, { fixtures: clubFixturesResult?.fixtures ?? [], loading: clubFixturesResult?.loading ?? false, ui }),
11109
- monitor && monitor.activeTab === "standings" && /* @__PURE__ */ jsx105(Standings, { standings: clubStandingsResult?.data ?? null, loading: clubStandingsResult?.loading ?? false, ui }),
11110
- monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsxs89(Fragment26, { children: [
11111
- /* @__PURE__ */ jsx105(
11209
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx106(TodayPanel, { discovery, ui, monitor }),
11210
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx106(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
11211
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx106(OddsPanel, { monitor, ui, slip }),
11212
+ monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */ jsx106(Fixtures, { fixtures: clubFixturesResult?.fixtures ?? [], loading: clubFixturesResult?.loading ?? false, ui }),
11213
+ monitor && monitor.activeTab === "standings" && /* @__PURE__ */ jsx106(Standings, { standings: clubStandingsResult?.data ?? null, loading: clubStandingsResult?.loading ?? false, ui }),
11214
+ monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsxs90(Fragment27, { children: [
11215
+ /* @__PURE__ */ jsx106(
11112
11216
  "div",
11113
11217
  {
11114
11218
  ref: squadLayerRef,
11115
11219
  style: selectedPlayerId === null ? SQUAD_LAYER_STYLE : HIDDEN_LAYER_STYLE,
11116
11220
  "aria-hidden": selectedPlayerId !== null ? true : void 0,
11117
- children: /* @__PURE__ */ jsx105(
11221
+ children: /* @__PURE__ */ jsx106(
11118
11222
  Squad,
11119
11223
  {
11120
11224
  squad: clubSquadResult?.data ?? null,
@@ -11132,9 +11236,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11132
11236
  )
11133
11237
  }
11134
11238
  ),
11135
- selectedPlayerId !== null && /* @__PURE__ */ jsx105(PlayerDetail, { detail: clubPlayerDetailResult?.data ?? null, loading: clubPlayerDetailResult?.loading ?? false, ui, seasonName: clubSquadStatsResult?.seasonName ?? null, onClose: closePlayer })
11239
+ selectedPlayerId !== null && /* @__PURE__ */ jsx106(PlayerDetail, { detail: clubPlayerDetailResult?.data ?? null, loading: clubPlayerDetailResult?.loading ?? false, ui, seasonName: clubSquadStatsResult?.seasonName ?? null, onClose: closePlayer })
11136
11240
  ] }),
11137
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx105(
11241
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx106(
11138
11242
  GamesPanel,
11139
11243
  {
11140
11244
  loggedIn: !!loggedIn,
@@ -11149,9 +11253,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11149
11253
  }
11150
11254
  }
11151
11255
  ),
11152
- (!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs89(Fragment26, { children: [
11153
- /* @__PURE__ */ jsx105("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
11154
- paused ? null : /* @__PURE__ */ jsx105(
11256
+ (!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs90(Fragment27, { children: [
11257
+ /* @__PURE__ */ jsx106("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
11258
+ paused ? null : /* @__PURE__ */ jsx106(
11155
11259
  ChatInput,
11156
11260
  {
11157
11261
  ref: inputRef,
@@ -11170,9 +11274,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
11170
11274
  }
11171
11275
 
11172
11276
  // src/components/HostEventsProvider.tsx
11173
- import { jsx as jsx106 } from "react/jsx-runtime";
11277
+ import { jsx as jsx107 } from "react/jsx-runtime";
11174
11278
  function HostEventsProvider({ value, children }) {
11175
- return /* @__PURE__ */ jsx106(SlipStateContext.Provider, { value: value.slipState, children });
11279
+ return /* @__PURE__ */ jsx107(SlipStateContext.Provider, { value: value.slipState, children });
11176
11280
  }
11177
11281
 
11178
11282
  // src/styles/css.generated.ts
@@ -12286,6 +12390,41 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
12286
12390
  .ss-w-mon-scorers-home { text-align: right; }
12287
12391
  .ss-w-mon-scorers-away { text-align: left; }
12288
12392
  .ss-w-mon-scorers-ball { flex: none; align-self: start; line-height: 1.35; }
12393
+
12394
+ /* Pinned pre-match form + head-to-head (MonitorFormH2H): collapsed by default, a real <button>
12395
+ header toggles it. W/D/L dots and the H2H bar/legend keep fixed, theme-independent colors
12396
+ (same convention as the dashboard tile accents above) since they're self-contained badges
12397
+ carrying their own ink color, not page-background-dependent text. */
12398
+ .ss-w-h2h { border-left: 3px solid #16A34A; padding-left: 12px; }
12399
+ .ss-w-h2h-head { display: flex; align-items: center; justify-content: space-between; width: 100%; background: none; border: none; cursor: pointer; text-align: left; font: inherit; color: inherit; padding: 0; }
12400
+ .ss-w-h2h-head-l { display: flex; align-items: center; gap: 6px; }
12401
+ .ss-w-h2h-dot { width: 4px; height: 4px; border-radius: 999px; background: var(--ss-w-faint); flex: none; }
12402
+ .ss-w-h2h-title { font-size: 13px; font-weight: 700; color: var(--ss-w-ink); }
12403
+ .ss-w-h2h-chevron { flex: none; color: var(--ss-w-faint); transition: transform .15s ease; }
12404
+ .ss-w-h2h-chevron--open { transform: rotate(180deg); }
12405
+ .ss-w-h2h-body { padding-top: 12px; display: flex; flex-direction: column; gap: 12px; }
12406
+ .ss-w-h2h-forms { display: flex; align-items: flex-start; justify-content: space-between; }
12407
+ .ss-w-h2h-form-col { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
12408
+ .ss-w-h2h-form-col--away { align-items: flex-end; }
12409
+ .ss-w-h2h-form-team { font-size: 11px; color: var(--ss-w-faint); }
12410
+ .ss-w-h2h-dots { display: flex; gap: 4px; }
12411
+ .ss-w-h2h-result { width: 20px; height: 20px; border-radius: 999px; font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex: none; }
12412
+ .ss-w-h2h-result--win { background: #16A34A; color: #FFFFFF; }
12413
+ .ss-w-h2h-result--draw { background: #E5E7EB; color: #4B5563; }
12414
+ .ss-w-h2h-result--loss { background: #F5A623; color: #1F2937; }
12415
+ .ss-w-h2h-record { display: flex; flex-direction: column; gap: 6px; }
12416
+ .ss-w-h2h-meta { font-size: 11px; color: var(--ss-w-faint); }
12417
+ .ss-w-h2h-bar { display: flex; width: 100%; height: 8px; border-radius: 999px; overflow: hidden; }
12418
+ .ss-w-h2h-bar-seg--win { background: #16A34A; }
12419
+ .ss-w-h2h-bar-seg--draw { background: #D1D5DB; }
12420
+ .ss-w-h2h-bar-seg--loss { background: #2563EB; }
12421
+ .ss-w-h2h-legend { display: flex; align-items: center; justify-content: space-between; margin-top: 2px; }
12422
+ .ss-w-h2h-legend-item { font-size: 11px; color: var(--ss-w-ink); display: flex; align-items: center; gap: 5px; }
12423
+ .ss-w-h2h-legend-dot { width: 7px; height: 7px; border-radius: 999px; display: inline-block; flex: none; }
12424
+ .ss-w-h2h-legend-dot--win { background: #16A34A; }
12425
+ .ss-w-h2h-legend-dot--draw { background: #D1D5DB; }
12426
+ .ss-w-h2h-legend-dot--loss { background: #2563EB; }
12427
+
12289
12428
  .ss-w-fact { display: flex; flex-direction: column; gap: 7px; padding: 10px 12px; border-radius: 10px; background: color-mix(in srgb, var(--ss-w-accent) 9%, transparent); border: 1px solid color-mix(in srgb, var(--ss-w-accent) 22%, transparent); }
12290
12429
  .ss-w-fact-k { display: flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--ss-w-accent); }
12291
12430
  .ss-w-fact-min { color: var(--ss-w-ink); letter-spacing: 0; }
@@ -13043,7 +13182,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
13043
13182
  `;
13044
13183
 
13045
13184
  // src/StatsWidget.tsx
13046
- import { jsx as jsx107 } from "react/jsx-runtime";
13185
+ import { jsx as jsx108 } from "react/jsx-runtime";
13047
13186
  function buildClient(props) {
13048
13187
  try {
13049
13188
  if ("client" in props && props.client) {
@@ -13084,7 +13223,7 @@ function StatsWidget(props) {
13084
13223
  }, []);
13085
13224
  const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
13086
13225
  const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
13087
- const [hasToday, setHasToday] = useState55(false);
13226
+ const [hasToday, setHasToday] = useState56(false);
13088
13227
  const liveCardWatches = useMemo6(() => {
13089
13228
  const seen = /* @__PURE__ */ new Set();
13090
13229
  const out = [];
@@ -13268,7 +13407,7 @@ function StatsWidget(props) {
13268
13407
  }, [built, ui.injectStyles]);
13269
13408
  if (!built) return null;
13270
13409
  const attrs = themeAttrs(ui);
13271
- return /* @__PURE__ */ jsx107(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx107(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx107("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ jsx107(
13410
+ return /* @__PURE__ */ jsx108(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx108(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx108("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ jsx108(
13272
13411
  ChatPanel,
13273
13412
  {
13274
13413
  controller,
@@ -13288,7 +13427,7 @@ function StatsWidget(props) {
13288
13427
  conversation: built?.conversation ?? null,
13289
13428
  presetGrid
13290
13429
  }
13291
- ) : /* @__PURE__ */ jsx107(
13430
+ ) : /* @__PURE__ */ jsx108(
13292
13431
  ChatFab,
13293
13432
  {
13294
13433
  label: ui.launcherLabel,