@sensiblestats/widget-react 0.62.0 → 0.63.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.cjs CHANGED
@@ -36,7 +36,7 @@ __export(index_exports, {
36
36
  module.exports = __toCommonJS(index_exports);
37
37
 
38
38
  // src/StatsWidget.tsx
39
- var import_react45 = require("react");
39
+ var import_react46 = require("react");
40
40
  var import_widget_sdk5 = require("@sensiblestats/widget-sdk");
41
41
 
42
42
  // src/kickoff.ts
@@ -126,6 +126,10 @@ var STRINGS = {
126
126
  inSlipLabel: "In slip",
127
127
  oddsUnavailable: "Odds unavailable right now",
128
128
  momentumLabel: "Momentum",
129
+ liveFactLabel: "Live fact",
130
+ liveFactAsk: "Ask about this",
131
+ liveFactEarlier: (n) => `Earlier facts (${n})`,
132
+ liveFactHideEarlier: "Hide earlier facts",
129
133
  accordionValueLabel: "Value",
130
134
  accordionRetry: "Couldn't load odds \u2014 tap to retry",
131
135
  accordionSuspended: "Suspended",
@@ -422,6 +426,10 @@ var STRINGS = {
422
426
  inSlipLabel: "Kuponda",
423
427
  oddsUnavailable: "Oranlar \u015Fu anda kullan\u0131lam\u0131yor",
424
428
  momentumLabel: "Momentum",
429
+ liveFactLabel: "Canl\u0131 bilgi",
430
+ liveFactAsk: "Bunu sor",
431
+ liveFactEarlier: (n) => `\xD6nceki bilgiler (${n})`,
432
+ liveFactHideEarlier: "\xD6nceki bilgileri gizle",
425
433
  accordionValueLabel: "De\u011Fer",
426
434
  accordionRetry: "Oranlar y\xFCklenemedi \u2014 yeniden dene",
427
435
  accordionSuspended: "Ask\u0131da",
@@ -746,6 +754,10 @@ function normalizeUi(cfg) {
746
754
  inSlipLabel: strings.inSlipLabel,
747
755
  oddsUnavailable: strings.oddsUnavailable,
748
756
  momentumLabel: strings.momentumLabel,
757
+ liveFactLabel: strings.liveFactLabel,
758
+ liveFactAsk: strings.liveFactAsk,
759
+ liveFactEarlier: strings.liveFactEarlier,
760
+ liveFactHideEarlier: strings.liveFactHideEarlier,
749
761
  accordionValueLabel: strings.accordionValueLabel,
750
762
  accordionRetry: strings.accordionRetry,
751
763
  accordionSuspended: strings.accordionSuspended,
@@ -792,6 +804,12 @@ function slipPickFields(selection, label, line) {
792
804
  if (Number.isFinite(odds) && odds > 1 && odds <= MAX_ODDS) fields.odds = odds;
793
805
  return fields;
794
806
  }
807
+ function chipSelection(market, matchId, conversationId) {
808
+ if (!market || !market.addToSlipEnabled || typeof market.matchOddsId !== "number" || typeof market.price !== "number") return null;
809
+ const selection = { matchOddsId: market.matchOddsId, matchId, oddsDecimal: market.price };
810
+ if (conversationId !== void 0) selection.conversationId = conversationId;
811
+ return selection;
812
+ }
795
813
  function wasAdded(result) {
796
814
  if (!result) return true;
797
815
  if (result.status === "price_changed") return result.accepted;
@@ -1510,7 +1528,7 @@ function useChatStream(conversation, starterTexts, greetingMessage, storageKey)
1510
1528
  const send = (0, import_react2.useCallback)((text, opts) => {
1511
1529
  const trimmed = text.trim();
1512
1530
  if (!trimmed) return;
1513
- run({ message: trimmed, actionId: opts?.actionId, actionRef: opts?.actionRef }, opts?.displayText);
1531
+ run({ message: trimmed, actionId: opts?.actionId, actionRef: opts?.actionRef, grounding: opts?.grounding }, opts?.displayText);
1514
1532
  }, [run]);
1515
1533
  const retry = (0, import_react2.useCallback)(() => {
1516
1534
  const last = stateRef.current.lastUserInput;
@@ -2384,7 +2402,7 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
2384
2402
  }
2385
2403
 
2386
2404
  // src/components/ChatPanel.tsx
2387
- var import_react44 = require("react");
2405
+ var import_react45 = require("react");
2388
2406
 
2389
2407
  // src/components/ChatHeader.tsx
2390
2408
  var import_react12 = require("react");
@@ -4213,15 +4231,79 @@ function MarketAccordion({ match, monitor, ui, slip }) {
4213
4231
  }) });
4214
4232
  }
4215
4233
 
4216
- // src/components/MonitorMatchCard.tsx
4234
+ // src/components/LiveFactBlock.tsx
4235
+ var import_react29 = require("react");
4217
4236
  var import_jsx_runtime47 = require("react/jsx-runtime");
4218
- function chipSelection(row, matchId, conversationId) {
4219
- const chip = row.market;
4220
- if (!chip || !chip.addToSlipEnabled || typeof chip.matchOddsId !== "number" || typeof chip.price !== "number") return null;
4221
- const selection = { matchOddsId: chip.matchOddsId, matchId, oddsDecimal: chip.price };
4222
- if (conversationId !== void 0) selection.conversationId = conversationId;
4223
- return selection;
4237
+ function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
4238
+ const [expanded, setExpanded] = (0, import_react29.useState)(false);
4239
+ const [current, ...earlier] = facts;
4240
+ if (!current) return null;
4241
+ const m = current.market;
4242
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { className: "ss-w-fact", "aria-label": ui.liveFactLabel, children: [
4243
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-fact-k", children: [
4244
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: ui.liveFactLabel }),
4245
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-fact-min", children: [
4246
+ "\xB7 ",
4247
+ current.minuteLabel
4248
+ ] }),
4249
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-fact-subj", children: current.subjectLabel })
4250
+ ] }),
4251
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "ss-w-fact-text", children: current.text }),
4252
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ss-w-fact-basis", children: current.basis }),
4253
+ m && !m.isSuspended && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-fact-mkt", children: [
4254
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
4255
+ m.marketLabel,
4256
+ " \xB7 ",
4257
+ m.selectionLabel
4258
+ ] }),
4259
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-stat-mkt-right", children: [
4260
+ typeof m.price === "number" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-price", children: m.price.toFixed(2) }),
4261
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4262
+ SlipButton,
4263
+ {
4264
+ selection: chipSelection(m, matchId, slip.conversationId),
4265
+ shownOdds: typeof m.price === "number" ? m.price.toFixed(2) : "",
4266
+ marketDeveloperName: m.marketDeveloperName,
4267
+ selectionLabel: m.selectionLabel,
4268
+ slip,
4269
+ ui
4270
+ }
4271
+ )
4272
+ ] })
4273
+ ] }),
4274
+ expanded && earlier.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ul", { className: "ss-w-fact-hist", children: earlier.map((f) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("li", { children: [
4275
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-fact-hmin", children: f.minuteLabel }),
4276
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
4277
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "ss-w-fact-htext", children: f.text }),
4278
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ss-w-fact-basis", children: f.basis })
4279
+ ] })
4280
+ ] }, f.id)) }),
4281
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-fact-foot", children: [
4282
+ onAsk && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4283
+ "button",
4284
+ {
4285
+ type: "button",
4286
+ className: "ss-w-fact-link",
4287
+ onClick: () => onAsk(current.text, { kind: "liveFact", matchId, subject: current.text.slice(0, 400) }),
4288
+ children: ui.liveFactAsk
4289
+ }
4290
+ ),
4291
+ earlier.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4292
+ "button",
4293
+ {
4294
+ type: "button",
4295
+ className: "ss-w-fact-link ss-w-fact-link--muted",
4296
+ "aria-expanded": expanded,
4297
+ onClick: () => setExpanded((v) => !v),
4298
+ children: expanded ? ui.liveFactHideEarlier : ui.liveFactEarlier(earlier.length)
4299
+ }
4300
+ )
4301
+ ] })
4302
+ ] });
4224
4303
  }
4304
+
4305
+ // src/components/MonitorMatchCard.tsx
4306
+ var import_jsx_runtime48 = require("react/jsx-runtime");
4225
4307
  function isPromoted(row, promotedPins) {
4226
4308
  const chip = row.market;
4227
4309
  if (!chip) return false;
@@ -4247,7 +4329,7 @@ function groupScorers(goals, ownGoalLabel) {
4247
4329
  return { player: name, label: name ? `${name} ${minutes}` : minutes };
4248
4330
  });
4249
4331
  }
4250
- function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
4332
+ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip, onAsk }) {
4251
4333
  const live = match.phase === "live";
4252
4334
  const goals = match.events.filter((e) => e.type === "goal");
4253
4335
  const homeScorers = groupScorers(goals.filter((e) => e.side === "home"), ui.ownGoalLabel);
@@ -4256,67 +4338,68 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
4256
4338
  const otherRows = match.statRows.filter((row) => !isPromoted(row, promotedPins));
4257
4339
  const orderedRows = [...promotedRows, ...otherRows];
4258
4340
  const kickoff = match.phase === "preMatch" && match.kickoffUtc ? ui.bettingKickoff(match.kickoffUtc) : void 0;
4259
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon", children: [
4260
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-top", children: [
4261
- live && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-fandash-live-pill", children: [
4262
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
4341
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon", children: [
4342
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-top", children: [
4343
+ live && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-fandash-live-pill", children: [
4344
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
4263
4345
  ui.liveLabel
4264
4346
  ] }),
4265
- match.phase === "fullTime" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
4266
- kickoff && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-pill", children: [
4347
+ match.phase === "fullTime" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
4348
+ kickoff && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-mon-pill", children: [
4267
4349
  kickoff.dayLabel,
4268
4350
  " \xB7 ",
4269
4351
  kickoff.time
4270
4352
  ] }),
4271
- live && match.minuteLabel && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
4272
- match.competitionName && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-comp", children: match.competitionName }),
4273
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
4353
+ live && match.minuteLabel && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
4354
+ match.competitionName && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-comp", children: match.competitionName }),
4355
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
4274
4356
  ] }),
4275
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-main", children: [
4276
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-side", children: [
4277
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
4278
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-name", children: match.homeTeamName })
4357
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-main", children: [
4358
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-mon-side", children: [
4359
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
4360
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-name", children: match.homeTeamName })
4279
4361
  ] }),
4280
- match.phase === "preMatch" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-score", children: [
4362
+ match.phase === "preMatch" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-mon-score", children: [
4281
4363
  match.homeScore,
4282
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", { children: "\u2013" }),
4364
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("i", { children: "\u2013" }),
4283
4365
  match.awayScore
4284
4366
  ] }),
4285
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
4286
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
4287
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-name", children: match.awayTeamName })
4367
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
4368
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
4369
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-name", children: match.awayTeamName })
4288
4370
  ] })
4289
4371
  ] }),
4290
- (homeScorers.length > 0 || awayScorers.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-scorers", children: [
4291
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-home", children: homeScorers.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("li", { children: s.label }, `${s.player}-${i}`)) }),
4292
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-scorers-ball", "aria-hidden": "true", children: "\u26BD" }),
4293
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-away", children: awayScorers.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("li", { children: s.label }, `${s.player}-${i}`)) })
4372
+ (homeScorers.length > 0 || awayScorers.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-scorers", children: [
4373
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-home", children: homeScorers.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("li", { children: s.label }, `${s.player}-${i}`)) }),
4374
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-scorers-ball", "aria-hidden": "true", children: "\u26BD" }),
4375
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-away", children: awayScorers.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("li", { children: s.label }, `${s.player}-${i}`)) })
4294
4376
  ] }),
4295
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
4377
+ live && match.facts && match.facts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(LiveFactBlock, { facts: match.facts, matchId: match.matchId, ui, slip, onAsk }),
4378
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
4296
4379
  const total = row.homeNum + row.awayNum;
4297
4380
  const homePct = total > 0 ? row.homeNum / total * 75 : 0;
4298
4381
  const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
4299
4382
  const promoted = isPromoted(row, promotedPins);
4300
- const selection = chipSelection(row, match.matchId, slip.conversationId);
4301
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
4302
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-stat-row", children: [
4303
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
4304
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-stat-l", children: row.label }),
4305
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
4383
+ const selection = chipSelection(row.market, match.matchId, slip.conversationId);
4384
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
4385
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-stat-row", children: [
4386
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
4387
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-stat-l", children: row.label }),
4388
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
4306
4389
  ] }),
4307
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-bar", children: [
4308
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
4309
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
4390
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-bar", children: [
4391
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
4392
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
4310
4393
  ] }),
4311
- row.market && !row.market.isSuspended && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
4312
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
4394
+ row.market && !row.market.isSuspended && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
4395
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { children: [
4313
4396
  row.market.marketLabel,
4314
4397
  " \xB7 ",
4315
4398
  row.market.selectionLabel
4316
4399
  ] }),
4317
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "ss-w-mon-stat-mkt-right", children: [
4318
- typeof row.market.price === "number" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
4319
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4400
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "ss-w-mon-stat-mkt-right", children: [
4401
+ typeof row.market.price === "number" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
4402
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4320
4403
  SlipButton,
4321
4404
  {
4322
4405
  selection,
@@ -4331,23 +4414,23 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
4331
4414
  ] })
4332
4415
  ] }, row.label);
4333
4416
  }) }),
4334
- match.status === "stale" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
4335
- match.momentum.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ss-w-mon-mom", children: [
4336
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
4337
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(MomentumWave, { points: match.momentum, clubIsHome: true })
4417
+ match.status === "stale" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
4418
+ match.momentum.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-mom", children: [
4419
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
4420
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(MomentumWave, { points: match.momentum, clubIsHome: true })
4338
4421
  ] }),
4339
- match.phase === "fullTime" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ss-w-mon-grace", children: ui.graceNote })
4422
+ match.phase === "fullTime" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-grace", children: ui.graceNote })
4340
4423
  ] });
4341
4424
  }
4342
4425
 
4343
4426
  // src/components/MonitorTabs.tsx
4344
- var import_jsx_runtime48 = require("react/jsx-runtime");
4427
+ var import_jsx_runtime49 = require("react/jsx-runtime");
4345
4428
  function OddsLiveStrip({ m, ui }) {
4346
4429
  const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
4347
4430
  const stale = m.status === "stale";
4348
4431
  if (!showScore && !m.minuteLabel && !(m.isSuspended && !m.isSettled) && !m.isSettled && !stale) return null;
4349
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mk-live", children: [
4350
- showScore && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("b", { className: "ss-w-mk-live-score", children: [
4432
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "ss-w-mk-live", children: [
4433
+ showScore && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("b", { className: "ss-w-mk-live-score", children: [
4351
4434
  m.homeTeamName,
4352
4435
  " ",
4353
4436
  m.homeScore,
@@ -4356,27 +4439,28 @@ function OddsLiveStrip({ m, ui }) {
4356
4439
  " ",
4357
4440
  m.awayTeamName
4358
4441
  ] }),
4359
- m.minuteLabel && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
4360
- m.isSuspended && !m.isSettled && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
4361
- m.isSettled && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
4362
- stale && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) })
4442
+ m.minuteLabel && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
4443
+ m.isSuspended && !m.isSettled && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
4444
+ m.isSettled && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
4445
+ stale && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) })
4363
4446
  ] });
4364
4447
  }
4365
- function MatchesPanel({ monitor, ui, slip }) {
4448
+ function MatchesPanel({ monitor, ui, slip, onAsk }) {
4366
4449
  const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
4367
- if (matches.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
4368
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-item", children: [
4369
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4450
+ if (matches.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
4451
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "ss-w-mon-item", children: [
4452
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4370
4453
  MonitorMatchCard,
4371
4454
  {
4372
4455
  match: m,
4373
4456
  promotedPins: monitor.pins.filter((p) => p.kind !== "match" && p.matchId === m.matchId),
4374
4457
  monitor,
4375
4458
  ui,
4376
- slip
4459
+ slip,
4460
+ onAsk
4377
4461
  }
4378
4462
  ),
4379
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(MarketAccordion, { match: m, monitor, ui, slip })
4463
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(MarketAccordion, { match: m, monitor, ui, slip })
4380
4464
  ] }, m.matchId)) });
4381
4465
  }
4382
4466
  function withSinceViewMovement(vm, prev) {
@@ -4391,12 +4475,12 @@ function withSinceViewMovement(vm, prev) {
4391
4475
  }
4392
4476
  function OddsPanel({ monitor, ui, slip }) {
4393
4477
  const markets = (monitor.snapshot?.markets ?? []).filter((m) => monitor.pins.some((p) => p.key === m.key));
4394
- if (markets.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
4395
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-list", children: markets.map((m) => {
4478
+ if (markets.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
4479
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ss-w-mon-list", children: markets.map((m) => {
4396
4480
  const pin = monitor.pins.find((p) => p.key === m.key);
4397
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
4398
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(OddsLiveStrip, { m, ui }),
4399
- m.card && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4481
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
4482
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(OddsLiveStrip, { m, ui }),
4483
+ m.card && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4400
4484
  MarketOddsCardList,
4401
4485
  {
4402
4486
  cards: [withSinceViewMovement(toMarketOddsVM(m.card), monitor.lastViewedPrices[m.key])],
@@ -4407,22 +4491,22 @@ function OddsPanel({ monitor, ui, slip }) {
4407
4491
  inSlipIds: monitor.inSlip
4408
4492
  }
4409
4493
  ),
4410
- m.history && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
4411
- !m.card && !m.history && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
4494
+ m.history && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
4495
+ !m.card && !m.history && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
4412
4496
  ] }, m.key);
4413
4497
  }) });
4414
4498
  }
4415
4499
 
4416
4500
  // src/components/FixtureRow.tsx
4417
- var import_jsx_runtime49 = require("react/jsx-runtime");
4501
+ var import_jsx_runtime50 = require("react/jsx-runtime");
4418
4502
  function kickoffLabel(kickoffUnix) {
4419
4503
  const d = new Date(kickoffUnix * 1e3);
4420
4504
  return `${`${d.getHours()}`.padStart(2, "0")}:${`${d.getMinutes()}`.padStart(2, "0")}`;
4421
4505
  }
4422
4506
  function Side({ name, crest, away = false }) {
4423
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: away ? "ss-w-drow-side ss-w-drow-side--away" : "ss-w-drow-side", children: [
4424
- crest ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("img", { className: "ss-w-drow-crest", src: crest, alt: "" }) : null,
4425
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "ss-w-drow-nm", children: name })
4507
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: away ? "ss-w-drow-side ss-w-drow-side--away" : "ss-w-drow-side", children: [
4508
+ crest ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("img", { className: "ss-w-drow-crest", src: crest, alt: "" }) : null,
4509
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "ss-w-drow-nm", children: name })
4426
4510
  ] });
4427
4511
  }
4428
4512
  function FixtureRow({ match, state, stale, ui, monitor }) {
@@ -4430,45 +4514,45 @@ function FixtureRow({ match, state, stale, ui, monitor }) {
4430
4514
  const hasScore = (state?.phase === "live" || state?.phase === "fullTime") && typeof state.homeScore === "number" && typeof state.awayScore === "number";
4431
4515
  const ticked = state?.phase === "live" ? state.minuteLabel ?? null : null;
4432
4516
  const when = state?.isHalfTime && !stale ? ui.halfTime : isLive ? ticked ?? "\u2014" : state?.phase === "live" ? "\u2014" : kickoffLabel(match.kickoffUnix);
4433
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: isLive || state?.isHalfTime ? "ss-w-drow ss-w-drow--live" : "ss-w-drow", children: [
4434
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: isLive || state?.isHalfTime ? "ss-w-drow-when ss-w-drow-when--live" : "ss-w-drow-when", children: when }),
4435
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: "ss-w-drow-fx", children: [
4436
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Side, { name: match.homeTeamName, crest: match.homeTeamImagePath }),
4437
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: hasScore ? "ss-w-drow-sc" : "ss-w-drow-sc ss-w-drow-sc--idle", children: hasScore ? `${state.homeScore}\u2013${state.awayScore}` : "\u2013" }),
4438
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Side, { name: match.awayTeamName, crest: match.awayTeamImagePath, away: true })
4517
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: isLive || state?.isHalfTime ? "ss-w-drow ss-w-drow--live" : "ss-w-drow", children: [
4518
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: isLive || state?.isHalfTime ? "ss-w-drow-when ss-w-drow-when--live" : "ss-w-drow-when", children: when }),
4519
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "ss-w-drow-fx", children: [
4520
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Side, { name: match.homeTeamName, crest: match.homeTeamImagePath }),
4521
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: hasScore ? "ss-w-drow-sc" : "ss-w-drow-sc ss-w-drow-sc--idle", children: hasScore ? `${state.homeScore}\u2013${state.awayScore}` : "\u2013" }),
4522
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Side, { name: match.awayTeamName, crest: match.awayTeamImagePath, away: true })
4439
4523
  ] }),
4440
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
4524
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
4441
4525
  ] });
4442
4526
  }
4443
4527
 
4444
4528
  // src/components/CompetitionGroup.tsx
4445
- var import_jsx_runtime50 = require("react/jsx-runtime");
4529
+ var import_jsx_runtime51 = require("react/jsx-runtime");
4446
4530
  function CompetitionGroup({ group, open, onToggle, states, stale, ui, monitor, disambiguate = false }) {
4447
4531
  const own = group.matches.filter((m) => !isTreatedLive(states[m.matchId], stale));
4448
4532
  const hasLive = own.length !== group.matches.length;
4449
4533
  if (own.length === 0) {
4450
4534
  return null;
4451
4535
  }
4452
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "ss-w-grp", children: [
4453
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("button", { type: "button", className: "ss-w-grp-head", "aria-expanded": open, onClick: onToggle, children: [
4454
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "ss-w-grp-chev", children: open ? "\u25BE" : "\u25B8" }),
4455
- hasLive && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
4456
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "ss-w-grp-name", children: [
4536
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "ss-w-grp", children: [
4537
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("button", { type: "button", className: "ss-w-grp-head", "aria-expanded": open, onClick: onToggle, children: [
4538
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "ss-w-grp-chev", children: open ? "\u25BE" : "\u25B8" }),
4539
+ hasLive && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
4540
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "ss-w-grp-name", children: [
4457
4541
  group.competitionName,
4458
- disambiguate && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "ss-w-grp-country", children: [
4542
+ disambiguate && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "ss-w-grp-country", children: [
4459
4543
  " (",
4460
4544
  group.competitionCountry,
4461
4545
  ")"
4462
4546
  ] }) : null
4463
4547
  ] }),
4464
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "ss-w-grp-count", children: own.length })
4548
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "ss-w-grp-count", children: own.length })
4465
4549
  ] }),
4466
- open && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "ss-w-grp-body", children: own.map((m) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) })
4550
+ open && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "ss-w-grp-body", children: own.map((m) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) })
4467
4551
  ] });
4468
4552
  }
4469
4553
 
4470
4554
  // src/components/TodayPanel.tsx
4471
- var import_jsx_runtime51 = require("react/jsx-runtime");
4555
+ var import_jsx_runtime52 = require("react/jsx-runtime");
4472
4556
  function TodayPanel({ discovery, ui, monitor }) {
4473
4557
  const { groups, states, stale, expanded, toggleGroup } = discovery;
4474
4558
  const visibleGroups = visibleGroupsOf(groups, states);
@@ -4477,14 +4561,14 @@ function TodayPanel({ discovery, ui, monitor }) {
4477
4561
  acc[g.competitionName] = (acc[g.competitionName] ?? 0) + 1;
4478
4562
  return acc;
4479
4563
  }, {});
4480
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "ss-w-mon-list", children: [
4481
- stale && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
4482
- liveRows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
4483
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "ss-w-sec-head", children: [
4484
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
4564
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "ss-w-mon-list", children: [
4565
+ stale && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
4566
+ liveRows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
4567
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "ss-w-sec-head", children: [
4568
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
4485
4569
  ui.sectionLive
4486
4570
  ] }),
4487
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4571
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4488
4572
  FixtureRow,
4489
4573
  {
4490
4574
  match,
@@ -4496,7 +4580,7 @@ function TodayPanel({ discovery, ui, monitor }) {
4496
4580
  match.matchId
4497
4581
  )) })
4498
4582
  ] }),
4499
- visibleGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4583
+ visibleGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4500
4584
  CompetitionGroup,
4501
4585
  {
4502
4586
  group,
@@ -4514,16 +4598,16 @@ function TodayPanel({ discovery, ui, monitor }) {
4514
4598
  }
4515
4599
 
4516
4600
  // src/components/GamesPanel.tsx
4517
- var import_react42 = require("react");
4601
+ var import_react43 = require("react");
4518
4602
 
4519
4603
  // src/components/GamesLoginWall.tsx
4520
- var import_jsx_runtime52 = require("react/jsx-runtime");
4604
+ var import_jsx_runtime53 = require("react/jsx-runtime");
4521
4605
  function GamesLoginWall({ ui }) {
4522
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { children: ui.gamesLoginRequired }) }) });
4606
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { children: ui.gamesLoginRequired }) }) });
4523
4607
  }
4524
4608
 
4525
4609
  // src/components/GamesHub.tsx
4526
- var import_react29 = require("react");
4610
+ var import_react30 = require("react");
4527
4611
 
4528
4612
  // src/components/games/ui/gameMeta.ts
4529
4613
  function prettifyGameId(gameId) {
@@ -4539,75 +4623,75 @@ function splitName(full) {
4539
4623
  }
4540
4624
 
4541
4625
  // src/components/GameTileArt.tsx
4542
- var import_jsx_runtime53 = require("react/jsx-runtime");
4626
+ var import_jsx_runtime54 = require("react/jsx-runtime");
4543
4627
  function GameTileArt({ gameId }) {
4544
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
4628
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
4545
4629
  }
4546
- var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("g", { className: cls, children: [
4547
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
4548
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: `M${cx - r} ${cy + r}c0-${r * 0.8} ${r * 0.45}-${r * 1.1} ${r}-${r * 1.1}s${r} ${r * 0.3} ${r} ${r * 1.1}z` })
4630
+ var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("g", { className: cls, children: [
4631
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
4632
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: `M${cx - r} ${cy + r}c0-${r * 0.8} ${r * 0.45}-${r * 1.1} ${r}-${r * 1.1}s${r} ${r * 0.3} ${r} ${r * 1.1}z` })
4549
4633
  ] });
4550
4634
  var ART = {
4551
- "mystery-tiger": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4635
+ "mystery-tiger": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4552
4636
  head(60, 38, 26, "ss-g-art-fg"),
4553
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
4637
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
4554
4638
  ] }),
4555
- "higher-or-lower": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4639
+ "higher-or-lower": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4556
4640
  head(32, 38, 20),
4557
4641
  head(88, 38, 20),
4558
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
4559
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
4642
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
4643
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
4560
4644
  ] }),
4561
- "guess-the-xi": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4562
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
4563
- [[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
4645
+ "guess-the-xi": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4646
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
4647
+ [[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
4564
4648
  ] }),
4565
- "daily-quiz": /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
4566
- "career-path": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4567
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
4568
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
4569
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
4570
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
4571
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
4649
+ "daily-quiz": /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_jsx_runtime54.Fragment, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
4650
+ "career-path": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4651
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
4652
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
4653
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
4654
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
4655
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
4572
4656
  ] }),
4573
- "beat-the-grid": /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: 33 + c * 19, y: 10 + r * 19, width: "16", height: "16", rx: "3", className: (r + c) % 3 === 0 ? "ss-g-art-accent" : "ss-g-art-block" }, `${r}${c}`))) }),
4574
- "matchday-predictor": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4575
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
4576
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
4577
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
4578
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
4657
+ "beat-the-grid": /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_jsx_runtime54.Fragment, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: 33 + c * 19, y: 10 + r * 19, width: "16", height: "16", rx: "3", className: (r + c) % 3 === 0 ? "ss-g-art-accent" : "ss-g-art-block" }, `${r}${c}`))) }),
4658
+ "matchday-predictor": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4659
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
4660
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
4661
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
4662
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
4579
4663
  ] }),
4580
- "starting-xi": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4581
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
4582
- [[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
4664
+ "starting-xi": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4665
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
4666
+ [[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
4583
4667
  ] }),
4584
- "stat-ladder": /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
4585
- "fan-motm": /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4586
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
4668
+ "stat-ladder": /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_jsx_runtime54.Fragment, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
4669
+ "fan-motm": /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4670
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
4587
4671
  head(60, 40, 18),
4588
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M84 8l2.4 5 5.4.6-4 3.7 1.1 5.4-4.9-2.7-4.9 2.7 1.1-5.4-4-3.7 5.4-.6z", className: "ss-g-art-accent" })
4672
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { d: "M84 8l2.4 5 5.4.6-4 3.7 1.1 5.4-4.9-2.7-4.9 2.7 1.1-5.4-4-3.7 5.4-.6z", className: "ss-g-art-accent" })
4589
4673
  ] }),
4590
- default: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
4674
+ default: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
4591
4675
  };
4592
4676
 
4593
4677
  // src/components/games/ui/Chip.tsx
4594
- var import_jsx_runtime54 = require("react/jsx-runtime");
4678
+ var import_jsx_runtime55 = require("react/jsx-runtime");
4595
4679
  function Chip({ variant = "neutral", icon, children, className }) {
4596
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
4680
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
4597
4681
  icon,
4598
4682
  children
4599
4683
  ] });
4600
4684
  }
4601
4685
  function StatStack({ value, label }) {
4602
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { className: "ss-g-statstack", children: [
4603
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "ss-g-statstack-v", children: value }),
4604
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "ss-g-statstack-l", children: label })
4686
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "ss-g-statstack", children: [
4687
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "ss-g-statstack-v", children: value }),
4688
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "ss-g-statstack-l", children: label })
4605
4689
  ] });
4606
4690
  }
4607
4691
 
4608
4692
  // src/components/games/ui/icons.tsx
4609
- var import_jsx_runtime55 = require("react/jsx-runtime");
4610
- var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4693
+ var import_jsx_runtime56 = require("react/jsx-runtime");
4694
+ var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4611
4695
  "svg",
4612
4696
  {
4613
4697
  width: size,
@@ -4622,25 +4706,25 @@ var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runti
4622
4706
  children
4623
4707
  }
4624
4708
  );
4625
- var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M15 18l-6-6 6-6" }));
4626
- var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
4627
- var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M5 12l5 5 9-10" }));
4628
- var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M6 6l12 12M18 6L6 18" }));
4629
- var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M20 20l-3.5-3.5" }, "b")]);
4630
- var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 5v14M5 12h14" }));
4631
- var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
4632
- var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }));
4633
- var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
4634
- var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
4635
- var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
4636
- var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
4637
- var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
4638
- var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
4639
- var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M7 21v-8l-2-3V6a1.5 1.5 0 0 1 3 0v3V4a1.5 1.5 0 0 1 3 0v5V3.5a1.5 1.5 0 0 1 3 0V9V5a1.5 1.5 0 0 1 3 0v9l-2 3v4z" }));
4640
- var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { d: "M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-3 2-4 2-7 1.5 1 2 2 2 3 1-2 1-4 1-6z" }), true);
4709
+ var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M15 18l-6-6 6-6" }));
4710
+ var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
4711
+ var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M5 12l5 5 9-10" }));
4712
+ var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M6 6l12 12M18 6L6 18" }));
4713
+ var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M20 20l-3.5-3.5" }, "b")]);
4714
+ var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 5v14M5 12h14" }));
4715
+ var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
4716
+ var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }));
4717
+ var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
4718
+ var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
4719
+ var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
4720
+ var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
4721
+ var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
4722
+ var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
4723
+ var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M7 21v-8l-2-3V6a1.5 1.5 0 0 1 3 0v3V4a1.5 1.5 0 0 1 3 0v5V3.5a1.5 1.5 0 0 1 3 0V9V5a1.5 1.5 0 0 1 3 0v9l-2 3v4z" }));
4724
+ var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("path", { d: "M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-3 2-4 2-7 1.5 1 2 2 2 3 1-2 1-4 1-6z" }), true);
4641
4725
 
4642
4726
  // src/components/GameTile.tsx
4643
- var import_jsx_runtime56 = require("react/jsx-runtime");
4727
+ var import_jsx_runtime57 = require("react/jsx-runtime");
4644
4728
  function tileStatus(game, ui) {
4645
4729
  switch (game.status) {
4646
4730
  case "locked":
@@ -4664,38 +4748,38 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
4664
4748
  const status = tileStatus(game, ui);
4665
4749
  const disabled = DISABLED.has(game.status);
4666
4750
  const title = gameTitle(game, ui.games.titles);
4667
- const body = variant === "hero" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
4668
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "ss-g-hero-text", children: [
4669
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
4670
- status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Chip, { variant: "badge", children: ui.games.newToday }),
4671
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-hero-title", children: title }),
4672
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
4673
- status.tone === "success" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "ss-g-hero-cta", children: [
4751
+ const body = variant === "hero" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
4752
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-hero-text", children: [
4753
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
4754
+ status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Chip, { variant: "badge", children: ui.games.newToday }),
4755
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-hero-title", children: title }),
4756
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
4757
+ status.tone === "success" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-hero-cta", children: [
4674
4758
  status.tone === "accent" ? ui.games.resume : ui.games.playNow,
4675
4759
  " \u2192"
4676
4760
  ] })
4677
4761
  ] }),
4678
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(GameTileArt, { gameId: game.gameId }) })
4679
- ] }) : variant === "wide" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
4680
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(GameTileArt, { gameId: game.gameId }) }),
4681
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "ss-g-wide-text", children: [
4682
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-title", children: title }),
4683
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
4684
- status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Chip, { variant: "badge", children: ui.games.newToday })
4762
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTileArt, { gameId: game.gameId }) })
4763
+ ] }) : variant === "wide" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
4764
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTileArt, { gameId: game.gameId }) }),
4765
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-wide-text", children: [
4766
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-title", children: title }),
4767
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
4768
+ status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Chip, { variant: "badge", children: ui.games.newToday })
4685
4769
  ] }),
4686
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(IconChevronLeft, { size: 18 }) })
4687
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
4688
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(GameTileArt, { gameId: game.gameId }) }),
4689
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-title", children: title }),
4690
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
4770
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(IconChevronLeft, { size: 18 }) })
4771
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
4772
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTileArt, { gameId: game.gameId }) }),
4773
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-title", children: title }),
4774
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
4691
4775
  ] });
4692
4776
  const cls = `ss-g-tile ss-g-tile--${variant}`;
4693
- if (disabled) return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
4694
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
4777
+ if (disabled) return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
4778
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
4695
4779
  }
4696
4780
 
4697
4781
  // src/components/GamesHub.tsx
4698
- var import_jsx_runtime57 = require("react/jsx-runtime");
4782
+ var import_jsx_runtime58 = require("react/jsx-runtime");
4699
4783
  var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
4700
4784
  var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
4701
4785
  function pickHeroGame(games) {
@@ -4708,8 +4792,8 @@ function pickHeroGame(games) {
4708
4792
  }
4709
4793
  var tileKey = (g) => `${g.gameId}-${g.gameDay}-${g.fixtureId}`;
4710
4794
  function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
4711
- const [, setTick] = (0, import_react29.useState)(0);
4712
- (0, import_react29.useEffect)(() => {
4795
+ const [, setTick] = (0, import_react30.useState)(0);
4796
+ (0, import_react30.useEffect)(() => {
4713
4797
  const id = setInterval(() => setTick((t) => t + 1), 6e4);
4714
4798
  return () => clearInterval(id);
4715
4799
  }, []);
@@ -4721,58 +4805,58 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
4721
4805
  const kickoffs = fixtures.map((g) => g.kickoffUtc).filter((k) => !!k).sort();
4722
4806
  const todayPts = games.filter((g) => DONE.has(g.status)).reduce((s, g) => s + (g.score ?? 0), 0);
4723
4807
  const dash = "\u2014";
4724
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-hub", children: [
4725
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-stats", children: [
4726
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-stat", children: [
4727
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
4728
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
4729
- myWeeklyRow ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
4730
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(IconFlame, {}),
4808
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-hub", children: [
4809
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-stats", children: [
4810
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-stat", children: [
4811
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
4812
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
4813
+ myWeeklyRow ? /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
4814
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IconFlame, {}),
4731
4815
  myWeeklyRow.currentStreak
4732
4816
  ] }) : dash,
4733
- myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("small", { children: ui.games.unitDays })
4817
+ myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("small", { children: ui.games.unitDays })
4734
4818
  ] })
4735
4819
  ] }),
4736
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-stat", children: [
4737
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
4738
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
4820
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-stat", children: [
4821
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
4822
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
4739
4823
  ui.games.formatPts(todayPts),
4740
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("small", { children: ui.games.unitPts })
4824
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("small", { children: ui.games.unitPts })
4741
4825
  ] })
4742
4826
  ] }),
4743
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-stat", children: [
4744
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
4745
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
4827
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-stat", children: [
4828
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
4829
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
4746
4830
  myWeeklyRow ? `#${myWeeklyRow.rank}` : dash,
4747
- myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("small", { children: ui.games.thisWeek })
4831
+ myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("small", { children: ui.games.thisWeek })
4748
4832
  ] })
4749
4833
  ] })
4750
4834
  ] }),
4751
- weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
4752
- hero && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
4753
- (grid.length > 0 || wide) && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("section", { className: "ss-g-sec", children: [
4754
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-sec-head", children: [
4755
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { children: ui.games.dailyGames }),
4756
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: ui.games.newSetAtMidnight })
4835
+ weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
4836
+ hero && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
4837
+ (grid.length > 0 || wide) && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("section", { className: "ss-g-sec", children: [
4838
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-sec-head", children: [
4839
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("h3", { children: ui.games.dailyGames }),
4840
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { children: ui.games.newSetAtMidnight })
4757
4841
  ] }),
4758
- grid.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
4759
- wide && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTile, { game: wide, onOpen, ui, variant: "wide" })
4842
+ grid.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
4843
+ wide && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(GameTile, { game: wide, onOpen, ui, variant: "wide" })
4760
4844
  ] }),
4761
- fixtures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("section", { className: "ss-g-sec", children: [
4762
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ss-g-sec-head", children: [
4763
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { children: ui.games.matchdayGames }),
4764
- kickoffs[0] && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
4845
+ fixtures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("section", { className: "ss-g-sec", children: [
4846
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-g-sec-head", children: [
4847
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("h3", { children: ui.games.matchdayGames }),
4848
+ kickoffs[0] && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
4765
4849
  ] }),
4766
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
4850
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
4767
4851
  ] })
4768
4852
  ] });
4769
4853
  }
4770
4854
 
4771
4855
  // src/components/GameScreenHost.tsx
4772
- var import_react41 = require("react");
4856
+ var import_react42 = require("react");
4773
4857
 
4774
4858
  // src/useGamePlay.ts
4775
- var import_react30 = require("react");
4859
+ var import_react31 = require("react");
4776
4860
  function toSubmitResult(payload) {
4777
4861
  return {
4778
4862
  // 'pending' means the play is recorded but awaiting resolution (fixture games)
@@ -4784,17 +4868,17 @@ function toSubmitResult(payload) {
4784
4868
  };
4785
4869
  }
4786
4870
  function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh }) {
4787
- const [result, setResult] = (0, import_react30.useState)(null);
4788
- const [submitting, setSubmitting] = (0, import_react30.useState)(false);
4789
- const [rawStatus, setRawStatus] = (0, import_react30.useState)(null);
4790
- const inFlightRef = (0, import_react30.useRef)(false);
4791
- const convRef = (0, import_react30.useRef)(conversation);
4871
+ const [result, setResult] = (0, import_react31.useState)(null);
4872
+ const [submitting, setSubmitting] = (0, import_react31.useState)(false);
4873
+ const [rawStatus, setRawStatus] = (0, import_react31.useState)(null);
4874
+ const inFlightRef = (0, import_react31.useRef)(false);
4875
+ const convRef = (0, import_react31.useRef)(conversation);
4792
4876
  convRef.current = conversation;
4793
- const optsRef = (0, import_react30.useRef)({ gameId, gameDay, fixtureId, locale, refresh });
4877
+ const optsRef = (0, import_react31.useRef)({ gameId, gameDay, fixtureId, locale, refresh });
4794
4878
  optsRef.current = { gameId, gameDay, fixtureId, locale, refresh };
4795
- const resultRef = (0, import_react30.useRef)(null);
4879
+ const resultRef = (0, import_react31.useRef)(null);
4796
4880
  resultRef.current = result;
4797
- const refetch = (0, import_react30.useCallback)(async () => {
4881
+ const refetch = (0, import_react31.useCallback)(async () => {
4798
4882
  const conv = convRef.current;
4799
4883
  if (!conv) return;
4800
4884
  const opts = optsRef.current;
@@ -4810,7 +4894,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
4810
4894
  } catch {
4811
4895
  }
4812
4896
  }, []);
4813
- const submit = (0, import_react30.useCallback)(async (answerJson) => {
4897
+ const submit = (0, import_react31.useCallback)(async (answerJson) => {
4814
4898
  const conv = convRef.current;
4815
4899
  if (!conv || inFlightRef.current) return;
4816
4900
  inFlightRef.current = true;
@@ -4837,14 +4921,14 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
4837
4921
  setSubmitting(false);
4838
4922
  }
4839
4923
  }, [refetch]);
4840
- const hydrate = (0, import_react30.useCallback)(() => {
4924
+ const hydrate = (0, import_react31.useCallback)(() => {
4841
4925
  void refetch();
4842
4926
  }, [refetch]);
4843
4927
  return { result, submitting, submit, hydrate, rawStatus };
4844
4928
  }
4845
4929
 
4846
4930
  // src/components/games/MysteryTigerGame.tsx
4847
- var import_react32 = require("react");
4931
+ var import_react33 = require("react");
4848
4932
 
4849
4933
  // src/components/games/nationFlags.ts
4850
4934
  var FLAGS = {
@@ -5055,8 +5139,8 @@ function isNationCode(flag) {
5055
5139
  }
5056
5140
 
5057
5141
  // src/components/games/PlayerAvatar.tsx
5058
- var import_react31 = require("react");
5059
- var import_jsx_runtime58 = require("react/jsx-runtime");
5142
+ var import_react32 = require("react");
5143
+ var import_jsx_runtime59 = require("react/jsx-runtime");
5060
5144
  function initialsOf(name) {
5061
5145
  const parts = name.trim().split(/\s+/).filter(Boolean);
5062
5146
  const first = parts[0];
@@ -5073,41 +5157,41 @@ function PlayerAvatar({
5073
5157
  imagePath,
5074
5158
  className
5075
5159
  }) {
5076
- const [failed, setFailed] = (0, import_react31.useState)(false);
5160
+ const [failed, setFailed] = (0, import_react32.useState)(false);
5077
5161
  const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
5078
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
5162
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
5079
5163
  }
5080
5164
 
5081
5165
  // src/components/games/ui/GameHeader.tsx
5082
- var import_jsx_runtime59 = require("react/jsx-runtime");
5166
+ var import_jsx_runtime60 = require("react/jsx-runtime");
5083
5167
  function GameHeader({ title, eyebrow, right, onBack, backLabel }) {
5084
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "ss-g-head", children: [
5085
- onBack && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IconChevronLeft, {}) }),
5086
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "ss-g-head-text", children: [
5087
- eyebrow && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "ss-g-eyebrow", children: eyebrow }),
5088
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h2", { className: "ss-g-title", children: title })
5168
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-head", children: [
5169
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconChevronLeft, {}) }),
5170
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-head-text", children: [
5171
+ eyebrow && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "ss-g-eyebrow", children: eyebrow }),
5172
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "ss-g-title", children: title })
5089
5173
  ] }),
5090
- right && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "ss-g-head-right", children: right })
5174
+ right && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-g-head-right", children: right })
5091
5175
  ] });
5092
5176
  }
5093
5177
 
5094
5178
  // src/components/games/ui/SegmentProgress.tsx
5095
- var import_jsx_runtime60 = require("react/jsx-runtime");
5179
+ var import_jsx_runtime61 = require("react/jsx-runtime");
5096
5180
  function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right }) {
5097
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-progress", children: [
5098
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-progress-main", children: [
5099
- (leftLabel || rightLabel) && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-progress-labels", children: [
5100
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { children: leftLabel }),
5101
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "ss-g-progress-rl", children: rightLabel })
5181
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-g-progress", children: [
5182
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-g-progress-main", children: [
5183
+ (leftLabel || rightLabel) && /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-g-progress-labels", children: [
5184
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { children: leftLabel }),
5185
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-g-progress-rl", children: rightLabel })
5102
5186
  ] }),
5103
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
5187
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5104
5188
  "div",
5105
5189
  {
5106
5190
  className: "ss-g-segs",
5107
5191
  role: "img",
5108
5192
  "aria-label": ariaLabel,
5109
5193
  style: { gridTemplateColumns: `repeat(${segments.length}, minmax(0, 1fr))` },
5110
- children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "ss-g-seg", "data-state": s }, i))
5194
+ children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-g-seg", "data-state": s }, i))
5111
5195
  }
5112
5196
  )
5113
5197
  ] }),
@@ -5116,13 +5200,13 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
5116
5200
  }
5117
5201
 
5118
5202
  // src/components/games/ui/SearchField.tsx
5119
- var import_jsx_runtime61 = require("react/jsx-runtime");
5203
+ var import_jsx_runtime62 = require("react/jsx-runtime");
5120
5204
  function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown }) {
5121
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-g-search", children: [
5122
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
5123
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-g-search-box", children: [
5124
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(IconSearch, {}),
5125
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5205
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "ss-g-search", children: [
5206
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
5207
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "ss-g-search-box", children: [
5208
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(IconSearch, {}),
5209
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5126
5210
  "input",
5127
5211
  {
5128
5212
  id,
@@ -5141,52 +5225,52 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
5141
5225
  }
5142
5226
 
5143
5227
  // src/components/games/ui/FooterBar.tsx
5144
- var import_jsx_runtime62 = require("react/jsx-runtime");
5228
+ var import_jsx_runtime63 = require("react/jsx-runtime");
5145
5229
  function FooterBar({ children }) {
5146
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "ss-g-footer", children });
5230
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "ss-g-footer", children });
5147
5231
  }
5148
5232
 
5149
5233
  // src/components/games/ui/Silhouette.tsx
5150
- var import_jsx_runtime63 = require("react/jsx-runtime");
5234
+ var import_jsx_runtime64 = require("react/jsx-runtime");
5151
5235
  function Silhouette({ size, variant = "default" }) {
5152
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
5153
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
5154
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
5155
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
5236
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
5237
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
5238
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
5239
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
5156
5240
  ] }),
5157
- variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "ss-g-sil-q", children: "?" })
5241
+ variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-sil-q", children: "?" })
5158
5242
  ] });
5159
5243
  }
5160
5244
 
5161
5245
  // src/components/games/ui/GameButton.tsx
5162
- var import_jsx_runtime64 = require("react/jsx-runtime");
5246
+ var import_jsx_runtime65 = require("react/jsx-runtime");
5163
5247
  function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
5164
5248
  const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
5165
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type, className: cls, ...rest });
5249
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type, className: cls, ...rest });
5166
5250
  }
5167
5251
 
5168
5252
  // src/components/games/ui/ResultCard.tsx
5169
- var import_jsx_runtime65 = require("react/jsx-runtime");
5253
+ var import_jsx_runtime66 = require("react/jsx-runtime");
5170
5254
  function ResultCard({ tone, title, score, detail, onBack, ui }) {
5171
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
5172
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-result-title", children: title }),
5173
- score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-result-score", children: [
5174
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-result-num", children: score }),
5255
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
5256
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-result-title", children: title }),
5257
+ score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-result-score", children: [
5258
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-result-num", children: score }),
5175
5259
  ui.games.unitPts
5176
5260
  ] }),
5177
- detail && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-result-detail", children: detail }),
5178
- onBack && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
5261
+ detail && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-result-detail", children: detail }),
5262
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
5179
5263
  ] });
5180
5264
  }
5181
5265
 
5182
5266
  // src/components/games/ui/OptionList.tsx
5183
- var import_jsx_runtime66 = require("react/jsx-runtime");
5267
+ var import_jsx_runtime67 = require("react/jsx-runtime");
5184
5268
  function OptionList({ label, options, onPick }) {
5185
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
5269
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
5186
5270
  }
5187
5271
 
5188
5272
  // src/components/games/MysteryTigerGame.tsx
5189
- var import_jsx_runtime67 = require("react/jsx-runtime");
5273
+ var import_jsx_runtime68 = require("react/jsx-runtime");
5190
5274
  function parseClientState(json) {
5191
5275
  if (!json) return null;
5192
5276
  try {
@@ -5288,8 +5372,8 @@ function MysteryTigerGame({
5288
5372
  onBack
5289
5373
  }) {
5290
5374
  const t = ui.games.mysteryTiger;
5291
- const [query, setQuery] = (0, import_react32.useState)("");
5292
- const inputId = (0, import_react32.useId)();
5375
+ const [query, setQuery] = (0, import_react33.useState)("");
5376
+ const inputId = (0, import_react33.useId)();
5293
5377
  const clientState = parseClientState(result?.clientStateJson);
5294
5378
  const guessResults = clientState?.guessResults ?? [];
5295
5379
  const alreadyGuessedIds = new Set(guessResults.map((g) => g.playerId));
@@ -5310,22 +5394,22 @@ function MysteryTigerGame({
5310
5394
  setQuery("");
5311
5395
  onSubmit(JSON.stringify({ guesses: newGuesses }));
5312
5396
  }
5313
- const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Chip, { variant: "accent", children: [
5397
+ const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Chip, { variant: "accent", children: [
5314
5398
  score,
5315
5399
  " ",
5316
5400
  ui.games.unitPts
5317
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Chip, { children: [
5401
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Chip, { children: [
5318
5402
  ui.games.guess,
5319
5403
  " ",
5320
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
5404
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
5321
5405
  " / ",
5322
5406
  totalGuesses
5323
5407
  ] }) });
5324
5408
  const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
5325
5409
  const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
5326
5410
  const known = deriveKnownAttributes(guessResults, keys);
5327
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-testid": "game-screen-mystery-tiger", children: [
5328
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5411
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-testid": "game-screen-mystery-tiger", children: [
5412
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5329
5413
  GameHeader,
5330
5414
  {
5331
5415
  title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
@@ -5335,40 +5419,40 @@ function MysteryTigerGame({
5335
5419
  backLabel: ui.back
5336
5420
  }
5337
5421
  ),
5338
- !config && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
5339
- config && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
5340
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-body", children: [
5341
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
5342
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-portrait", children: [
5343
- revealName ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Silhouette, { size: 150, variant: "mystery" }),
5344
- revealName && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
5422
+ !config && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
5423
+ config && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
5424
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-body", children: [
5425
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
5426
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-portrait", children: [
5427
+ revealName ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Silhouette, { size: 150, variant: "mystery" }),
5428
+ revealName && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
5345
5429
  ] }),
5346
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
5347
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
5348
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
5430
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
5431
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
5432
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
5349
5433
  ] }, k.key)) })
5350
5434
  ] }),
5351
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
5352
- guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-table", children: [
5353
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
5354
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: t.yourGuesses }),
5355
- keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: t.labels[k] }, k))
5435
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
5436
+ guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-table", children: [
5437
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
5438
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: t.yourGuesses }),
5439
+ keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: t.labels[k] }, k))
5356
5440
  ] }),
5357
5441
  guessResults.map((gr, i) => {
5358
5442
  const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
5359
5443
  const { first, last } = splitName(name);
5360
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
5361
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-who", children: [
5362
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
5363
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "ss-g-mt-names", children: [
5364
- first && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-first", children: first }),
5365
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-last", children: last })
5444
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
5445
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-who", children: [
5446
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
5447
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "ss-g-mt-names", children: [
5448
+ first && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-first", children: first }),
5449
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-last", children: last })
5366
5450
  ] })
5367
5451
  ] }),
5368
5452
  keys.map((key) => {
5369
5453
  const v = gr[key];
5370
5454
  const arrow = directionArrow(v);
5371
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
5455
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5372
5456
  "div",
5373
5457
  {
5374
5458
  className: "ss-g-mt-cell",
@@ -5376,8 +5460,8 @@ function MysteryTigerGame({
5376
5460
  "data-verdict": v.verdict,
5377
5461
  "aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
5378
5462
  children: [
5379
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
5380
- arrow && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
5463
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
5464
+ arrow && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
5381
5465
  ]
5382
5466
  },
5383
5467
  key
@@ -5386,25 +5470,25 @@ function MysteryTigerGame({
5386
5470
  ] }, gr.playerId);
5387
5471
  })
5388
5472
  ] }),
5389
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-legend", children: [
5390
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { children: [
5391
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
5473
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-legend", children: [
5474
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { children: [
5475
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
5392
5476
  t.legendMatch
5393
5477
  ] }),
5394
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { children: [
5395
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
5478
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { children: [
5479
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
5396
5480
  t.legendClose
5397
5481
  ] }),
5398
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { children: [
5482
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { children: [
5399
5483
  "\u25B2 ",
5400
5484
  t.legendHigher
5401
5485
  ] })
5402
5486
  ] }),
5403
- clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-mt-hint", children: [
5404
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(IconBulb, {}),
5405
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: clientState.hintLine })
5487
+ clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-mt-hint", children: [
5488
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconBulb, {}),
5489
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: clientState.hintLine })
5406
5490
  ] }),
5407
- isOver && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5491
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5408
5492
  ResultCard,
5409
5493
  {
5410
5494
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -5416,22 +5500,22 @@ function MysteryTigerGame({
5416
5500
  }
5417
5501
  )
5418
5502
  ] }),
5419
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(FooterBar, { children: [
5420
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5503
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(FooterBar, { children: [
5504
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5421
5505
  OptionList,
5422
5506
  {
5423
5507
  label: t.optionsLabel,
5424
5508
  options: filtered.map((p) => ({
5425
5509
  key: p.id,
5426
- content: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
5427
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
5428
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: p.name })
5510
+ content: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
5511
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
5512
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: p.name })
5429
5513
  ] })
5430
5514
  })),
5431
5515
  onPick: (k) => handleSelect(Number(k))
5432
5516
  }
5433
5517
  ),
5434
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5518
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5435
5519
  SearchField,
5436
5520
  {
5437
5521
  id: inputId,
@@ -5448,7 +5532,7 @@ function MysteryTigerGame({
5448
5532
  }
5449
5533
 
5450
5534
  // src/components/games/HigherOrLowerGame.tsx
5451
- var import_jsx_runtime68 = require("react/jsx-runtime");
5535
+ var import_jsx_runtime69 = require("react/jsx-runtime");
5452
5536
  var POINTS_PER_CORRECT = 10;
5453
5537
  function parseClientState2(json) {
5454
5538
  if (!json) return null;
@@ -5460,11 +5544,11 @@ function parseClientState2(json) {
5460
5544
  }
5461
5545
  function PlayerCard({ name, imagePath, highlight, children }) {
5462
5546
  const { first, last } = splitName(name);
5463
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
5464
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Silhouette, { size: 150 }) }),
5465
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-hl-info", children: [
5466
- first && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-first", children: first }),
5467
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-surname", children: last }),
5547
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
5548
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Silhouette, { size: 150 }) }),
5549
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-hl-info", children: [
5550
+ first && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-first", children: first }),
5551
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-surname", children: last }),
5468
5552
  children
5469
5553
  ] })
5470
5554
  ] });
@@ -5496,47 +5580,47 @@ function HigherOrLowerGame({
5496
5580
  const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
5497
5581
  onSubmit(JSON.stringify({ answers: newAnswers }));
5498
5582
  }
5499
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-testid": "game-screen-higher-or-lower", children: [
5500
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5583
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-testid": "game-screen-higher-or-lower", children: [
5584
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
5501
5585
  GameHeader,
5502
5586
  {
5503
5587
  title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
5504
5588
  eyebrow: t.eyebrow(POINTS_PER_CORRECT),
5505
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
5589
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
5506
5590
  onBack,
5507
5591
  backLabel: ui.back
5508
5592
  }
5509
5593
  ),
5510
- !config && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
5511
- config && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
5512
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-body", children: [
5513
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
5514
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
5515
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
5516
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
5594
+ !config && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
5595
+ config && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
5596
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-body", children: [
5597
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
5598
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
5599
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
5600
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
5517
5601
  ] }),
5518
- currentPair && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-hl-pair", children: [
5519
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
5520
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
5521
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
5602
+ currentPair && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-hl-pair", children: [
5603
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
5604
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
5605
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
5522
5606
  ] }),
5523
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
5524
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-hl-btns", children: [
5525
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
5526
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconArrowUp, { size: 16 }),
5607
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
5608
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-hl-btns", children: [
5609
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
5610
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(IconArrowUp, { size: 16 }),
5527
5611
  t.higher
5528
5612
  ] }),
5529
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
5530
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconArrowDown, { size: 16 }),
5613
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
5614
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(IconArrowDown, { size: 16 }),
5531
5615
  t.lower
5532
5616
  ] })
5533
5617
  ] }) })
5534
5618
  ] }),
5535
- lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
5536
- lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconClose, {}),
5619
+ lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
5620
+ lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(IconClose, {}),
5537
5621
  t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
5538
5622
  ] }),
5539
- isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5623
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
5540
5624
  ResultCard,
5541
5625
  {
5542
5626
  tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
@@ -5548,15 +5632,15 @@ function HigherOrLowerGame({
5548
5632
  }
5549
5633
  )
5550
5634
  ] }),
5551
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-hl-foot", children: [
5552
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
5635
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-hl-foot", children: [
5636
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
5553
5637
  const a = answeredPairs[i];
5554
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
5638
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
5555
5639
  }) }),
5556
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "ss-g-hl-pts", children: [
5557
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "data-testid": "hol-score", children: score }),
5640
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ss-g-hl-pts", children: [
5641
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { "data-testid": "hol-score", children: score }),
5558
5642
  " ",
5559
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
5643
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
5560
5644
  ] })
5561
5645
  ] }) })
5562
5646
  ] })
@@ -5564,21 +5648,21 @@ function HigherOrLowerGame({
5564
5648
  }
5565
5649
 
5566
5650
  // src/components/games/CareerPathGame.tsx
5567
- var import_react34 = require("react");
5651
+ var import_react35 = require("react");
5568
5652
 
5569
5653
  // src/components/games/ui/CrestShield.tsx
5570
- var import_react33 = require("react");
5571
- var import_jsx_runtime69 = require("react/jsx-runtime");
5654
+ var import_react34 = require("react");
5655
+ var import_jsx_runtime70 = require("react/jsx-runtime");
5572
5656
  function CrestShield({ src, name, size = 28 }) {
5573
- const [failed, setFailed] = (0, import_react33.useState)(false);
5657
+ const [failed, setFailed] = (0, import_react34.useState)(false);
5574
5658
  if (src && !isPlaceholderImage(src) && !failed) {
5575
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
5659
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
5576
5660
  }
5577
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("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__ */ (0, import_jsx_runtime69.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
5661
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("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__ */ (0, import_jsx_runtime70.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
5578
5662
  }
5579
5663
 
5580
5664
  // src/components/games/CareerPathGame.tsx
5581
- var import_jsx_runtime70 = require("react/jsx-runtime");
5665
+ var import_jsx_runtime71 = require("react/jsx-runtime");
5582
5666
  function parseClientState3(json) {
5583
5667
  if (!json) return null;
5584
5668
  try {
@@ -5602,15 +5686,15 @@ function CareerPathGame({
5602
5686
  }) {
5603
5687
  const s = ui.games.careerPath;
5604
5688
  const title = gameTitle({ gameId: "career-path" }, ui.games.titles);
5605
- const [query, setQuery] = (0, import_react34.useState)("");
5606
- const inputId = (0, import_react34.useId)();
5689
+ const [query, setQuery] = (0, import_react35.useState)("");
5690
+ const inputId = (0, import_react35.useId)();
5607
5691
  const clientState = parseClientState3(result?.clientStateJson);
5608
5692
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
5609
5693
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
5610
5694
  if (!config) {
5611
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
5612
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5613
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
5695
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
5696
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5697
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
5614
5698
  ] });
5615
5699
  }
5616
5700
  const visiblePath = clientState?.visiblePath ?? config.initialPath;
@@ -5626,60 +5710,60 @@ function CareerPathGame({
5626
5710
  setQuery("");
5627
5711
  onSubmit(JSON.stringify({ guesses: newGuesses }));
5628
5712
  }
5629
- const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Chip, { variant: "neutral", children: [
5713
+ const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Chip, { variant: "neutral", children: [
5630
5714
  ui.games.guess,
5631
5715
  " ",
5632
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
5716
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
5633
5717
  " / ",
5634
5718
  clientState.guessesUsed + clientState.guessesRemaining
5635
5719
  ] }) }) : void 0;
5636
5720
  const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
5637
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
5638
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
5639
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-body", children: [
5640
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-cp-card", children: [
5641
- isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
5642
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-cp-card-text", children: [
5643
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
5644
- clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-cp-locks", children: [
5645
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
5646
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
5721
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
5722
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
5723
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-body", children: [
5724
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-cp-card", children: [
5725
+ isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
5726
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-cp-card-text", children: [
5727
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
5728
+ clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-cp-locks", children: [
5729
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
5730
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
5647
5731
  ] }) : null
5648
5732
  ] })
5649
5733
  ] }),
5650
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("ol", { className: "ss-g-cp-line", children: [
5734
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("ol", { className: "ss-g-cp-line", children: [
5651
5735
  visiblePath.map((spell, i) => {
5652
5736
  const years = i === 0 ? s.firstClub : spellYears(spell);
5653
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("li", { className: "ss-g-cp-step", children: [
5654
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-cp-rail", children: [
5655
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
5656
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
5737
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("li", { className: "ss-g-cp-step", children: [
5738
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-cp-rail", children: [
5739
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
5740
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
5657
5741
  ] }),
5658
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-cp-step-text", children: [
5659
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
5660
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-cp-sub", children: [
5661
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-years", children: years }),
5662
- spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
5742
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-cp-step-text", children: [
5743
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
5744
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-cp-sub", children: [
5745
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-years", children: years }),
5746
+ spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5663
5747
  years ? " \xB7 " : "",
5664
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
5748
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
5665
5749
  ] })
5666
5750
  ] })
5667
5751
  ] })
5668
5752
  ] }, `${spell.clubName}-${i}`);
5669
5753
  }),
5670
- hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
5671
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-cp-rail", children: [
5672
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(IconLock, { size: 18 }) }),
5673
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
5754
+ hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
5755
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-cp-rail", children: [
5756
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconLock, { size: 18 }) }),
5757
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
5674
5758
  ] }),
5675
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
5759
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
5676
5760
  ] }),
5677
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
5678
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(IconLock, { size: 18 }) }) }),
5679
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
5761
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
5762
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconLock, { size: 18 }) }) }),
5763
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
5680
5764
  ] })
5681
5765
  ] }),
5682
- isOver && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
5766
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5683
5767
  ResultCard,
5684
5768
  {
5685
5769
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -5691,22 +5775,22 @@ function CareerPathGame({
5691
5775
  }
5692
5776
  )
5693
5777
  ] }),
5694
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(FooterBar, { children: [
5695
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
5778
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(FooterBar, { children: [
5779
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5696
5780
  OptionList,
5697
5781
  {
5698
5782
  label: s.searchLabel,
5699
5783
  options: filtered.map((p) => ({
5700
5784
  key: p.id,
5701
- content: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
5702
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
5703
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: p.name })
5785
+ content: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5786
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
5787
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: p.name })
5704
5788
  ] })
5705
5789
  })),
5706
5790
  onPick: (k) => handleSelect(Number(k))
5707
5791
  }
5708
5792
  ),
5709
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
5793
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5710
5794
  SearchField,
5711
5795
  {
5712
5796
  id: inputId,
@@ -5722,8 +5806,8 @@ function CareerPathGame({
5722
5806
  }
5723
5807
 
5724
5808
  // src/components/games/BeatTheGridGame.tsx
5725
- var import_react35 = __toESM(require("react"), 1);
5726
- var import_jsx_runtime71 = require("react/jsx-runtime");
5809
+ var import_react36 = __toESM(require("react"), 1);
5810
+ var import_jsx_runtime72 = require("react/jsx-runtime");
5727
5811
  function criterionIconKind(label, key) {
5728
5812
  const l = (key ?? label).toLowerCase();
5729
5813
  if (l.includes("app")) return "calendar";
@@ -5741,34 +5825,34 @@ function rowAbbrev(label, map, key) {
5741
5825
  function CriterionIcon({ kind }) {
5742
5826
  switch (kind) {
5743
5827
  case "calendar":
5744
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconCalendar, {});
5828
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconCalendar, {});
5745
5829
  case "ball":
5746
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconBall, {});
5830
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconBall, {});
5747
5831
  case "boot":
5748
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconBoot, {});
5832
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconBoot, {});
5749
5833
  case "gloves":
5750
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconGloves, {});
5834
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconGloves, {});
5751
5835
  case "shield":
5752
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconShield, {});
5836
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconShield, {});
5753
5837
  default:
5754
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconFlag, {});
5838
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconFlag, {});
5755
5839
  }
5756
5840
  }
5757
5841
  function HeaderVisual({ label, textKey: iKey, meta }) {
5758
5842
  if (!meta) {
5759
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
5843
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
5760
5844
  }
5761
5845
  switch (meta.kind) {
5762
5846
  case "club":
5763
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
5847
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
5764
5848
  case "coach":
5765
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
5849
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
5766
5850
  case "country":
5767
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
5851
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
5768
5852
  case "position":
5769
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_jsx_runtime71.Fragment, {});
5853
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_jsx_runtime72.Fragment, {});
5770
5854
  default:
5771
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
5855
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
5772
5856
  }
5773
5857
  }
5774
5858
  function parseClientState4(json) {
@@ -5803,21 +5887,21 @@ function SearchSheet({
5803
5887
  ui
5804
5888
  }) {
5805
5889
  const s = ui.games.beatTheGrid;
5806
- const [query, setQuery] = (0, import_react35.useState)("");
5807
- const inputId = (0, import_react35.useId)();
5808
- const inputRef = (0, import_react35.useRef)(null);
5809
- (0, import_react35.useEffect)(() => {
5890
+ const [query, setQuery] = (0, import_react36.useState)("");
5891
+ const inputId = (0, import_react36.useId)();
5892
+ const inputRef = (0, import_react36.useRef)(null);
5893
+ (0, import_react36.useEffect)(() => {
5810
5894
  inputRef.current?.focus();
5811
5895
  }, [row, col]);
5812
5896
  const filtered = playerPool.filter(
5813
5897
  (p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
5814
5898
  );
5815
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
5816
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
5817
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Chip, { variant: "neutral", children: rowLabel }),
5818
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconClose, { size: 12 }) }),
5819
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Chip, { variant: "accent", children: colLabel }),
5820
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5899
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
5900
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
5901
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Chip, { variant: "neutral", children: rowLabel }),
5902
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconClose, { size: 12 }) }),
5903
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Chip, { variant: "accent", children: colLabel }),
5904
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5821
5905
  "button",
5822
5906
  {
5823
5907
  type: "button",
@@ -5825,12 +5909,12 @@ function SearchSheet({
5825
5909
  "data-testid": "btg-sheet-dismiss",
5826
5910
  "aria-label": s.closeSearch,
5827
5911
  onClick: onDismiss,
5828
- children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconClose, {})
5912
+ children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconClose, {})
5829
5913
  }
5830
5914
  )
5831
5915
  ] }),
5832
- playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5833
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5916
+ playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
5917
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5834
5918
  SearchField,
5835
5919
  {
5836
5920
  id: inputId,
@@ -5842,16 +5926,16 @@ function SearchSheet({
5842
5926
  inputRef
5843
5927
  }
5844
5928
  ),
5845
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5929
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5846
5930
  OptionList,
5847
5931
  {
5848
5932
  label: s.searchLabel(rowLabel, colLabel),
5849
5933
  options: filtered.map((p) => ({
5850
5934
  key: p.id,
5851
- content: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5852
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
5853
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
5854
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconPlus, { size: 18 }) })
5935
+ content: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
5936
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
5937
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
5938
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconPlus, { size: 18 }) })
5855
5939
  ] })
5856
5940
  })),
5857
5941
  onPick: (k) => onPick(row, col, Number(k))
@@ -5871,7 +5955,7 @@ function BeatTheGridGame({
5871
5955
  }) {
5872
5956
  const s = ui.games.beatTheGrid;
5873
5957
  const title = gameTitle({ gameId: "beat-the-grid" }, ui.games.titles);
5874
- const [activeCell, setActiveCell] = (0, import_react35.useState)(null);
5958
+ const [activeCell, setActiveCell] = (0, import_react36.useState)(null);
5875
5959
  const clientState = parseClientState4(result?.clientStateJson);
5876
5960
  const filledCells = clientState?.cells ?? [];
5877
5961
  const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
@@ -5889,9 +5973,9 @@ function BeatTheGridGame({
5889
5973
  onSubmit(JSON.stringify({ cells: newCells }));
5890
5974
  }
5891
5975
  if (!config) {
5892
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
5893
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5894
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
5976
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
5977
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5978
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
5895
5979
  ] });
5896
5980
  }
5897
5981
  const rows = config.rows;
@@ -5904,20 +5988,20 @@ function BeatTheGridGame({
5904
5988
  (_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
5905
5989
  );
5906
5990
  const totalScore = clientState?.totalScore ?? result?.score ?? 0;
5907
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
5908
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5909
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
5991
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
5992
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
5993
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5910
5994
  SegmentProgress,
5911
5995
  {
5912
5996
  segments,
5913
5997
  ariaLabel: s.progressAria(filledCells.length, total),
5914
5998
  leftLabel: s.filled(filledCells.length, total),
5915
5999
  rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
5916
- right: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
6000
+ right: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
5917
6001
  }
5918
6002
  ),
5919
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-body", children: [
5920
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
6003
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-body", children: [
6004
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
5921
6005
  "div",
5922
6006
  {
5923
6007
  className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
@@ -5927,31 +6011,31 @@ function BeatTheGridGame({
5927
6011
  },
5928
6012
  role: "grid",
5929
6013
  children: [
5930
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-btg-corner" }),
6014
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-btg-corner" }),
5931
6015
  cols.map((col, colIdx) => {
5932
6016
  const colMeta = config.colsMeta?.[colIdx];
5933
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
5934
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
5935
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: col })
6017
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
6018
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
6019
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: col })
5936
6020
  ] }, col);
5937
6021
  }),
5938
6022
  rows.map((rowLabel, rowIdx) => {
5939
6023
  const rowMeta = config.rowsMeta?.[rowIdx];
5940
6024
  const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
5941
- const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5942
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
5943
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: rowLabel })
5944
- ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5945
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { "aria-hidden": "true", children: abbr }),
5946
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-sr", children: rowLabel })
6025
+ const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6026
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
6027
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: rowLabel })
6028
+ ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6029
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { "aria-hidden": "true", children: abbr }),
6030
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-sr", children: rowLabel })
5947
6031
  ] });
5948
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react35.default.Fragment, { children: [
5949
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
6032
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_react36.default.Fragment, { children: [
6033
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
5950
6034
  cols.map((colLabel, colIdx) => {
5951
6035
  const filled = findCellResult(filledCells, rowIdx, colIdx);
5952
6036
  const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
5953
6037
  const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
5954
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6038
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5955
6039
  "button",
5956
6040
  {
5957
6041
  type: "button",
@@ -5962,20 +6046,20 @@ function BeatTheGridGame({
5962
6046
  className: "ss-g-btg-cell",
5963
6047
  disabled: isLocked2 || submitting,
5964
6048
  onClick: () => handleCellClick(rowIdx, colIdx),
5965
- children: filled ? /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
5966
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6049
+ children: filled ? /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6050
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5967
6051
  "span",
5968
6052
  {
5969
6053
  className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
5970
6054
  role: "img",
5971
6055
  "aria-label": filled.isCorrect ? s.correct : s.wrong,
5972
- children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconClose, { size: 11 })
6056
+ children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconClose, { size: 11 })
5973
6057
  }
5974
6058
  ),
5975
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
6059
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
5976
6060
  (() => {
5977
6061
  const entry = playerPool.find((p) => p.id === filled.playerId);
5978
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6062
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5979
6063
  PlayerAvatar,
5980
6064
  {
5981
6065
  name: entry?.name ?? "",
@@ -5984,8 +6068,8 @@ function BeatTheGridGame({
5984
6068
  }
5985
6069
  );
5986
6070
  })(),
5987
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
5988
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(IconPlus, { size: 22 }) })
6071
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
6072
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconPlus, { size: 22 }) })
5989
6073
  },
5990
6074
  `cell-${rowIdx}-${colIdx}`
5991
6075
  );
@@ -5995,7 +6079,7 @@ function BeatTheGridGame({
5995
6079
  ]
5996
6080
  }
5997
6081
  ),
5998
- isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6082
+ isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
5999
6083
  ResultCard,
6000
6084
  {
6001
6085
  tone: "neutral",
@@ -6007,7 +6091,7 @@ function BeatTheGridGame({
6007
6091
  }
6008
6092
  )
6009
6093
  ] }),
6010
- activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6094
+ activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6011
6095
  SearchSheet,
6012
6096
  {
6013
6097
  row: activeCell.row,
@@ -6026,21 +6110,21 @@ function BeatTheGridGame({
6026
6110
  }
6027
6111
 
6028
6112
  // src/components/games/GuessTheXiGame.tsx
6029
- var import_react36 = require("react");
6113
+ var import_react37 = require("react");
6030
6114
 
6031
6115
  // src/components/games/ui/PitchSvg.tsx
6032
- var import_jsx_runtime72 = require("react/jsx-runtime");
6116
+ var import_jsx_runtime73 = require("react/jsx-runtime");
6033
6117
  function PitchSvg({ variant }) {
6034
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
6035
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
6036
- variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6037
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
6038
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
6039
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
6040
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
6041
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6042
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
6043
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
6118
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
6119
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
6120
+ variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6121
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
6122
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
6123
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
6124
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
6125
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6126
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
6127
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
6044
6128
  ] })
6045
6129
  ] });
6046
6130
  }
@@ -6096,7 +6180,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
6096
6180
  }
6097
6181
 
6098
6182
  // src/components/games/GuessTheXiGame.tsx
6099
- var import_jsx_runtime73 = require("react/jsx-runtime");
6183
+ var import_jsx_runtime74 = require("react/jsx-runtime");
6100
6184
  var MAX_GUESSES2 = 3;
6101
6185
  function parseClientState5(json) {
6102
6186
  if (!json) return null;
@@ -6115,8 +6199,8 @@ function GuessTheXiGame({
6115
6199
  onBack
6116
6200
  }) {
6117
6201
  const t = ui.games.guessTheXi;
6118
- const [query, setQuery] = (0, import_react36.useState)("");
6119
- const inputId = (0, import_react36.useId)();
6202
+ const [query, setQuery] = (0, import_react37.useState)("");
6203
+ const inputId = (0, import_react37.useId)();
6120
6204
  const clientState = parseClientState5(result?.clientStateJson);
6121
6205
  const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
6122
6206
  const solved = clientState?.status === "solved";
@@ -6146,30 +6230,30 @@ function GuessTheXiGame({
6146
6230
  const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
6147
6231
  const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
6148
6232
  const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
6149
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-testid": "game-screen-guess-the-xi", children: [
6150
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6233
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-testid": "game-screen-guess-the-xi", children: [
6234
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6151
6235
  GameHeader,
6152
6236
  {
6153
6237
  title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
6154
6238
  eyebrow: config?.poolLabel,
6155
- right: formation ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
6239
+ right: formation ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
6156
6240
  onBack,
6157
6241
  backLabel: ui.back
6158
6242
  }
6159
6243
  ),
6160
- !config && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6161
- config && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6162
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-body", children: [
6163
- rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
6164
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PitchSvg, { variant: "full" }),
6165
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
6244
+ !config && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6245
+ config && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
6246
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-body", children: [
6247
+ rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
6248
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(PitchSvg, { variant: "full" }),
6249
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
6166
6250
  const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
6167
6251
  const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
6168
6252
  const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
6169
6253
  const flag = nationalityFlag(pos.nationality);
6170
6254
  if (lineupEntry) {
6171
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
6172
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6255
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
6256
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6173
6257
  PlayerAvatar,
6174
6258
  {
6175
6259
  name: lineupEntry.name,
@@ -6177,11 +6261,11 @@ function GuessTheXiGame({
6177
6261
  className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
6178
6262
  }
6179
6263
  ),
6180
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
6264
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
6181
6265
  ] }, `${pos.slot}-${c}`);
6182
6266
  }
6183
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
6184
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6267
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
6268
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6185
6269
  "span",
6186
6270
  {
6187
6271
  className: "ss-g-gxi-disc",
@@ -6192,22 +6276,22 @@ function GuessTheXiGame({
6192
6276
  children: flag
6193
6277
  }
6194
6278
  ),
6195
- name ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
6279
+ name ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
6196
6280
  ] }, `${pos.slot}-${c}`);
6197
6281
  }) }, r)) })
6198
6282
  ] }),
6199
- !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
6200
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
6283
+ !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
6284
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
6201
6285
  wrongGuesses.map((g) => {
6202
6286
  const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
6203
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
6204
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
6205
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("s", { children: teamName(g.teamId) })
6287
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
6288
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
6289
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("s", { children: teamName(g.teamId) })
6206
6290
  ] }, g.teamId);
6207
6291
  })
6208
6292
  ] }),
6209
- isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6210
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6293
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
6294
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6211
6295
  ResultCard,
6212
6296
  {
6213
6297
  tone: solved ? "win" : failed ? "lose" : "neutral",
@@ -6218,29 +6302,29 @@ function GuessTheXiGame({
6218
6302
  ui
6219
6303
  }
6220
6304
  ),
6221
- (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
6222
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
6223
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
6224
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
6305
+ (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
6306
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
6307
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
6308
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
6225
6309
  ] })
6226
6310
  ] })
6227
6311
  ] }),
6228
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(FooterBar, { children: [
6229
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6312
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(FooterBar, { children: [
6313
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6230
6314
  OptionList,
6231
6315
  {
6232
6316
  label: t.optionsLabel,
6233
6317
  options: filtered.map((tm) => ({
6234
6318
  key: tm.teamId,
6235
- content: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6236
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
6237
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: tm.teamName })
6319
+ content: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
6320
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
6321
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { children: tm.teamName })
6238
6322
  ] })
6239
6323
  })),
6240
6324
  onPick: (k) => handlePick(Number(k))
6241
6325
  }
6242
6326
  ),
6243
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6327
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6244
6328
  SearchField,
6245
6329
  {
6246
6330
  id: inputId,
@@ -6257,8 +6341,8 @@ function GuessTheXiGame({
6257
6341
  }
6258
6342
 
6259
6343
  // src/components/games/DailyQuizGame.tsx
6260
- var import_react37 = require("react");
6261
- var import_jsx_runtime74 = require("react/jsx-runtime");
6344
+ var import_react38 = require("react");
6345
+ var import_jsx_runtime75 = require("react/jsx-runtime");
6262
6346
  function parseClientState6(json) {
6263
6347
  if (!json) return null;
6264
6348
  try {
@@ -6279,13 +6363,13 @@ function OptionName({ text }) {
6279
6363
  const tokens = base.split(/\s+/).filter(Boolean);
6280
6364
  const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
6281
6365
  if (!isPlainName || base === "") {
6282
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
6366
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
6283
6367
  }
6284
6368
  const { first, last } = splitName(base);
6285
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
6286
- first && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
6287
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
6288
- suffix && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
6369
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
6370
+ first && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
6371
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
6372
+ suffix && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
6289
6373
  ] });
6290
6374
  }
6291
6375
  function DailyQuizGame({
@@ -6298,15 +6382,15 @@ function DailyQuizGame({
6298
6382
  }) {
6299
6383
  const s = ui.games.dailyQuiz;
6300
6384
  const title = gameTitle({ gameId: "daily-quiz" }, ui.games.titles);
6301
- const [selections, setSelections] = (0, import_react37.useState)(/* @__PURE__ */ new Map());
6302
- const [page, setPage] = (0, import_react37.useState)(0);
6385
+ const [selections, setSelections] = (0, import_react38.useState)(/* @__PURE__ */ new Map());
6386
+ const [page, setPage] = (0, import_react38.useState)(0);
6303
6387
  const clientState = parseClientState6(result?.clientStateJson);
6304
6388
  const results = clientState?.results ?? [];
6305
6389
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
6306
6390
  if (!config) {
6307
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6308
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
6309
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6391
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6392
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
6393
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6310
6394
  ] });
6311
6395
  }
6312
6396
  const questions = config.questions;
@@ -6341,11 +6425,11 @@ function DailyQuizGame({
6341
6425
  return r.isCorrect ? "correct" : "wrong";
6342
6426
  });
6343
6427
  const correctCount = results.filter((r) => r.isCorrect).length;
6344
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6345
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
6346
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
6347
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-body", children: [
6348
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6428
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6429
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
6430
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
6431
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
6432
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6349
6433
  ResultCard,
6350
6434
  {
6351
6435
  tone: "neutral",
@@ -6358,15 +6442,15 @@ function DailyQuizGame({
6358
6442
  questions.map((q) => {
6359
6443
  const r = findResult(results, q.index);
6360
6444
  const picked = selections.get(q.index);
6361
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-dq-rq", children: [
6362
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
6363
- r && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
6445
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-dq-rq", children: [
6446
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
6447
+ r && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
6364
6448
  let cls = "ss-g-dq-rq-opt";
6365
6449
  if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
6366
6450
  else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
6367
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: cls, children: opt }, optIdx);
6451
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: cls, children: opt }, optIdx);
6368
6452
  }) }),
6369
- r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
6453
+ r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
6370
6454
  ] }, q.index);
6371
6455
  })
6372
6456
  ] })
@@ -6374,16 +6458,16 @@ function DailyQuizGame({
6374
6458
  }
6375
6459
  const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
6376
6460
  const selectedIdx = current ? selections.get(current.index) : void 0;
6377
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6378
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
6379
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
6380
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
6381
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
6382
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
6461
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
6462
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
6463
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
6464
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
6465
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
6466
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
6383
6467
  const selected = optIdx === selectedIdx;
6384
6468
  const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
6385
6469
  const playerName = opt;
6386
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
6470
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
6387
6471
  "button",
6388
6472
  {
6389
6473
  type: "button",
@@ -6392,25 +6476,25 @@ function DailyQuizGame({
6392
6476
  disabled: submitting,
6393
6477
  onClick: () => handleSelect(current.index, optIdx),
6394
6478
  children: [
6395
- current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
6396
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
6397
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(OptionName, { text: opt })
6479
+ current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
6480
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
6481
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(OptionName, { text: opt })
6398
6482
  ]
6399
6483
  },
6400
6484
  optIdx
6401
6485
  );
6402
6486
  }) })
6403
6487
  ] }) }),
6404
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-dq-nav", children: [
6405
- page > 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
6406
- isLast ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
6488
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-dq-nav", children: [
6489
+ page > 0 && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
6490
+ isLast ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
6407
6491
  ] }) })
6408
6492
  ] });
6409
6493
  }
6410
6494
 
6411
6495
  // src/components/games/MatchdayPredictorGame.tsx
6412
- var import_react38 = require("react");
6413
- var import_jsx_runtime75 = require("react/jsx-runtime");
6496
+ var import_react39 = require("react");
6497
+ var import_jsx_runtime76 = require("react/jsx-runtime");
6414
6498
  var SCORER_SEARCH_THRESHOLD = 9;
6415
6499
  function parseClientState7(json) {
6416
6500
  if (!json) return null;
@@ -6428,7 +6512,7 @@ function isLocked(kickoffUtc) {
6428
6512
  }
6429
6513
  }
6430
6514
  function IconMinus() {
6431
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6515
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6432
6516
  "svg",
6433
6517
  {
6434
6518
  width: 18,
@@ -6439,20 +6523,20 @@ function IconMinus() {
6439
6523
  strokeWidth: 2.2,
6440
6524
  strokeLinecap: "round",
6441
6525
  "aria-hidden": "true",
6442
- children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("path", { d: "M5 12h14" })
6526
+ children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("path", { d: "M5 12h14" })
6443
6527
  }
6444
6528
  );
6445
6529
  }
6446
6530
  function TeamBadge({ team, label }) {
6447
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mp-team", children: [
6448
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CrestShield, { name: team.name, size: 44 }),
6449
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
6450
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-team-side", children: label })
6531
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mp-team", children: [
6532
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CrestShield, { name: team.name, size: 44 }),
6533
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
6534
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-team-side", children: label })
6451
6535
  ] });
6452
6536
  }
6453
6537
  function ScoreCard({ home, away, h, a, t, edit }) {
6454
- const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mp-col", children: [
6455
- edit && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6538
+ const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mp-col", children: [
6539
+ edit && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6456
6540
  "button",
6457
6541
  {
6458
6542
  type: "button",
@@ -6460,11 +6544,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
6460
6544
  "aria-label": t.goalsUp(team.name),
6461
6545
  disabled: edit.disabled,
6462
6546
  onClick: () => edit.onStep(side, 1),
6463
- children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconPlus, { size: 18 })
6547
+ children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconPlus, { size: 18 })
6464
6548
  }
6465
6549
  ),
6466
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
6467
- edit && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6550
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
6551
+ edit && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6468
6552
  "button",
6469
6553
  {
6470
6554
  type: "button",
@@ -6472,27 +6556,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
6472
6556
  "aria-label": t.goalsDown(team.name),
6473
6557
  disabled: edit.disabled || value <= 0,
6474
6558
  onClick: () => edit.onStep(side, -1),
6475
- children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconMinus, {})
6559
+ children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconMinus, {})
6476
6560
  }
6477
6561
  )
6478
6562
  ] });
6479
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mp-card", children: [
6480
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(TeamBadge, { team: home, label: t.home }),
6481
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mp-scores", children: [
6563
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mp-card", children: [
6564
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(TeamBadge, { team: home, label: t.home }),
6565
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mp-scores", children: [
6482
6566
  col("home", home, h),
6483
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
6567
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
6484
6568
  col("away", away, a)
6485
6569
  ] }),
6486
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(TeamBadge, { team: away, label: t.away })
6570
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(TeamBadge, { team: away, label: t.away })
6487
6571
  ] });
6488
6572
  }
6489
6573
  function OutcomeRow({ label, ok, detail, t }) {
6490
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
6491
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
6492
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-mp-row-v", children: [
6493
- ok ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconClose, { size: 14 }),
6494
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
6495
- detail ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
6574
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
6575
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
6576
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-mp-row-v", children: [
6577
+ ok ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconClose, { size: 14 }),
6578
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
6579
+ detail ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
6496
6580
  ] })
6497
6581
  ] });
6498
6582
  }
@@ -6505,20 +6589,20 @@ function MatchdayPredictorGame({
6505
6589
  onBack
6506
6590
  }) {
6507
6591
  const t = ui.games.predictor;
6508
- const [homeScore, setHomeScore] = (0, import_react38.useState)(0);
6509
- const [awayScore, setAwayScore] = (0, import_react38.useState)(0);
6510
- const [firstScorerPlayerId, setFirstScorerPlayerId] = (0, import_react38.useState)(null);
6511
- const [lastEdited, setLastEdited] = (0, import_react38.useState)("home");
6512
- const [query, setQuery] = (0, import_react38.useState)("");
6513
- const searchId = (0, import_react38.useId)();
6592
+ const [homeScore, setHomeScore] = (0, import_react39.useState)(0);
6593
+ const [awayScore, setAwayScore] = (0, import_react39.useState)(0);
6594
+ const [firstScorerPlayerId, setFirstScorerPlayerId] = (0, import_react39.useState)(null);
6595
+ const [lastEdited, setLastEdited] = (0, import_react39.useState)("home");
6596
+ const [query, setQuery] = (0, import_react39.useState)("");
6597
+ const searchId = (0, import_react39.useId)();
6514
6598
  const clientState = parseClientState7(result?.clientStateJson);
6515
6599
  const alreadyPlayed = result?.alreadyPlayed === true;
6516
- const header = /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6600
+ const header = /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6517
6601
  GameHeader,
6518
6602
  {
6519
6603
  title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
6520
6604
  eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
6521
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
6605
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
6522
6606
  onBack,
6523
6607
  backLabel: ui.back
6524
6608
  }
@@ -6526,10 +6610,10 @@ function MatchdayPredictorGame({
6526
6610
  if (alreadyPlayed && clientState) {
6527
6611
  if (!clientState.graded) {
6528
6612
  const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
6529
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6613
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6530
6614
  header,
6531
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
6532
- config && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6615
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
6616
+ config && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6533
6617
  ScoreCard,
6534
6618
  {
6535
6619
  home: config.homeTeam,
@@ -6539,7 +6623,7 @@ function MatchdayPredictorGame({
6539
6623
  t
6540
6624
  }
6541
6625
  ),
6542
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6626
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6543
6627
  ResultCard,
6544
6628
  {
6545
6629
  tone: "neutral",
@@ -6556,28 +6640,28 @@ function MatchdayPredictorGame({
6556
6640
  }
6557
6641
  )
6558
6642
  ] }),
6559
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
6643
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
6560
6644
  ] });
6561
6645
  }
6562
6646
  const r = clientState.result;
6563
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6647
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6564
6648
  header,
6565
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
6566
- config && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
6567
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
6568
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("ul", { className: "ss-g-mp-rows", children: [
6569
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
6570
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
6571
- !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
6649
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
6650
+ config && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
6651
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
6652
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("ul", { className: "ss-g-mp-rows", children: [
6653
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
6654
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
6655
+ !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
6572
6656
  ] })
6573
6657
  ] }),
6574
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
6658
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
6575
6659
  ] });
6576
6660
  }
6577
6661
  if (!config) {
6578
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6662
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6579
6663
  header,
6580
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6664
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6581
6665
  ] });
6582
6666
  }
6583
6667
  const locked = isLocked(config.kickoffUtc);
@@ -6601,10 +6685,10 @@ function MatchdayPredictorGame({
6601
6685
  const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
6602
6686
  const q = query.trim().toLowerCase();
6603
6687
  const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
6604
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6688
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
6605
6689
  header,
6606
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
6607
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6690
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
6691
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6608
6692
  ScoreCard,
6609
6693
  {
6610
6694
  home: config.homeTeam,
@@ -6615,12 +6699,12 @@ function MatchdayPredictorGame({
6615
6699
  edit: { disabled, active: lastEdited, onStep: step }
6616
6700
  }
6617
6701
  ),
6618
- pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("section", { className: "ss-g-mp-scorer", children: [
6619
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
6620
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("h3", { children: t.firstScorer }),
6621
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: t.optional })
6702
+ pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("section", { className: "ss-g-mp-scorer", children: [
6703
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
6704
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("h3", { children: t.firstScorer }),
6705
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: t.optional })
6622
6706
  ] }),
6623
- showSearch && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6707
+ showSearch && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6624
6708
  SearchField,
6625
6709
  {
6626
6710
  id: searchId,
@@ -6632,9 +6716,9 @@ function MatchdayPredictorGame({
6632
6716
  disabled
6633
6717
  }
6634
6718
  ),
6635
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
6719
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
6636
6720
  const selected = firstScorerPlayerId === p.playerId;
6637
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
6721
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
6638
6722
  "button",
6639
6723
  {
6640
6724
  type: "button",
@@ -6644,15 +6728,15 @@ function MatchdayPredictorGame({
6644
6728
  disabled,
6645
6729
  onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
6646
6730
  children: [
6647
- selected && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconCheck, { size: 12 }) }),
6648
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
6649
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
6731
+ selected && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconCheck, { size: 12 }) }),
6732
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
6733
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
6650
6734
  ]
6651
6735
  },
6652
6736
  p.playerId
6653
6737
  );
6654
6738
  }) }),
6655
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
6739
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
6656
6740
  "button",
6657
6741
  {
6658
6742
  type: "button",
@@ -6661,24 +6745,24 @@ function MatchdayPredictorGame({
6661
6745
  disabled,
6662
6746
  onClick: () => setFirstScorerPlayerId(null),
6663
6747
  children: [
6664
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
6748
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
6665
6749
  t.noScorer
6666
6750
  ]
6667
6751
  }
6668
6752
  )
6669
6753
  ] }),
6670
- locked && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
6754
+ locked && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
6671
6755
  ] }),
6672
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(FooterBar, { children: [
6673
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
6674
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
6756
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(FooterBar, { children: [
6757
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
6758
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
6675
6759
  ] })
6676
6760
  ] });
6677
6761
  }
6678
6762
 
6679
6763
  // src/components/games/StartingXiGame.tsx
6680
- var import_react39 = require("react");
6681
- var import_jsx_runtime76 = require("react/jsx-runtime");
6764
+ var import_react40 = require("react");
6765
+ var import_jsx_runtime77 = require("react/jsx-runtime");
6682
6766
  var POINTS_PER_STARTER = 8;
6683
6767
  var XI_SIZE = 11;
6684
6768
  var DEFAULT_FORMATION = "4-3-3";
@@ -6721,26 +6805,26 @@ function StartingXiGame({
6721
6805
  lockAtUtc
6722
6806
  }) {
6723
6807
  const t = ui.games.startingXi;
6724
- const [slotPlayers, setSlotPlayers] = (0, import_react39.useState)(() => Array(XI_SIZE).fill(null));
6725
- const [active, setActive] = (0, import_react39.useState)(0);
6726
- const [query, setQuery] = (0, import_react39.useState)("");
6727
- const searchId = (0, import_react39.useId)();
6808
+ const [slotPlayers, setSlotPlayers] = (0, import_react40.useState)(() => Array(XI_SIZE).fill(null));
6809
+ const [active, setActive] = (0, import_react40.useState)(0);
6810
+ const [query, setQuery] = (0, import_react40.useState)("");
6811
+ const searchId = (0, import_react40.useId)();
6728
6812
  const clientState = parseClientState8(result?.clientStateJson);
6729
6813
  const alreadyPlayed = result?.alreadyPlayed === true;
6730
- const header = /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6814
+ const header = /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6731
6815
  GameHeader,
6732
6816
  {
6733
6817
  title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
6734
6818
  eyebrow: t.eyebrow,
6735
- right: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
6819
+ right: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
6736
6820
  onBack,
6737
6821
  backLabel: ui.back
6738
6822
  }
6739
6823
  );
6740
6824
  function statusScreen(title, score) {
6741
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6825
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6742
6826
  header,
6743
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
6827
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
6744
6828
  ] });
6745
6829
  }
6746
6830
  if (alreadyPlayed) {
@@ -6749,9 +6833,9 @@ function StartingXiGame({
6749
6833
  if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
6750
6834
  }
6751
6835
  if (!config) {
6752
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6836
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6753
6837
  header,
6754
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6838
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6755
6839
  ] });
6756
6840
  }
6757
6841
  const { formation, slots } = formationSlots(config.formation);
@@ -6786,27 +6870,27 @@ function StartingXiGame({
6786
6870
  onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
6787
6871
  }
6788
6872
  const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
6789
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6873
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
6790
6874
  header,
6791
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6875
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6792
6876
  SegmentProgress,
6793
6877
  {
6794
6878
  segments,
6795
6879
  ariaLabel: t.picked(pickedCount),
6796
6880
  leftLabel: t.picked(pickedCount),
6797
6881
  rightLabel: t.toGo(XI_SIZE - pickedCount),
6798
- right: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { children: formation })
6882
+ right: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Chip, { children: formation })
6799
6883
  }
6800
6884
  ),
6801
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
6802
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-xi-pitch", children: [
6803
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PitchSvg, { variant: "half" }),
6885
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-body", children: [
6886
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-xi-pitch", children: [
6887
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PitchSvg, { variant: "half" }),
6804
6888
  slots.map((s) => {
6805
6889
  const playerId = slotPlayers[s.index] ?? null;
6806
6890
  const player = playerId !== null ? byId.get(playerId) ?? null : null;
6807
6891
  const name = player?.playerName ?? "";
6808
6892
  const state = player ? "filled" : active === s.index ? "active" : "empty";
6809
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
6893
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
6810
6894
  "button",
6811
6895
  {
6812
6896
  type: "button",
@@ -6818,21 +6902,21 @@ function StartingXiGame({
6818
6902
  disabled: submitting,
6819
6903
  onClick: () => tapSlot(s.index),
6820
6904
  children: [
6821
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconPlus, { size: 18 }) }),
6822
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
6905
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconPlus, { size: 18 }) }),
6906
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
6823
6907
  ]
6824
6908
  },
6825
6909
  s.index
6826
6910
  );
6827
6911
  })
6828
6912
  ] }),
6829
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-xi-picker", children: [
6830
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
6831
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
6832
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("strong", { children: t.pickFor(activeSlot.label) })
6833
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("strong", { children: t.allPicked }) }),
6834
- activeSlot && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
6835
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6913
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-xi-picker", children: [
6914
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
6915
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
6916
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("strong", { children: t.pickFor(activeSlot.label) })
6917
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("strong", { children: t.allPicked }) }),
6918
+ activeSlot && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
6919
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6836
6920
  SearchField,
6837
6921
  {
6838
6922
  id: searchId,
@@ -6844,18 +6928,18 @@ function StartingXiGame({
6844
6928
  disabled: submitting
6845
6929
  }
6846
6930
  ),
6847
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
6848
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
6849
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
6850
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
6931
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
6932
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
6933
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
6934
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
6851
6935
  ] }) }, p.playerId)) })
6852
6936
  ] })
6853
6937
  ] })
6854
6938
  ] }),
6855
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(FooterBar, { children: [
6856
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
6857
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("p", { className: "ss-g-xi-lock", children: [
6858
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, {}),
6939
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(FooterBar, { children: [
6940
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
6941
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("p", { className: "ss-g-xi-lock", children: [
6942
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconLock, {}),
6859
6943
  lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
6860
6944
  ] })
6861
6945
  ] })
@@ -6863,8 +6947,8 @@ function StartingXiGame({
6863
6947
  }
6864
6948
 
6865
6949
  // src/components/games/StatLadderGame.tsx
6866
- var import_react40 = require("react");
6867
- var import_jsx_runtime77 = require("react/jsx-runtime");
6950
+ var import_react41 = require("react");
6951
+ var import_jsx_runtime78 = require("react/jsx-runtime");
6868
6952
  function ladderClue(ladder) {
6869
6953
  const mystery = ladder.find((r) => r.rank === 2);
6870
6954
  if (!mystery) return null;
@@ -6886,9 +6970,9 @@ function parseClientState9(json) {
6886
6970
  }
6887
6971
  function NameStack({ name }) {
6888
6972
  const { first, last } = splitName(name);
6889
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: "ss-g-sl-name", children: [
6890
- first && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("small", { children: `${first[0]}.` }),
6891
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("b", { children: last })
6973
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-sl-name", children: [
6974
+ first && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("small", { children: `${first[0]}.` }),
6975
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("b", { children: last })
6892
6976
  ] });
6893
6977
  }
6894
6978
  function StatLadderGame({
@@ -6900,16 +6984,16 @@ function StatLadderGame({
6900
6984
  onBack
6901
6985
  }) {
6902
6986
  const t = ui.games.statLadder;
6903
- const [query, setQuery] = (0, import_react40.useState)("");
6904
- const [selectedId, setSelectedId] = (0, import_react40.useState)(null);
6905
- const searchId = (0, import_react40.useId)();
6987
+ const [query, setQuery] = (0, import_react41.useState)("");
6988
+ const [selectedId, setSelectedId] = (0, import_react41.useState)(null);
6989
+ const searchId = (0, import_react41.useId)();
6906
6990
  const clientState = parseClientState9(result?.clientStateJson);
6907
6991
  const revealed = clientState != null;
6908
- const header = /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
6992
+ const header = /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
6909
6993
  if (!config) {
6910
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
6994
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
6911
6995
  header,
6912
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6996
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6913
6997
  ] });
6914
6998
  }
6915
6999
  const question = t.question(config.statLabel);
@@ -6921,44 +7005,44 @@ function StatLadderGame({
6921
7005
  if (selectedId === null || submitting || revealed) return;
6922
7006
  onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
6923
7007
  }
6924
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
7008
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
6925
7009
  header,
6926
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-body", children: [
6927
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-sl-prompt", children: [
6928
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
6929
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("h3", { className: "ss-g-sl-q", children: [
7010
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-body", children: [
7011
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-sl-prompt", children: [
7012
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
7013
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("h3", { className: "ss-g-sl-q", children: [
6930
7014
  question.pre,
6931
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("em", { children: question.emph }),
7015
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("em", { children: question.emph }),
6932
7016
  question.post
6933
7017
  ] })
6934
7018
  ] }),
6935
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
6936
- (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
7019
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
7020
+ (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
6937
7021
  "li",
6938
7022
  {
6939
7023
  className: "ss-g-sl-rung ss-g-sl-rung--mystery",
6940
7024
  "data-testid": "sl-mystery-rung",
6941
7025
  "data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
6942
7026
  children: [
6943
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
6944
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Silhouette, { size: 52, variant: "mystery" }),
6945
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
6946
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
7027
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
7028
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Silhouette, { size: 52, variant: "mystery" }),
7029
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
7030
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
6947
7031
  ]
6948
7032
  },
6949
7033
  rung.rank
6950
- ) : /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("li", { className: "ss-g-sl-rung", children: [
6951
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
6952
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
6953
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(NameStack, { name: rung.playerName ?? "?" }),
6954
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
7034
+ ) : /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { className: "ss-g-sl-rung", children: [
7035
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
7036
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
7037
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(NameStack, { name: rung.playerName ?? "?" }),
7038
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
6955
7039
  ] }, rung.rank)
6956
7040
  ) }),
6957
- clue && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("p", { className: "ss-g-sl-clue", children: [
6958
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconBulb, {}),
6959
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { children: t.clue(clue, config.statLabel) })
7041
+ clue && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("p", { className: "ss-g-sl-clue", children: [
7042
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconBulb, {}),
7043
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: t.clue(clue, config.statLabel) })
6960
7044
  ] }),
6961
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
7045
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
6962
7046
  "button",
6963
7047
  {
6964
7048
  type: "button",
@@ -6971,13 +7055,13 @@ function StatLadderGame({
6971
7055
  setQuery(p.playerName);
6972
7056
  },
6973
7057
  children: [
6974
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
6975
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
6976
- selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconCheck, {})
7058
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
7059
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
7060
+ selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconCheck, {})
6977
7061
  ]
6978
7062
  }
6979
7063
  ) }, p.playerId)) }),
6980
- revealed && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7064
+ revealed && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6981
7065
  ResultCard,
6982
7066
  {
6983
7067
  tone: clientState.isCorrect ? "win" : "lose",
@@ -6988,8 +7072,8 @@ function StatLadderGame({
6988
7072
  }
6989
7073
  )
6990
7074
  ] }),
6991
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-sl-guess", children: [
6992
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7075
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-sl-guess", children: [
7076
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6993
7077
  SearchField,
6994
7078
  {
6995
7079
  id: searchId,
@@ -7004,13 +7088,13 @@ function StatLadderGame({
7004
7088
  disabled: submitting
7005
7089
  }
7006
7090
  ),
7007
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
7091
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
7008
7092
  ] }) })
7009
7093
  ] });
7010
7094
  }
7011
7095
 
7012
7096
  // src/components/games/FanMotmGame.tsx
7013
- var import_jsx_runtime78 = require("react/jsx-runtime");
7097
+ var import_jsx_runtime79 = require("react/jsx-runtime");
7014
7098
  function parseClientState10(json) {
7015
7099
  if (!json) return null;
7016
7100
  try {
@@ -7031,20 +7115,20 @@ function FanMotmGame({
7031
7115
  const clientState = parseClientState10(result?.clientStateJson);
7032
7116
  const alreadyVoted = result?.alreadyPlayed === true;
7033
7117
  const pickedId = clientState?.pickedPlayerId ?? null;
7034
- const header = /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7118
+ const header = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7035
7119
  GameHeader,
7036
7120
  {
7037
7121
  title: t.title,
7038
7122
  eyebrow: t.eyebrow,
7039
- right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconCheck, {}), children: t.voted }) : void 0,
7123
+ right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconCheck, {}), children: t.voted }) : void 0,
7040
7124
  onBack,
7041
7125
  backLabel: ui.back
7042
7126
  }
7043
7127
  );
7044
7128
  if (!config) {
7045
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
7129
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
7046
7130
  header,
7047
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7131
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7048
7132
  ] });
7049
7133
  }
7050
7134
  const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
@@ -7052,12 +7136,12 @@ function FanMotmGame({
7052
7136
  if (alreadyVoted || submitting) return;
7053
7137
  onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
7054
7138
  }
7055
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
7139
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
7056
7140
  header,
7057
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-body", children: [
7058
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
7141
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-body", children: [
7142
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
7059
7143
  const isVoted = alreadyVoted && pickedId === c.playerId;
7060
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
7144
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
7061
7145
  "button",
7062
7146
  {
7063
7147
  type: "button",
@@ -7066,24 +7150,24 @@ function FanMotmGame({
7066
7150
  disabled: alreadyVoted || submitting,
7067
7151
  onClick: () => handleVote(c.playerId),
7068
7152
  children: [
7069
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
7070
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
7071
- isVoted && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
7153
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
7154
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
7155
+ isVoted && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
7072
7156
  ]
7073
7157
  }
7074
7158
  ) }, c.playerId);
7075
7159
  }) }),
7076
- alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
7160
+ alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
7077
7161
  ] }),
7078
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(FooterBar, { children: [
7079
- !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
7080
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
7162
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(FooterBar, { children: [
7163
+ !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
7164
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
7081
7165
  ] })
7082
7166
  ] });
7083
7167
  }
7084
7168
 
7085
7169
  // src/components/GameScreenHost.tsx
7086
- var import_jsx_runtime79 = require("react/jsx-runtime");
7170
+ var import_jsx_runtime80 = require("react/jsx-runtime");
7087
7171
  var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
7088
7172
  "matchday-predictor",
7089
7173
  "starting-xi",
@@ -7107,8 +7191,8 @@ function GameScreenHost({
7107
7191
  ui
7108
7192
  }) {
7109
7193
  const { gameId, fixtureId, gameDay = "", lockAtUtc = null } = selected;
7110
- const [configJson, setConfigJson] = (0, import_react41.useState)(null);
7111
- (0, import_react41.useEffect)(() => {
7194
+ const [configJson, setConfigJson] = (0, import_react42.useState)(null);
7195
+ (0, import_react42.useEffect)(() => {
7112
7196
  setConfigJson(null);
7113
7197
  if (!conversation) return;
7114
7198
  let cancelled = false;
@@ -7131,12 +7215,12 @@ function GameScreenHost({
7131
7215
  fixtureId: fixtureId || void 0,
7132
7216
  locale: ui.games.lang
7133
7217
  });
7134
- (0, import_react41.useEffect)(() => {
7218
+ (0, import_react42.useEffect)(() => {
7135
7219
  if (conversation) hydrate();
7136
7220
  }, [conversation, gameId]);
7137
- const hydrateRef = (0, import_react41.useRef)(hydrate);
7221
+ const hydrateRef = (0, import_react42.useRef)(hydrate);
7138
7222
  hydrateRef.current = hydrate;
7139
- (0, import_react41.useEffect)(() => {
7223
+ (0, import_react42.useEffect)(() => {
7140
7224
  if (!FIXTURE_GAME_IDS.has(gameId)) return;
7141
7225
  if (rawStatus !== "pending") return;
7142
7226
  const timerId = setInterval(() => {
@@ -7159,7 +7243,7 @@ function GameScreenHost({
7159
7243
  function renderScreen() {
7160
7244
  switch (gameId) {
7161
7245
  case "mystery-tiger":
7162
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7246
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7163
7247
  MysteryTigerGame,
7164
7248
  {
7165
7249
  ...sharedProps,
@@ -7167,7 +7251,7 @@ function GameScreenHost({
7167
7251
  }
7168
7252
  );
7169
7253
  case "higher-or-lower":
7170
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7254
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7171
7255
  HigherOrLowerGame,
7172
7256
  {
7173
7257
  ...sharedProps,
@@ -7175,7 +7259,7 @@ function GameScreenHost({
7175
7259
  }
7176
7260
  );
7177
7261
  case "career-path":
7178
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7262
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7179
7263
  CareerPathGame,
7180
7264
  {
7181
7265
  ...sharedProps,
@@ -7184,7 +7268,7 @@ function GameScreenHost({
7184
7268
  );
7185
7269
  case "beat-the-grid": {
7186
7270
  const btgConfig = safeParseConfig(configJson);
7187
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7271
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7188
7272
  BeatTheGridGame,
7189
7273
  {
7190
7274
  ...sharedProps,
@@ -7194,7 +7278,7 @@ function GameScreenHost({
7194
7278
  );
7195
7279
  }
7196
7280
  case "guess-the-xi":
7197
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7281
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7198
7282
  GuessTheXiGame,
7199
7283
  {
7200
7284
  ...sharedProps,
@@ -7202,7 +7286,7 @@ function GameScreenHost({
7202
7286
  }
7203
7287
  );
7204
7288
  case "daily-quiz":
7205
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7289
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7206
7290
  DailyQuizGame,
7207
7291
  {
7208
7292
  ...sharedProps,
@@ -7210,7 +7294,7 @@ function GameScreenHost({
7210
7294
  }
7211
7295
  );
7212
7296
  case "matchday-predictor":
7213
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7297
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7214
7298
  MatchdayPredictorGame,
7215
7299
  {
7216
7300
  ...sharedProps,
@@ -7218,7 +7302,7 @@ function GameScreenHost({
7218
7302
  }
7219
7303
  );
7220
7304
  case "starting-xi":
7221
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7305
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7222
7306
  StartingXiGame,
7223
7307
  {
7224
7308
  ...sharedProps,
@@ -7226,7 +7310,7 @@ function GameScreenHost({
7226
7310
  }
7227
7311
  );
7228
7312
  case "stat-ladder":
7229
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7313
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7230
7314
  StatLadderGame,
7231
7315
  {
7232
7316
  ...sharedProps,
@@ -7234,7 +7318,7 @@ function GameScreenHost({
7234
7318
  }
7235
7319
  );
7236
7320
  case "fan-motm":
7237
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7321
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7238
7322
  FanMotmGame,
7239
7323
  {
7240
7324
  ...sharedProps,
@@ -7242,10 +7326,10 @@ function GameScreenHost({
7242
7326
  }
7243
7327
  );
7244
7328
  default:
7245
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
7329
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
7246
7330
  }
7247
7331
  }
7248
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
7332
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
7249
7333
  }
7250
7334
 
7251
7335
  // src/components/games/ui/fonts.ts
@@ -7262,7 +7346,7 @@ function ensureGamesFonts(doc = document) {
7262
7346
  }
7263
7347
 
7264
7348
  // src/components/GamesPanel.tsx
7265
- var import_jsx_runtime80 = require("react/jsx-runtime");
7349
+ var import_jsx_runtime81 = require("react/jsx-runtime");
7266
7350
  function GamesPanel({
7267
7351
  loggedIn,
7268
7352
  games,
@@ -7271,13 +7355,13 @@ function GamesPanel({
7271
7355
  leaderboard,
7272
7356
  refreshHub
7273
7357
  }) {
7274
- const [selected, setSelected] = (0, import_react42.useState)(null);
7275
- (0, import_react42.useEffect)(() => {
7358
+ const [selected, setSelected] = (0, import_react43.useState)(null);
7359
+ (0, import_react43.useEffect)(() => {
7276
7360
  ensureGamesFonts();
7277
7361
  }, []);
7278
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GamesLoginWall, { ui });
7362
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GamesLoginWall, { ui });
7279
7363
  if (selected !== null) {
7280
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7364
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7281
7365
  GameScreenHost,
7282
7366
  {
7283
7367
  selected,
@@ -7291,7 +7375,7 @@ function GamesPanel({
7291
7375
  }
7292
7376
  ) });
7293
7377
  }
7294
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7378
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7295
7379
  GamesHub,
7296
7380
  {
7297
7381
  games,
@@ -7303,10 +7387,10 @@ function GamesPanel({
7303
7387
  }
7304
7388
 
7305
7389
  // src/components/Leaderboard.tsx
7306
- var import_react43 = require("react");
7390
+ var import_react44 = require("react");
7307
7391
 
7308
7392
  // src/components/LeaderboardRow.tsx
7309
- var import_jsx_runtime81 = require("react/jsx-runtime");
7393
+ var import_jsx_runtime82 = require("react/jsx-runtime");
7310
7394
  function formatPoints(n) {
7311
7395
  return n.toLocaleString("en");
7312
7396
  }
@@ -7315,14 +7399,14 @@ function LeaderboardWeeklyRow({
7315
7399
  isMe
7316
7400
  }) {
7317
7401
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
7318
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
7319
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: rankClass, children: [
7402
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
7403
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: rankClass, children: [
7320
7404
  "#",
7321
7405
  row.rank
7322
7406
  ] }),
7323
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
7324
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
7325
- row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: "ss-w-lb2-streak", children: [
7407
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
7408
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
7409
+ row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: "ss-w-lb2-streak", children: [
7326
7410
  "\u{1F525} ",
7327
7411
  row.currentStreak
7328
7412
  ] })
@@ -7333,18 +7417,18 @@ function LeaderboardAllTimeRow({
7333
7417
  isMe
7334
7418
  }) {
7335
7419
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
7336
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
7337
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: rankClass, children: [
7420
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
7421
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: rankClass, children: [
7338
7422
  "#",
7339
7423
  row.rank
7340
7424
  ] }),
7341
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
7342
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
7425
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
7426
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
7343
7427
  ] });
7344
7428
  }
7345
7429
 
7346
7430
  // src/components/LeaderboardEmpty.tsx
7347
- var import_jsx_runtime82 = require("react/jsx-runtime");
7431
+ var import_jsx_runtime83 = require("react/jsx-runtime");
7348
7432
  function LeaderboardEmpty({
7349
7433
  segment,
7350
7434
  lastWeek,
@@ -7353,48 +7437,48 @@ function LeaderboardEmpty({
7353
7437
  ui
7354
7438
  }) {
7355
7439
  if (segment === "alltime") {
7356
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
7357
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
7358
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
7440
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
7441
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
7442
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
7359
7443
  ] });
7360
7444
  }
7361
7445
  const fresh = lastWeek != null;
7362
7446
  const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
7363
7447
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
7364
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-w-lb-empty", children: [
7365
- weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-w-prize", children: [
7366
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
7367
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
7448
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb-empty", children: [
7449
+ weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-prize", children: [
7450
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
7451
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
7368
7452
  ] }),
7369
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
7370
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
7371
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
7372
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
7373
- onPlay && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
7453
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
7454
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
7455
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
7456
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
7457
+ onPlay && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
7374
7458
  ] }),
7375
- fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-w-lb-last", children: [
7376
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
7377
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
7378
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
7379
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
7459
+ fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb-last", children: [
7460
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
7461
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
7462
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
7463
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
7380
7464
  ] })
7381
7465
  ] });
7382
7466
  }
7383
7467
 
7384
7468
  // src/components/Leaderboard.tsx
7385
- var import_jsx_runtime83 = require("react/jsx-runtime");
7469
+ var import_jsx_runtime84 = require("react/jsx-runtime");
7386
7470
  function Leaderboard({
7387
7471
  data,
7388
7472
  ui,
7389
7473
  onPlay
7390
7474
  }) {
7391
- const [segment, setSegment] = (0, import_react43.useState)("weekly");
7475
+ const [segment, setSegment] = (0, import_react44.useState)("weekly");
7392
7476
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
7393
7477
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
7394
7478
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
7395
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb2", children: [
7396
- /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-seg", children: [
7397
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7479
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-w-lb2", children: [
7480
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-w-seg", children: [
7481
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7398
7482
  "button",
7399
7483
  {
7400
7484
  type: "button",
@@ -7404,7 +7488,7 @@ function Leaderboard({
7404
7488
  children: ui.leaderboardThisWeek
7405
7489
  }
7406
7490
  ),
7407
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7491
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7408
7492
  "button",
7409
7493
  {
7410
7494
  type: "button",
@@ -7415,7 +7499,7 @@ function Leaderboard({
7415
7499
  }
7416
7500
  )
7417
7501
  ] }),
7418
- isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7502
+ isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7419
7503
  LeaderboardEmpty,
7420
7504
  {
7421
7505
  segment,
@@ -7424,15 +7508,15 @@ function Leaderboard({
7424
7508
  onPlay,
7425
7509
  ui
7426
7510
  }
7427
- ) : /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
7428
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7511
+ ) : /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
7512
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7429
7513
  LeaderboardWeeklyRow,
7430
7514
  {
7431
7515
  row,
7432
7516
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
7433
7517
  },
7434
7518
  row.operatorUserId
7435
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7519
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7436
7520
  LeaderboardAllTimeRow,
7437
7521
  {
7438
7522
  row,
@@ -7440,18 +7524,18 @@ function Leaderboard({
7440
7524
  },
7441
7525
  row.operatorUserId
7442
7526
  )) }),
7443
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
7444
- myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-w-lb2-rows", children: [
7445
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
7446
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
7527
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
7528
+ myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-w-lb2-rows", children: [
7529
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
7530
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
7447
7531
  ] })),
7448
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
7532
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
7449
7533
  ] })
7450
7534
  ] });
7451
7535
  }
7452
7536
 
7453
7537
  // src/components/LeaderboardPanel.tsx
7454
- var import_jsx_runtime84 = require("react/jsx-runtime");
7538
+ var import_jsx_runtime85 = require("react/jsx-runtime");
7455
7539
  var EMPTY_PAYLOAD = {
7456
7540
  week: "",
7457
7541
  weeklyTop: [],
@@ -7462,17 +7546,17 @@ var EMPTY_PAYLOAD = {
7462
7546
  lastWeek: null
7463
7547
  };
7464
7548
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
7465
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GamesLoginWall, { ui });
7466
- if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-mon-list" });
7467
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
7549
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(GamesLoginWall, { ui });
7550
+ if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-w-mon-list" });
7551
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
7468
7552
  }
7469
7553
 
7470
7554
  // src/components/ChatPanel.tsx
7471
- var import_jsx_runtime85 = require("react/jsx-runtime");
7555
+ var import_jsx_runtime86 = require("react/jsx-runtime");
7472
7556
  var FULLSCREEN_QUERY = "(max-width: 639px)";
7473
7557
  function useIsModal() {
7474
- const [modal, setModal] = (0, import_react44.useState)(false);
7475
- (0, import_react44.useEffect)(() => {
7558
+ const [modal, setModal] = (0, import_react45.useState)(false);
7559
+ (0, import_react45.useEffect)(() => {
7476
7560
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
7477
7561
  const mql = window.matchMedia(FULLSCREEN_QUERY);
7478
7562
  const sync = () => setModal(mql.matches);
@@ -7485,7 +7569,7 @@ function useIsModal() {
7485
7569
  function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, loggedIn, conversation }) {
7486
7570
  const { state, close, stop, send, reset } = controller;
7487
7571
  const isModal = useIsModal();
7488
- (0, import_react44.useEffect)(() => {
7572
+ (0, import_react45.useEffect)(() => {
7489
7573
  const onKey = (e) => {
7490
7574
  if (e.key === "Escape") close();
7491
7575
  };
@@ -7496,11 +7580,15 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
7496
7580
  monitor?.setActiveTab("chat");
7497
7581
  send(text);
7498
7582
  };
7499
- (0, import_react44.useEffect)(() => {
7583
+ const handleAsk = (text, grounding) => {
7584
+ monitor?.setActiveTab("chat");
7585
+ send(text, { grounding });
7586
+ };
7587
+ (0, import_react45.useEffect)(() => {
7500
7588
  if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
7501
7589
  }, [monitor, state.isStreaming, state.messages.length]);
7502
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
7503
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7590
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
7591
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7504
7592
  ChatHeader,
7505
7593
  {
7506
7594
  onClose: close,
@@ -7513,7 +7601,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
7513
7601
  moreOptionsLabel: ui.moreOptions
7514
7602
  }
7515
7603
  ),
7516
- monitor && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7604
+ monitor && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7517
7605
  TabBar,
7518
7606
  {
7519
7607
  monitor,
@@ -7525,17 +7613,17 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
7525
7613
  gamesEnabled: gamesResult?.enabled ?? false
7526
7614
  }
7527
7615
  ),
7528
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7616
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7529
7617
  "div",
7530
7618
  {
7531
7619
  style: !monitor || monitor.activeTab === "chat" ? { display: "contents" } : { position: "absolute", inset: 0, visibility: "hidden", display: "flex", flexDirection: "column" },
7532
- children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor })
7620
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor })
7533
7621
  }
7534
7622
  ),
7535
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(TodayPanel, { discovery, ui, monitor }),
7536
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(MatchesPanel, { monitor, ui, slip }),
7537
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OddsPanel, { monitor, ui, slip }),
7538
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7623
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(TodayPanel, { discovery, ui, monitor }),
7624
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
7625
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(OddsPanel, { monitor, ui, slip }),
7626
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7539
7627
  GamesPanel,
7540
7628
  {
7541
7629
  loggedIn: !!loggedIn,
@@ -7549,7 +7637,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
7549
7637
  }
7550
7638
  }
7551
7639
  ),
7552
- monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7640
+ monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7553
7641
  LeaderboardPanel,
7554
7642
  {
7555
7643
  loggedIn: !!loggedIn,
@@ -7559,7 +7647,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
7559
7647
  ui
7560
7648
  }
7561
7649
  ),
7562
- (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: handleSend, onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
7650
+ (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: handleSend, onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
7563
7651
  ] });
7564
7652
  }
7565
7653
 
@@ -8500,6 +8588,21 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
8500
8588
  .ss-w-mon-scorers-home { text-align: right; }
8501
8589
  .ss-w-mon-scorers-away { text-align: left; }
8502
8590
  .ss-w-mon-scorers-ball { flex: none; align-self: start; line-height: 1.35; }
8591
+ .ss-w-fact { display: flex; flex-direction: column; gap: 7px; padding: 10px 12px; border-radius: 10px; background: color-mix(in srgb, var(--ss-w-accent) 9%, transparent); border: 1px solid color-mix(in srgb, var(--ss-w-accent) 22%, transparent); }
8592
+ .ss-w-fact-k { display: flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--ss-w-accent); }
8593
+ .ss-w-fact-min { color: var(--ss-w-ink); letter-spacing: 0; }
8594
+ .ss-w-fact-subj { margin-left: auto; text-transform: none; letter-spacing: 0; font-weight: 650; color: var(--ss-w-faint); }
8595
+ .ss-w-fact-text { margin: 0; font-size: 13.5px; line-height: 1.45; color: var(--ss-w-ink); }
8596
+ .ss-w-fact-basis { font-size: 10.5px; color: var(--ss-w-faint); }
8597
+ .ss-w-fact-mkt { display: flex; align-items: center; gap: 8px; font-size: 11.5px; border: 1px solid var(--ss-w-line); border-radius: 8px; padding: 6px 8px; }
8598
+ .ss-w-fact-foot { display: flex; align-items: center; gap: 14px; }
8599
+ .ss-w-fact-link { font: inherit; font-size: 11.5px; font-weight: 700; color: var(--ss-w-accent); background: none; border: none; padding: 4px 0; min-height: 32px; cursor: pointer; }
8600
+ .ss-w-fact-link--muted { color: var(--ss-w-faint); margin-left: auto; }
8601
+ .ss-w-fact-hist { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ss-w-line); }
8602
+ .ss-w-fact-hist li { display: grid; grid-template-columns: 34px 1fr; gap: 8px; padding: 9px 0; border-bottom: 1px solid var(--ss-w-line); }
8603
+ .ss-w-fact-hist li:last-child { border-bottom: none; }
8604
+ .ss-w-fact-hmin { font-size: 11px; font-weight: 800; color: var(--ss-w-faint); font-variant-numeric: tabular-nums; }
8605
+ .ss-w-fact-htext { margin: 0; font-size: 12.5px; line-height: 1.4; color: var(--ss-w-ink); }
8503
8606
  .ss-w-mon-stats { display: flex; flex-direction: column; gap: 10px; }
8504
8607
  .ss-w-mon-stat { display: flex; flex-direction: column; gap: 5px; }
8505
8608
  .ss-w-mon-pstrip { padding: 6px 8px; border-radius: 8px; background: color-mix(in srgb, var(--ss-w-accent) 8%, transparent); }
@@ -9033,7 +9136,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
9033
9136
  `;
9034
9137
 
9035
9138
  // src/StatsWidget.tsx
9036
- var import_jsx_runtime86 = require("react/jsx-runtime");
9139
+ var import_jsx_runtime87 = require("react/jsx-runtime");
9037
9140
  function buildClient(props) {
9038
9141
  try {
9039
9142
  if ("client" in props && props.client) {
@@ -9058,23 +9161,23 @@ function injectStyles(root) {
9058
9161
  function StatsWidget(props) {
9059
9162
  const injectedClient = "client" in props ? props.client : void 0;
9060
9163
  const cfg = props.config;
9061
- const built = (0, import_react45.useMemo)(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
9062
- const logger = (0, import_react45.useMemo)(
9164
+ const built = (0, import_react46.useMemo)(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
9165
+ const logger = (0, import_react46.useMemo)(
9063
9166
  () => built ? built.client.createEventLogger({
9064
9167
  operatorUserId: cfg?.userContext?.operatorUserId,
9065
9168
  anonymousUserId: cfg?.userContext?.anonymousUserId
9066
9169
  }) : null,
9067
9170
  [built?.client]
9068
9171
  );
9069
- const ui = (0, import_react45.useMemo)(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
9070
- const rootRef = (0, import_react45.useRef)(null);
9071
- const introDoneRef = (0, import_react45.useRef)(false);
9072
- const markIntroDone = (0, import_react45.useCallback)(() => {
9172
+ const ui = (0, import_react46.useMemo)(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
9173
+ const rootRef = (0, import_react46.useRef)(null);
9174
+ const introDoneRef = (0, import_react46.useRef)(false);
9175
+ const markIntroDone = (0, import_react46.useCallback)(() => {
9073
9176
  introDoneRef.current = true;
9074
9177
  }, []);
9075
9178
  const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
9076
9179
  const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
9077
- const [hasToday, setHasToday] = (0, import_react45.useState)(false);
9180
+ const [hasToday, setHasToday] = (0, import_react46.useState)(false);
9078
9181
  const monitor = useLiveMonitor({
9079
9182
  getLiveMonitor: (pins) => built ? built.conversation.getLiveMonitor(pins) : Promise.resolve(null),
9080
9183
  getMarketOdds: (matchId, dev) => built ? built.conversation.getMarketOdds(matchId, dev) : Promise.resolve(null),
@@ -9082,15 +9185,15 @@ function StatsWidget(props) {
9082
9185
  isOpen: controller.state.isOpen,
9083
9186
  hasToday
9084
9187
  });
9085
- const getSchedule = (0, import_react45.useCallback)(
9188
+ const getSchedule = (0, import_react46.useCallback)(
9086
9189
  (localDate, utcOffsetMinutes) => built ? built.conversation.getSchedule(localDate, utcOffsetMinutes) : Promise.resolve(null),
9087
9190
  [built]
9088
9191
  );
9089
- const getStates = (0, import_react45.useCallback)(
9192
+ const getStates = (0, import_react46.useCallback)(
9090
9193
  (matchIds) => built ? built.conversation.getStates(matchIds) : Promise.resolve(null),
9091
9194
  [built]
9092
9195
  );
9093
- const pinnedMatchIds = (0, import_react45.useMemo)(
9196
+ const pinnedMatchIds = (0, import_react46.useMemo)(
9094
9197
  () => monitor.pins.filter((p) => p.kind === "match").map((p) => p.matchId),
9095
9198
  [monitor.pins]
9096
9199
  );
@@ -9102,19 +9205,19 @@ function StatsWidget(props) {
9102
9205
  pinnedMatchIds
9103
9206
  });
9104
9207
  const todayHasContent = visibleGroupsOf(discovery.groups, discovery.states).length > 0;
9105
- (0, import_react45.useEffect)(() => {
9208
+ (0, import_react46.useEffect)(() => {
9106
9209
  setHasToday(todayHasContent);
9107
9210
  }, [todayHasContent]);
9108
9211
  const gamesResult = useGames(built?.conversation ?? null, { activeTab: monitor.activeTab });
9109
9212
  const leaderboardResult = useLeaderboard(built?.conversation ?? null, { activeTab: monitor.activeTab });
9110
9213
  const markTodayActivity = monitor.markTodayActivity;
9111
- const prevLiveCountRef = (0, import_react45.useRef)(0);
9112
- (0, import_react45.useEffect)(() => {
9214
+ const prevLiveCountRef = (0, import_react46.useRef)(0);
9215
+ (0, import_react46.useEffect)(() => {
9113
9216
  const rose = prevLiveCountRef.current === 0 && discovery.liveCount > 0;
9114
9217
  prevLiveCountRef.current = discovery.liveCount;
9115
9218
  if (rose) markTodayActivity();
9116
9219
  }, [discovery.liveCount, markTodayActivity]);
9117
- const slip = (0, import_react45.useMemo)(
9220
+ const slip = (0, import_react46.useMemo)(
9118
9221
  () => {
9119
9222
  const handler = props.config?.onAddToSlip;
9120
9223
  return {
@@ -9131,7 +9234,7 @@ function StatsWidget(props) {
9131
9234
  },
9132
9235
  [props.config?.onAddToSlip, controller.state.conversationId, monitor.markInSlip]
9133
9236
  );
9134
- const onDashboardTap = (0, import_react45.useMemo)(
9237
+ const onDashboardTap = (0, import_react46.useMemo)(
9135
9238
  () => built ? createDashboardTapSignal((input) => built.conversation.sendSignal(input), logger) : void 0,
9136
9239
  [built, logger]
9137
9240
  );
@@ -9139,11 +9242,11 @@ function StatsWidget(props) {
9139
9242
  const operatorUserId = cfg?.userContext?.operatorUserId;
9140
9243
  const anonymousUserId = cfg?.userContext?.anonymousUserId;
9141
9244
  const conversationId = controller.state.conversationId ?? void 0;
9142
- (0, import_react45.useEffect)(() => {
9245
+ (0, import_react46.useEffect)(() => {
9143
9246
  if (!logger) return;
9144
9247
  logger.setIdentity({ operatorUserId, anonymousUserId, conversationId });
9145
9248
  }, [logger, operatorUserId, anonymousUserId, conversationId]);
9146
- (0, import_react45.useEffect)(() => {
9249
+ (0, import_react46.useEffect)(() => {
9147
9250
  if (!logger) return;
9148
9251
  const onHide = () => {
9149
9252
  logger.flushOnHide();
@@ -9160,14 +9263,14 @@ function StatsWidget(props) {
9160
9263
  logger.dispose();
9161
9264
  };
9162
9265
  }, [logger]);
9163
- (0, import_react45.useEffect)(() => {
9266
+ (0, import_react46.useEffect)(() => {
9164
9267
  if (!built || !ui.injectStyles) return;
9165
9268
  const node = rootRef.current?.getRootNode();
9166
9269
  if (node) injectStyles(node);
9167
9270
  }, [built, ui.injectStyles]);
9168
9271
  if (!built) return null;
9169
9272
  const attrs = themeAttrs(ui);
9170
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("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__ */ (0, import_jsx_runtime86.jsx)(
9273
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("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__ */ (0, import_jsx_runtime87.jsx)(
9171
9274
  ChatPanel,
9172
9275
  {
9173
9276
  controller,
@@ -9181,7 +9284,7 @@ function StatsWidget(props) {
9181
9284
  loggedIn: !!operatorUserId,
9182
9285
  conversation: built?.conversation ?? null
9183
9286
  }
9184
- ) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
9287
+ ) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
9185
9288
  ChatFab,
9186
9289
  {
9187
9290
  label: ui.launcherLabel,