@sensiblestats/widget-react 0.76.0 → 0.77.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
@@ -170,6 +170,8 @@ var STRINGS = {
170
170
  statRank: "Rank",
171
171
  unitDays: "days",
172
172
  unitPts: "pts",
173
+ worthNow: (pts) => `Worth ${pts} pts now`,
174
+ worthAfterMiss: (pts) => `${pts} after a miss`,
173
175
  thisWeek: "this week",
174
176
  newToday: "New today",
175
177
  resume: "Resume",
@@ -510,6 +512,8 @@ var STRINGS = {
510
512
  statRank: "S\u0131ra",
511
513
  unitDays: "g\xFCn",
512
514
  unitPts: "puan",
515
+ worthNow: (pts) => `\u015Eimdi ${pts} puan`,
516
+ worthAfterMiss: (pts) => `yanl\u0131\u015Fta ${pts}`,
513
517
  thisWeek: "bu hafta",
514
518
  newToday: "Bug\xFCn yeni",
515
519
  resume: "Devam et",
@@ -6385,53 +6389,104 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6385
6389
  ] });
6386
6390
  }
6387
6391
 
6392
+ // src/components/games/ui/AnswerTray.tsx
6393
+ import { Fragment as Fragment11, jsx as jsx67, jsxs as jsxs59 } from "react/jsx-runtime";
6394
+ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
6395
+ const needle = query.trim().toLowerCase();
6396
+ const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
6397
+ return /* @__PURE__ */ jsxs59(Fragment11, { children: [
6398
+ /* @__PURE__ */ jsx67(
6399
+ SearchField,
6400
+ {
6401
+ id,
6402
+ label,
6403
+ labelHidden: true,
6404
+ placeholder,
6405
+ value: query,
6406
+ onChange: onQuery,
6407
+ disabled
6408
+ }
6409
+ ),
6410
+ shown.length > 0 && /* @__PURE__ */ jsx67("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
6411
+ const { first, last } = splitName(o.name);
6412
+ return /* @__PURE__ */ jsxs59(
6413
+ "button",
6414
+ {
6415
+ type: "button",
6416
+ role: "option",
6417
+ "aria-selected": false,
6418
+ "aria-label": o.name,
6419
+ className: "ss-g-tray-chip",
6420
+ disabled,
6421
+ onClick: () => onPick(o.id),
6422
+ children: [
6423
+ /* @__PURE__ */ jsx67(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
6424
+ /* @__PURE__ */ jsxs59("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
6425
+ first && /* @__PURE__ */ jsx67("span", { className: "ss-g-tray-first", children: first }),
6426
+ /* @__PURE__ */ jsx67("span", { className: "ss-g-tray-last", children: last })
6427
+ ] })
6428
+ ]
6429
+ },
6430
+ o.id
6431
+ );
6432
+ }) })
6433
+ ] });
6434
+ }
6435
+
6388
6436
  // src/components/games/ui/FooterBar.tsx
6389
- import { jsx as jsx67 } from "react/jsx-runtime";
6437
+ import { jsx as jsx68 } from "react/jsx-runtime";
6390
6438
  function FooterBar({ children }) {
6391
- return /* @__PURE__ */ jsx67("div", { className: "ss-g-footer", children });
6439
+ return /* @__PURE__ */ jsx68("div", { className: "ss-g-footer", children });
6392
6440
  }
6393
6441
 
6394
6442
  // src/components/games/ui/Silhouette.tsx
6395
- import { jsx as jsx68, jsxs as jsxs59 } from "react/jsx-runtime";
6443
+ import { jsx as jsx69, jsxs as jsxs60 } from "react/jsx-runtime";
6396
6444
  function Silhouette({ size, variant = "default" }) {
6397
- return /* @__PURE__ */ jsxs59("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
6398
- /* @__PURE__ */ jsxs59("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
6399
- /* @__PURE__ */ jsx68("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
6400
- /* @__PURE__ */ jsx68("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
6445
+ return /* @__PURE__ */ jsxs60("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
6446
+ /* @__PURE__ */ jsxs60("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
6447
+ /* @__PURE__ */ jsx69("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
6448
+ /* @__PURE__ */ jsx69("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
6401
6449
  ] }),
6402
- variant === "mystery" && /* @__PURE__ */ jsx68("span", { className: "ss-g-sil-q", children: "?" })
6450
+ variant === "mystery" && /* @__PURE__ */ jsx69("span", { className: "ss-g-sil-q", children: "?" })
6403
6451
  ] });
6404
6452
  }
6405
6453
 
6406
6454
  // src/components/games/ui/GameButton.tsx
6407
- import { jsx as jsx69 } from "react/jsx-runtime";
6455
+ import { jsx as jsx70 } from "react/jsx-runtime";
6408
6456
  function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
6409
6457
  const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
6410
- return /* @__PURE__ */ jsx69("button", { type, className: cls, ...rest });
6458
+ return /* @__PURE__ */ jsx70("button", { type, className: cls, ...rest });
6411
6459
  }
6412
6460
 
6413
6461
  // src/components/games/ui/ResultCard.tsx
6414
- import { jsx as jsx70, jsxs as jsxs60 } from "react/jsx-runtime";
6462
+ import { jsx as jsx71, jsxs as jsxs61 } from "react/jsx-runtime";
6415
6463
  function ResultCard({ tone, title, score, detail, onBack, ui }) {
6416
- return /* @__PURE__ */ jsxs60("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
6417
- /* @__PURE__ */ jsx70("span", { className: "ss-g-result-title", children: title }),
6418
- score !== void 0 && /* @__PURE__ */ jsxs60("span", { className: "ss-g-result-score", children: [
6419
- /* @__PURE__ */ jsx70("span", { className: "ss-g-result-num", children: score }),
6464
+ return /* @__PURE__ */ jsxs61("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
6465
+ /* @__PURE__ */ jsx71("span", { className: "ss-g-result-title", children: title }),
6466
+ score !== void 0 && /* @__PURE__ */ jsxs61("span", { className: "ss-g-result-score", children: [
6467
+ /* @__PURE__ */ jsx71("span", { className: "ss-g-result-num", children: score }),
6420
6468
  ui.games.unitPts
6421
6469
  ] }),
6422
- detail && /* @__PURE__ */ jsx70("span", { className: "ss-g-result-detail", children: detail }),
6423
- onBack && /* @__PURE__ */ jsx70(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
6470
+ detail && /* @__PURE__ */ jsx71("span", { className: "ss-g-result-detail", children: detail }),
6471
+ onBack && /* @__PURE__ */ jsx71(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
6424
6472
  ] });
6425
6473
  }
6426
6474
 
6427
- // src/components/games/ui/OptionList.tsx
6428
- import { jsx as jsx71 } from "react/jsx-runtime";
6429
- function OptionList({ label, options, onPick }) {
6430
- return /* @__PURE__ */ jsx71("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx71("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
6475
+ // src/components/games/ui/PointsLadderRow.tsx
6476
+ import { jsx as jsx72, jsxs as jsxs62 } from "react/jsx-runtime";
6477
+ function PointsLadderRow({ ladder, guessesUsed, ui }) {
6478
+ if (!ladder || ladder.length === 0) return null;
6479
+ const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
6480
+ const next = ladder[guessesUsed + 1];
6481
+ if (now === void 0) return null;
6482
+ return /* @__PURE__ */ jsxs62("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
6483
+ /* @__PURE__ */ jsx72("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
6484
+ next !== void 0 && next !== now && /* @__PURE__ */ jsx72("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
6485
+ ] });
6431
6486
  }
6432
6487
 
6433
6488
  // src/components/games/MysteryTigerGame.tsx
6434
- import { Fragment as Fragment11, jsx as jsx72, jsxs as jsxs61 } from "react/jsx-runtime";
6489
+ import { Fragment as Fragment12, jsx as jsx73, jsxs as jsxs63 } from "react/jsx-runtime";
6435
6490
  function parseClientState(json) {
6436
6491
  if (!json) return null;
6437
6492
  try {
@@ -6545,9 +6600,7 @@ function MysteryTigerGame({
6545
6600
  const totalGuesses = clientState ? clientState.guessesUsed + clientState.guessesRemaining : MAX_GUESSES;
6546
6601
  const score = result?.score ?? 0;
6547
6602
  const revealName = isOver ? clientState?.revealedPlayerName : void 0;
6548
- const filtered = config && !isOver ? config.squadPlayers.filter(
6549
- (p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
6550
- ) : [];
6603
+ const pool = config && !isOver ? config.squadPlayers.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
6551
6604
  function handleSelect(playerId) {
6552
6605
  if (!config || isOver || submitting) return;
6553
6606
  const prevGuesses = guessResults.map((g) => g.playerId);
@@ -6555,22 +6608,22 @@ function MysteryTigerGame({
6555
6608
  setQuery("");
6556
6609
  onSubmit(JSON.stringify({ guesses: newGuesses }));
6557
6610
  }
6558
- const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs61(Chip, { variant: "accent", children: [
6611
+ const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs63(Chip, { variant: "accent", children: [
6559
6612
  score,
6560
6613
  " ",
6561
6614
  ui.games.unitPts
6562
- ] }) : /* @__PURE__ */ jsx72("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs61(Chip, { children: [
6615
+ ] }) : /* @__PURE__ */ jsx73("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs63(Chip, { children: [
6563
6616
  ui.games.guess,
6564
6617
  " ",
6565
- /* @__PURE__ */ jsx72("span", { className: "ss-g-num", children: guessesUsed + 1 }),
6618
+ /* @__PURE__ */ jsx73("span", { className: "ss-g-num", children: guessesUsed + 1 }),
6566
6619
  " / ",
6567
6620
  totalGuesses
6568
6621
  ] }) });
6569
6622
  const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
6570
6623
  const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
6571
6624
  const known = deriveKnownAttributes(guessResults, keys);
6572
- return /* @__PURE__ */ jsxs61("div", { className: "ss-g-screen ss-g-mt", "data-testid": "game-screen-mystery-tiger", children: [
6573
- /* @__PURE__ */ jsx72(
6625
+ return /* @__PURE__ */ jsxs63("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
6626
+ /* @__PURE__ */ jsx73(
6574
6627
  GameHeader,
6575
6628
  {
6576
6629
  title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
@@ -6580,40 +6633,41 @@ function MysteryTigerGame({
6580
6633
  backLabel: ui.back
6581
6634
  }
6582
6635
  ),
6583
- !config && /* @__PURE__ */ jsx72("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6584
- config && /* @__PURE__ */ jsxs61(Fragment11, { children: [
6585
- /* @__PURE__ */ jsxs61("div", { className: "ss-g-body", children: [
6586
- /* @__PURE__ */ jsxs61("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
6587
- /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-portrait", children: [
6588
- revealName ? /* @__PURE__ */ jsx72(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx72(Silhouette, { size: 150, variant: "mystery" }),
6589
- revealName && /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-reveal-name", children: revealName })
6636
+ !config && /* @__PURE__ */ jsx73("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6637
+ config && /* @__PURE__ */ jsxs63(Fragment12, { children: [
6638
+ /* @__PURE__ */ jsxs63("div", { className: "ss-g-body", children: [
6639
+ !isOver && /* @__PURE__ */ jsx73(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
6640
+ /* @__PURE__ */ jsxs63("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
6641
+ /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-portrait", children: [
6642
+ revealName ? /* @__PURE__ */ jsx73(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx73(Silhouette, { size: 150, variant: "mystery" }),
6643
+ revealName && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-reveal-name", children: revealName })
6590
6644
  ] }),
6591
- /* @__PURE__ */ jsx72("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-known-cell", children: [
6592
- /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
6593
- /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
6645
+ /* @__PURE__ */ jsx73("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-known-cell", children: [
6646
+ /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
6647
+ /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
6594
6648
  ] }, k.key)) })
6595
6649
  ] }),
6596
- !isOver && /* @__PURE__ */ jsx72(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
6597
- guessResults.length > 0 && /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-table", children: [
6598
- /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-thead", style: cols, children: [
6599
- /* @__PURE__ */ jsx72("span", { children: t.yourGuesses }),
6600
- keys.map((k) => /* @__PURE__ */ jsx72("span", { children: t.labels[k] }, k))
6650
+ !isOver && /* @__PURE__ */ jsx73(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
6651
+ guessResults.length > 0 && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-table", children: [
6652
+ /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-thead", style: cols, children: [
6653
+ /* @__PURE__ */ jsx73("span", { children: t.yourGuesses }),
6654
+ keys.map((k) => /* @__PURE__ */ jsx73("span", { children: t.labels[k] }, k))
6601
6655
  ] }),
6602
6656
  guessResults.map((gr, i) => {
6603
6657
  const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
6604
6658
  const { first, last } = splitName(name);
6605
- return /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-row", style: cols, children: [
6606
- /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-who", children: [
6607
- /* @__PURE__ */ jsx72(PlayerAvatar, { className: "ss-g-mt-av", name }),
6608
- /* @__PURE__ */ jsxs61("span", { className: "ss-g-mt-names", children: [
6609
- first && /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-first", children: first }),
6610
- /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-last", children: last })
6659
+ return /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-row", style: cols, children: [
6660
+ /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-who", children: [
6661
+ /* @__PURE__ */ jsx73(PlayerAvatar, { className: "ss-g-mt-av", name }),
6662
+ /* @__PURE__ */ jsxs63("span", { className: "ss-g-mt-names", children: [
6663
+ first && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-first", children: first }),
6664
+ /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-last", children: last })
6611
6665
  ] })
6612
6666
  ] }),
6613
6667
  keys.map((key) => {
6614
6668
  const v = gr[key];
6615
6669
  const arrow = directionArrow(v);
6616
- return /* @__PURE__ */ jsxs61(
6670
+ return /* @__PURE__ */ jsxs63(
6617
6671
  "div",
6618
6672
  {
6619
6673
  className: "ss-g-mt-cell",
@@ -6621,8 +6675,8 @@ function MysteryTigerGame({
6621
6675
  "data-verdict": v.verdict,
6622
6676
  "aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
6623
6677
  children: [
6624
- /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
6625
- arrow && /* @__PURE__ */ jsx72("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
6678
+ /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
6679
+ arrow && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
6626
6680
  ]
6627
6681
  },
6628
6682
  key
@@ -6631,25 +6685,25 @@ function MysteryTigerGame({
6631
6685
  ] }, gr.playerId);
6632
6686
  })
6633
6687
  ] }),
6634
- !isOver && /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-legend", children: [
6635
- /* @__PURE__ */ jsxs61("span", { children: [
6636
- /* @__PURE__ */ jsx72("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
6688
+ !isOver && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-legend", children: [
6689
+ /* @__PURE__ */ jsxs63("span", { children: [
6690
+ /* @__PURE__ */ jsx73("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
6637
6691
  t.legendMatch
6638
6692
  ] }),
6639
- /* @__PURE__ */ jsxs61("span", { children: [
6640
- /* @__PURE__ */ jsx72("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
6693
+ /* @__PURE__ */ jsxs63("span", { children: [
6694
+ /* @__PURE__ */ jsx73("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
6641
6695
  t.legendClose
6642
6696
  ] }),
6643
- /* @__PURE__ */ jsxs61("span", { children: [
6697
+ /* @__PURE__ */ jsxs63("span", { children: [
6644
6698
  "\u25B2 ",
6645
6699
  t.legendHigher
6646
6700
  ] })
6647
6701
  ] }),
6648
- clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs61("div", { className: "ss-g-mt-hint", children: [
6649
- /* @__PURE__ */ jsx72(IconBulb, {}),
6650
- /* @__PURE__ */ jsx72("span", { children: clientState.hintLine })
6702
+ clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-hint", children: [
6703
+ /* @__PURE__ */ jsx73(IconBulb, {}),
6704
+ /* @__PURE__ */ jsx73("span", { children: clientState.hintLine })
6651
6705
  ] }),
6652
- isOver && /* @__PURE__ */ jsx72(
6706
+ isOver && /* @__PURE__ */ jsx73(
6653
6707
  ResultCard,
6654
6708
  {
6655
6709
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -6661,39 +6715,26 @@ function MysteryTigerGame({
6661
6715
  }
6662
6716
  )
6663
6717
  ] }),
6664
- !isOver && /* @__PURE__ */ jsxs61(FooterBar, { children: [
6665
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx72(
6666
- OptionList,
6667
- {
6668
- label: t.optionsLabel,
6669
- options: filtered.map((p) => ({
6670
- key: p.id,
6671
- content: /* @__PURE__ */ jsxs61(Fragment11, { children: [
6672
- /* @__PURE__ */ jsx72(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
6673
- /* @__PURE__ */ jsx72("span", { children: p.name })
6674
- ] })
6675
- })),
6676
- onPick: (k) => handleSelect(Number(k))
6677
- }
6678
- ),
6679
- /* @__PURE__ */ jsx72(
6680
- SearchField,
6681
- {
6682
- id: inputId,
6683
- label: t.searchLabel,
6684
- placeholder: t.searchPlaceholder,
6685
- value: query,
6686
- onChange: setQuery,
6687
- disabled: submitting
6688
- }
6689
- )
6690
- ] })
6718
+ !isOver && /* @__PURE__ */ jsx73(FooterBar, { children: /* @__PURE__ */ jsx73(
6719
+ AnswerTray,
6720
+ {
6721
+ id: inputId,
6722
+ label: t.searchLabel,
6723
+ placeholder: t.searchPlaceholder,
6724
+ optionsLabel: t.optionsLabel,
6725
+ options: pool,
6726
+ query,
6727
+ onQuery: setQuery,
6728
+ onPick: handleSelect,
6729
+ disabled: submitting
6730
+ }
6731
+ ) })
6691
6732
  ] })
6692
6733
  ] });
6693
6734
  }
6694
6735
 
6695
6736
  // src/components/games/HigherOrLowerGame.tsx
6696
- import { Fragment as Fragment12, jsx as jsx73, jsxs as jsxs62 } from "react/jsx-runtime";
6737
+ import { Fragment as Fragment13, jsx as jsx74, jsxs as jsxs64 } from "react/jsx-runtime";
6697
6738
  var POINTS_PER_CORRECT = 10;
6698
6739
  function parseClientState2(json) {
6699
6740
  if (!json) return null;
@@ -6705,11 +6746,11 @@ function parseClientState2(json) {
6705
6746
  }
6706
6747
  function PlayerCard({ name, imagePath, highlight, children }) {
6707
6748
  const { first, last } = splitName(name);
6708
- return /* @__PURE__ */ jsxs62("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
6709
- /* @__PURE__ */ jsx73("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx73(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx73(Silhouette, { size: 150 }) }),
6710
- /* @__PURE__ */ jsxs62("div", { className: "ss-g-hl-info", children: [
6711
- first && /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-first", children: first }),
6712
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-surname", children: last }),
6749
+ return /* @__PURE__ */ jsxs64("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
6750
+ /* @__PURE__ */ jsx74("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx74(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx74(Silhouette, { size: 150 }) }),
6751
+ /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-info", children: [
6752
+ first && /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-first", children: first }),
6753
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-surname", children: last }),
6713
6754
  children
6714
6755
  ] })
6715
6756
  ] });
@@ -6741,47 +6782,47 @@ function HigherOrLowerGame({
6741
6782
  const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
6742
6783
  onSubmit(JSON.stringify({ answers: newAnswers }));
6743
6784
  }
6744
- return /* @__PURE__ */ jsxs62("div", { className: "ss-g-screen ss-g-hl", "data-testid": "game-screen-higher-or-lower", children: [
6745
- /* @__PURE__ */ jsx73(
6785
+ return /* @__PURE__ */ jsxs64("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
6786
+ /* @__PURE__ */ jsx74(
6746
6787
  GameHeader,
6747
6788
  {
6748
6789
  title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
6749
6790
  eyebrow: t.eyebrow(POINTS_PER_CORRECT),
6750
- right: config ? /* @__PURE__ */ jsx73(StatStack, { value: runLength, label: t.streak }) : void 0,
6791
+ right: config ? /* @__PURE__ */ jsx74(StatStack, { value: runLength, label: t.streak }) : void 0,
6751
6792
  onBack,
6752
6793
  backLabel: ui.back
6753
6794
  }
6754
6795
  ),
6755
- !config && /* @__PURE__ */ jsx73("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6756
- config && /* @__PURE__ */ jsxs62(Fragment12, { children: [
6757
- /* @__PURE__ */ jsxs62("div", { className: "ss-g-body", children: [
6758
- /* @__PURE__ */ jsxs62("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
6759
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
6760
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
6761
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
6796
+ !config && /* @__PURE__ */ jsx74("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6797
+ config && /* @__PURE__ */ jsxs64(Fragment13, { children: [
6798
+ /* @__PURE__ */ jsxs64("div", { className: "ss-g-body", children: [
6799
+ /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
6800
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
6801
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
6802
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
6762
6803
  ] }),
6763
- currentPair && /* @__PURE__ */ jsxs62("div", { className: "ss-g-hl-pair", children: [
6764
- /* @__PURE__ */ jsxs62(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
6765
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
6766
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-stat", children: config.statLabel })
6804
+ currentPair && /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-pair", children: [
6805
+ /* @__PURE__ */ jsxs64(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
6806
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
6807
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-stat", children: config.statLabel })
6767
6808
  ] }),
6768
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
6769
- /* @__PURE__ */ jsx73(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs62("div", { className: "ss-g-hl-btns", children: [
6770
- /* @__PURE__ */ jsxs62(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
6771
- /* @__PURE__ */ jsx73(IconArrowUp, { size: 16 }),
6809
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
6810
+ /* @__PURE__ */ jsx74(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-btns", children: [
6811
+ /* @__PURE__ */ jsxs64(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
6812
+ /* @__PURE__ */ jsx74(IconArrowUp, { size: 16 }),
6772
6813
  t.higher
6773
6814
  ] }),
6774
- /* @__PURE__ */ jsxs62(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
6775
- /* @__PURE__ */ jsx73(IconArrowDown, { size: 16 }),
6815
+ /* @__PURE__ */ jsxs64(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
6816
+ /* @__PURE__ */ jsx74(IconArrowDown, { size: 16 }),
6776
6817
  t.lower
6777
6818
  ] })
6778
6819
  ] }) })
6779
6820
  ] }),
6780
- lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs62("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
6781
- lastAnswer.wasCorrect ? /* @__PURE__ */ jsx73(IconCheck, {}) : /* @__PURE__ */ jsx73(IconClose, {}),
6821
+ lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs64("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
6822
+ lastAnswer.wasCorrect ? /* @__PURE__ */ jsx74(IconCheck, {}) : /* @__PURE__ */ jsx74(IconClose, {}),
6782
6823
  t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
6783
6824
  ] }),
6784
- isOver && /* @__PURE__ */ jsx73(
6825
+ isOver && /* @__PURE__ */ jsx74(
6785
6826
  ResultCard,
6786
6827
  {
6787
6828
  tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
@@ -6793,15 +6834,15 @@ function HigherOrLowerGame({
6793
6834
  }
6794
6835
  )
6795
6836
  ] }),
6796
- !isOver && /* @__PURE__ */ jsx73(FooterBar, { children: /* @__PURE__ */ jsxs62("div", { className: "ss-g-hl-foot", children: [
6797
- /* @__PURE__ */ jsx73("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
6837
+ !isOver && /* @__PURE__ */ jsx74(FooterBar, { children: /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-foot", children: [
6838
+ /* @__PURE__ */ jsx74("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
6798
6839
  const a = answeredPairs[i];
6799
- return /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
6840
+ return /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
6800
6841
  }) }),
6801
- /* @__PURE__ */ jsxs62("span", { className: "ss-g-hl-pts", children: [
6802
- /* @__PURE__ */ jsx73("span", { "data-testid": "hol-score", children: score }),
6842
+ /* @__PURE__ */ jsxs64("span", { className: "ss-g-hl-pts", children: [
6843
+ /* @__PURE__ */ jsx74("span", { "data-testid": "hol-score", children: score }),
6803
6844
  " ",
6804
- /* @__PURE__ */ jsx73("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
6845
+ /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
6805
6846
  ] })
6806
6847
  ] }) })
6807
6848
  ] })
@@ -6813,17 +6854,17 @@ import { useState as useState31, useId as useId3 } from "react";
6813
6854
 
6814
6855
  // src/components/games/ui/CrestShield.tsx
6815
6856
  import { useState as useState30 } from "react";
6816
- import { jsx as jsx74 } from "react/jsx-runtime";
6857
+ import { jsx as jsx75 } from "react/jsx-runtime";
6817
6858
  function CrestShield({ src, name, size = 28 }) {
6818
6859
  const [failed, setFailed] = useState30(false);
6819
6860
  if (src && !isPlaceholderImage(src) && !failed) {
6820
- return /* @__PURE__ */ jsx74("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
6861
+ return /* @__PURE__ */ jsx75("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
6821
6862
  }
6822
- return /* @__PURE__ */ jsx74("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__ */ jsx74("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
6863
+ return /* @__PURE__ */ jsx75("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__ */ jsx75("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
6823
6864
  }
6824
6865
 
6825
6866
  // src/components/games/CareerPathGame.tsx
6826
- import { Fragment as Fragment13, jsx as jsx75, jsxs as jsxs63 } from "react/jsx-runtime";
6867
+ import { Fragment as Fragment14, jsx as jsx76, jsxs as jsxs65 } from "react/jsx-runtime";
6827
6868
  function parseClientState3(json) {
6828
6869
  if (!json) return null;
6829
6870
  try {
@@ -6853,17 +6894,15 @@ function CareerPathGame({
6853
6894
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
6854
6895
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
6855
6896
  if (!config) {
6856
- return /* @__PURE__ */ jsxs63("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
6857
- /* @__PURE__ */ jsx75(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
6858
- /* @__PURE__ */ jsx75("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6897
+ return /* @__PURE__ */ jsxs65("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
6898
+ /* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
6899
+ /* @__PURE__ */ jsx76("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6859
6900
  ] });
6860
6901
  }
6861
6902
  const visiblePath = clientState?.visiblePath ?? config.initialPath;
6862
6903
  const totalClubs = clientState?.totalClubs ?? config.totalClubs;
6863
6904
  const hidden = isOver ? 0 : Math.max(0, totalClubs - visiblePath.length);
6864
- const filtered = !isOver ? config.typeaheadPool.filter(
6865
- (p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
6866
- ) : [];
6905
+ const pool = !isOver ? config.typeaheadPool.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
6867
6906
  function handleSelect(playerId) {
6868
6907
  if (!config || isOver || submitting) return;
6869
6908
  const prevGuesses = clientState?.guessResults.map((g) => g.playerId) ?? [];
@@ -6871,60 +6910,61 @@ function CareerPathGame({
6871
6910
  setQuery("");
6872
6911
  onSubmit(JSON.stringify({ guesses: newGuesses }));
6873
6912
  }
6874
- const right = !isOver && clientState ? /* @__PURE__ */ jsx75("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs63(Chip, { variant: "neutral", children: [
6913
+ const right = !isOver && clientState ? /* @__PURE__ */ jsx76("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs65(Chip, { variant: "neutral", children: [
6875
6914
  ui.games.guess,
6876
6915
  " ",
6877
- /* @__PURE__ */ jsx75("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
6916
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
6878
6917
  " / ",
6879
6918
  clientState.guessesUsed + clientState.guessesRemaining
6880
6919
  ] }) }) : void 0;
6881
6920
  const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
6882
- return /* @__PURE__ */ jsxs63("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
6883
- /* @__PURE__ */ jsx75(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
6884
- /* @__PURE__ */ jsxs63("div", { className: "ss-g-body", children: [
6885
- /* @__PURE__ */ jsxs63("div", { className: "ss-g-cp-card", children: [
6886
- isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx75(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx75(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
6887
- /* @__PURE__ */ jsxs63("div", { className: "ss-g-cp-card-text", children: [
6888
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
6889
- clientState?.hintLine ? /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs63("span", { className: "ss-g-cp-locks", children: [
6890
- /* @__PURE__ */ jsx75(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx75(IconLock, { size: 11 }), children: s.lockPosition }),
6891
- /* @__PURE__ */ jsx75(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx75(IconLock, { size: 11 }), children: s.lockNationality })
6921
+ return /* @__PURE__ */ jsxs65("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
6922
+ /* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
6923
+ /* @__PURE__ */ jsxs65("div", { className: "ss-g-body", children: [
6924
+ !isOver && /* @__PURE__ */ jsx76(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
6925
+ /* @__PURE__ */ jsxs65("div", { className: "ss-g-cp-card", children: [
6926
+ isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx76(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx76(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
6927
+ /* @__PURE__ */ jsxs65("div", { className: "ss-g-cp-card-text", children: [
6928
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
6929
+ clientState?.hintLine ? /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-locks", children: [
6930
+ /* @__PURE__ */ jsx76(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx76(IconLock, { size: 11 }), children: s.lockPosition }),
6931
+ /* @__PURE__ */ jsx76(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx76(IconLock, { size: 11 }), children: s.lockNationality })
6892
6932
  ] }) : null
6893
6933
  ] })
6894
6934
  ] }),
6895
- /* @__PURE__ */ jsxs63("ol", { className: "ss-g-cp-line", children: [
6935
+ /* @__PURE__ */ jsxs65("ol", { className: "ss-g-cp-line", children: [
6896
6936
  visiblePath.map((spell, i) => {
6897
6937
  const years = i === 0 ? s.firstClub : spellYears(spell);
6898
- return /* @__PURE__ */ jsxs63("li", { className: "ss-g-cp-step", children: [
6899
- /* @__PURE__ */ jsxs63("span", { className: "ss-g-cp-rail", children: [
6900
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx75(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
6901
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
6938
+ return /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step", children: [
6939
+ /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-rail", children: [
6940
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx76(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
6941
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
6902
6942
  ] }),
6903
- /* @__PURE__ */ jsxs63("span", { className: "ss-g-cp-step-text", children: [
6904
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-club", children: spell.clubName }),
6905
- /* @__PURE__ */ jsxs63("span", { className: "ss-g-cp-sub", children: [
6906
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-years", children: years }),
6907
- spell.isLoan && /* @__PURE__ */ jsxs63(Fragment13, { children: [
6943
+ /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-step-text", children: [
6944
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-club", children: spell.clubName }),
6945
+ /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-sub", children: [
6946
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-years", children: years }),
6947
+ spell.isLoan && /* @__PURE__ */ jsxs65(Fragment14, { children: [
6908
6948
  years ? " \xB7 " : "",
6909
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-loan", children: s.loan })
6949
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-loan", children: s.loan })
6910
6950
  ] })
6911
6951
  ] })
6912
6952
  ] })
6913
6953
  ] }, `${spell.clubName}-${i}`);
6914
6954
  }),
6915
- hidden > 0 && /* @__PURE__ */ jsxs63("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
6916
- /* @__PURE__ */ jsxs63("span", { className: "ss-g-cp-rail", children: [
6917
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx75(IconLock, { size: 18 }) }),
6918
- hidden > 1 && /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
6955
+ hidden > 0 && /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
6956
+ /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-rail", children: [
6957
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx76(IconLock, { size: 18 }) }),
6958
+ hidden > 1 && /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
6919
6959
  ] }),
6920
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
6960
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
6921
6961
  ] }),
6922
- hidden > 1 && /* @__PURE__ */ jsxs63("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
6923
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx75(IconLock, { size: 18 }) }) }),
6924
- /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx75("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
6962
+ hidden > 1 && /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
6963
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx76(IconLock, { size: 18 }) }) }),
6964
+ /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
6925
6965
  ] })
6926
6966
  ] }),
6927
- isOver && /* @__PURE__ */ jsx75(
6967
+ isOver && /* @__PURE__ */ jsx76(
6928
6968
  ResultCard,
6929
6969
  {
6930
6970
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -6936,39 +6976,35 @@ function CareerPathGame({
6936
6976
  }
6937
6977
  )
6938
6978
  ] }),
6939
- !isOver && /* @__PURE__ */ jsxs63(FooterBar, { children: [
6940
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx75(
6941
- OptionList,
6942
- {
6943
- label: s.searchLabel,
6944
- options: filtered.map((p) => ({
6945
- key: p.id,
6946
- content: /* @__PURE__ */ jsxs63(Fragment13, { children: [
6947
- /* @__PURE__ */ jsx75(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
6948
- /* @__PURE__ */ jsx75("span", { children: p.name })
6949
- ] })
6950
- })),
6951
- onPick: (k) => handleSelect(Number(k))
6952
- }
6953
- ),
6954
- /* @__PURE__ */ jsx75(
6955
- SearchField,
6956
- {
6957
- id: inputId,
6958
- label: s.searchLabel,
6959
- placeholder: s.searchPlaceholder,
6960
- value: query,
6961
- onChange: setQuery,
6962
- disabled: submitting
6963
- }
6964
- )
6965
- ] })
6979
+ !isOver && /* @__PURE__ */ jsx76(FooterBar, { children: /* @__PURE__ */ jsx76(
6980
+ AnswerTray,
6981
+ {
6982
+ id: inputId,
6983
+ label: s.searchLabel,
6984
+ placeholder: s.searchPlaceholder,
6985
+ optionsLabel: s.searchLabel,
6986
+ options: pool,
6987
+ query,
6988
+ onQuery: setQuery,
6989
+ onPick: handleSelect,
6990
+ disabled: submitting,
6991
+ minQuery: 1
6992
+ }
6993
+ ) })
6966
6994
  ] });
6967
6995
  }
6968
6996
 
6969
6997
  // src/components/games/BeatTheGridGame.tsx
6970
6998
  import React, { useEffect as useEffect20, useId as useId4, useRef as useRef17, useState as useState32 } from "react";
6971
- import { Fragment as Fragment14, jsx as jsx76, jsxs as jsxs64 } from "react/jsx-runtime";
6999
+
7000
+ // src/components/games/ui/OptionList.tsx
7001
+ import { jsx as jsx77 } from "react/jsx-runtime";
7002
+ function OptionList({ label, options, onPick }) {
7003
+ return /* @__PURE__ */ jsx77("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx77("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
7004
+ }
7005
+
7006
+ // src/components/games/BeatTheGridGame.tsx
7007
+ import { Fragment as Fragment15, jsx as jsx78, jsxs as jsxs66 } from "react/jsx-runtime";
6972
7008
  function criterionIconKind(label, key) {
6973
7009
  const l = (key ?? label).toLowerCase();
6974
7010
  if (l.includes("app")) return "calendar";
@@ -6986,34 +7022,34 @@ function rowAbbrev(label, map, key) {
6986
7022
  function CriterionIcon({ kind }) {
6987
7023
  switch (kind) {
6988
7024
  case "calendar":
6989
- return /* @__PURE__ */ jsx76(IconCalendar, {});
7025
+ return /* @__PURE__ */ jsx78(IconCalendar, {});
6990
7026
  case "ball":
6991
- return /* @__PURE__ */ jsx76(IconBall, {});
7027
+ return /* @__PURE__ */ jsx78(IconBall, {});
6992
7028
  case "boot":
6993
- return /* @__PURE__ */ jsx76(IconBoot, {});
7029
+ return /* @__PURE__ */ jsx78(IconBoot, {});
6994
7030
  case "gloves":
6995
- return /* @__PURE__ */ jsx76(IconGloves, {});
7031
+ return /* @__PURE__ */ jsx78(IconGloves, {});
6996
7032
  case "shield":
6997
- return /* @__PURE__ */ jsx76(IconShield, {});
7033
+ return /* @__PURE__ */ jsx78(IconShield, {});
6998
7034
  default:
6999
- return /* @__PURE__ */ jsx76(IconFlag, {});
7035
+ return /* @__PURE__ */ jsx78(IconFlag, {});
7000
7036
  }
7001
7037
  }
7002
7038
  function HeaderVisual({ label, textKey: iKey, meta }) {
7003
7039
  if (!meta) {
7004
- return /* @__PURE__ */ jsx76(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7040
+ return /* @__PURE__ */ jsx78(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7005
7041
  }
7006
7042
  switch (meta.kind) {
7007
7043
  case "club":
7008
- return /* @__PURE__ */ jsx76(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7044
+ return /* @__PURE__ */ jsx78(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7009
7045
  case "coach":
7010
- return /* @__PURE__ */ jsx76(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7046
+ return /* @__PURE__ */ jsx78(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7011
7047
  case "country":
7012
- return /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7048
+ return /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7013
7049
  case "position":
7014
- return /* @__PURE__ */ jsx76(Fragment14, {});
7050
+ return /* @__PURE__ */ jsx78(Fragment15, {});
7015
7051
  default:
7016
- return /* @__PURE__ */ jsx76(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7052
+ return /* @__PURE__ */ jsx78(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7017
7053
  }
7018
7054
  }
7019
7055
  function parseClientState4(json) {
@@ -7057,12 +7093,12 @@ function SearchSheet({
7057
7093
  const filtered = playerPool.filter(
7058
7094
  (p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
7059
7095
  );
7060
- return /* @__PURE__ */ jsxs64("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7061
- /* @__PURE__ */ jsxs64("div", { className: "ss-g-btg-sheet-hdr", children: [
7062
- /* @__PURE__ */ jsx76(Chip, { variant: "neutral", children: rowLabel }),
7063
- /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx76(IconClose, { size: 12 }) }),
7064
- /* @__PURE__ */ jsx76(Chip, { variant: "accent", children: colLabel }),
7065
- /* @__PURE__ */ jsx76(
7096
+ return /* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7097
+ /* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-sheet-hdr", children: [
7098
+ /* @__PURE__ */ jsx78(Chip, { variant: "neutral", children: rowLabel }),
7099
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconClose, { size: 12 }) }),
7100
+ /* @__PURE__ */ jsx78(Chip, { variant: "accent", children: colLabel }),
7101
+ /* @__PURE__ */ jsx78(
7066
7102
  "button",
7067
7103
  {
7068
7104
  type: "button",
@@ -7070,12 +7106,12 @@ function SearchSheet({
7070
7106
  "data-testid": "btg-sheet-dismiss",
7071
7107
  "aria-label": s.closeSearch,
7072
7108
  onClick: onDismiss,
7073
- children: /* @__PURE__ */ jsx76(IconClose, {})
7109
+ children: /* @__PURE__ */ jsx78(IconClose, {})
7074
7110
  }
7075
7111
  )
7076
7112
  ] }),
7077
- playerPool.length === 0 ? /* @__PURE__ */ jsx76("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs64(Fragment14, { children: [
7078
- /* @__PURE__ */ jsx76(
7113
+ playerPool.length === 0 ? /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs66(Fragment15, { children: [
7114
+ /* @__PURE__ */ jsx78(
7079
7115
  SearchField,
7080
7116
  {
7081
7117
  id: inputId,
@@ -7087,16 +7123,16 @@ function SearchSheet({
7087
7123
  inputRef
7088
7124
  }
7089
7125
  ),
7090
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx76(
7126
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx78(
7091
7127
  OptionList,
7092
7128
  {
7093
7129
  label: s.searchLabel(rowLabel, colLabel),
7094
7130
  options: filtered.map((p) => ({
7095
7131
  key: p.id,
7096
- content: /* @__PURE__ */ jsxs64(Fragment14, { children: [
7097
- /* @__PURE__ */ jsx76(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7098
- /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-result-name", children: p.name }),
7099
- /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx76(IconPlus, { size: 18 }) })
7132
+ content: /* @__PURE__ */ jsxs66(Fragment15, { children: [
7133
+ /* @__PURE__ */ jsx78(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7134
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-result-name", children: p.name }),
7135
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconPlus, { size: 18 }) })
7100
7136
  ] })
7101
7137
  })),
7102
7138
  onPick: (k) => onPick(row, col, Number(k))
@@ -7134,9 +7170,9 @@ function BeatTheGridGame({
7134
7170
  onSubmit(JSON.stringify({ cells: newCells }));
7135
7171
  }
7136
7172
  if (!config) {
7137
- return /* @__PURE__ */ jsxs64("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
7138
- /* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7139
- /* @__PURE__ */ jsx76("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7173
+ return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7174
+ /* @__PURE__ */ jsx78(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7175
+ /* @__PURE__ */ jsx78("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7140
7176
  ] });
7141
7177
  }
7142
7178
  const rows = config.rows;
@@ -7149,20 +7185,20 @@ function BeatTheGridGame({
7149
7185
  (_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
7150
7186
  );
7151
7187
  const totalScore = clientState?.totalScore ?? result?.score ?? 0;
7152
- return /* @__PURE__ */ jsxs64("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
7153
- /* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7154
- /* @__PURE__ */ jsx76(
7188
+ return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7189
+ /* @__PURE__ */ jsx78(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7190
+ /* @__PURE__ */ jsx78(
7155
7191
  SegmentProgress,
7156
7192
  {
7157
7193
  segments,
7158
7194
  ariaLabel: s.progressAria(filledCells.length, total),
7159
7195
  leftLabel: s.filled(filledCells.length, total),
7160
7196
  rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
7161
- right: /* @__PURE__ */ jsx76(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7197
+ right: /* @__PURE__ */ jsx78(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7162
7198
  }
7163
7199
  ),
7164
- /* @__PURE__ */ jsxs64("div", { className: "ss-g-body", children: [
7165
- /* @__PURE__ */ jsxs64(
7200
+ /* @__PURE__ */ jsxs66("div", { className: "ss-g-body", children: [
7201
+ /* @__PURE__ */ jsxs66(
7166
7202
  "div",
7167
7203
  {
7168
7204
  className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
@@ -7172,31 +7208,31 @@ function BeatTheGridGame({
7172
7208
  },
7173
7209
  role: "grid",
7174
7210
  children: [
7175
- /* @__PURE__ */ jsx76("div", { className: "ss-g-btg-corner" }),
7211
+ /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-corner" }),
7176
7212
  cols.map((col, colIdx) => {
7177
7213
  const colMeta = config.colsMeta?.[colIdx];
7178
- return /* @__PURE__ */ jsxs64("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7179
- /* @__PURE__ */ jsx76(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7180
- /* @__PURE__ */ jsx76("span", { children: col })
7214
+ return /* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7215
+ /* @__PURE__ */ jsx78(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7216
+ /* @__PURE__ */ jsx78("span", { children: col })
7181
7217
  ] }, col);
7182
7218
  }),
7183
7219
  rows.map((rowLabel, rowIdx) => {
7184
7220
  const rowMeta = config.rowsMeta?.[rowIdx];
7185
7221
  const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
7186
- const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
7187
- /* @__PURE__ */ jsx76(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7188
- /* @__PURE__ */ jsx76("span", { children: rowLabel })
7189
- ] }) : abbr === rowLabel ? /* @__PURE__ */ jsx76("span", { children: rowLabel }) : /* @__PURE__ */ jsxs64(Fragment14, { children: [
7190
- /* @__PURE__ */ jsx76("span", { "aria-hidden": "true", children: abbr }),
7191
- /* @__PURE__ */ jsx76("span", { className: "ss-g-sr", children: rowLabel })
7222
+ const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs66(Fragment15, { children: [
7223
+ /* @__PURE__ */ jsx78(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7224
+ /* @__PURE__ */ jsx78("span", { children: rowLabel })
7225
+ ] }) : abbr === rowLabel ? /* @__PURE__ */ jsx78("span", { children: rowLabel }) : /* @__PURE__ */ jsxs66(Fragment15, { children: [
7226
+ /* @__PURE__ */ jsx78("span", { "aria-hidden": "true", children: abbr }),
7227
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-sr", children: rowLabel })
7192
7228
  ] });
7193
- return /* @__PURE__ */ jsxs64(React.Fragment, { children: [
7194
- /* @__PURE__ */ jsx76("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7229
+ return /* @__PURE__ */ jsxs66(React.Fragment, { children: [
7230
+ /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7195
7231
  cols.map((colLabel, colIdx) => {
7196
7232
  const filled = findCellResult(filledCells, rowIdx, colIdx);
7197
7233
  const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
7198
7234
  const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
7199
- return /* @__PURE__ */ jsx76(
7235
+ return /* @__PURE__ */ jsx78(
7200
7236
  "button",
7201
7237
  {
7202
7238
  type: "button",
@@ -7207,20 +7243,20 @@ function BeatTheGridGame({
7207
7243
  className: "ss-g-btg-cell",
7208
7244
  disabled: isLocked2 || submitting,
7209
7245
  onClick: () => handleCellClick(rowIdx, colIdx),
7210
- children: filled ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
7211
- /* @__PURE__ */ jsx76(
7246
+ children: filled ? /* @__PURE__ */ jsxs66(Fragment15, { children: [
7247
+ /* @__PURE__ */ jsx78(
7212
7248
  "span",
7213
7249
  {
7214
7250
  className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
7215
7251
  role: "img",
7216
7252
  "aria-label": filled.isCorrect ? s.correct : s.wrong,
7217
- children: filled.isCorrect ? /* @__PURE__ */ jsx76(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx76(IconClose, { size: 11 })
7253
+ children: filled.isCorrect ? /* @__PURE__ */ jsx78(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx78(IconClose, { size: 11 })
7218
7254
  }
7219
7255
  ),
7220
- /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7256
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7221
7257
  (() => {
7222
7258
  const entry = playerPool.find((p) => p.id === filled.playerId);
7223
- return /* @__PURE__ */ jsx76(
7259
+ return /* @__PURE__ */ jsx78(
7224
7260
  PlayerAvatar,
7225
7261
  {
7226
7262
  name: entry?.name ?? "",
@@ -7229,8 +7265,8 @@ function BeatTheGridGame({
7229
7265
  }
7230
7266
  );
7231
7267
  })(),
7232
- /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7233
- ] }) : /* @__PURE__ */ jsx76("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx76(IconPlus, { size: 22 }) })
7268
+ /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7269
+ ] }) : /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconPlus, { size: 22 }) })
7234
7270
  },
7235
7271
  `cell-${rowIdx}-${colIdx}`
7236
7272
  );
@@ -7240,7 +7276,7 @@ function BeatTheGridGame({
7240
7276
  ]
7241
7277
  }
7242
7278
  ),
7243
- isLocked2 && /* @__PURE__ */ jsx76(
7279
+ isLocked2 && /* @__PURE__ */ jsx78(
7244
7280
  ResultCard,
7245
7281
  {
7246
7282
  tone: "neutral",
@@ -7252,7 +7288,7 @@ function BeatTheGridGame({
7252
7288
  }
7253
7289
  )
7254
7290
  ] }),
7255
- activeCell !== null && /* @__PURE__ */ jsx76("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx76(
7291
+ activeCell !== null && /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx78(
7256
7292
  SearchSheet,
7257
7293
  {
7258
7294
  row: activeCell.row,
@@ -7274,18 +7310,18 @@ function BeatTheGridGame({
7274
7310
  import { useState as useState33, useId as useId5 } from "react";
7275
7311
 
7276
7312
  // src/components/games/ui/PitchSvg.tsx
7277
- import { Fragment as Fragment15, jsx as jsx77, jsxs as jsxs65 } from "react/jsx-runtime";
7313
+ import { Fragment as Fragment16, jsx as jsx79, jsxs as jsxs67 } from "react/jsx-runtime";
7278
7314
  function PitchSvg({ variant }) {
7279
- return /* @__PURE__ */ jsxs65("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
7280
- /* @__PURE__ */ jsx77("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
7281
- variant === "full" ? /* @__PURE__ */ jsxs65(Fragment15, { children: [
7282
- /* @__PURE__ */ jsx77("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
7283
- /* @__PURE__ */ jsx77("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
7284
- /* @__PURE__ */ jsx77("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
7285
- /* @__PURE__ */ jsx77("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
7286
- ] }) : /* @__PURE__ */ jsxs65(Fragment15, { children: [
7287
- /* @__PURE__ */ jsx77("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
7288
- /* @__PURE__ */ jsx77("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
7315
+ return /* @__PURE__ */ jsxs67("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
7316
+ /* @__PURE__ */ jsx79("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
7317
+ variant === "full" ? /* @__PURE__ */ jsxs67(Fragment16, { children: [
7318
+ /* @__PURE__ */ jsx79("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
7319
+ /* @__PURE__ */ jsx79("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
7320
+ /* @__PURE__ */ jsx79("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
7321
+ /* @__PURE__ */ jsx79("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
7322
+ ] }) : /* @__PURE__ */ jsxs67(Fragment16, { children: [
7323
+ /* @__PURE__ */ jsx79("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
7324
+ /* @__PURE__ */ jsx79("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
7289
7325
  ] })
7290
7326
  ] });
7291
7327
  }
@@ -7341,7 +7377,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
7341
7377
  }
7342
7378
 
7343
7379
  // src/components/games/GuessTheXiGame.tsx
7344
- import { Fragment as Fragment16, jsx as jsx78, jsxs as jsxs66 } from "react/jsx-runtime";
7380
+ import { Fragment as Fragment17, jsx as jsx80, jsxs as jsxs68 } from "react/jsx-runtime";
7345
7381
  var MAX_GUESSES2 = 3;
7346
7382
  function parseClientState5(json) {
7347
7383
  if (!json) return null;
@@ -7391,30 +7427,31 @@ function GuessTheXiGame({
7391
7427
  const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
7392
7428
  const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
7393
7429
  const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
7394
- return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen ss-g-gxi", "data-testid": "game-screen-guess-the-xi", children: [
7395
- /* @__PURE__ */ jsx78(
7430
+ return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
7431
+ /* @__PURE__ */ jsx80(
7396
7432
  GameHeader,
7397
7433
  {
7398
7434
  title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
7399
7435
  eyebrow: config?.poolLabel,
7400
- right: formation ? /* @__PURE__ */ jsx78(Chip, { variant: "accent", children: formation }) : void 0,
7436
+ right: formation ? /* @__PURE__ */ jsx80(Chip, { variant: "accent", children: formation }) : void 0,
7401
7437
  onBack,
7402
7438
  backLabel: ui.back
7403
7439
  }
7404
7440
  ),
7405
- !config && /* @__PURE__ */ jsx78("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7406
- config && /* @__PURE__ */ jsxs66(Fragment16, { children: [
7407
- /* @__PURE__ */ jsxs66("div", { className: "ss-g-body", children: [
7408
- rows.length > 0 && /* @__PURE__ */ jsxs66("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
7409
- /* @__PURE__ */ jsx78(PitchSvg, { variant: "full" }),
7410
- /* @__PURE__ */ jsx78("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx78("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
7441
+ !config && /* @__PURE__ */ jsx80("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7442
+ config && /* @__PURE__ */ jsxs68(Fragment17, { children: [
7443
+ /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
7444
+ !isOver && /* @__PURE__ */ jsx80(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
7445
+ rows.length > 0 && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
7446
+ /* @__PURE__ */ jsx80(PitchSvg, { variant: "full" }),
7447
+ /* @__PURE__ */ jsx80("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx80("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
7411
7448
  const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
7412
7449
  const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
7413
7450
  const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
7414
7451
  const flag = nationalityFlag(pos.nationality);
7415
7452
  if (lineupEntry) {
7416
- return /* @__PURE__ */ jsxs66("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
7417
- /* @__PURE__ */ jsx78(
7453
+ return /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
7454
+ /* @__PURE__ */ jsx80(
7418
7455
  PlayerAvatar,
7419
7456
  {
7420
7457
  name: lineupEntry.name,
@@ -7422,11 +7459,11 @@ function GuessTheXiGame({
7422
7459
  className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
7423
7460
  }
7424
7461
  ),
7425
- /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
7462
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
7426
7463
  ] }, `${pos.slot}-${c}`);
7427
7464
  }
7428
- return /* @__PURE__ */ jsxs66("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
7429
- /* @__PURE__ */ jsx78(
7465
+ return /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
7466
+ /* @__PURE__ */ jsx80(
7430
7467
  "span",
7431
7468
  {
7432
7469
  className: "ss-g-gxi-disc",
@@ -7437,22 +7474,22 @@ function GuessTheXiGame({
7437
7474
  children: flag
7438
7475
  }
7439
7476
  ),
7440
- name ? /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-pos", children: posLabel })
7477
+ name ? /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos", children: posLabel })
7441
7478
  ] }, `${pos.slot}-${c}`);
7442
7479
  }) }, r)) })
7443
7480
  ] }),
7444
- !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs66("div", { className: "ss-g-gxi-wrong", children: [
7445
- /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
7481
+ !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-wrong", children: [
7482
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
7446
7483
  wrongGuesses.map((g) => {
7447
7484
  const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
7448
- return /* @__PURE__ */ jsxs66("span", { className: "ss-g-gxi-wrong-chip", children: [
7449
- /* @__PURE__ */ jsx78(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
7450
- /* @__PURE__ */ jsx78("s", { children: teamName(g.teamId) })
7485
+ return /* @__PURE__ */ jsxs68("span", { className: "ss-g-gxi-wrong-chip", children: [
7486
+ /* @__PURE__ */ jsx80(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
7487
+ /* @__PURE__ */ jsx80("s", { children: teamName(g.teamId) })
7451
7488
  ] }, g.teamId);
7452
7489
  })
7453
7490
  ] }),
7454
- isOver && /* @__PURE__ */ jsxs66(Fragment16, { children: [
7455
- /* @__PURE__ */ jsx78(
7491
+ isOver && /* @__PURE__ */ jsxs68(Fragment17, { children: [
7492
+ /* @__PURE__ */ jsx80(
7456
7493
  ResultCard,
7457
7494
  {
7458
7495
  tone: solved ? "win" : failed ? "lose" : "neutral",
@@ -7463,29 +7500,29 @@ function GuessTheXiGame({
7463
7500
  ui
7464
7501
  }
7465
7502
  ),
7466
- (solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs66("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
7467
- /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
7468
- /* @__PURE__ */ jsx78(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
7469
- /* @__PURE__ */ jsx78("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
7503
+ (solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
7504
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
7505
+ /* @__PURE__ */ jsx80(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
7506
+ /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
7470
7507
  ] })
7471
7508
  ] })
7472
7509
  ] }),
7473
- !isOver && /* @__PURE__ */ jsxs66(FooterBar, { children: [
7474
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx78(
7510
+ !isOver && /* @__PURE__ */ jsxs68(FooterBar, { children: [
7511
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx80(
7475
7512
  OptionList,
7476
7513
  {
7477
7514
  label: t.optionsLabel,
7478
7515
  options: filtered.map((tm) => ({
7479
7516
  key: tm.teamId,
7480
- content: /* @__PURE__ */ jsxs66(Fragment16, { children: [
7481
- /* @__PURE__ */ jsx78(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
7482
- /* @__PURE__ */ jsx78("span", { children: tm.teamName })
7517
+ content: /* @__PURE__ */ jsxs68(Fragment17, { children: [
7518
+ /* @__PURE__ */ jsx80(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
7519
+ /* @__PURE__ */ jsx80("span", { children: tm.teamName })
7483
7520
  ] })
7484
7521
  })),
7485
7522
  onPick: (k) => handlePick(Number(k))
7486
7523
  }
7487
7524
  ),
7488
- /* @__PURE__ */ jsx78(
7525
+ /* @__PURE__ */ jsx80(
7489
7526
  SearchField,
7490
7527
  {
7491
7528
  id: inputId,
@@ -7503,7 +7540,7 @@ function GuessTheXiGame({
7503
7540
 
7504
7541
  // src/components/games/DailyQuizGame.tsx
7505
7542
  import { useState as useState34 } from "react";
7506
- import { Fragment as Fragment17, jsx as jsx79, jsxs as jsxs67 } from "react/jsx-runtime";
7543
+ import { Fragment as Fragment18, jsx as jsx81, jsxs as jsxs69 } from "react/jsx-runtime";
7507
7544
  function parseClientState6(json) {
7508
7545
  if (!json) return null;
7509
7546
  try {
@@ -7524,13 +7561,13 @@ function OptionName({ text }) {
7524
7561
  const tokens = base.split(/\s+/).filter(Boolean);
7525
7562
  const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
7526
7563
  if (!isPlainName || base === "") {
7527
- return /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-opt-full", children: text }) });
7564
+ return /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-full", children: text }) });
7528
7565
  }
7529
7566
  const { first, last } = splitName(base);
7530
- return /* @__PURE__ */ jsxs67("span", { className: "ss-g-dq-opt-name", children: [
7531
- first && /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-opt-first", children: first }),
7532
- /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-opt-last", children: last }),
7533
- suffix && /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-opt-suffix", children: suffix })
7567
+ return /* @__PURE__ */ jsxs69("span", { className: "ss-g-dq-opt-name", children: [
7568
+ first && /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-first", children: first }),
7569
+ /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-last", children: last }),
7570
+ suffix && /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-suffix", children: suffix })
7534
7571
  ] });
7535
7572
  }
7536
7573
  function DailyQuizGame({
@@ -7549,9 +7586,9 @@ function DailyQuizGame({
7549
7586
  const results = clientState?.results ?? [];
7550
7587
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
7551
7588
  if (!config) {
7552
- return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7553
- /* @__PURE__ */ jsx79(GameHeader, { title, onBack, backLabel: ui.back }),
7554
- /* @__PURE__ */ jsx79("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7589
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7590
+ /* @__PURE__ */ jsx81(GameHeader, { title, onBack, backLabel: ui.back }),
7591
+ /* @__PURE__ */ jsx81("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7555
7592
  ] });
7556
7593
  }
7557
7594
  const questions = config.questions;
@@ -7586,11 +7623,11 @@ function DailyQuizGame({
7586
7623
  return r.isCorrect ? "correct" : "wrong";
7587
7624
  });
7588
7625
  const correctCount = results.filter((r) => r.isCorrect).length;
7589
- return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7590
- /* @__PURE__ */ jsx79(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
7591
- /* @__PURE__ */ jsx79(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
7592
- /* @__PURE__ */ jsxs67("div", { className: "ss-g-body", children: [
7593
- /* @__PURE__ */ jsx79(
7626
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7627
+ /* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
7628
+ /* @__PURE__ */ jsx81(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
7629
+ /* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
7630
+ /* @__PURE__ */ jsx81(
7594
7631
  ResultCard,
7595
7632
  {
7596
7633
  tone: "neutral",
@@ -7603,15 +7640,15 @@ function DailyQuizGame({
7603
7640
  questions.map((q) => {
7604
7641
  const r = findResult(results, q.index);
7605
7642
  const picked = selections.get(q.index);
7606
- return /* @__PURE__ */ jsxs67("div", { className: "ss-g-dq-rq", children: [
7607
- /* @__PURE__ */ jsx79("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
7608
- r && /* @__PURE__ */ jsx79("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
7643
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-dq-rq", children: [
7644
+ /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
7645
+ r && /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
7609
7646
  let cls = "ss-g-dq-rq-opt";
7610
7647
  if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
7611
7648
  else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
7612
- return /* @__PURE__ */ jsx79("span", { className: cls, children: opt }, optIdx);
7649
+ return /* @__PURE__ */ jsx81("span", { className: cls, children: opt }, optIdx);
7613
7650
  }) }),
7614
- r?.revealText && /* @__PURE__ */ jsx79("div", { className: "ss-g-dq-why", children: r.revealText })
7651
+ r?.revealText && /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-why", children: r.revealText })
7615
7652
  ] }, q.index);
7616
7653
  })
7617
7654
  ] })
@@ -7619,16 +7656,16 @@ function DailyQuizGame({
7619
7656
  }
7620
7657
  const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
7621
7658
  const selectedIdx = current ? selections.get(current.index) : void 0;
7622
- return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7623
- /* @__PURE__ */ jsx79(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
7624
- /* @__PURE__ */ jsx79(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
7625
- /* @__PURE__ */ jsx79("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs67(Fragment17, { children: [
7626
- /* @__PURE__ */ jsx79("h3", { className: "ss-g-dq-stem", children: current.stem }),
7627
- /* @__PURE__ */ jsx79("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
7659
+ return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7660
+ /* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
7661
+ /* @__PURE__ */ jsx81(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
7662
+ /* @__PURE__ */ jsx81("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs69(Fragment18, { children: [
7663
+ /* @__PURE__ */ jsx81("h3", { className: "ss-g-dq-stem", children: current.stem }),
7664
+ /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
7628
7665
  const selected = optIdx === selectedIdx;
7629
7666
  const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
7630
7667
  const playerName = opt;
7631
- return /* @__PURE__ */ jsxs67(
7668
+ return /* @__PURE__ */ jsxs69(
7632
7669
  "button",
7633
7670
  {
7634
7671
  type: "button",
@@ -7637,25 +7674,25 @@ function DailyQuizGame({
7637
7674
  disabled: submitting,
7638
7675
  onClick: () => handleSelect(current.index, optIdx),
7639
7676
  children: [
7640
- current.optionImagePaths && /* @__PURE__ */ jsx79(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
7641
- /* @__PURE__ */ jsx79("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx79(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
7642
- /* @__PURE__ */ jsx79(OptionName, { text: opt })
7677
+ current.optionImagePaths && /* @__PURE__ */ jsx81(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
7678
+ /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx81(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
7679
+ /* @__PURE__ */ jsx81(OptionName, { text: opt })
7643
7680
  ]
7644
7681
  },
7645
7682
  optIdx
7646
7683
  );
7647
7684
  }) })
7648
7685
  ] }) }),
7649
- /* @__PURE__ */ jsx79(FooterBar, { children: /* @__PURE__ */ jsxs67("div", { className: "ss-g-dq-nav", children: [
7650
- page > 0 && /* @__PURE__ */ jsx79(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
7651
- isLast ? /* @__PURE__ */ jsx79(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx79(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
7686
+ /* @__PURE__ */ jsx81(FooterBar, { children: /* @__PURE__ */ jsxs69("div", { className: "ss-g-dq-nav", children: [
7687
+ page > 0 && /* @__PURE__ */ jsx81(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
7688
+ isLast ? /* @__PURE__ */ jsx81(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx81(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
7652
7689
  ] }) })
7653
7690
  ] });
7654
7691
  }
7655
7692
 
7656
7693
  // src/components/games/MatchdayPredictorGame.tsx
7657
7694
  import { useId as useId6, useState as useState35 } from "react";
7658
- import { jsx as jsx80, jsxs as jsxs68 } from "react/jsx-runtime";
7695
+ import { jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
7659
7696
  var SCORER_SEARCH_THRESHOLD = 9;
7660
7697
  function parseClientState7(json) {
7661
7698
  if (!json) return null;
@@ -7673,7 +7710,7 @@ function isLocked(kickoffUtc) {
7673
7710
  }
7674
7711
  }
7675
7712
  function IconMinus() {
7676
- return /* @__PURE__ */ jsx80(
7713
+ return /* @__PURE__ */ jsx82(
7677
7714
  "svg",
7678
7715
  {
7679
7716
  width: 18,
@@ -7684,20 +7721,20 @@ function IconMinus() {
7684
7721
  strokeWidth: 2.2,
7685
7722
  strokeLinecap: "round",
7686
7723
  "aria-hidden": "true",
7687
- children: /* @__PURE__ */ jsx80("path", { d: "M5 12h14" })
7724
+ children: /* @__PURE__ */ jsx82("path", { d: "M5 12h14" })
7688
7725
  }
7689
7726
  );
7690
7727
  }
7691
7728
  function TeamBadge({ team, label }) {
7692
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-mp-team", children: [
7693
- /* @__PURE__ */ jsx80(CrestShield, { name: team.name, size: 44 }),
7694
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-team-name", children: team.name }),
7695
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-team-side", children: label })
7729
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-team", children: [
7730
+ /* @__PURE__ */ jsx82(CrestShield, { name: team.name, size: 44 }),
7731
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-team-name", children: team.name }),
7732
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-team-side", children: label })
7696
7733
  ] });
7697
7734
  }
7698
7735
  function ScoreCard({ home, away, h, a, t, edit }) {
7699
- const col = (side, team, value) => /* @__PURE__ */ jsxs68("div", { className: "ss-g-mp-col", children: [
7700
- edit && /* @__PURE__ */ jsx80(
7736
+ const col = (side, team, value) => /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-col", children: [
7737
+ edit && /* @__PURE__ */ jsx82(
7701
7738
  "button",
7702
7739
  {
7703
7740
  type: "button",
@@ -7705,11 +7742,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
7705
7742
  "aria-label": t.goalsUp(team.name),
7706
7743
  disabled: edit.disabled,
7707
7744
  onClick: () => edit.onStep(side, 1),
7708
- children: /* @__PURE__ */ jsx80(IconPlus, { size: 18 })
7745
+ children: /* @__PURE__ */ jsx82(IconPlus, { size: 18 })
7709
7746
  }
7710
7747
  ),
7711
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
7712
- edit && /* @__PURE__ */ jsx80(
7748
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
7749
+ edit && /* @__PURE__ */ jsx82(
7713
7750
  "button",
7714
7751
  {
7715
7752
  type: "button",
@@ -7717,27 +7754,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
7717
7754
  "aria-label": t.goalsDown(team.name),
7718
7755
  disabled: edit.disabled || value <= 0,
7719
7756
  onClick: () => edit.onStep(side, -1),
7720
- children: /* @__PURE__ */ jsx80(IconMinus, {})
7757
+ children: /* @__PURE__ */ jsx82(IconMinus, {})
7721
7758
  }
7722
7759
  )
7723
7760
  ] });
7724
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-mp-card", children: [
7725
- /* @__PURE__ */ jsx80(TeamBadge, { team: home, label: t.home }),
7726
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-mp-scores", children: [
7761
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-card", children: [
7762
+ /* @__PURE__ */ jsx82(TeamBadge, { team: home, label: t.home }),
7763
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-scores", children: [
7727
7764
  col("home", home, h),
7728
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
7765
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
7729
7766
  col("away", away, a)
7730
7767
  ] }),
7731
- /* @__PURE__ */ jsx80(TeamBadge, { team: away, label: t.away })
7768
+ /* @__PURE__ */ jsx82(TeamBadge, { team: away, label: t.away })
7732
7769
  ] });
7733
7770
  }
7734
7771
  function OutcomeRow({ label, ok, detail, t }) {
7735
- return /* @__PURE__ */ jsxs68("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
7736
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-row-k", children: label }),
7737
- /* @__PURE__ */ jsxs68("span", { className: "ss-g-mp-row-v", children: [
7738
- ok ? /* @__PURE__ */ jsx80(IconCheck, {}) : /* @__PURE__ */ jsx80(IconClose, { size: 14 }),
7739
- /* @__PURE__ */ jsx80("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
7740
- detail ? /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-row-d", children: detail }) : null
7772
+ return /* @__PURE__ */ jsxs70("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
7773
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-row-k", children: label }),
7774
+ /* @__PURE__ */ jsxs70("span", { className: "ss-g-mp-row-v", children: [
7775
+ ok ? /* @__PURE__ */ jsx82(IconCheck, {}) : /* @__PURE__ */ jsx82(IconClose, { size: 14 }),
7776
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
7777
+ detail ? /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-row-d", children: detail }) : null
7741
7778
  ] })
7742
7779
  ] });
7743
7780
  }
@@ -7758,12 +7795,12 @@ function MatchdayPredictorGame({
7758
7795
  const searchId = useId6();
7759
7796
  const clientState = parseClientState7(result?.clientStateJson);
7760
7797
  const alreadyPlayed = result?.alreadyPlayed === true;
7761
- const header = /* @__PURE__ */ jsx80(
7798
+ const header = /* @__PURE__ */ jsx82(
7762
7799
  GameHeader,
7763
7800
  {
7764
7801
  title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
7765
7802
  eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
7766
- right: config ? /* @__PURE__ */ jsx80(Chip, { icon: /* @__PURE__ */ jsx80(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
7803
+ right: config ? /* @__PURE__ */ jsx82(Chip, { icon: /* @__PURE__ */ jsx82(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
7767
7804
  onBack,
7768
7805
  backLabel: ui.back
7769
7806
  }
@@ -7771,10 +7808,10 @@ function MatchdayPredictorGame({
7771
7808
  if (alreadyPlayed && clientState) {
7772
7809
  if (!clientState.graded) {
7773
7810
  const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
7774
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7811
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7775
7812
  header,
7776
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
7777
- config && /* @__PURE__ */ jsx80(
7813
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
7814
+ config && /* @__PURE__ */ jsx82(
7778
7815
  ScoreCard,
7779
7816
  {
7780
7817
  home: config.homeTeam,
@@ -7784,7 +7821,7 @@ function MatchdayPredictorGame({
7784
7821
  t
7785
7822
  }
7786
7823
  ),
7787
- /* @__PURE__ */ jsx80(
7824
+ /* @__PURE__ */ jsx82(
7788
7825
  ResultCard,
7789
7826
  {
7790
7827
  tone: "neutral",
@@ -7801,28 +7838,28 @@ function MatchdayPredictorGame({
7801
7838
  }
7802
7839
  )
7803
7840
  ] }),
7804
- /* @__PURE__ */ jsx80(FooterBar, { children: /* @__PURE__ */ jsx80("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7841
+ /* @__PURE__ */ jsx82(FooterBar, { children: /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7805
7842
  ] });
7806
7843
  }
7807
7844
  const r = clientState.result;
7808
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7845
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7809
7846
  header,
7810
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
7811
- config && /* @__PURE__ */ jsx80(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
7812
- /* @__PURE__ */ jsx80(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
7813
- /* @__PURE__ */ jsxs68("ul", { className: "ss-g-mp-rows", children: [
7814
- /* @__PURE__ */ jsx80(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
7815
- /* @__PURE__ */ jsx80(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
7816
- !clientState.firstScorerVoid && /* @__PURE__ */ jsx80(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
7847
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
7848
+ config && /* @__PURE__ */ jsx82(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
7849
+ /* @__PURE__ */ jsx82(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
7850
+ /* @__PURE__ */ jsxs70("ul", { className: "ss-g-mp-rows", children: [
7851
+ /* @__PURE__ */ jsx82(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
7852
+ /* @__PURE__ */ jsx82(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
7853
+ !clientState.firstScorerVoid && /* @__PURE__ */ jsx82(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
7817
7854
  ] })
7818
7855
  ] }),
7819
- /* @__PURE__ */ jsx80(FooterBar, { children: /* @__PURE__ */ jsx80("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7856
+ /* @__PURE__ */ jsx82(FooterBar, { children: /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7820
7857
  ] });
7821
7858
  }
7822
7859
  if (!config) {
7823
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7860
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7824
7861
  header,
7825
- /* @__PURE__ */ jsx80("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7862
+ /* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7826
7863
  ] });
7827
7864
  }
7828
7865
  const locked = isLocked(config.kickoffUtc);
@@ -7846,10 +7883,10 @@ function MatchdayPredictorGame({
7846
7883
  const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
7847
7884
  const q = query.trim().toLowerCase();
7848
7885
  const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
7849
- return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7886
+ return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7850
7887
  header,
7851
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
7852
- /* @__PURE__ */ jsx80(
7888
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
7889
+ /* @__PURE__ */ jsx82(
7853
7890
  ScoreCard,
7854
7891
  {
7855
7892
  home: config.homeTeam,
@@ -7860,12 +7897,12 @@ function MatchdayPredictorGame({
7860
7897
  edit: { disabled, active: lastEdited, onStep: step }
7861
7898
  }
7862
7899
  ),
7863
- pool.length > 0 && /* @__PURE__ */ jsxs68("section", { className: "ss-g-mp-scorer", children: [
7864
- /* @__PURE__ */ jsxs68("div", { className: "ss-g-mp-sec-head", children: [
7865
- /* @__PURE__ */ jsx80("h3", { children: t.firstScorer }),
7866
- /* @__PURE__ */ jsx80("span", { children: t.optional })
7900
+ pool.length > 0 && /* @__PURE__ */ jsxs70("section", { className: "ss-g-mp-scorer", children: [
7901
+ /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-sec-head", children: [
7902
+ /* @__PURE__ */ jsx82("h3", { children: t.firstScorer }),
7903
+ /* @__PURE__ */ jsx82("span", { children: t.optional })
7867
7904
  ] }),
7868
- showSearch && /* @__PURE__ */ jsx80(
7905
+ showSearch && /* @__PURE__ */ jsx82(
7869
7906
  SearchField,
7870
7907
  {
7871
7908
  id: searchId,
@@ -7877,9 +7914,9 @@ function MatchdayPredictorGame({
7877
7914
  disabled
7878
7915
  }
7879
7916
  ),
7880
- /* @__PURE__ */ jsx80("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
7917
+ /* @__PURE__ */ jsx82("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
7881
7918
  const selected = firstScorerPlayerId === p.playerId;
7882
- return /* @__PURE__ */ jsxs68(
7919
+ return /* @__PURE__ */ jsxs70(
7883
7920
  "button",
7884
7921
  {
7885
7922
  type: "button",
@@ -7889,15 +7926,15 @@ function MatchdayPredictorGame({
7889
7926
  disabled,
7890
7927
  onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
7891
7928
  children: [
7892
- selected && /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx80(IconCheck, { size: 12 }) }),
7893
- /* @__PURE__ */ jsx80(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
7894
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
7929
+ selected && /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx82(IconCheck, { size: 12 }) }),
7930
+ /* @__PURE__ */ jsx82(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
7931
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
7895
7932
  ]
7896
7933
  },
7897
7934
  p.playerId
7898
7935
  );
7899
7936
  }) }),
7900
- /* @__PURE__ */ jsxs68(
7937
+ /* @__PURE__ */ jsxs70(
7901
7938
  "button",
7902
7939
  {
7903
7940
  type: "button",
@@ -7906,24 +7943,24 @@ function MatchdayPredictorGame({
7906
7943
  disabled,
7907
7944
  onClick: () => setFirstScorerPlayerId(null),
7908
7945
  children: [
7909
- /* @__PURE__ */ jsx80("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
7946
+ /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
7910
7947
  t.noScorer
7911
7948
  ]
7912
7949
  }
7913
7950
  )
7914
7951
  ] }),
7915
- locked && /* @__PURE__ */ jsx80("p", { className: "ss-g-mp-closed", children: t.closed })
7952
+ locked && /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-closed", children: t.closed })
7916
7953
  ] }),
7917
- /* @__PURE__ */ jsxs68(FooterBar, { children: [
7918
- /* @__PURE__ */ jsx80(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
7919
- /* @__PURE__ */ jsx80("p", { className: "ss-g-mp-fun", children: t.forFun })
7954
+ /* @__PURE__ */ jsxs70(FooterBar, { children: [
7955
+ /* @__PURE__ */ jsx82(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
7956
+ /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun })
7920
7957
  ] })
7921
7958
  ] });
7922
7959
  }
7923
7960
 
7924
7961
  // src/components/games/StartingXiGame.tsx
7925
7962
  import { useId as useId7, useState as useState36 } from "react";
7926
- import { Fragment as Fragment18, jsx as jsx81, jsxs as jsxs69 } from "react/jsx-runtime";
7963
+ import { Fragment as Fragment19, jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
7927
7964
  var POINTS_PER_STARTER = 8;
7928
7965
  var XI_SIZE = 11;
7929
7966
  var DEFAULT_FORMATION = "4-3-3";
@@ -7972,20 +8009,20 @@ function StartingXiGame({
7972
8009
  const searchId = useId7();
7973
8010
  const clientState = parseClientState8(result?.clientStateJson);
7974
8011
  const alreadyPlayed = result?.alreadyPlayed === true;
7975
- const header = /* @__PURE__ */ jsx81(
8012
+ const header = /* @__PURE__ */ jsx83(
7976
8013
  GameHeader,
7977
8014
  {
7978
8015
  title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
7979
8016
  eyebrow: t.eyebrow,
7980
- right: /* @__PURE__ */ jsx81(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
8017
+ right: /* @__PURE__ */ jsx83(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
7981
8018
  onBack,
7982
8019
  backLabel: ui.back
7983
8020
  }
7984
8021
  );
7985
8022
  function statusScreen(title, score) {
7986
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8023
+ return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
7987
8024
  header,
7988
- /* @__PURE__ */ jsx81("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx81(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
8025
+ /* @__PURE__ */ jsx83("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx83(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
7989
8026
  ] });
7990
8027
  }
7991
8028
  if (alreadyPlayed) {
@@ -7994,9 +8031,9 @@ function StartingXiGame({
7994
8031
  if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
7995
8032
  }
7996
8033
  if (!config) {
7997
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8034
+ return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
7998
8035
  header,
7999
- /* @__PURE__ */ jsx81("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8036
+ /* @__PURE__ */ jsx83("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8000
8037
  ] });
8001
8038
  }
8002
8039
  const { formation, slots } = formationSlots(config.formation);
@@ -8031,27 +8068,27 @@ function StartingXiGame({
8031
8068
  onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
8032
8069
  }
8033
8070
  const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
8034
- return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8071
+ return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8035
8072
  header,
8036
- /* @__PURE__ */ jsx81(
8073
+ /* @__PURE__ */ jsx83(
8037
8074
  SegmentProgress,
8038
8075
  {
8039
8076
  segments,
8040
8077
  ariaLabel: t.picked(pickedCount),
8041
8078
  leftLabel: t.picked(pickedCount),
8042
8079
  rightLabel: t.toGo(XI_SIZE - pickedCount),
8043
- right: /* @__PURE__ */ jsx81(Chip, { children: formation })
8080
+ right: /* @__PURE__ */ jsx83(Chip, { children: formation })
8044
8081
  }
8045
8082
  ),
8046
- /* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
8047
- /* @__PURE__ */ jsxs69("div", { className: "ss-g-xi-pitch", children: [
8048
- /* @__PURE__ */ jsx81(PitchSvg, { variant: "half" }),
8083
+ /* @__PURE__ */ jsxs71("div", { className: "ss-g-body", children: [
8084
+ /* @__PURE__ */ jsxs71("div", { className: "ss-g-xi-pitch", children: [
8085
+ /* @__PURE__ */ jsx83(PitchSvg, { variant: "half" }),
8049
8086
  slots.map((s) => {
8050
8087
  const playerId = slotPlayers[s.index] ?? null;
8051
8088
  const player = playerId !== null ? byId.get(playerId) ?? null : null;
8052
8089
  const name = player?.playerName ?? "";
8053
8090
  const state = player ? "filled" : active === s.index ? "active" : "empty";
8054
- return /* @__PURE__ */ jsxs69(
8091
+ return /* @__PURE__ */ jsxs71(
8055
8092
  "button",
8056
8093
  {
8057
8094
  type: "button",
@@ -8063,21 +8100,21 @@ function StartingXiGame({
8063
8100
  disabled: submitting,
8064
8101
  onClick: () => tapSlot(s.index),
8065
8102
  children: [
8066
- /* @__PURE__ */ jsx81("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx81(IconPlus, { size: 18 }) }),
8067
- /* @__PURE__ */ jsx81("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8103
+ /* @__PURE__ */ jsx83("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx83(IconPlus, { size: 18 }) }),
8104
+ /* @__PURE__ */ jsx83("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8068
8105
  ]
8069
8106
  },
8070
8107
  s.index
8071
8108
  );
8072
8109
  })
8073
8110
  ] }),
8074
- /* @__PURE__ */ jsxs69("div", { className: "ss-g-xi-picker", children: [
8075
- /* @__PURE__ */ jsx81("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs69(Fragment18, { children: [
8076
- /* @__PURE__ */ jsx81(Chip, { variant: "badge", children: activeSlot.label }),
8077
- /* @__PURE__ */ jsx81("strong", { children: t.pickFor(activeSlot.label) })
8078
- ] }) : /* @__PURE__ */ jsx81("strong", { children: t.allPicked }) }),
8079
- activeSlot && /* @__PURE__ */ jsxs69(Fragment18, { children: [
8080
- /* @__PURE__ */ jsx81(
8111
+ /* @__PURE__ */ jsxs71("div", { className: "ss-g-xi-picker", children: [
8112
+ /* @__PURE__ */ jsx83("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs71(Fragment19, { children: [
8113
+ /* @__PURE__ */ jsx83(Chip, { variant: "badge", children: activeSlot.label }),
8114
+ /* @__PURE__ */ jsx83("strong", { children: t.pickFor(activeSlot.label) })
8115
+ ] }) : /* @__PURE__ */ jsx83("strong", { children: t.allPicked }) }),
8116
+ activeSlot && /* @__PURE__ */ jsxs71(Fragment19, { children: [
8117
+ /* @__PURE__ */ jsx83(
8081
8118
  SearchField,
8082
8119
  {
8083
8120
  id: searchId,
@@ -8089,18 +8126,18 @@ function StartingXiGame({
8089
8126
  disabled: submitting
8090
8127
  }
8091
8128
  ),
8092
- /* @__PURE__ */ jsx81("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx81("li", { children: /* @__PURE__ */ jsxs69("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8093
- /* @__PURE__ */ jsx81("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8094
- /* @__PURE__ */ jsx81("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8095
- /* @__PURE__ */ jsx81("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8129
+ /* @__PURE__ */ jsx83("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx83("li", { children: /* @__PURE__ */ jsxs71("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8130
+ /* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8131
+ /* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8132
+ /* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8096
8133
  ] }) }, p.playerId)) })
8097
8134
  ] })
8098
8135
  ] })
8099
8136
  ] }),
8100
- /* @__PURE__ */ jsxs69(FooterBar, { children: [
8101
- /* @__PURE__ */ jsx81(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8102
- /* @__PURE__ */ jsxs69("p", { className: "ss-g-xi-lock", children: [
8103
- /* @__PURE__ */ jsx81(IconLock, {}),
8137
+ /* @__PURE__ */ jsxs71(FooterBar, { children: [
8138
+ /* @__PURE__ */ jsx83(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8139
+ /* @__PURE__ */ jsxs71("p", { className: "ss-g-xi-lock", children: [
8140
+ /* @__PURE__ */ jsx83(IconLock, {}),
8104
8141
  lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
8105
8142
  ] })
8106
8143
  ] })
@@ -8109,7 +8146,7 @@ function StartingXiGame({
8109
8146
 
8110
8147
  // src/components/games/StatLadderGame.tsx
8111
8148
  import { useId as useId8, useState as useState37 } from "react";
8112
- import { jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
8149
+ import { jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
8113
8150
  function ladderClue(ladder) {
8114
8151
  const mystery = ladder.find((r) => r.rank === 2);
8115
8152
  if (!mystery) return null;
@@ -8131,9 +8168,9 @@ function parseClientState9(json) {
8131
8168
  }
8132
8169
  function NameStack({ name }) {
8133
8170
  const { first, last } = splitName(name);
8134
- return /* @__PURE__ */ jsxs70("span", { className: "ss-g-sl-name", children: [
8135
- first && /* @__PURE__ */ jsx82("small", { children: `${first[0]}.` }),
8136
- /* @__PURE__ */ jsx82("b", { children: last })
8171
+ return /* @__PURE__ */ jsxs72("span", { className: "ss-g-sl-name", children: [
8172
+ first && /* @__PURE__ */ jsx84("small", { children: `${first[0]}.` }),
8173
+ /* @__PURE__ */ jsx84("b", { children: last })
8137
8174
  ] });
8138
8175
  }
8139
8176
  function StatLadderGame({
@@ -8150,11 +8187,11 @@ function StatLadderGame({
8150
8187
  const searchId = useId8();
8151
8188
  const clientState = parseClientState9(result?.clientStateJson);
8152
8189
  const revealed = clientState != null;
8153
- const header = /* @__PURE__ */ jsx82(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8190
+ const header = /* @__PURE__ */ jsx84(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8154
8191
  if (!config) {
8155
- return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
8192
+ return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8156
8193
  header,
8157
- /* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8194
+ /* @__PURE__ */ jsx84("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8158
8195
  ] });
8159
8196
  }
8160
8197
  const question = t.question(config.statLabel);
@@ -8166,44 +8203,45 @@ function StatLadderGame({
8166
8203
  if (selectedId === null || submitting || revealed) return;
8167
8204
  onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
8168
8205
  }
8169
- return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
8206
+ return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8170
8207
  header,
8171
- /* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
8172
- /* @__PURE__ */ jsxs70("div", { className: "ss-g-sl-prompt", children: [
8173
- /* @__PURE__ */ jsx82(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx82(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8174
- /* @__PURE__ */ jsxs70("h3", { className: "ss-g-sl-q", children: [
8208
+ /* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
8209
+ !revealed && /* @__PURE__ */ jsx84(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
8210
+ /* @__PURE__ */ jsxs72("div", { className: "ss-g-sl-prompt", children: [
8211
+ /* @__PURE__ */ jsx84(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx84(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8212
+ /* @__PURE__ */ jsxs72("h3", { className: "ss-g-sl-q", children: [
8175
8213
  question.pre,
8176
- /* @__PURE__ */ jsx82("em", { children: question.emph }),
8214
+ /* @__PURE__ */ jsx84("em", { children: question.emph }),
8177
8215
  question.post
8178
8216
  ] })
8179
8217
  ] }),
8180
- /* @__PURE__ */ jsx82("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8181
- (rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs70(
8218
+ /* @__PURE__ */ jsx84("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8219
+ (rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs72(
8182
8220
  "li",
8183
8221
  {
8184
8222
  className: "ss-g-sl-rung ss-g-sl-rung--mystery",
8185
8223
  "data-testid": "sl-mystery-rung",
8186
8224
  "data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
8187
8225
  children: [
8188
- /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-rank", children: "2" }),
8189
- revealed ? /* @__PURE__ */ jsx82(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx82(Silhouette, { size: 52, variant: "mystery" }),
8190
- revealed ? /* @__PURE__ */ jsx82(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8191
- /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8226
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-rank", children: "2" }),
8227
+ revealed ? /* @__PURE__ */ jsx84(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx84(Silhouette, { size: 52, variant: "mystery" }),
8228
+ revealed ? /* @__PURE__ */ jsx84(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8229
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8192
8230
  ]
8193
8231
  },
8194
8232
  rung.rank
8195
- ) : /* @__PURE__ */ jsxs70("li", { className: "ss-g-sl-rung", children: [
8196
- /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-rank", children: rung.rank }),
8197
- /* @__PURE__ */ jsx82(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8198
- /* @__PURE__ */ jsx82(NameStack, { name: rung.playerName ?? "?" }),
8199
- /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-val", children: rung.statValue })
8233
+ ) : /* @__PURE__ */ jsxs72("li", { className: "ss-g-sl-rung", children: [
8234
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-rank", children: rung.rank }),
8235
+ /* @__PURE__ */ jsx84(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8236
+ /* @__PURE__ */ jsx84(NameStack, { name: rung.playerName ?? "?" }),
8237
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-val", children: rung.statValue })
8200
8238
  ] }, rung.rank)
8201
8239
  ) }),
8202
- clue && /* @__PURE__ */ jsxs70("p", { className: "ss-g-sl-clue", children: [
8203
- /* @__PURE__ */ jsx82(IconBulb, {}),
8204
- /* @__PURE__ */ jsx82("span", { children: t.clue(clue, config.statLabel) })
8240
+ clue && /* @__PURE__ */ jsxs72("p", { className: "ss-g-sl-clue", children: [
8241
+ /* @__PURE__ */ jsx84(IconBulb, {}),
8242
+ /* @__PURE__ */ jsx84("span", { children: t.clue(clue, config.statLabel) })
8205
8243
  ] }),
8206
- !revealed && /* @__PURE__ */ jsx82("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx82("li", { children: /* @__PURE__ */ jsxs70(
8244
+ !revealed && /* @__PURE__ */ jsx84("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx84("li", { children: /* @__PURE__ */ jsxs72(
8207
8245
  "button",
8208
8246
  {
8209
8247
  type: "button",
@@ -8216,13 +8254,13 @@ function StatLadderGame({
8216
8254
  setQuery(p.playerName);
8217
8255
  },
8218
8256
  children: [
8219
- /* @__PURE__ */ jsx82(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8220
- /* @__PURE__ */ jsx82("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8221
- selectedId === p.playerId && /* @__PURE__ */ jsx82(IconCheck, {})
8257
+ /* @__PURE__ */ jsx84(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8258
+ /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8259
+ selectedId === p.playerId && /* @__PURE__ */ jsx84(IconCheck, {})
8222
8260
  ]
8223
8261
  }
8224
8262
  ) }, p.playerId)) }),
8225
- revealed && /* @__PURE__ */ jsx82(
8263
+ revealed && /* @__PURE__ */ jsx84(
8226
8264
  ResultCard,
8227
8265
  {
8228
8266
  tone: clientState.isCorrect ? "win" : "lose",
@@ -8233,8 +8271,8 @@ function StatLadderGame({
8233
8271
  }
8234
8272
  )
8235
8273
  ] }),
8236
- !revealed && /* @__PURE__ */ jsx82(FooterBar, { children: /* @__PURE__ */ jsxs70("div", { className: "ss-g-sl-guess", children: [
8237
- /* @__PURE__ */ jsx82(
8274
+ !revealed && /* @__PURE__ */ jsx84(FooterBar, { children: /* @__PURE__ */ jsxs72("div", { className: "ss-g-sl-guess", children: [
8275
+ /* @__PURE__ */ jsx84(
8238
8276
  SearchField,
8239
8277
  {
8240
8278
  id: searchId,
@@ -8249,13 +8287,13 @@ function StatLadderGame({
8249
8287
  disabled: submitting
8250
8288
  }
8251
8289
  ),
8252
- /* @__PURE__ */ jsx82(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
8290
+ /* @__PURE__ */ jsx84(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
8253
8291
  ] }) })
8254
8292
  ] });
8255
8293
  }
8256
8294
 
8257
8295
  // src/components/games/FanMotmGame.tsx
8258
- import { jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
8296
+ import { jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
8259
8297
  function parseClientState10(json) {
8260
8298
  if (!json) return null;
8261
8299
  try {
@@ -8276,20 +8314,20 @@ function FanMotmGame({
8276
8314
  const clientState = parseClientState10(result?.clientStateJson);
8277
8315
  const alreadyVoted = result?.alreadyPlayed === true;
8278
8316
  const pickedId = clientState?.pickedPlayerId ?? null;
8279
- const header = /* @__PURE__ */ jsx83(
8317
+ const header = /* @__PURE__ */ jsx85(
8280
8318
  GameHeader,
8281
8319
  {
8282
8320
  title: t.title,
8283
8321
  eyebrow: t.eyebrow,
8284
- right: alreadyVoted ? /* @__PURE__ */ jsx83(Chip, { variant: "success", icon: /* @__PURE__ */ jsx83(IconCheck, {}), children: t.voted }) : void 0,
8322
+ right: alreadyVoted ? /* @__PURE__ */ jsx85(Chip, { variant: "success", icon: /* @__PURE__ */ jsx85(IconCheck, {}), children: t.voted }) : void 0,
8285
8323
  onBack,
8286
8324
  backLabel: ui.back
8287
8325
  }
8288
8326
  );
8289
8327
  if (!config) {
8290
- return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
8328
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8291
8329
  header,
8292
- /* @__PURE__ */ jsx83("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8330
+ /* @__PURE__ */ jsx85("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8293
8331
  ] });
8294
8332
  }
8295
8333
  const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
@@ -8297,12 +8335,12 @@ function FanMotmGame({
8297
8335
  if (alreadyVoted || submitting) return;
8298
8336
  onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
8299
8337
  }
8300
- return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
8338
+ return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8301
8339
  header,
8302
- /* @__PURE__ */ jsxs71("div", { className: "ss-g-body", children: [
8303
- /* @__PURE__ */ jsx83("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
8340
+ /* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
8341
+ /* @__PURE__ */ jsx85("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
8304
8342
  const isVoted = alreadyVoted && pickedId === c.playerId;
8305
- return /* @__PURE__ */ jsx83("li", { children: /* @__PURE__ */ jsxs71(
8343
+ return /* @__PURE__ */ jsx85("li", { children: /* @__PURE__ */ jsxs73(
8306
8344
  "button",
8307
8345
  {
8308
8346
  type: "button",
@@ -8311,24 +8349,24 @@ function FanMotmGame({
8311
8349
  disabled: alreadyVoted || submitting,
8312
8350
  onClick: () => handleVote(c.playerId),
8313
8351
  children: [
8314
- /* @__PURE__ */ jsx83(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
8315
- /* @__PURE__ */ jsx83("span", { className: "ss-g-motm-name", children: c.playerName }),
8316
- isVoted && /* @__PURE__ */ jsx83(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
8352
+ /* @__PURE__ */ jsx85(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
8353
+ /* @__PURE__ */ jsx85("span", { className: "ss-g-motm-name", children: c.playerName }),
8354
+ isVoted && /* @__PURE__ */ jsx85(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
8317
8355
  ]
8318
8356
  }
8319
8357
  ) }, c.playerId);
8320
8358
  }) }),
8321
- alreadyVoted && picked && /* @__PURE__ */ jsx83(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
8359
+ alreadyVoted && picked && /* @__PURE__ */ jsx85(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
8322
8360
  ] }),
8323
- /* @__PURE__ */ jsxs71(FooterBar, { children: [
8324
- !alreadyVoted && /* @__PURE__ */ jsx83("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
8325
- /* @__PURE__ */ jsx83("p", { className: "ss-g-motm-fun", children: t.forFun })
8361
+ /* @__PURE__ */ jsxs73(FooterBar, { children: [
8362
+ !alreadyVoted && /* @__PURE__ */ jsx85("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
8363
+ /* @__PURE__ */ jsx85("p", { className: "ss-g-motm-fun", children: t.forFun })
8326
8364
  ] })
8327
8365
  ] });
8328
8366
  }
8329
8367
 
8330
8368
  // src/components/GameScreenHost.tsx
8331
- import { jsx as jsx84 } from "react/jsx-runtime";
8369
+ import { jsx as jsx86 } from "react/jsx-runtime";
8332
8370
  var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
8333
8371
  "matchday-predictor",
8334
8372
  "starting-xi",
@@ -8404,7 +8442,7 @@ function GameScreenHost({
8404
8442
  function renderScreen() {
8405
8443
  switch (gameId) {
8406
8444
  case "mystery-tiger":
8407
- return /* @__PURE__ */ jsx84(
8445
+ return /* @__PURE__ */ jsx86(
8408
8446
  MysteryTigerGame,
8409
8447
  {
8410
8448
  ...sharedProps,
@@ -8412,7 +8450,7 @@ function GameScreenHost({
8412
8450
  }
8413
8451
  );
8414
8452
  case "higher-or-lower":
8415
- return /* @__PURE__ */ jsx84(
8453
+ return /* @__PURE__ */ jsx86(
8416
8454
  HigherOrLowerGame,
8417
8455
  {
8418
8456
  ...sharedProps,
@@ -8420,7 +8458,7 @@ function GameScreenHost({
8420
8458
  }
8421
8459
  );
8422
8460
  case "career-path":
8423
- return /* @__PURE__ */ jsx84(
8461
+ return /* @__PURE__ */ jsx86(
8424
8462
  CareerPathGame,
8425
8463
  {
8426
8464
  ...sharedProps,
@@ -8429,7 +8467,7 @@ function GameScreenHost({
8429
8467
  );
8430
8468
  case "beat-the-grid": {
8431
8469
  const btgConfig = safeParseConfig(configJson);
8432
- return /* @__PURE__ */ jsx84(
8470
+ return /* @__PURE__ */ jsx86(
8433
8471
  BeatTheGridGame,
8434
8472
  {
8435
8473
  ...sharedProps,
@@ -8439,7 +8477,7 @@ function GameScreenHost({
8439
8477
  );
8440
8478
  }
8441
8479
  case "guess-the-xi":
8442
- return /* @__PURE__ */ jsx84(
8480
+ return /* @__PURE__ */ jsx86(
8443
8481
  GuessTheXiGame,
8444
8482
  {
8445
8483
  ...sharedProps,
@@ -8447,7 +8485,7 @@ function GameScreenHost({
8447
8485
  }
8448
8486
  );
8449
8487
  case "daily-quiz":
8450
- return /* @__PURE__ */ jsx84(
8488
+ return /* @__PURE__ */ jsx86(
8451
8489
  DailyQuizGame,
8452
8490
  {
8453
8491
  ...sharedProps,
@@ -8455,7 +8493,7 @@ function GameScreenHost({
8455
8493
  }
8456
8494
  );
8457
8495
  case "matchday-predictor":
8458
- return /* @__PURE__ */ jsx84(
8496
+ return /* @__PURE__ */ jsx86(
8459
8497
  MatchdayPredictorGame,
8460
8498
  {
8461
8499
  ...sharedProps,
@@ -8463,7 +8501,7 @@ function GameScreenHost({
8463
8501
  }
8464
8502
  );
8465
8503
  case "starting-xi":
8466
- return /* @__PURE__ */ jsx84(
8504
+ return /* @__PURE__ */ jsx86(
8467
8505
  StartingXiGame,
8468
8506
  {
8469
8507
  ...sharedProps,
@@ -8471,7 +8509,7 @@ function GameScreenHost({
8471
8509
  }
8472
8510
  );
8473
8511
  case "stat-ladder":
8474
- return /* @__PURE__ */ jsx84(
8512
+ return /* @__PURE__ */ jsx86(
8475
8513
  StatLadderGame,
8476
8514
  {
8477
8515
  ...sharedProps,
@@ -8479,7 +8517,7 @@ function GameScreenHost({
8479
8517
  }
8480
8518
  );
8481
8519
  case "fan-motm":
8482
- return /* @__PURE__ */ jsx84(
8520
+ return /* @__PURE__ */ jsx86(
8483
8521
  FanMotmGame,
8484
8522
  {
8485
8523
  ...sharedProps,
@@ -8487,10 +8525,10 @@ function GameScreenHost({
8487
8525
  }
8488
8526
  );
8489
8527
  default:
8490
- return /* @__PURE__ */ jsx84("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx84(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
8528
+ return /* @__PURE__ */ jsx86("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx86(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
8491
8529
  }
8492
8530
  }
8493
- return /* @__PURE__ */ jsx84("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
8531
+ return /* @__PURE__ */ jsx86("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
8494
8532
  }
8495
8533
 
8496
8534
  // src/components/games/ui/fonts.ts
@@ -8507,7 +8545,7 @@ function ensureGamesFonts(doc = document) {
8507
8545
  }
8508
8546
 
8509
8547
  // src/components/GamesPanel.tsx
8510
- import { jsx as jsx85 } from "react/jsx-runtime";
8548
+ import { jsx as jsx87 } from "react/jsx-runtime";
8511
8549
  function GamesPanel({
8512
8550
  loggedIn,
8513
8551
  games,
@@ -8520,9 +8558,9 @@ function GamesPanel({
8520
8558
  useEffect22(() => {
8521
8559
  ensureGamesFonts();
8522
8560
  }, []);
8523
- if (!loggedIn) return /* @__PURE__ */ jsx85(GamesLoginWall, { ui });
8561
+ if (!loggedIn) return /* @__PURE__ */ jsx87(GamesLoginWall, { ui });
8524
8562
  if (selected !== null) {
8525
- return /* @__PURE__ */ jsx85("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx85(
8563
+ return /* @__PURE__ */ jsx87("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx87(
8526
8564
  GameScreenHost,
8527
8565
  {
8528
8566
  selected,
@@ -8536,7 +8574,7 @@ function GamesPanel({
8536
8574
  }
8537
8575
  ) });
8538
8576
  }
8539
- return /* @__PURE__ */ jsx85("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx85(
8577
+ return /* @__PURE__ */ jsx87("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx87(
8540
8578
  GamesHub,
8541
8579
  {
8542
8580
  games,
@@ -8551,7 +8589,7 @@ function GamesPanel({
8551
8589
  import { useState as useState40 } from "react";
8552
8590
 
8553
8591
  // src/components/LeaderboardRow.tsx
8554
- import { jsx as jsx86, jsxs as jsxs72 } from "react/jsx-runtime";
8592
+ import { jsx as jsx88, jsxs as jsxs74 } from "react/jsx-runtime";
8555
8593
  function formatPoints(n) {
8556
8594
  return n.toLocaleString("en");
8557
8595
  }
@@ -8560,14 +8598,14 @@ function LeaderboardWeeklyRow({
8560
8598
  isMe
8561
8599
  }) {
8562
8600
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
8563
- return /* @__PURE__ */ jsxs72("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8564
- /* @__PURE__ */ jsxs72("span", { className: rankClass, children: [
8601
+ return /* @__PURE__ */ jsxs74("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8602
+ /* @__PURE__ */ jsxs74("span", { className: rankClass, children: [
8565
8603
  "#",
8566
8604
  row.rank
8567
8605
  ] }),
8568
- /* @__PURE__ */ jsx86("span", { className: "ss-w-lb2-handle", children: row.handle }),
8569
- /* @__PURE__ */ jsx86("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
8570
- row.currentStreak > 0 && /* @__PURE__ */ jsxs72("span", { className: "ss-w-lb2-streak", children: [
8606
+ /* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-handle", children: row.handle }),
8607
+ /* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
8608
+ row.currentStreak > 0 && /* @__PURE__ */ jsxs74("span", { className: "ss-w-lb2-streak", children: [
8571
8609
  "\u{1F525} ",
8572
8610
  row.currentStreak
8573
8611
  ] })
@@ -8578,18 +8616,18 @@ function LeaderboardAllTimeRow({
8578
8616
  isMe
8579
8617
  }) {
8580
8618
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
8581
- return /* @__PURE__ */ jsxs72("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8582
- /* @__PURE__ */ jsxs72("span", { className: rankClass, children: [
8619
+ return /* @__PURE__ */ jsxs74("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8620
+ /* @__PURE__ */ jsxs74("span", { className: rankClass, children: [
8583
8621
  "#",
8584
8622
  row.rank
8585
8623
  ] }),
8586
- /* @__PURE__ */ jsx86("span", { className: "ss-w-lb2-handle", children: row.handle }),
8587
- /* @__PURE__ */ jsx86("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
8624
+ /* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-handle", children: row.handle }),
8625
+ /* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
8588
8626
  ] });
8589
8627
  }
8590
8628
 
8591
8629
  // src/components/LeaderboardEmpty.tsx
8592
- import { jsx as jsx87, jsxs as jsxs73 } from "react/jsx-runtime";
8630
+ import { jsx as jsx89, jsxs as jsxs75 } from "react/jsx-runtime";
8593
8631
  function LeaderboardEmpty({
8594
8632
  segment,
8595
8633
  lastWeek,
@@ -8598,36 +8636,36 @@ function LeaderboardEmpty({
8598
8636
  ui
8599
8637
  }) {
8600
8638
  if (segment === "alltime") {
8601
- return /* @__PURE__ */ jsxs73("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
8602
- /* @__PURE__ */ jsx87("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
8603
- /* @__PURE__ */ jsx87("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
8639
+ return /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
8640
+ /* @__PURE__ */ jsx89("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
8641
+ /* @__PURE__ */ jsx89("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
8604
8642
  ] });
8605
8643
  }
8606
8644
  const fresh = lastWeek != null;
8607
8645
  const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
8608
8646
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
8609
- return /* @__PURE__ */ jsxs73("div", { className: "ss-w-lb-empty", children: [
8610
- weeklyPrize && /* @__PURE__ */ jsxs73("div", { className: "ss-w-prize", children: [
8611
- /* @__PURE__ */ jsx87("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
8612
- /* @__PURE__ */ jsx87("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx87("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
8647
+ return /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty", children: [
8648
+ weeklyPrize && /* @__PURE__ */ jsxs75("div", { className: "ss-w-prize", children: [
8649
+ /* @__PURE__ */ jsx89("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
8650
+ /* @__PURE__ */ jsx89("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx89("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
8613
8651
  ] }),
8614
- /* @__PURE__ */ jsxs73("div", { className: "ss-w-lb-empty-hero", children: [
8615
- /* @__PURE__ */ jsx87("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
8616
- /* @__PURE__ */ jsx87("h4", { className: "ss-w-lb-empty-title", children: title }),
8617
- /* @__PURE__ */ jsx87("p", { className: "ss-w-lb-empty-body", children: body }),
8618
- onPlay && /* @__PURE__ */ jsx87("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
8652
+ /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty-hero", children: [
8653
+ /* @__PURE__ */ jsx89("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
8654
+ /* @__PURE__ */ jsx89("h4", { className: "ss-w-lb-empty-title", children: title }),
8655
+ /* @__PURE__ */ jsx89("p", { className: "ss-w-lb-empty-body", children: body }),
8656
+ onPlay && /* @__PURE__ */ jsx89("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
8619
8657
  ] }),
8620
- fresh && lastWeek && /* @__PURE__ */ jsxs73("div", { className: "ss-w-lb-last", children: [
8621
- /* @__PURE__ */ jsx87("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
8622
- /* @__PURE__ */ jsx87("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
8623
- /* @__PURE__ */ jsx87("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
8624
- /* @__PURE__ */ jsx87("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
8658
+ fresh && lastWeek && /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-last", children: [
8659
+ /* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
8660
+ /* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
8661
+ /* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
8662
+ /* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
8625
8663
  ] })
8626
8664
  ] });
8627
8665
  }
8628
8666
 
8629
8667
  // src/components/Leaderboard.tsx
8630
- import { Fragment as Fragment19, jsx as jsx88, jsxs as jsxs74 } from "react/jsx-runtime";
8668
+ import { Fragment as Fragment20, jsx as jsx90, jsxs as jsxs76 } from "react/jsx-runtime";
8631
8669
  function Leaderboard({
8632
8670
  data,
8633
8671
  ui,
@@ -8637,9 +8675,9 @@ function Leaderboard({
8637
8675
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
8638
8676
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
8639
8677
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
8640
- return /* @__PURE__ */ jsxs74("div", { className: "ss-w-lb2", children: [
8641
- /* @__PURE__ */ jsxs74("div", { className: "ss-w-seg", children: [
8642
- /* @__PURE__ */ jsx88(
8678
+ return /* @__PURE__ */ jsxs76("div", { className: "ss-w-lb2", children: [
8679
+ /* @__PURE__ */ jsxs76("div", { className: "ss-w-seg", children: [
8680
+ /* @__PURE__ */ jsx90(
8643
8681
  "button",
8644
8682
  {
8645
8683
  type: "button",
@@ -8649,7 +8687,7 @@ function Leaderboard({
8649
8687
  children: ui.leaderboardThisWeek
8650
8688
  }
8651
8689
  ),
8652
- /* @__PURE__ */ jsx88(
8690
+ /* @__PURE__ */ jsx90(
8653
8691
  "button",
8654
8692
  {
8655
8693
  type: "button",
@@ -8660,7 +8698,7 @@ function Leaderboard({
8660
8698
  }
8661
8699
  )
8662
8700
  ] }),
8663
- isEmpty ? /* @__PURE__ */ jsx88(
8701
+ isEmpty ? /* @__PURE__ */ jsx90(
8664
8702
  LeaderboardEmpty,
8665
8703
  {
8666
8704
  segment,
@@ -8669,15 +8707,15 @@ function Leaderboard({
8669
8707
  onPlay,
8670
8708
  ui
8671
8709
  }
8672
- ) : /* @__PURE__ */ jsxs74(Fragment19, { children: [
8673
- /* @__PURE__ */ jsx88("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx88(
8710
+ ) : /* @__PURE__ */ jsxs76(Fragment20, { children: [
8711
+ /* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx90(
8674
8712
  LeaderboardWeeklyRow,
8675
8713
  {
8676
8714
  row,
8677
8715
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
8678
8716
  },
8679
8717
  row.operatorUserId
8680
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx88(
8718
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx90(
8681
8719
  LeaderboardAllTimeRow,
8682
8720
  {
8683
8721
  row,
@@ -8685,18 +8723,18 @@ function Leaderboard({
8685
8723
  },
8686
8724
  row.operatorUserId
8687
8725
  )) }),
8688
- /* @__PURE__ */ jsx88("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
8689
- myRow != null && (offBoard ? /* @__PURE__ */ jsx88("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs74("div", { className: "ss-w-lb2-rows", children: [
8690
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx88(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
8691
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx88(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
8726
+ /* @__PURE__ */ jsx90("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
8727
+ myRow != null && (offBoard ? /* @__PURE__ */ jsx90("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs76("div", { className: "ss-w-lb2-rows", children: [
8728
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx90(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
8729
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx90(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
8692
8730
  ] })),
8693
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx88("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx88("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
8731
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
8694
8732
  ] })
8695
8733
  ] });
8696
8734
  }
8697
8735
 
8698
8736
  // src/components/LeaderboardPanel.tsx
8699
- import { jsx as jsx89 } from "react/jsx-runtime";
8737
+ import { jsx as jsx91 } from "react/jsx-runtime";
8700
8738
  var EMPTY_PAYLOAD = {
8701
8739
  week: "",
8702
8740
  weeklyTop: [],
@@ -8707,19 +8745,19 @@ var EMPTY_PAYLOAD = {
8707
8745
  lastWeek: null
8708
8746
  };
8709
8747
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
8710
- if (!loggedIn) return /* @__PURE__ */ jsx89(GamesLoginWall, { ui });
8711
- if (data === null && loading) return /* @__PURE__ */ jsx89("div", { className: "ss-w-mon-list" });
8712
- return /* @__PURE__ */ jsx89("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx89(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
8748
+ if (!loggedIn) return /* @__PURE__ */ jsx91(GamesLoginWall, { ui });
8749
+ if (data === null && loading) return /* @__PURE__ */ jsx91("div", { className: "ss-w-mon-list" });
8750
+ return /* @__PURE__ */ jsx91("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx91(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
8713
8751
  }
8714
8752
 
8715
8753
  // src/components/PresetSpeedDial.tsx
8716
8754
  import { useId as useId9 } from "react";
8717
- import { jsx as jsx90, jsxs as jsxs75 } from "react/jsx-runtime";
8755
+ import { jsx as jsx92, jsxs as jsxs77 } from "react/jsx-runtime";
8718
8756
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
8719
8757
  const pillsId = useId9();
8720
8758
  const tabIndex = expanded ? 0 : -1;
8721
- return /* @__PURE__ */ jsxs75("div", { ref: rootRef, className: "ss-w-dial", children: [
8722
- /* @__PURE__ */ jsxs75(
8759
+ return /* @__PURE__ */ jsxs77("div", { ref: rootRef, className: "ss-w-dial", children: [
8760
+ /* @__PURE__ */ jsxs77(
8723
8761
  "button",
8724
8762
  {
8725
8763
  ref: buttonRef,
@@ -8730,28 +8768,28 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
8730
8768
  "aria-label": strings.dialName,
8731
8769
  onClick: onToggle,
8732
8770
  children: [
8733
- /* @__PURE__ */ jsx90("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx90(SlidersIcon, {}) }),
8734
- /* @__PURE__ */ jsx90("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx90(CloseIcon, {}) }),
8735
- showDot && !expanded ? /* @__PURE__ */ jsx90("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
8771
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx92(SlidersIcon, {}) }),
8772
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx92(CloseIcon, {}) }),
8773
+ showDot && !expanded ? /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
8736
8774
  ]
8737
8775
  }
8738
8776
  ),
8739
- /* @__PURE__ */ jsxs75("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
8740
- /* @__PURE__ */ jsxs75("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
8741
- /* @__PURE__ */ jsx90(SlidersIcon, {}),
8742
- /* @__PURE__ */ jsx90("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
8777
+ /* @__PURE__ */ jsxs77("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
8778
+ /* @__PURE__ */ jsxs77("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
8779
+ /* @__PURE__ */ jsx92(SlidersIcon, {}),
8780
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
8743
8781
  ] }),
8744
- /* @__PURE__ */ jsxs75("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
8745
- /* @__PURE__ */ jsx90(ComboIcon, {}),
8746
- /* @__PURE__ */ jsx90("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
8782
+ /* @__PURE__ */ jsxs77("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
8783
+ /* @__PURE__ */ jsx92(ComboIcon, {}),
8784
+ /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
8747
8785
  ] })
8748
8786
  ] })
8749
8787
  ] });
8750
8788
  }
8751
8789
 
8752
8790
  // src/components/PresetTools.tsx
8753
- import { Fragment as Fragment20, useEffect as useEffect23, useId as useId10, useRef as useRef19, useState as useState41 } from "react";
8754
- import { Fragment as Fragment21, jsx as jsx91, jsxs as jsxs76 } from "react/jsx-runtime";
8791
+ import { Fragment as Fragment21, useEffect as useEffect23, useId as useId10, useRef as useRef19, useState as useState41 } from "react";
8792
+ import { Fragment as Fragment22, jsx as jsx93, jsxs as jsxs78 } from "react/jsx-runtime";
8755
8793
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
8756
8794
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8757
8795
  const dialogRef = useRef19(null);
@@ -8789,79 +8827,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8789
8827
  first.focus();
8790
8828
  }
8791
8829
  };
8792
- return /* @__PURE__ */ jsx91("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs76("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
8793
- /* @__PURE__ */ jsxs76("div", { className: "ss-w-tool-head", children: [
8794
- /* @__PURE__ */ jsx91("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
8795
- /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx91(CloseIcon, {}) })
8830
+ return /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs78("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
8831
+ /* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-head", children: [
8832
+ /* @__PURE__ */ jsx93("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
8833
+ /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx93(CloseIcon, {}) })
8796
8834
  ] }),
8797
- /* @__PURE__ */ jsx91("div", { className: "ss-w-tool-body", children }),
8798
- footer ? /* @__PURE__ */ jsx91("div", { className: "ss-w-tool-foot", children: footer }) : null
8835
+ /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-body", children }),
8836
+ footer ? /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-foot", children: footer }) : null
8799
8837
  ] }) });
8800
8838
  }
8801
8839
  function fillTemplate(template, slots) {
8802
8840
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
8803
8841
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
8804
- return /* @__PURE__ */ jsx91(Fragment20, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8842
+ return /* @__PURE__ */ jsx93(Fragment21, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8805
8843
  });
8806
8844
  }
8807
8845
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
8808
8846
  const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
8809
- return /* @__PURE__ */ jsxs76("span", { className: "ss-w-tool-num", children: [
8810
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
8811
- /* @__PURE__ */ jsx91("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
8847
+ return /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-num", children: [
8848
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
8849
+ /* @__PURE__ */ jsx93("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
8812
8850
  const c = choices2[Number(e.target.value)];
8813
8851
  if (c) onChoose(c.value);
8814
- }, children: choices2.map((c, i) => /* @__PURE__ */ jsx91("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
8852
+ }, children: choices2.map((c, i) => /* @__PURE__ */ jsx93("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
8815
8853
  ] });
8816
8854
  }
8817
8855
  function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
8818
8856
  const sizeText = sizeLabels[currentIdx] ?? "";
8819
- return /* @__PURE__ */ jsxs76("span", { className: "ss-w-tool-num", children: [
8820
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
8821
- /* @__PURE__ */ jsx91("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__ */ jsx91("option", { value: String(i), children: opt }, i)) })
8857
+ return /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-num", children: [
8858
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
8859
+ /* @__PURE__ */ jsx93("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__ */ jsx93("option", { value: String(i), children: opt }, i)) })
8822
8860
  ] });
8823
8861
  }
8824
8862
  function SendButton({ label, display, disabled, onClick }) {
8825
- return /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
8863
+ return /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
8826
8864
  }
8827
8865
  function PickList({ picks, formatKickoff }) {
8828
- return /* @__PURE__ */ jsx91("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs76("li", { className: "ss-w-tool-pick", children: [
8829
- /* @__PURE__ */ jsxs76("span", { className: "ss-w-tool-pick-match", children: [
8866
+ return /* @__PURE__ */ jsx93("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs78("li", { className: "ss-w-tool-pick", children: [
8867
+ /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-pick-match", children: [
8830
8868
  p.homeTeamName,
8831
8869
  " \u2013 ",
8832
8870
  p.awayTeamName
8833
8871
  ] }),
8834
- /* @__PURE__ */ jsxs76("span", { className: "ss-w-tool-pick-sel", children: [
8872
+ /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-pick-sel", children: [
8835
8873
  p.marketLabel,
8836
8874
  ": ",
8837
8875
  p.selectionLabel,
8838
8876
  p.line ? ` ${p.line}` : ""
8839
8877
  ] }),
8840
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
8841
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
8878
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
8879
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
8842
8880
  ] }, p.matchOddsId)) });
8843
8881
  }
8844
8882
  function ComboPreview({ cell, formatKickoff }) {
8845
- return /* @__PURE__ */ jsxs76(Fragment21, { children: [
8846
- /* @__PURE__ */ jsx91(PickList, { picks: cell.combo.legs, formatKickoff }),
8847
- /* @__PURE__ */ jsx91("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
8883
+ return /* @__PURE__ */ jsxs78(Fragment22, { children: [
8884
+ /* @__PURE__ */ jsx93(PickList, { picks: cell.combo.legs, formatKickoff }),
8885
+ /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
8848
8886
  ] });
8849
8887
  }
8850
8888
  function Unavailable({ text }) {
8851
- return /* @__PURE__ */ jsx91("p", { className: "ss-w-tool-unavailable", children: text });
8889
+ return /* @__PURE__ */ jsx93("p", { className: "ss-w-tool-unavailable", children: text });
8852
8890
  }
8853
8891
  function AskRow({ icon, ask, ready, send }) {
8854
- return /* @__PURE__ */ jsxs76("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
8855
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
8856
- /* @__PURE__ */ jsxs76("div", { className: "ss-w-tool-main", children: [
8857
- /* @__PURE__ */ jsx91("p", { className: "ss-w-tool-ask", children: ask }),
8858
- ready ? /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-ready", children: ready }) : null
8892
+ return /* @__PURE__ */ jsxs78("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
8893
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
8894
+ /* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-main", children: [
8895
+ /* @__PURE__ */ jsx93("p", { className: "ss-w-tool-ask", children: ask }),
8896
+ ready ? /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-ready", children: ready }) : null
8859
8897
  ] }),
8860
8898
  send
8861
8899
  ] });
8862
8900
  }
8863
8901
  function RoundSend({ label, display, disabled, onClick }) {
8864
- return /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx91(SendIcon, {}) });
8902
+ return /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx93(SendIcon, {}) });
8865
8903
  }
8866
8904
  var BIG_COMBO = { total: 50, legs: 6 };
8867
8905
  function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
@@ -8927,77 +8965,77 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
8927
8965
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
8928
8966
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
8929
8967
  const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
8930
- return /* @__PURE__ */ jsxs76(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
8931
- /* @__PURE__ */ jsx91(
8968
+ return /* @__PURE__ */ jsxs78(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
8969
+ /* @__PURE__ */ jsx93(
8932
8970
  AskRow,
8933
8971
  {
8934
8972
  icon: "\u{1F3AF}",
8935
8973
  ask: fillTemplate(strings.maxPriceRow, {
8936
8974
  count: String(count),
8937
- price: /* @__PURE__ */ jsx91(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
8975
+ price: /* @__PURE__ */ jsx93(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
8938
8976
  }),
8939
8977
  ready: singlesReady(maxCell),
8940
- send: /* @__PURE__ */ jsx91(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
8978
+ send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
8941
8979
  if (maxCell) onSend(maxPriceAsk(maxCell, strings));
8942
8980
  } })
8943
8981
  }
8944
8982
  ),
8945
- /* @__PURE__ */ jsx91(
8983
+ /* @__PURE__ */ jsx93(
8946
8984
  AskRow,
8947
8985
  {
8948
8986
  icon: "\u{1F4C8}",
8949
8987
  ask: fillTemplate(strings.minPriceRow, {
8950
8988
  count: String(count),
8951
- price: /* @__PURE__ */ jsx91(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
8989
+ price: /* @__PURE__ */ jsx93(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
8952
8990
  }),
8953
8991
  ready: singlesReady(minCell),
8954
- send: /* @__PURE__ */ jsx91(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
8992
+ send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
8955
8993
  if (minCell) onSend(minPriceAsk(minCell, strings));
8956
8994
  } })
8957
8995
  }
8958
8996
  ),
8959
- /* @__PURE__ */ jsx91(
8997
+ /* @__PURE__ */ jsx93(
8960
8998
  AskRow,
8961
8999
  {
8962
9000
  icon: "\u2728",
8963
9001
  ask: fillTemplate(strings.comboRow, {
8964
- legs: /* @__PURE__ */ jsx91(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
8965
- total: /* @__PURE__ */ jsx91(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9002
+ legs: /* @__PURE__ */ jsx93(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9003
+ total: /* @__PURE__ */ jsx93(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
8966
9004
  }),
8967
9005
  ready: comboReady(comboCell),
8968
- send: /* @__PURE__ */ jsx91(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9006
+ send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
8969
9007
  if (comboCell) onSend(comboAsk(comboCell, strings));
8970
9008
  } })
8971
9009
  }
8972
9010
  ),
8973
- /* @__PURE__ */ jsx91(
9011
+ /* @__PURE__ */ jsx93(
8974
9012
  AskRow,
8975
9013
  {
8976
9014
  icon: "\u{1F3C6}",
8977
9015
  ask: fillTemplate(strings.bigComboRow, {
8978
- legs: /* @__PURE__ */ jsx91(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
8979
- total: /* @__PURE__ */ jsx91(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9016
+ legs: /* @__PURE__ */ jsx93(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9017
+ total: /* @__PURE__ */ jsx93(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
8980
9018
  }),
8981
9019
  ready: comboReady(bigCell),
8982
- send: /* @__PURE__ */ jsx91(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9020
+ send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
8983
9021
  if (bigCell) onSend(comboAsk(bigCell, strings));
8984
9022
  } })
8985
9023
  }
8986
9024
  ),
8987
- markets.length > 0 && /* @__PURE__ */ jsx91(
9025
+ markets.length > 0 && /* @__PURE__ */ jsx93(
8988
9026
  AskRow,
8989
9027
  {
8990
9028
  icon: "\u26BD",
8991
9029
  ask: fillTemplate(strings.marketRow, {
8992
- market: /* @__PURE__ */ jsx91(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9030
+ market: /* @__PURE__ */ jsx93(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
8993
9031
  }),
8994
9032
  ready: marketCell ? strings.readyCount(marketCell.count) : null,
8995
- send: /* @__PURE__ */ jsx91(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9033
+ send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
8996
9034
  if (marketCell) onSend(marketAsk(marketCell, strings));
8997
9035
  } })
8998
9036
  }
8999
9037
  ),
9000
- /* @__PURE__ */ jsx91("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9038
+ /* @__PURE__ */ jsx93("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9001
9039
  ] });
9002
9040
  }
9003
9041
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
@@ -9021,24 +9059,24 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
9021
9059
  const d = strings.comboDisplay(nextLegs, nextTotal);
9022
9060
  setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
9023
9061
  };
9024
- const footer = /* @__PURE__ */ jsx91(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9062
+ const footer = /* @__PURE__ */ jsx93(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9025
9063
  if (cell) onSend(comboAsk(cell, strings));
9026
9064
  } });
9027
- return /* @__PURE__ */ jsxs76(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9028
- /* @__PURE__ */ jsxs76("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9029
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9030
- /* @__PURE__ */ jsx91("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx91("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)) })
9065
+ return /* @__PURE__ */ jsxs78(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9066
+ /* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9067
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9068
+ /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx93("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)) })
9031
9069
  ] }),
9032
- /* @__PURE__ */ jsxs76("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9033
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9034
- /* @__PURE__ */ jsxs76("div", { className: "ss-w-tool-stepper", children: [
9035
- /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9036
- /* @__PURE__ */ jsx91("span", { className: "ss-w-tool-count", children: legs }),
9037
- /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9070
+ /* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9071
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9072
+ /* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-stepper", children: [
9073
+ /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9074
+ /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-count", children: legs }),
9075
+ /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9038
9076
  ] })
9039
9077
  ] }),
9040
- cell ? /* @__PURE__ */ jsx91(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx91(Unavailable, { text: strings.unavailable }),
9041
- /* @__PURE__ */ jsx91("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9078
+ cell ? /* @__PURE__ */ jsx93(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx93(Unavailable, { text: strings.unavailable }),
9079
+ /* @__PURE__ */ jsx93("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9042
9080
  ] });
9043
9081
  }
9044
9082
 
@@ -9140,7 +9178,7 @@ function markToolSeen() {
9140
9178
  }
9141
9179
 
9142
9180
  // src/components/ChatPanel.tsx
9143
- import { jsx as jsx92, jsxs as jsxs77 } from "react/jsx-runtime";
9181
+ import { jsx as jsx94, jsxs as jsxs79 } from "react/jsx-runtime";
9144
9182
  var FULLSCREEN_QUERY = "(max-width: 639px)";
9145
9183
  function useIsModal() {
9146
9184
  const [modal, setModal] = useState43(false);
@@ -9231,8 +9269,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9231
9269
  focusAfterCloseRef.current = "composer";
9232
9270
  setTool(null);
9233
9271
  }, [tool, onChatTab, presetGrid]);
9234
- return /* @__PURE__ */ jsxs77("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9235
- /* @__PURE__ */ jsx92(
9272
+ return /* @__PURE__ */ jsxs79("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9273
+ /* @__PURE__ */ jsx94(
9236
9274
  ChatHeader,
9237
9275
  {
9238
9276
  onClose: close,
@@ -9245,7 +9283,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9245
9283
  moreOptionsLabel: ui.moreOptions
9246
9284
  }
9247
9285
  ),
9248
- monitor && /* @__PURE__ */ jsx92(
9286
+ monitor && /* @__PURE__ */ jsx94(
9249
9287
  TabBar,
9250
9288
  {
9251
9289
  monitor,
@@ -9257,9 +9295,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9257
9295
  gamesEnabled: gamesResult?.enabled ?? false
9258
9296
  }
9259
9297
  ),
9260
- /* @__PURE__ */ jsxs77("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9261
- /* @__PURE__ */ jsx92(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx92(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9262
- showDial ? /* @__PURE__ */ jsx92(
9298
+ /* @__PURE__ */ jsxs79("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9299
+ /* @__PURE__ */ jsx94(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx94(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9300
+ showDial ? /* @__PURE__ */ jsx94(
9263
9301
  PresetSpeedDial,
9264
9302
  {
9265
9303
  expanded: dial.expanded,
@@ -9271,12 +9309,12 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9271
9309
  buttonRef: dialButtonRef
9272
9310
  }
9273
9311
  ) : null,
9274
- tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */ jsx92(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx92(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
9312
+ tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */ jsx94(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx94(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
9275
9313
  ] }),
9276
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx92(TodayPanel, { discovery, ui, monitor }),
9277
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx92(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
9278
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx92(OddsPanel, { monitor, ui, slip }),
9279
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx92(
9314
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx94(TodayPanel, { discovery, ui, monitor }),
9315
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx94(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
9316
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx94(OddsPanel, { monitor, ui, slip }),
9317
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx94(
9280
9318
  GamesPanel,
9281
9319
  {
9282
9320
  loggedIn: !!loggedIn,
@@ -9290,7 +9328,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9290
9328
  }
9291
9329
  }
9292
9330
  ),
9293
- monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ jsx92(
9331
+ monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ jsx94(
9294
9332
  LeaderboardPanel,
9295
9333
  {
9296
9334
  loggedIn: !!loggedIn,
@@ -9300,7 +9338,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9300
9338
  ui
9301
9339
  }
9302
9340
  ),
9303
- (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ jsx92(
9341
+ (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ jsx94(
9304
9342
  ChatInput,
9305
9343
  {
9306
9344
  ref: inputRef,
@@ -9318,9 +9356,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9318
9356
  }
9319
9357
 
9320
9358
  // src/components/HostEventsProvider.tsx
9321
- import { jsx as jsx93 } from "react/jsx-runtime";
9359
+ import { jsx as jsx95 } from "react/jsx-runtime";
9322
9360
  function HostEventsProvider({ value, children }) {
9323
- return /* @__PURE__ */ jsx93(SlipStateContext.Provider, { value: value.slipState, children });
9361
+ return /* @__PURE__ */ jsx95(SlipStateContext.Provider, { value: value.slipState, children });
9324
9362
  }
9325
9363
 
9326
9364
  // src/styles/css.generated.ts
@@ -10965,10 +11003,41 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
10965
11003
  .ss-g-motm-pill { flex: none; padding: 3px 8px; font-size: 11px; }
10966
11004
  .ss-g-motm-foot { font-size: 14px; font-weight: 600; }
10967
11005
  .ss-g-motm-fun { font-size: 11px; color: var(--ss-g-faint); }
11006
+
11007
+ /* \u2500\u2500 tap-to-answer tray + per-game team-colour band (u503) \u2500\u2500 */
11008
+ .ss-g-tray { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; max-height: 150px; overflow-y: auto; overscroll-behavior: contain; padding: 2px; }
11009
+ .ss-g-tray-chip { display: flex; flex-direction: column; align-items: center; gap: 4px; min-height: 78px; padding: 6px 4px; border: 1px solid var(--ss-g-line); border-radius: 14px; background: var(--ss-g-surface); color: var(--ss-g-ink); font-family: var(--ss-g-font-body); cursor: pointer; }
11010
+ .ss-g-tray-chip:hover, .ss-g-tray-chip:focus-visible { background: var(--ss-g-raised); border-color: var(--ss-w-accent); outline: none; }
11011
+ .ss-g-tray-chip:disabled { opacity: .5; cursor: default; }
11012
+ .ss-g-tray-av { width: 38px; height: 38px; flex: none; border-radius: 50%; overflow: hidden; display: grid; place-items: center; background: var(--ss-g-raised); color: var(--ss-g-muted); font-size: 14px; font-weight: 700; }
11013
+ .ss-g-tray-av img { width: 100%; height: 100%; object-fit: cover; }
11014
+ .ss-g-tray-name { width: 100%; display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
11015
+ .ss-g-tray-first { max-width: 100%; font-size: 10px; font-weight: 500; color: var(--ss-g-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
11016
+ .ss-g-tray-last { max-width: 100%; font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
11017
+
11018
+ /* Each game gets its own band colour: the operator accent mixed into the ground, hue-nudged per game.
11019
+ Browsers without relative colour syntax keep the plain accent mix. */
11020
+ .ss-g-screen[data-game] { --ss-g-band: color-mix(in srgb, var(--ss-w-accent) var(--ss-g-band-mix, 18%), var(--ss-g-ground)); }
11021
+ @supports (color: oklch(from red l c h)) {
11022
+ .ss-g-screen[data-game] { --ss-g-band: oklch(from color-mix(in srgb, var(--ss-w-accent) var(--ss-g-band-mix, 18%), var(--ss-g-ground)) l calc(c * 1.5) calc(h + var(--ss-g-hue-shift, 0))); }
11023
+ }
11024
+ .ss-g-screen[data-game="mystery-tiger"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 0; }
11025
+ .ss-g-screen[data-game="career-path"] { --ss-g-band-mix: 11%; --ss-g-hue-shift: -24; }
11026
+ .ss-g-screen[data-game] > .ss-g-head { background: var(--ss-g-band); border-radius: 0 0 24px 24px; padding-bottom: 12px; }
11027
+ .ss-g-worth { flex: none; display: flex; align-items: baseline; gap: 10px; font-size: 13px; color: var(--ss-g-muted); }
11028
+ .ss-g-worth-now { font-family: var(--ss-g-font-display); font-weight: 800; font-size: 18px; letter-spacing: .02em; text-transform: uppercase; color: var(--ss-w-accent); }
11029
+ .ss-g-screen[data-game="beat-the-grid"] { --ss-g-band-mix: 13%; --ss-g-hue-shift: 14; }
11030
+ .ss-g-screen[data-game="guess-the-xi"] { --ss-g-band-mix: 12%; --ss-g-hue-shift: -36; }
11031
+ .ss-g-screen[data-game="higher-or-lower"] { --ss-g-band-mix: 16%; --ss-g-hue-shift: 28; }
11032
+ .ss-g-screen[data-game="daily-quiz"] { --ss-g-band-mix: 10%; --ss-g-hue-shift: -12; }
11033
+ .ss-g-screen[data-game="stat-ladder"] { --ss-g-band-mix: 15%; --ss-g-hue-shift: 36; }
11034
+ .ss-g-screen[data-game="matchday-predictor"] { --ss-g-band-mix: 18%; --ss-g-hue-shift: -4; }
11035
+ .ss-g-screen[data-game="starting-xi"] { --ss-g-band-mix: 9%; --ss-g-hue-shift: -30; }
11036
+ .ss-g-screen[data-game="fan-motm"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 8; }
10968
11037
  `;
10969
11038
 
10970
11039
  // src/StatsWidget.tsx
10971
- import { jsx as jsx94 } from "react/jsx-runtime";
11040
+ import { jsx as jsx96 } from "react/jsx-runtime";
10972
11041
  function buildClient(props) {
10973
11042
  try {
10974
11043
  if ("client" in props && props.client) {
@@ -11179,7 +11248,7 @@ function StatsWidget(props) {
11179
11248
  }, [built, ui.injectStyles]);
11180
11249
  if (!built) return null;
11181
11250
  const attrs = themeAttrs(ui);
11182
- return /* @__PURE__ */ jsx94(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx94(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx94("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__ */ jsx94(
11251
+ return /* @__PURE__ */ jsx96(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx96(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx96("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__ */ jsx96(
11183
11252
  ChatPanel,
11184
11253
  {
11185
11254
  controller,
@@ -11194,7 +11263,7 @@ function StatsWidget(props) {
11194
11263
  conversation: built?.conversation ?? null,
11195
11264
  presetGrid
11196
11265
  }
11197
- ) : /* @__PURE__ */ jsx94(
11266
+ ) : /* @__PURE__ */ jsx96(
11198
11267
  ChatFab,
11199
11268
  {
11200
11269
  label: ui.launcherLabel,