@sensiblestats/widget-react 0.81.1 → 0.82.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
@@ -156,6 +156,7 @@ var STRINGS = {
156
156
  topLeagues: "Top leagues",
157
157
  topLeaguesSub: "Popular today.",
158
158
  allLeagues: "All leagues",
159
+ seeAllFixturesLabel: (n) => `All fixtures (${n})`,
159
160
  searchLeaguesPlaceholder: "Search leagues or teams",
160
161
  noLeagueResults: "No league or team matches that search.",
161
162
  clearSearchLabel: "Clear search",
@@ -522,6 +523,7 @@ var STRINGS = {
522
523
  topLeagues: "\xD6ne \xE7\u0131kan ligler",
523
524
  topLeaguesSub: "Bug\xFCn pop\xFCler.",
524
525
  allLeagues: "T\xFCm ligler",
526
+ seeAllFixturesLabel: (n) => `T\xFCm ma\xE7lar (${n})`,
525
527
  searchLeaguesPlaceholder: "Lig veya tak\u0131m ara",
526
528
  noLeagueResults: "Aramana uyan lig veya tak\u0131m yok.",
527
529
  clearSearchLabel: "Aramay\u0131 temizle",
@@ -885,6 +887,7 @@ function normalizeUi(cfg) {
885
887
  topLeagues: strings.topLeagues,
886
888
  topLeaguesSub: strings.topLeaguesSub,
887
889
  allLeagues: strings.allLeagues,
890
+ seeAllFixturesLabel: strings.seeAllFixturesLabel,
888
891
  searchLeaguesPlaceholder: strings.searchLeaguesPlaceholder,
889
892
  noLeagueResults: strings.noLeagueResults,
890
893
  clearSearchLabel: strings.clearSearchLabel,
@@ -6004,15 +6007,25 @@ function starClickable(group, pinnedCompetitionId) {
6004
6007
  function foldSearchText(s) {
6005
6008
  return s.replace(/İ/g, "I").replace(/ı/g, "i").normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
6006
6009
  }
6010
+ function competitionMatchesQuery(group, q) {
6011
+ if (foldSearchText(group.competitionName).includes(q)) return true;
6012
+ return !!group.competitionCountry && foldSearchText(group.competitionCountry).includes(q);
6013
+ }
6007
6014
  function matchesQuery(group, query) {
6008
6015
  const q = foldSearchText(query.trim());
6009
6016
  if (!q) return true;
6010
- if (foldSearchText(group.competitionName).includes(q)) return true;
6011
- if (group.competitionCountry && foldSearchText(group.competitionCountry).includes(q)) return true;
6017
+ if (competitionMatchesQuery(group, q)) return true;
6012
6018
  return group.matches.some(
6013
6019
  (m) => foldSearchText(m.homeTeamName).includes(q) || foldSearchText(m.awayTeamName).includes(q)
6014
6020
  );
6015
6021
  }
6022
+ function matchingFixtures(group, query) {
6023
+ const q = foldSearchText(query.trim());
6024
+ if (!q || competitionMatchesQuery(group, q)) return group.matches;
6025
+ return group.matches.filter(
6026
+ (m) => foldSearchText(m.homeTeamName).includes(q) || foldSearchText(m.awayTeamName).includes(q)
6027
+ );
6028
+ }
6016
6029
 
6017
6030
  // src/useStarTap.ts
6018
6031
  var import_react38 = require("react");
@@ -6190,12 +6203,70 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
6190
6203
  ] });
6191
6204
  }
6192
6205
 
6206
+ // src/components/LeagueRowGroup.tsx
6207
+ var import_jsx_runtime58 = require("react/jsx-runtime");
6208
+ var ROW_CAP_PER_LEAGUE = 3;
6209
+ var SECTION_ROW_BUDGET = 12;
6210
+ function rowsFor(group, states, stale) {
6211
+ const nonLive = group.matches.filter((m) => !isTreatedLive(states[m.matchId], stale)).length;
6212
+ return Math.min(nonLive, ROW_CAP_PER_LEAGUE);
6213
+ }
6214
+ var STAR_PATH3 = "M12 2.5l2.9 5.9 6.5.95-4.7 4.58 1.1 6.47L12 17.35 6.1 20.4l1.1-6.47L2.5 9.35l6.5-.95z";
6215
+ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickable2, disambiguate, onOpen, starTap, ui, monitor }) {
6216
+ const sorted = group.matches.filter((m) => !isTreatedLive(states[m.matchId], stale)).sort((a, b) => a.kickoffUnix - b.kickoffUnix);
6217
+ if (sorted.length === 0) return null;
6218
+ const shown = sorted.slice(0, cap);
6219
+ const overflow = sorted.length - shown.length;
6220
+ const onStarClick = () => {
6221
+ void starTap.tap(group.competitionId, !group.isStarred);
6222
+ };
6223
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-w-today-rowgroup", children: [
6224
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-w-today-rowgroup-head", children: [
6225
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("button", { type: "button", className: "ss-w-today-rowgroup-head-body", onClick: onOpen, children: [
6226
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6227
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-w-today-rowgroup-name", children: [
6228
+ group.competitionName,
6229
+ disambiguate && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-w-today-tile-country", children: [
6230
+ " (",
6231
+ group.competitionCountry,
6232
+ ")"
6233
+ ] }) : null
6234
+ ] })
6235
+ ] }),
6236
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
6237
+ "button",
6238
+ {
6239
+ type: "button",
6240
+ className: "ss-w-today-rowgroup-star",
6241
+ "aria-pressed": group.isStarred,
6242
+ "aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
6243
+ disabled: !starClickable2 || starTap.pendingId !== null,
6244
+ onClick: onStarClick,
6245
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
6246
+ "path",
6247
+ {
6248
+ d: STAR_PATH3,
6249
+ fill: group.isStarred ? "currentColor" : "none",
6250
+ stroke: group.isStarred ? "none" : "currentColor",
6251
+ strokeWidth: 2,
6252
+ strokeLinejoin: "round",
6253
+ strokeLinecap: "round"
6254
+ }
6255
+ ) })
6256
+ }
6257
+ )
6258
+ ] }),
6259
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "ss-w-today-rowgroup-rows", children: shown.map((m) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) }),
6260
+ overflow > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("button", { type: "button", className: "ss-w-today-rowgroup-seeall", onClick: onOpen, children: ui.seeAllFixturesLabel(sorted.length) })
6261
+ ] });
6262
+ }
6263
+
6193
6264
  // src/components/games/ui/SearchField.tsx
6194
6265
  var import_react40 = require("react");
6195
6266
 
6196
6267
  // src/components/games/ui/icons.tsx
6197
- var import_jsx_runtime58 = require("react/jsx-runtime");
6198
- var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
6268
+ var import_jsx_runtime59 = require("react/jsx-runtime");
6269
+ var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6199
6270
  "svg",
6200
6271
  {
6201
6272
  width: size,
@@ -6210,25 +6281,25 @@ var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runti
6210
6281
  children
6211
6282
  }
6212
6283
  );
6213
- var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M15 18l-6-6 6-6" }));
6214
- var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
6215
- var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M5 12l5 5 9-10" }));
6216
- var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M6 6l12 12M18 6L6 18" }));
6217
- var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M20 20l-3.5-3.5" }, "b")]);
6218
- var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 5v14M5 12h14" }));
6219
- var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
6220
- var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }));
6221
- var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
6222
- var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
6223
- var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
6224
- var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
6225
- var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
6226
- var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
6227
- var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.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" }));
6228
- var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime58.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);
6284
+ var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M15 18l-6-6 6-6" }));
6285
+ var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
6286
+ var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M5 12l5 5 9-10" }));
6287
+ var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M6 6l12 12M18 6L6 18" }));
6288
+ var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M20 20l-3.5-3.5" }, "b")]);
6289
+ var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 5v14M5 12h14" }));
6290
+ var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
6291
+ var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }));
6292
+ var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
6293
+ var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
6294
+ var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
6295
+ var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
6296
+ var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
6297
+ var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
6298
+ var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.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" }));
6299
+ var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.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);
6229
6300
 
6230
6301
  // src/components/games/ui/SearchField.tsx
6231
- var import_jsx_runtime59 = require("react/jsx-runtime");
6302
+ var import_jsx_runtime60 = require("react/jsx-runtime");
6232
6303
  function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown, clearLabel }) {
6233
6304
  const localRef = (0, import_react40.useRef)(null);
6234
6305
  const setInputRef = (0, import_react40.useCallback)((node) => {
@@ -6236,11 +6307,11 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6236
6307
  if (typeof inputRef === "function") inputRef(node);
6237
6308
  else if (inputRef) inputRef.current = node;
6238
6309
  }, [inputRef]);
6239
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "ss-g-search", children: [
6240
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
6241
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "ss-g-search-box", children: [
6242
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IconSearch, {}),
6243
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6310
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-search", children: [
6311
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
6312
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-search-box", children: [
6313
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconSearch, {}),
6314
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6244
6315
  "input",
6245
6316
  {
6246
6317
  id,
@@ -6254,7 +6325,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6254
6325
  onChange: (e) => onChange(e.target.value)
6255
6326
  }
6256
6327
  ),
6257
- clearLabel && value.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6328
+ clearLabel && value.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6258
6329
  "button",
6259
6330
  {
6260
6331
  type: "button",
@@ -6264,7 +6335,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6264
6335
  onChange("");
6265
6336
  localRef.current?.focus();
6266
6337
  },
6267
- children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IconClose, { size: 11 })
6338
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconClose, { size: 11 })
6268
6339
  }
6269
6340
  ) : null
6270
6341
  ] })
@@ -6272,7 +6343,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6272
6343
  }
6273
6344
 
6274
6345
  // src/components/TodayPanel.tsx
6275
- var import_jsx_runtime60 = require("react/jsx-runtime");
6346
+ var import_jsx_runtime61 = require("react/jsx-runtime");
6276
6347
  function TodayPanel({ discovery, ui, monitor }) {
6277
6348
  const { groups, states, stale, starLeague } = discovery;
6278
6349
  const searchId = (0, import_react41.useId)();
@@ -6303,18 +6374,38 @@ function TodayPanel({ discovery, ui, monitor }) {
6303
6374
  acc[g.competitionName] = (acc[g.competitionName] ?? 0) + 1;
6304
6375
  return acc;
6305
6376
  }, {});
6377
+ const rowedCandidates = [];
6378
+ const tiledCandidates = [];
6379
+ {
6380
+ let budget = SECTION_ROW_BUDGET;
6381
+ let overBudget = false;
6382
+ for (const group of placement.candidates) {
6383
+ const rows = rowsFor(group, states, stale);
6384
+ if (rows === 0) {
6385
+ tiledCandidates.push(group);
6386
+ continue;
6387
+ }
6388
+ if (!overBudget && rows <= budget) {
6389
+ rowedCandidates.push(group);
6390
+ budget -= rows;
6391
+ } else {
6392
+ overBudget = true;
6393
+ tiledCandidates.push(group);
6394
+ }
6395
+ }
6396
+ }
6306
6397
  const openIndex = selectedCompetitionId === null ? -1 : placement.order.findIndex((g) => g.competitionId === selectedCompetitionId);
6307
6398
  const openGroup = openIndex === -1 ? void 0 : placement.order[openIndex];
6308
6399
  (0, import_react41.useEffect)(() => {
6309
6400
  if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
6310
6401
  }, [selectedCompetitionId, openGroup]);
6311
6402
  const liveRows = stale ? [] : visibleGroups.flatMap((group) => group.matches.filter((m) => isTreatedLive(states[m.matchId], stale)).map((match) => ({ match, rank: group.rank }))).sort((a, b) => a.rank - b.rank);
6312
- const liveBand = liveRows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
6313
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-sec-head", children: [
6314
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
6403
+ const liveBand = liveRows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
6404
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-sec-head", children: [
6405
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
6315
6406
  ui.sectionLive
6316
6407
  ] }),
6317
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6408
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6318
6409
  FixtureRow,
6319
6410
  {
6320
6411
  match,
@@ -6327,10 +6418,10 @@ function TodayPanel({ discovery, ui, monitor }) {
6327
6418
  )) })
6328
6419
  ] });
6329
6420
  if (openGroup !== void 0) {
6330
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-root", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-mon-list", children: [
6331
- stale && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
6421
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-root", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-mon-list", children: [
6422
+ stale && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
6332
6423
  liveBand,
6333
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6424
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6334
6425
  LeagueDetail,
6335
6426
  {
6336
6427
  group: openGroup,
@@ -6351,11 +6442,11 @@ function TodayPanel({ discovery, ui, monitor }) {
6351
6442
  }
6352
6443
  const searching = query.trim().length > 0;
6353
6444
  const searchResults = searching ? placement.order.filter((g) => matchesQuery(g, query)) : [];
6354
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-today-root", children: [
6355
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-mon-list", children: [
6356
- stale && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
6445
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-root", children: [
6446
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-mon-list", children: [
6447
+ stale && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
6357
6448
  !searching && liveBand,
6358
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6449
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6359
6450
  SearchField,
6360
6451
  {
6361
6452
  id: searchId,
@@ -6367,19 +6458,19 @@ function TodayPanel({ discovery, ui, monitor }) {
6367
6458
  clearLabel: ui.clearSearchLabel
6368
6459
  }
6369
6460
  ),
6370
- searching ? searchResults.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_jsx_runtime60.Fragment, { children: searchResults.map((group) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-today-search-block", children: [
6371
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-today-search-group", children: [
6372
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6373
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { className: "ss-w-today-search-group-name", children: [
6461
+ searching ? searchResults.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment, { children: searchResults.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-search-block", children: [
6462
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-search-group", children: [
6463
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
6464
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "ss-w-today-search-group-name", children: [
6374
6465
  group.competitionName,
6375
- (nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { className: "ss-w-today-tile-country", children: [
6466
+ (nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "ss-w-today-tile-country", children: [
6376
6467
  " (",
6377
6468
  group.competitionCountry,
6378
6469
  ")"
6379
6470
  ] }) : null
6380
6471
  ] })
6381
6472
  ] }),
6382
- group.matches.map((match) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6473
+ matchingFixtures(group, query).map((match) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6383
6474
  "div",
6384
6475
  {
6385
6476
  role: "button",
@@ -6393,29 +6484,47 @@ function TodayPanel({ discovery, ui, monitor }) {
6393
6484
  setSelectedCompetitionId(group.competitionId);
6394
6485
  }
6395
6486
  },
6396
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
6487
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
6397
6488
  },
6398
6489
  match.matchId
6399
6490
  ))
6400
- ] }, group.competitionId)) }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
6401
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-w-today-sec", children: [
6491
+ ] }, group.competitionId)) }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
6492
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-sec", children: [
6402
6493
  placement.personal ? ui.yourLeagues : ui.topLeagues,
6403
- !placement.personal && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
6494
+ !placement.personal && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
6404
6495
  ] }),
6405
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-tiles", children: placement.candidates.map((group) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6406
- LeagueTile,
6407
- {
6408
- group,
6409
- starClickable: starClickable(group, placement.pinnedCompetitionId),
6410
- disambiguate: (nameCounts[group.competitionName] ?? 0) > 1,
6411
- onOpen: () => setSelectedCompetitionId(group.competitionId),
6412
- starTap: gridStarTap,
6413
- ui
6414
- },
6415
- group.competitionId
6416
- )) }),
6417
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
6418
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
6496
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-rowsection", children: [
6497
+ rowedCandidates.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6498
+ LeagueRowGroup,
6499
+ {
6500
+ group,
6501
+ states,
6502
+ stale,
6503
+ cap: ROW_CAP_PER_LEAGUE,
6504
+ starClickable: starClickable(group, placement.pinnedCompetitionId),
6505
+ disambiguate: (nameCounts[group.competitionName] ?? 0) > 1,
6506
+ onOpen: () => setSelectedCompetitionId(group.competitionId),
6507
+ starTap: gridStarTap,
6508
+ ui,
6509
+ monitor
6510
+ },
6511
+ group.competitionId
6512
+ )),
6513
+ tiledCandidates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-tiles", children: tiledCandidates.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6514
+ LeagueTile,
6515
+ {
6516
+ group,
6517
+ starClickable: starClickable(group, placement.pinnedCompetitionId),
6518
+ disambiguate: (nameCounts[group.competitionName] ?? 0) > 1,
6519
+ onOpen: () => setSelectedCompetitionId(group.competitionId),
6520
+ starTap: gridStarTap,
6521
+ ui
6522
+ },
6523
+ group.competitionId
6524
+ )) })
6525
+ ] }),
6526
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
6527
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
6419
6528
  LeagueTile,
6420
6529
  {
6421
6530
  group,
@@ -6429,7 +6538,7 @@ function TodayPanel({ discovery, ui, monitor }) {
6429
6538
  )) })
6430
6539
  ] })
6431
6540
  ] }),
6432
- toast !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
6541
+ toast !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
6433
6542
  ] });
6434
6543
  }
6435
6544
 
@@ -6437,9 +6546,9 @@ function TodayPanel({ discovery, ui, monitor }) {
6437
6546
  var import_react55 = require("react");
6438
6547
 
6439
6548
  // src/components/GamesLoginWall.tsx
6440
- var import_jsx_runtime61 = require("react/jsx-runtime");
6549
+ var import_jsx_runtime62 = require("react/jsx-runtime");
6441
6550
  function GamesLoginWall({ ui }) {
6442
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: ui.gamesLoginRequired }) }) });
6551
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: ui.gamesLoginRequired }) }) });
6443
6552
  }
6444
6553
 
6445
6554
  // src/components/GamesHub.tsx
@@ -6459,74 +6568,74 @@ function splitName(full) {
6459
6568
  }
6460
6569
 
6461
6570
  // src/components/GameTileArt.tsx
6462
- var import_jsx_runtime62 = require("react/jsx-runtime");
6571
+ var import_jsx_runtime63 = require("react/jsx-runtime");
6463
6572
  function GameTileArt({ gameId }) {
6464
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
6573
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
6465
6574
  }
6466
- var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("g", { className: cls, children: [
6467
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
6468
- /* @__PURE__ */ (0, import_jsx_runtime62.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` })
6575
+ var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { className: cls, children: [
6576
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
6577
+ /* @__PURE__ */ (0, import_jsx_runtime63.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` })
6469
6578
  ] });
6470
6579
  var ART = {
6471
- "mystery-tiger": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6580
+ "mystery-tiger": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6472
6581
  head(60, 38, 26, "ss-g-art-fg"),
6473
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
6582
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
6474
6583
  ] }),
6475
- "higher-or-lower": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6584
+ "higher-or-lower": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6476
6585
  head(32, 38, 20),
6477
6586
  head(88, 38, 20),
6478
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
6479
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
6587
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
6588
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
6480
6589
  ] }),
6481
- "guess-the-xi": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6482
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
6483
- [[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_runtime62.jsx)("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
6590
+ "guess-the-xi": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6591
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
6592
+ [[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_runtime63.jsx)("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
6484
6593
  ] }),
6485
- "daily-quiz": /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
6486
- "career-path": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6487
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
6488
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
6489
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
6490
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
6491
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
6594
+ "daily-quiz": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
6595
+ "career-path": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6596
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
6597
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
6598
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
6599
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
6600
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
6492
6601
  ] }),
6493
- "beat-the-grid": /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ (0, import_jsx_runtime62.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}`))) }),
6494
- "matchday-predictor": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6495
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
6496
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
6497
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
6498
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
6602
+ "beat-the-grid": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ (0, import_jsx_runtime63.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}`))) }),
6603
+ "matchday-predictor": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6604
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
6605
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
6606
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
6607
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
6499
6608
  ] }),
6500
- "starting-xi": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6501
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
6502
- [[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_runtime62.jsx)("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
6609
+ "starting-xi": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6610
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
6611
+ [[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_runtime63.jsx)("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
6503
6612
  ] }),
6504
- "stat-ladder": /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
6505
- "fan-motm": /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
6506
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
6613
+ "stat-ladder": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
6614
+ "fan-motm": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
6615
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
6507
6616
  head(60, 40, 18),
6508
- /* @__PURE__ */ (0, import_jsx_runtime62.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" })
6617
+ /* @__PURE__ */ (0, import_jsx_runtime63.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" })
6509
6618
  ] }),
6510
- default: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
6619
+ default: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
6511
6620
  };
6512
6621
 
6513
6622
  // src/components/games/ui/Chip.tsx
6514
- var import_jsx_runtime63 = require("react/jsx-runtime");
6623
+ var import_jsx_runtime64 = require("react/jsx-runtime");
6515
6624
  function Chip({ variant = "neutral", icon, children, className }) {
6516
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
6625
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
6517
6626
  icon,
6518
6627
  children
6519
6628
  ] });
6520
6629
  }
6521
6630
  function StatStack({ value, label }) {
6522
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: "ss-g-statstack", children: [
6523
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "ss-g-statstack-v", children: value }),
6524
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "ss-g-statstack-l", children: label })
6631
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "ss-g-statstack", children: [
6632
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-statstack-v", children: value }),
6633
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-statstack-l", children: label })
6525
6634
  ] });
6526
6635
  }
6527
6636
 
6528
6637
  // src/components/GameTile.tsx
6529
- var import_jsx_runtime64 = require("react/jsx-runtime");
6638
+ var import_jsx_runtime65 = require("react/jsx-runtime");
6530
6639
  function tileStatus(game, ui) {
6531
6640
  switch (game.status) {
6532
6641
  case "locked":
@@ -6550,38 +6659,38 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
6550
6659
  const status = tileStatus(game, ui);
6551
6660
  const disabled = DISABLED.has(game.status);
6552
6661
  const title = gameTitle(game, ui.games.titles);
6553
- const body = variant === "hero" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
6554
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "ss-g-hero-text", children: [
6555
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
6556
- status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Chip, { variant: "badge", children: ui.games.newToday }),
6557
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-hero-title", children: title }),
6558
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
6559
- status.tone === "success" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "ss-g-hero-cta", children: [
6662
+ const body = variant === "hero" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
6663
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-hero-text", children: [
6664
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
6665
+ status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Chip, { variant: "badge", children: ui.games.newToday }),
6666
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-title", children: title }),
6667
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
6668
+ status.tone === "success" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-hero-cta", children: [
6560
6669
  status.tone === "accent" ? ui.games.resume : ui.games.playNow,
6561
6670
  " \u2192"
6562
6671
  ] })
6563
6672
  ] }),
6564
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(GameTileArt, { gameId: game.gameId }) })
6565
- ] }) : variant === "wide" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
6566
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(GameTileArt, { gameId: game.gameId }) }),
6567
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "ss-g-wide-text", children: [
6568
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-title", children: title }),
6569
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
6570
- status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Chip, { variant: "badge", children: ui.games.newToday })
6673
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) })
6674
+ ] }) : variant === "wide" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
6675
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) }),
6676
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-wide-text", children: [
6677
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-title", children: title }),
6678
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
6679
+ status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Chip, { variant: "badge", children: ui.games.newToday })
6571
6680
  ] }),
6572
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(IconChevronLeft, { size: 18 }) })
6573
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
6574
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(GameTileArt, { gameId: game.gameId }) }),
6575
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-title", children: title }),
6576
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
6681
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(IconChevronLeft, { size: 18 }) })
6682
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
6683
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) }),
6684
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-title", children: title }),
6685
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
6577
6686
  ] });
6578
6687
  const cls = `ss-g-tile ss-g-tile--${variant}`;
6579
- if (disabled) return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
6580
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
6688
+ if (disabled) return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
6689
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
6581
6690
  }
6582
6691
 
6583
6692
  // src/components/GamesHub.tsx
6584
- var import_jsx_runtime65 = require("react/jsx-runtime");
6693
+ var import_jsx_runtime66 = require("react/jsx-runtime");
6585
6694
  var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
6586
6695
  var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
6587
6696
  function pickHeroGame(games) {
@@ -6607,49 +6716,49 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
6607
6716
  const kickoffs = fixtures.map((g) => g.kickoffUtc).filter((k) => !!k).sort();
6608
6717
  const todayPts = games.filter((g) => DONE.has(g.status)).reduce((s, g) => s + (g.score ?? 0), 0);
6609
6718
  const dash = "\u2014";
6610
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-hub", children: [
6611
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-stats", children: [
6612
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-stat", children: [
6613
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
6614
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
6615
- myWeeklyRow ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
6616
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(IconFlame, {}),
6719
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-hub", children: [
6720
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stats", children: [
6721
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
6722
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
6723
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
6724
+ myWeeklyRow ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
6725
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(IconFlame, {}),
6617
6726
  myWeeklyRow.currentStreak
6618
6727
  ] }) : dash,
6619
- myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("small", { children: ui.games.unitDays })
6728
+ myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.unitDays })
6620
6729
  ] })
6621
6730
  ] }),
6622
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-stat", children: [
6623
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
6624
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
6731
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
6732
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
6733
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
6625
6734
  ui.games.formatPts(todayPts),
6626
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("small", { children: ui.games.unitPts })
6735
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.unitPts })
6627
6736
  ] })
6628
6737
  ] }),
6629
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-stat", children: [
6630
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
6631
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
6738
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
6739
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
6740
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
6632
6741
  myWeeklyRow ? `#${myWeeklyRow.rank}` : dash,
6633
- myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("small", { children: ui.games.thisWeek })
6742
+ myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.thisWeek })
6634
6743
  ] })
6635
6744
  ] })
6636
6745
  ] }),
6637
- weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
6638
- hero && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
6639
- (grid.length > 0 || wide) && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("section", { className: "ss-g-sec", children: [
6640
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-sec-head", children: [
6641
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { children: ui.games.dailyGames }),
6642
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: ui.games.newSetAtMidnight })
6746
+ weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
6747
+ hero && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
6748
+ (grid.length > 0 || wide) && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: "ss-g-sec", children: [
6749
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-sec-head", children: [
6750
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { children: ui.games.dailyGames }),
6751
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: ui.games.newSetAtMidnight })
6643
6752
  ] }),
6644
- grid.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
6645
- wide && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTile, { game: wide, onOpen, ui, variant: "wide" })
6753
+ grid.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
6754
+ wide && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: wide, onOpen, ui, variant: "wide" })
6646
6755
  ] }),
6647
- fixtures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("section", { className: "ss-g-sec", children: [
6648
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "ss-g-sec-head", children: [
6649
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { children: ui.games.matchdayGames }),
6650
- kickoffs[0] && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
6756
+ fixtures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: "ss-g-sec", children: [
6757
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-sec-head", children: [
6758
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { children: ui.games.matchdayGames }),
6759
+ kickoffs[0] && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
6651
6760
  ] }),
6652
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
6761
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
6653
6762
  ] })
6654
6763
  ] });
6655
6764
  }
@@ -6942,7 +7051,7 @@ function isNationCode(flag) {
6942
7051
 
6943
7052
  // src/components/games/PlayerAvatar.tsx
6944
7053
  var import_react44 = require("react");
6945
- var import_jsx_runtime66 = require("react/jsx-runtime");
7054
+ var import_jsx_runtime67 = require("react/jsx-runtime");
6946
7055
  function initialsOf(name) {
6947
7056
  const parts = name.trim().split(/\s+/).filter(Boolean);
6948
7057
  const first = parts[0];
@@ -6961,39 +7070,39 @@ function PlayerAvatar({
6961
7070
  }) {
6962
7071
  const [failed, setFailed] = (0, import_react44.useState)(false);
6963
7072
  const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
6964
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
7073
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
6965
7074
  }
6966
7075
 
6967
7076
  // src/components/games/ui/GameHeader.tsx
6968
- var import_jsx_runtime67 = require("react/jsx-runtime");
7077
+ var import_jsx_runtime68 = require("react/jsx-runtime");
6969
7078
  function GameHeader({ title, eyebrow, right, onBack, backLabel }) {
6970
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-head", children: [
6971
- onBack && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(IconChevronLeft, {}) }),
6972
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "ss-g-head-text", children: [
6973
- eyebrow && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-eyebrow", children: eyebrow }),
6974
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "ss-g-title", children: title })
7079
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-head", children: [
7080
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconChevronLeft, {}) }),
7081
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-head-text", children: [
7082
+ eyebrow && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-eyebrow", children: eyebrow }),
7083
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "ss-g-title", children: title })
6975
7084
  ] }),
6976
- right && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-head-right", children: right })
7085
+ right && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-head-right", children: right })
6977
7086
  ] });
6978
7087
  }
6979
7088
 
6980
7089
  // src/components/games/ui/SegmentProgress.tsx
6981
- var import_jsx_runtime68 = require("react/jsx-runtime");
7090
+ var import_jsx_runtime69 = require("react/jsx-runtime");
6982
7091
  function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right }) {
6983
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-progress", children: [
6984
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-progress-main", children: [
6985
- (leftLabel || rightLabel) && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-progress-labels", children: [
6986
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: leftLabel }),
6987
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-progress-rl", children: rightLabel })
7092
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress", children: [
7093
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress-main", children: [
7094
+ (leftLabel || rightLabel) && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress-labels", children: [
7095
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: leftLabel }),
7096
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-progress-rl", children: rightLabel })
6988
7097
  ] }),
6989
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
7098
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6990
7099
  "div",
6991
7100
  {
6992
7101
  className: "ss-g-segs",
6993
7102
  role: "img",
6994
7103
  "aria-label": ariaLabel,
6995
7104
  style: { gridTemplateColumns: `repeat(${segments.length}, minmax(0, 1fr))` },
6996
- children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-seg", "data-state": s }, i))
7105
+ children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-seg", "data-state": s }, i))
6997
7106
  }
6998
7107
  )
6999
7108
  ] }),
@@ -7002,12 +7111,12 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
7002
7111
  }
7003
7112
 
7004
7113
  // src/components/games/ui/AnswerTray.tsx
7005
- var import_jsx_runtime69 = require("react/jsx-runtime");
7114
+ var import_jsx_runtime70 = require("react/jsx-runtime");
7006
7115
  function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
7007
7116
  const needle = query.trim().toLowerCase();
7008
7117
  const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
7009
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
7010
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
7118
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
7119
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
7011
7120
  SearchField,
7012
7121
  {
7013
7122
  id,
@@ -7019,9 +7128,9 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7019
7128
  disabled
7020
7129
  }
7021
7130
  ),
7022
- shown.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
7131
+ shown.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
7023
7132
  const { first, last } = splitName(o.name);
7024
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
7133
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
7025
7134
  "button",
7026
7135
  {
7027
7136
  type: "button",
@@ -7032,10 +7141,10 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7032
7141
  disabled,
7033
7142
  onClick: () => onPick(o.id),
7034
7143
  children: [
7035
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
7036
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
7037
- first && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-tray-first", children: first }),
7038
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-tray-last", children: last })
7144
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
7145
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
7146
+ first && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-tray-first", children: first }),
7147
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-tray-last", children: last })
7039
7148
  ] })
7040
7149
  ]
7041
7150
  },
@@ -7046,59 +7155,59 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
7046
7155
  }
7047
7156
 
7048
7157
  // src/components/games/ui/FooterBar.tsx
7049
- var import_jsx_runtime70 = require("react/jsx-runtime");
7158
+ var import_jsx_runtime71 = require("react/jsx-runtime");
7050
7159
  function FooterBar({ children }) {
7051
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "ss-g-footer", children });
7160
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-footer", children });
7052
7161
  }
7053
7162
 
7054
7163
  // src/components/games/ui/Silhouette.tsx
7055
- var import_jsx_runtime71 = require("react/jsx-runtime");
7164
+ var import_jsx_runtime72 = require("react/jsx-runtime");
7056
7165
  function Silhouette({ size, variant = "default" }) {
7057
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
7058
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
7059
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
7060
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
7166
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
7167
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
7168
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
7169
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
7061
7170
  ] }),
7062
- variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-sil-q", children: "?" })
7171
+ variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-sil-q", children: "?" })
7063
7172
  ] });
7064
7173
  }
7065
7174
 
7066
7175
  // src/components/games/ui/GameButton.tsx
7067
- var import_jsx_runtime72 = require("react/jsx-runtime");
7176
+ var import_jsx_runtime73 = require("react/jsx-runtime");
7068
7177
  function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
7069
7178
  const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
7070
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type, className: cls, ...rest });
7179
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("button", { type, className: cls, ...rest });
7071
7180
  }
7072
7181
 
7073
7182
  // src/components/games/ui/ResultCard.tsx
7074
- var import_jsx_runtime73 = require("react/jsx-runtime");
7183
+ var import_jsx_runtime74 = require("react/jsx-runtime");
7075
7184
  function ResultCard({ tone, title, score, detail, onBack, ui }) {
7076
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
7077
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-result-title", children: title }),
7078
- score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: "ss-g-result-score", children: [
7079
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-result-num", children: score }),
7185
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
7186
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-title", children: title }),
7187
+ score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("span", { className: "ss-g-result-score", children: [
7188
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-num", children: score }),
7080
7189
  ui.games.unitPts
7081
7190
  ] }),
7082
- detail && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-result-detail", children: detail }),
7083
- onBack && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
7191
+ detail && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-detail", children: detail }),
7192
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
7084
7193
  ] });
7085
7194
  }
7086
7195
 
7087
7196
  // src/components/games/ui/PointsLadderRow.tsx
7088
- var import_jsx_runtime74 = require("react/jsx-runtime");
7197
+ var import_jsx_runtime75 = require("react/jsx-runtime");
7089
7198
  function PointsLadderRow({ ladder, guessesUsed, ui }) {
7090
7199
  if (!ladder || ladder.length === 0) return null;
7091
7200
  const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
7092
7201
  const next = ladder[guessesUsed + 1];
7093
7202
  if (now === void 0) return null;
7094
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
7095
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
7096
- next !== void 0 && next !== now && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
7203
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
7204
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
7205
+ next !== void 0 && next !== now && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
7097
7206
  ] });
7098
7207
  }
7099
7208
 
7100
7209
  // src/components/games/MysteryTigerGame.tsx
7101
- var import_jsx_runtime75 = require("react/jsx-runtime");
7210
+ var import_jsx_runtime76 = require("react/jsx-runtime");
7102
7211
  function parseClientState(json) {
7103
7212
  if (!json) return null;
7104
7213
  try {
@@ -7220,22 +7329,22 @@ function MysteryTigerGame({
7220
7329
  setQuery("");
7221
7330
  onSubmit(JSON.stringify({ guesses: newGuesses }));
7222
7331
  }
7223
- const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Chip, { variant: "accent", children: [
7332
+ const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Chip, { variant: "accent", children: [
7224
7333
  score,
7225
7334
  " ",
7226
7335
  ui.games.unitPts
7227
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Chip, { children: [
7336
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Chip, { children: [
7228
7337
  ui.games.guess,
7229
7338
  " ",
7230
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
7339
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
7231
7340
  " / ",
7232
7341
  totalGuesses
7233
7342
  ] }) });
7234
7343
  const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
7235
7344
  const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
7236
7345
  const known = deriveKnownAttributes(guessResults, keys);
7237
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
7238
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
7346
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
7347
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7239
7348
  GameHeader,
7240
7349
  {
7241
7350
  title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
@@ -7245,41 +7354,41 @@ function MysteryTigerGame({
7245
7354
  backLabel: ui.back
7246
7355
  }
7247
7356
  ),
7248
- !config && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7249
- config && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
7250
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
7251
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
7252
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
7253
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-portrait", children: [
7254
- revealName ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Silhouette, { size: 150, variant: "mystery" }),
7255
- revealName && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
7357
+ !config && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7358
+ config && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7359
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
7360
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
7361
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
7362
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-portrait", children: [
7363
+ revealName ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Silhouette, { size: 150, variant: "mystery" }),
7364
+ revealName && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
7256
7365
  ] }),
7257
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
7258
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
7259
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
7366
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
7367
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
7368
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
7260
7369
  ] }, k.key)) })
7261
7370
  ] }),
7262
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
7263
- guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-table", children: [
7264
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
7265
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: t.yourGuesses }),
7266
- keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: t.labels[k] }, k))
7371
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
7372
+ guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-table", children: [
7373
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
7374
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: t.yourGuesses }),
7375
+ keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: t.labels[k] }, k))
7267
7376
  ] }),
7268
7377
  guessResults.map((gr, i) => {
7269
7378
  const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
7270
7379
  const { first, last } = splitName(name);
7271
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
7272
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-who", children: [
7273
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
7274
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-mt-names", children: [
7275
- first && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-first", children: first }),
7276
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-last", children: last })
7380
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
7381
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-who", children: [
7382
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
7383
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-mt-names", children: [
7384
+ first && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-first", children: first }),
7385
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-last", children: last })
7277
7386
  ] })
7278
7387
  ] }),
7279
7388
  keys.map((key) => {
7280
7389
  const v = gr[key];
7281
7390
  const arrow = directionArrow(v);
7282
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
7391
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
7283
7392
  "div",
7284
7393
  {
7285
7394
  className: "ss-g-mt-cell",
@@ -7287,8 +7396,8 @@ function MysteryTigerGame({
7287
7396
  "data-verdict": v.verdict,
7288
7397
  "aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
7289
7398
  children: [
7290
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
7291
- arrow && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
7399
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
7400
+ arrow && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
7292
7401
  ]
7293
7402
  },
7294
7403
  key
@@ -7297,25 +7406,25 @@ function MysteryTigerGame({
7297
7406
  ] }, gr.playerId);
7298
7407
  })
7299
7408
  ] }),
7300
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-legend", children: [
7301
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { children: [
7302
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
7409
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-legend", children: [
7410
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
7411
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
7303
7412
  t.legendMatch
7304
7413
  ] }),
7305
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { children: [
7306
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
7414
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
7415
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
7307
7416
  t.legendClose
7308
7417
  ] }),
7309
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { children: [
7418
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
7310
7419
  "\u25B2 ",
7311
7420
  t.legendHigher
7312
7421
  ] })
7313
7422
  ] }),
7314
- clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-mt-hint", children: [
7315
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconBulb, {}),
7316
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: clientState.hintLine })
7423
+ clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-hint", children: [
7424
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconBulb, {}),
7425
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: clientState.hintLine })
7317
7426
  ] }),
7318
- isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
7427
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7319
7428
  ResultCard,
7320
7429
  {
7321
7430
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -7327,7 +7436,7 @@ function MysteryTigerGame({
7327
7436
  }
7328
7437
  )
7329
7438
  ] }),
7330
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
7439
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7331
7440
  AnswerTray,
7332
7441
  {
7333
7442
  id: inputId,
@@ -7346,7 +7455,7 @@ function MysteryTigerGame({
7346
7455
  }
7347
7456
 
7348
7457
  // src/components/games/HigherOrLowerGame.tsx
7349
- var import_jsx_runtime76 = require("react/jsx-runtime");
7458
+ var import_jsx_runtime77 = require("react/jsx-runtime");
7350
7459
  var POINTS_PER_CORRECT = 10;
7351
7460
  function parseClientState2(json) {
7352
7461
  if (!json) return null;
@@ -7358,11 +7467,11 @@ function parseClientState2(json) {
7358
7467
  }
7359
7468
  function PlayerCard({ name, imagePath, highlight, children }) {
7360
7469
  const { first, last } = splitName(name);
7361
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
7362
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Silhouette, { size: 150 }) }),
7363
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-hl-info", children: [
7364
- first && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-first", children: first }),
7365
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-surname", children: last }),
7470
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
7471
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Silhouette, { size: 150 }) }),
7472
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-info", children: [
7473
+ first && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-first", children: first }),
7474
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-surname", children: last }),
7366
7475
  children
7367
7476
  ] })
7368
7477
  ] });
@@ -7394,47 +7503,47 @@ function HigherOrLowerGame({
7394
7503
  const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
7395
7504
  onSubmit(JSON.stringify({ answers: newAnswers }));
7396
7505
  }
7397
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
7398
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7506
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
7507
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7399
7508
  GameHeader,
7400
7509
  {
7401
7510
  title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
7402
7511
  eyebrow: t.eyebrow(POINTS_PER_CORRECT),
7403
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
7512
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
7404
7513
  onBack,
7405
7514
  backLabel: ui.back
7406
7515
  }
7407
7516
  ),
7408
- !config && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7409
- config && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7410
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
7411
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
7412
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
7413
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
7414
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
7517
+ !config && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7518
+ config && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
7519
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-body", children: [
7520
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
7521
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
7522
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
7523
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
7415
7524
  ] }),
7416
- currentPair && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-hl-pair", children: [
7417
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
7418
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
7419
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
7525
+ currentPair && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-pair", children: [
7526
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
7527
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
7528
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
7420
7529
  ] }),
7421
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
7422
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-hl-btns", children: [
7423
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
7424
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconArrowUp, { size: 16 }),
7530
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
7531
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-btns", children: [
7532
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
7533
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconArrowUp, { size: 16 }),
7425
7534
  t.higher
7426
7535
  ] }),
7427
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
7428
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconArrowDown, { size: 16 }),
7536
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
7537
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconArrowDown, { size: 16 }),
7429
7538
  t.lower
7430
7539
  ] })
7431
7540
  ] }) })
7432
7541
  ] }),
7433
- lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
7434
- lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconClose, {}),
7542
+ lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
7543
+ lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconClose, {}),
7435
7544
  t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
7436
7545
  ] }),
7437
- isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7546
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7438
7547
  ResultCard,
7439
7548
  {
7440
7549
  tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
@@ -7446,15 +7555,15 @@ function HigherOrLowerGame({
7446
7555
  }
7447
7556
  )
7448
7557
  ] }),
7449
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-hl-foot", children: [
7450
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
7558
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-foot", children: [
7559
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
7451
7560
  const a = answeredPairs[i];
7452
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
7561
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
7453
7562
  }) }),
7454
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-hl-pts", children: [
7455
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "data-testid": "hol-score", children: score }),
7563
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: "ss-g-hl-pts", children: [
7564
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { "data-testid": "hol-score", children: score }),
7456
7565
  " ",
7457
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
7566
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
7458
7567
  ] })
7459
7568
  ] }) })
7460
7569
  ] })
@@ -7466,17 +7575,17 @@ var import_react47 = require("react");
7466
7575
 
7467
7576
  // src/components/games/ui/CrestShield.tsx
7468
7577
  var import_react46 = require("react");
7469
- var import_jsx_runtime77 = require("react/jsx-runtime");
7578
+ var import_jsx_runtime78 = require("react/jsx-runtime");
7470
7579
  function CrestShield({ src, name, size = 28 }) {
7471
7580
  const [failed, setFailed] = (0, import_react46.useState)(false);
7472
7581
  if (src && !isPlaceholderImage(src) && !failed) {
7473
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
7582
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
7474
7583
  }
7475
- return /* @__PURE__ */ (0, import_jsx_runtime77.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_runtime77.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
7584
+ return /* @__PURE__ */ (0, import_jsx_runtime78.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_runtime78.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
7476
7585
  }
7477
7586
 
7478
7587
  // src/components/games/CareerPathGame.tsx
7479
- var import_jsx_runtime78 = require("react/jsx-runtime");
7588
+ var import_jsx_runtime79 = require("react/jsx-runtime");
7480
7589
  function parseClientState3(json) {
7481
7590
  if (!json) return null;
7482
7591
  try {
@@ -7506,9 +7615,9 @@ function CareerPathGame({
7506
7615
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
7507
7616
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
7508
7617
  if (!config) {
7509
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
7510
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7511
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7618
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
7619
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7620
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7512
7621
  ] });
7513
7622
  }
7514
7623
  const visiblePath = clientState?.visiblePath ?? config.initialPath;
@@ -7522,61 +7631,61 @@ function CareerPathGame({
7522
7631
  setQuery("");
7523
7632
  onSubmit(JSON.stringify({ guesses: newGuesses }));
7524
7633
  }
7525
- const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Chip, { variant: "neutral", children: [
7634
+ const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Chip, { variant: "neutral", children: [
7526
7635
  ui.games.guess,
7527
7636
  " ",
7528
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
7637
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
7529
7638
  " / ",
7530
7639
  clientState.guessesUsed + clientState.guessesRemaining
7531
7640
  ] }) }) : void 0;
7532
7641
  const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
7533
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
7534
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
7535
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-body", children: [
7536
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
7537
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-cp-card", children: [
7538
- isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
7539
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-cp-card-text", children: [
7540
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
7541
- clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-cp-locks", children: [
7542
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
7543
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
7642
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
7643
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
7644
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-body", children: [
7645
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
7646
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-cp-card", children: [
7647
+ isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
7648
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-cp-card-text", children: [
7649
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
7650
+ clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-locks", children: [
7651
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
7652
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
7544
7653
  ] }) : null
7545
7654
  ] })
7546
7655
  ] }),
7547
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("ol", { className: "ss-g-cp-line", children: [
7656
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("ol", { className: "ss-g-cp-line", children: [
7548
7657
  visiblePath.map((spell, i) => {
7549
7658
  const years = i === 0 ? s.firstClub : spellYears(spell);
7550
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { className: "ss-g-cp-step", children: [
7551
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-cp-rail", children: [
7552
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
7553
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
7659
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step", children: [
7660
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-rail", children: [
7661
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
7662
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
7554
7663
  ] }),
7555
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-cp-step-text", children: [
7556
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
7557
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-cp-sub", children: [
7558
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-years", children: years }),
7559
- spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7664
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-step-text", children: [
7665
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
7666
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-sub", children: [
7667
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-years", children: years }),
7668
+ spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
7560
7669
  years ? " \xB7 " : "",
7561
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
7670
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
7562
7671
  ] })
7563
7672
  ] })
7564
7673
  ] })
7565
7674
  ] }, `${spell.clubName}-${i}`);
7566
7675
  }),
7567
- hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
7568
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-cp-rail", children: [
7569
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconLock, { size: 18 }) }),
7570
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
7676
+ hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
7677
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-rail", children: [
7678
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 18 }) }),
7679
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
7571
7680
  ] }),
7572
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
7681
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
7573
7682
  ] }),
7574
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
7575
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconLock, { size: 18 }) }) }),
7576
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
7683
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
7684
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 18 }) }) }),
7685
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
7577
7686
  ] })
7578
7687
  ] }),
7579
- isOver && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7688
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7580
7689
  ResultCard,
7581
7690
  {
7582
7691
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -7588,7 +7697,7 @@ function CareerPathGame({
7588
7697
  }
7589
7698
  )
7590
7699
  ] }),
7591
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7700
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7592
7701
  AnswerTray,
7593
7702
  {
7594
7703
  id: inputId,
@@ -7610,13 +7719,13 @@ function CareerPathGame({
7610
7719
  var import_react48 = __toESM(require("react"), 1);
7611
7720
 
7612
7721
  // src/components/games/ui/OptionList.tsx
7613
- var import_jsx_runtime79 = require("react/jsx-runtime");
7722
+ var import_jsx_runtime80 = require("react/jsx-runtime");
7614
7723
  function OptionList({ label, options, onPick }) {
7615
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
7724
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
7616
7725
  }
7617
7726
 
7618
7727
  // src/components/games/BeatTheGridGame.tsx
7619
- var import_jsx_runtime80 = require("react/jsx-runtime");
7728
+ var import_jsx_runtime81 = require("react/jsx-runtime");
7620
7729
  function criterionIconKind(label, key) {
7621
7730
  const l = (key ?? label).toLowerCase();
7622
7731
  if (l.includes("app")) return "calendar";
@@ -7634,34 +7743,34 @@ function rowAbbrev(label, map, key) {
7634
7743
  function CriterionIcon({ kind }) {
7635
7744
  switch (kind) {
7636
7745
  case "calendar":
7637
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconCalendar, {});
7746
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconCalendar, {});
7638
7747
  case "ball":
7639
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconBall, {});
7748
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconBall, {});
7640
7749
  case "boot":
7641
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconBoot, {});
7750
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconBoot, {});
7642
7751
  case "gloves":
7643
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconGloves, {});
7752
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconGloves, {});
7644
7753
  case "shield":
7645
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconShield, {});
7754
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconShield, {});
7646
7755
  default:
7647
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconFlag, {});
7756
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconFlag, {});
7648
7757
  }
7649
7758
  }
7650
7759
  function HeaderVisual({ label, textKey: iKey, meta }) {
7651
7760
  if (!meta) {
7652
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7761
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7653
7762
  }
7654
7763
  switch (meta.kind) {
7655
7764
  case "club":
7656
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7765
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7657
7766
  case "coach":
7658
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7767
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7659
7768
  case "country":
7660
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7769
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7661
7770
  case "position":
7662
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_jsx_runtime80.Fragment, {});
7771
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_jsx_runtime81.Fragment, {});
7663
7772
  default:
7664
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7773
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7665
7774
  }
7666
7775
  }
7667
7776
  function parseClientState4(json) {
@@ -7705,12 +7814,12 @@ function SearchSheet({
7705
7814
  const filtered = playerPool.filter(
7706
7815
  (p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
7707
7816
  );
7708
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7709
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
7710
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Chip, { variant: "neutral", children: rowLabel }),
7711
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconClose, { size: 12 }) }),
7712
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Chip, { variant: "accent", children: colLabel }),
7713
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7817
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7818
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
7819
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "neutral", children: rowLabel }),
7820
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, { size: 12 }) }),
7821
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "accent", children: colLabel }),
7822
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7714
7823
  "button",
7715
7824
  {
7716
7825
  type: "button",
@@ -7718,12 +7827,12 @@ function SearchSheet({
7718
7827
  "data-testid": "btg-sheet-dismiss",
7719
7828
  "aria-label": s.closeSearch,
7720
7829
  onClick: onDismiss,
7721
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconClose, {})
7830
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, {})
7722
7831
  }
7723
7832
  )
7724
7833
  ] }),
7725
- playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7726
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7834
+ playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7835
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7727
7836
  SearchField,
7728
7837
  {
7729
7838
  id: inputId,
@@ -7735,16 +7844,16 @@ function SearchSheet({
7735
7844
  inputRef
7736
7845
  }
7737
7846
  ),
7738
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7847
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7739
7848
  OptionList,
7740
7849
  {
7741
7850
  label: s.searchLabel(rowLabel, colLabel),
7742
7851
  options: filtered.map((p) => ({
7743
7852
  key: p.id,
7744
- content: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7745
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7746
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
7747
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconPlus, { size: 18 }) })
7853
+ content: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7854
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7855
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
7856
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconPlus, { size: 18 }) })
7748
7857
  ] })
7749
7858
  })),
7750
7859
  onPick: (k) => onPick(row, col, Number(k))
@@ -7782,9 +7891,9 @@ function BeatTheGridGame({
7782
7891
  onSubmit(JSON.stringify({ cells: newCells }));
7783
7892
  }
7784
7893
  if (!config) {
7785
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7786
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7787
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7894
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7895
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7896
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7788
7897
  ] });
7789
7898
  }
7790
7899
  const rows = config.rows;
@@ -7797,20 +7906,20 @@ function BeatTheGridGame({
7797
7906
  (_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
7798
7907
  );
7799
7908
  const totalScore = clientState?.totalScore ?? result?.score ?? 0;
7800
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7801
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7802
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7909
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7910
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7911
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7803
7912
  SegmentProgress,
7804
7913
  {
7805
7914
  segments,
7806
7915
  ariaLabel: s.progressAria(filledCells.length, total),
7807
7916
  leftLabel: s.filled(filledCells.length, total),
7808
7917
  rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
7809
- right: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7918
+ right: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7810
7919
  }
7811
7920
  ),
7812
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-body", children: [
7813
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
7921
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-body", children: [
7922
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
7814
7923
  "div",
7815
7924
  {
7816
7925
  className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
@@ -7820,31 +7929,31 @@ function BeatTheGridGame({
7820
7929
  },
7821
7930
  role: "grid",
7822
7931
  children: [
7823
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-btg-corner" }),
7932
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-corner" }),
7824
7933
  cols.map((col, colIdx) => {
7825
7934
  const colMeta = config.colsMeta?.[colIdx];
7826
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7827
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7828
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { children: col })
7935
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7936
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7937
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: col })
7829
7938
  ] }, col);
7830
7939
  }),
7831
7940
  rows.map((rowLabel, rowIdx) => {
7832
7941
  const rowMeta = config.rowsMeta?.[rowIdx];
7833
7942
  const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
7834
- const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7835
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7836
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { children: rowLabel })
7837
- ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7838
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { "aria-hidden": "true", children: abbr }),
7839
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-sr", children: rowLabel })
7943
+ const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7944
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7945
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: rowLabel })
7946
+ ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7947
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { "aria-hidden": "true", children: abbr }),
7948
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-sr", children: rowLabel })
7840
7949
  ] });
7841
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_react48.default.Fragment, { children: [
7842
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7950
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_react48.default.Fragment, { children: [
7951
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7843
7952
  cols.map((colLabel, colIdx) => {
7844
7953
  const filled = findCellResult(filledCells, rowIdx, colIdx);
7845
7954
  const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
7846
7955
  const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
7847
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7956
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7848
7957
  "button",
7849
7958
  {
7850
7959
  type: "button",
@@ -7855,20 +7964,20 @@ function BeatTheGridGame({
7855
7964
  className: "ss-g-btg-cell",
7856
7965
  disabled: isLocked2 || submitting,
7857
7966
  onClick: () => handleCellClick(rowIdx, colIdx),
7858
- children: filled ? /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7859
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7967
+ children: filled ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7968
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7860
7969
  "span",
7861
7970
  {
7862
7971
  className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
7863
7972
  role: "img",
7864
7973
  "aria-label": filled.isCorrect ? s.correct : s.wrong,
7865
- children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconClose, { size: 11 })
7974
+ children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, { size: 11 })
7866
7975
  }
7867
7976
  ),
7868
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7977
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7869
7978
  (() => {
7870
7979
  const entry = playerPool.find((p) => p.id === filled.playerId);
7871
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7980
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7872
7981
  PlayerAvatar,
7873
7982
  {
7874
7983
  name: entry?.name ?? "",
@@ -7877,8 +7986,8 @@ function BeatTheGridGame({
7877
7986
  }
7878
7987
  );
7879
7988
  })(),
7880
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7881
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconPlus, { size: 22 }) })
7989
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7990
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconPlus, { size: 22 }) })
7882
7991
  },
7883
7992
  `cell-${rowIdx}-${colIdx}`
7884
7993
  );
@@ -7888,7 +7997,7 @@ function BeatTheGridGame({
7888
7997
  ]
7889
7998
  }
7890
7999
  ),
7891
- isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
8000
+ isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7892
8001
  ResultCard,
7893
8002
  {
7894
8003
  tone: "neutral",
@@ -7900,7 +8009,7 @@ function BeatTheGridGame({
7900
8009
  }
7901
8010
  )
7902
8011
  ] }),
7903
- activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
8012
+ activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7904
8013
  SearchSheet,
7905
8014
  {
7906
8015
  row: activeCell.row,
@@ -7922,18 +8031,18 @@ function BeatTheGridGame({
7922
8031
  var import_react49 = require("react");
7923
8032
 
7924
8033
  // src/components/games/ui/PitchSvg.tsx
7925
- var import_jsx_runtime81 = require("react/jsx-runtime");
8034
+ var import_jsx_runtime82 = require("react/jsx-runtime");
7926
8035
  function PitchSvg({ variant }) {
7927
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
7928
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
7929
- variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7930
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
7931
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
7932
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
7933
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
7934
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7935
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
7936
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
8036
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
8037
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
8038
+ variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
8039
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
8040
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
8041
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
8042
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
8043
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
8044
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
8045
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
7937
8046
  ] })
7938
8047
  ] });
7939
8048
  }
@@ -7989,7 +8098,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
7989
8098
  }
7990
8099
 
7991
8100
  // src/components/games/GuessTheXiGame.tsx
7992
- var import_jsx_runtime82 = require("react/jsx-runtime");
8101
+ var import_jsx_runtime83 = require("react/jsx-runtime");
7993
8102
  var MAX_GUESSES2 = 3;
7994
8103
  function parseClientState5(json) {
7995
8104
  if (!json) return null;
@@ -8039,31 +8148,31 @@ function GuessTheXiGame({
8039
8148
  const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
8040
8149
  const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
8041
8150
  const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
8042
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
8043
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8151
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
8152
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8044
8153
  GameHeader,
8045
8154
  {
8046
8155
  title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
8047
8156
  eyebrow: config?.poolLabel,
8048
- right: formation ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
8157
+ right: formation ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
8049
8158
  onBack,
8050
8159
  backLabel: ui.back
8051
8160
  }
8052
8161
  ),
8053
- !config && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8054
- config && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
8055
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-body", children: [
8056
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
8057
- rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
8058
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(PitchSvg, { variant: "full" }),
8059
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
8162
+ !config && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
8163
+ config && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8164
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-body", children: [
8165
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
8166
+ rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
8167
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PitchSvg, { variant: "full" }),
8168
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
8060
8169
  const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
8061
8170
  const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
8062
8171
  const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
8063
8172
  const flag = nationalityFlag(pos.nationality);
8064
8173
  if (lineupEntry) {
8065
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
8066
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8174
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
8175
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8067
8176
  PlayerAvatar,
8068
8177
  {
8069
8178
  name: lineupEntry.name,
@@ -8071,11 +8180,11 @@ function GuessTheXiGame({
8071
8180
  className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
8072
8181
  }
8073
8182
  ),
8074
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
8183
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
8075
8184
  ] }, `${pos.slot}-${c}`);
8076
8185
  }
8077
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
8078
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8186
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
8187
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8079
8188
  "span",
8080
8189
  {
8081
8190
  className: "ss-g-gxi-disc",
@@ -8086,22 +8195,22 @@ function GuessTheXiGame({
8086
8195
  children: flag
8087
8196
  }
8088
8197
  ),
8089
- name ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
8198
+ name ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
8090
8199
  ] }, `${pos.slot}-${c}`);
8091
8200
  }) }, r)) })
8092
8201
  ] }),
8093
- !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
8094
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
8202
+ !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
8203
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
8095
8204
  wrongGuesses.map((g) => {
8096
8205
  const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
8097
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
8098
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
8099
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("s", { children: teamName(g.teamId) })
8206
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
8207
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
8208
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("s", { children: teamName(g.teamId) })
8100
8209
  ] }, g.teamId);
8101
8210
  })
8102
8211
  ] }),
8103
- isOver && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
8104
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8212
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8213
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8105
8214
  ResultCard,
8106
8215
  {
8107
8216
  tone: solved ? "win" : failed ? "lose" : "neutral",
@@ -8112,29 +8221,29 @@ function GuessTheXiGame({
8112
8221
  ui
8113
8222
  }
8114
8223
  ),
8115
- (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
8116
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
8117
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
8118
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
8224
+ (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
8225
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
8226
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
8227
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
8119
8228
  ] })
8120
8229
  ] })
8121
8230
  ] }),
8122
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(FooterBar, { children: [
8123
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8231
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(FooterBar, { children: [
8232
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8124
8233
  OptionList,
8125
8234
  {
8126
8235
  label: t.optionsLabel,
8127
8236
  options: filtered.map((tm) => ({
8128
8237
  key: tm.teamId,
8129
- content: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
8130
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
8131
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { children: tm.teamName })
8238
+ content: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8239
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
8240
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { children: tm.teamName })
8132
8241
  ] })
8133
8242
  })),
8134
8243
  onPick: (k) => handlePick(Number(k))
8135
8244
  }
8136
8245
  ),
8137
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8246
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8138
8247
  SearchField,
8139
8248
  {
8140
8249
  id: inputId,
@@ -8152,7 +8261,7 @@ function GuessTheXiGame({
8152
8261
 
8153
8262
  // src/components/games/DailyQuizGame.tsx
8154
8263
  var import_react50 = require("react");
8155
- var import_jsx_runtime83 = require("react/jsx-runtime");
8264
+ var import_jsx_runtime84 = require("react/jsx-runtime");
8156
8265
  function parseClientState6(json) {
8157
8266
  if (!json) return null;
8158
8267
  try {
@@ -8173,13 +8282,13 @@ function OptionName({ text }) {
8173
8282
  const tokens = base.split(/\s+/).filter(Boolean);
8174
8283
  const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
8175
8284
  if (!isPlainName || base === "") {
8176
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
8285
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
8177
8286
  }
8178
8287
  const { first, last } = splitName(base);
8179
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
8180
- first && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
8181
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
8182
- suffix && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
8288
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
8289
+ first && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
8290
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
8291
+ suffix && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
8183
8292
  ] });
8184
8293
  }
8185
8294
  function DailyQuizGame({
@@ -8198,9 +8307,9 @@ function DailyQuizGame({
8198
8307
  const results = clientState?.results ?? [];
8199
8308
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
8200
8309
  if (!config) {
8201
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8202
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
8203
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8310
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8311
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
8312
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8204
8313
  ] });
8205
8314
  }
8206
8315
  const questions = config.questions;
@@ -8235,11 +8344,11 @@ function DailyQuizGame({
8235
8344
  return r.isCorrect ? "correct" : "wrong";
8236
8345
  });
8237
8346
  const correctCount = results.filter((r) => r.isCorrect).length;
8238
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8239
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
8240
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
8241
- /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-body", children: [
8242
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8347
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8348
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
8349
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
8350
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
8351
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8243
8352
  ResultCard,
8244
8353
  {
8245
8354
  tone: "neutral",
@@ -8252,15 +8361,15 @@ function DailyQuizGame({
8252
8361
  questions.map((q) => {
8253
8362
  const r = findResult(results, q.index);
8254
8363
  const picked = selections.get(q.index);
8255
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-dq-rq", children: [
8256
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
8257
- r && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
8364
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-dq-rq", children: [
8365
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
8366
+ r && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
8258
8367
  let cls = "ss-g-dq-rq-opt";
8259
8368
  if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
8260
8369
  else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
8261
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: cls, children: opt }, optIdx);
8370
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: cls, children: opt }, optIdx);
8262
8371
  }) }),
8263
- r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
8372
+ r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
8264
8373
  ] }, q.index);
8265
8374
  })
8266
8375
  ] })
@@ -8268,16 +8377,16 @@ function DailyQuizGame({
8268
8377
  }
8269
8378
  const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
8270
8379
  const selectedIdx = current ? selections.get(current.index) : void 0;
8271
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8272
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
8273
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
8274
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8275
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
8276
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
8380
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
8381
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
8382
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
8383
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
8384
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
8385
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
8277
8386
  const selected = optIdx === selectedIdx;
8278
8387
  const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
8279
8388
  const playerName = opt;
8280
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
8389
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
8281
8390
  "button",
8282
8391
  {
8283
8392
  type: "button",
@@ -8286,25 +8395,25 @@ function DailyQuizGame({
8286
8395
  disabled: submitting,
8287
8396
  onClick: () => handleSelect(current.index, optIdx),
8288
8397
  children: [
8289
- current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
8290
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
8291
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(OptionName, { text: opt })
8398
+ current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
8399
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
8400
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(OptionName, { text: opt })
8292
8401
  ]
8293
8402
  },
8294
8403
  optIdx
8295
8404
  );
8296
8405
  }) })
8297
8406
  ] }) }),
8298
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-dq-nav", children: [
8299
- page > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
8300
- isLast ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
8407
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-dq-nav", children: [
8408
+ page > 0 && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
8409
+ isLast ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
8301
8410
  ] }) })
8302
8411
  ] });
8303
8412
  }
8304
8413
 
8305
8414
  // src/components/games/MatchdayPredictorGame.tsx
8306
8415
  var import_react51 = require("react");
8307
- var import_jsx_runtime84 = require("react/jsx-runtime");
8416
+ var import_jsx_runtime85 = require("react/jsx-runtime");
8308
8417
  var SCORER_SEARCH_THRESHOLD = 9;
8309
8418
  function parseClientState7(json) {
8310
8419
  if (!json) return null;
@@ -8322,7 +8431,7 @@ function isLocked(kickoffUtc) {
8322
8431
  }
8323
8432
  }
8324
8433
  function IconMinus() {
8325
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8434
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8326
8435
  "svg",
8327
8436
  {
8328
8437
  width: 18,
@@ -8333,20 +8442,20 @@ function IconMinus() {
8333
8442
  strokeWidth: 2.2,
8334
8443
  strokeLinecap: "round",
8335
8444
  "aria-hidden": "true",
8336
- children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("path", { d: "M5 12h14" })
8445
+ children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("path", { d: "M5 12h14" })
8337
8446
  }
8338
8447
  );
8339
8448
  }
8340
8449
  function TeamBadge({ team, label }) {
8341
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-mp-team", children: [
8342
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CrestShield, { name: team.name, size: 44 }),
8343
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
8344
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-team-side", children: label })
8450
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-team", children: [
8451
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(CrestShield, { name: team.name, size: 44 }),
8452
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
8453
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-team-side", children: label })
8345
8454
  ] });
8346
8455
  }
8347
8456
  function ScoreCard({ home, away, h, a, t, edit }) {
8348
- const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-mp-col", children: [
8349
- edit && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8457
+ const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-col", children: [
8458
+ edit && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8350
8459
  "button",
8351
8460
  {
8352
8461
  type: "button",
@@ -8354,11 +8463,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
8354
8463
  "aria-label": t.goalsUp(team.name),
8355
8464
  disabled: edit.disabled,
8356
8465
  onClick: () => edit.onStep(side, 1),
8357
- children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconPlus, { size: 18 })
8466
+ children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconPlus, { size: 18 })
8358
8467
  }
8359
8468
  ),
8360
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
8361
- edit && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8469
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
8470
+ edit && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8362
8471
  "button",
8363
8472
  {
8364
8473
  type: "button",
@@ -8366,27 +8475,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
8366
8475
  "aria-label": t.goalsDown(team.name),
8367
8476
  disabled: edit.disabled || value <= 0,
8368
8477
  onClick: () => edit.onStep(side, -1),
8369
- children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconMinus, {})
8478
+ children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconMinus, {})
8370
8479
  }
8371
8480
  )
8372
8481
  ] });
8373
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-mp-card", children: [
8374
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(TeamBadge, { team: home, label: t.home }),
8375
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-mp-scores", children: [
8482
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-card", children: [
8483
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(TeamBadge, { team: home, label: t.home }),
8484
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-scores", children: [
8376
8485
  col("home", home, h),
8377
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
8486
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
8378
8487
  col("away", away, a)
8379
8488
  ] }),
8380
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(TeamBadge, { team: away, label: t.away })
8489
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(TeamBadge, { team: away, label: t.away })
8381
8490
  ] });
8382
8491
  }
8383
8492
  function OutcomeRow({ label, ok, detail, t }) {
8384
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
8385
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
8386
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("span", { className: "ss-g-mp-row-v", children: [
8387
- ok ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconClose, { size: 14 }),
8388
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
8389
- detail ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
8493
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
8494
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
8495
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("span", { className: "ss-g-mp-row-v", children: [
8496
+ ok ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconClose, { size: 14 }),
8497
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
8498
+ detail ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
8390
8499
  ] })
8391
8500
  ] });
8392
8501
  }
@@ -8407,12 +8516,12 @@ function MatchdayPredictorGame({
8407
8516
  const searchId = (0, import_react51.useId)();
8408
8517
  const clientState = parseClientState7(result?.clientStateJson);
8409
8518
  const alreadyPlayed = result?.alreadyPlayed === true;
8410
- const header = /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8519
+ const header = /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8411
8520
  GameHeader,
8412
8521
  {
8413
8522
  title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
8414
8523
  eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
8415
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
8524
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
8416
8525
  onBack,
8417
8526
  backLabel: ui.back
8418
8527
  }
@@ -8420,10 +8529,10 @@ function MatchdayPredictorGame({
8420
8529
  if (alreadyPlayed && clientState) {
8421
8530
  if (!clientState.graded) {
8422
8531
  const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
8423
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8532
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8424
8533
  header,
8425
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
8426
- config && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8534
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
8535
+ config && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8427
8536
  ScoreCard,
8428
8537
  {
8429
8538
  home: config.homeTeam,
@@ -8433,7 +8542,7 @@ function MatchdayPredictorGame({
8433
8542
  t
8434
8543
  }
8435
8544
  ),
8436
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8545
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8437
8546
  ResultCard,
8438
8547
  {
8439
8548
  tone: "neutral",
@@ -8450,28 +8559,28 @@ function MatchdayPredictorGame({
8450
8559
  }
8451
8560
  )
8452
8561
  ] }),
8453
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
8562
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
8454
8563
  ] });
8455
8564
  }
8456
8565
  const r = clientState.result;
8457
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8566
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8458
8567
  header,
8459
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
8460
- config && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
8461
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
8462
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("ul", { className: "ss-g-mp-rows", children: [
8463
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
8464
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
8465
- !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
8568
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
8569
+ config && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
8570
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
8571
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("ul", { className: "ss-g-mp-rows", children: [
8572
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
8573
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
8574
+ !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
8466
8575
  ] })
8467
8576
  ] }),
8468
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
8577
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
8469
8578
  ] });
8470
8579
  }
8471
8580
  if (!config) {
8472
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8581
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8473
8582
  header,
8474
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8583
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8475
8584
  ] });
8476
8585
  }
8477
8586
  const locked = isLocked(config.kickoffUtc);
@@ -8495,10 +8604,10 @@ function MatchdayPredictorGame({
8495
8604
  const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
8496
8605
  const q = query.trim().toLowerCase();
8497
8606
  const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
8498
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8607
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
8499
8608
  header,
8500
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
8501
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8609
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
8610
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8502
8611
  ScoreCard,
8503
8612
  {
8504
8613
  home: config.homeTeam,
@@ -8509,12 +8618,12 @@ function MatchdayPredictorGame({
8509
8618
  edit: { disabled, active: lastEdited, onStep: step }
8510
8619
  }
8511
8620
  ),
8512
- pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("section", { className: "ss-g-mp-scorer", children: [
8513
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
8514
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("h3", { children: t.firstScorer }),
8515
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { children: t.optional })
8621
+ pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("section", { className: "ss-g-mp-scorer", children: [
8622
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
8623
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("h3", { children: t.firstScorer }),
8624
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { children: t.optional })
8516
8625
  ] }),
8517
- showSearch && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8626
+ showSearch && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8518
8627
  SearchField,
8519
8628
  {
8520
8629
  id: searchId,
@@ -8526,9 +8635,9 @@ function MatchdayPredictorGame({
8526
8635
  disabled
8527
8636
  }
8528
8637
  ),
8529
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
8638
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
8530
8639
  const selected = firstScorerPlayerId === p.playerId;
8531
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
8640
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
8532
8641
  "button",
8533
8642
  {
8534
8643
  type: "button",
@@ -8538,15 +8647,15 @@ function MatchdayPredictorGame({
8538
8647
  disabled,
8539
8648
  onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
8540
8649
  children: [
8541
- selected && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconCheck, { size: 12 }) }),
8542
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
8543
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
8650
+ selected && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconCheck, { size: 12 }) }),
8651
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
8652
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
8544
8653
  ]
8545
8654
  },
8546
8655
  p.playerId
8547
8656
  );
8548
8657
  }) }),
8549
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
8658
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
8550
8659
  "button",
8551
8660
  {
8552
8661
  type: "button",
@@ -8555,24 +8664,24 @@ function MatchdayPredictorGame({
8555
8664
  disabled,
8556
8665
  onClick: () => setFirstScorerPlayerId(null),
8557
8666
  children: [
8558
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
8667
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
8559
8668
  t.noScorer
8560
8669
  ]
8561
8670
  }
8562
8671
  )
8563
8672
  ] }),
8564
- locked && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
8673
+ locked && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
8565
8674
  ] }),
8566
- /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(FooterBar, { children: [
8567
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
8568
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
8675
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(FooterBar, { children: [
8676
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
8677
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
8569
8678
  ] })
8570
8679
  ] });
8571
8680
  }
8572
8681
 
8573
8682
  // src/components/games/StartingXiGame.tsx
8574
8683
  var import_react52 = require("react");
8575
- var import_jsx_runtime85 = require("react/jsx-runtime");
8684
+ var import_jsx_runtime86 = require("react/jsx-runtime");
8576
8685
  var POINTS_PER_STARTER = 8;
8577
8686
  var XI_SIZE = 11;
8578
8687
  var DEFAULT_FORMATION = "4-3-3";
@@ -8621,20 +8730,20 @@ function StartingXiGame({
8621
8730
  const searchId = (0, import_react52.useId)();
8622
8731
  const clientState = parseClientState8(result?.clientStateJson);
8623
8732
  const alreadyPlayed = result?.alreadyPlayed === true;
8624
- const header = /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8733
+ const header = /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8625
8734
  GameHeader,
8626
8735
  {
8627
8736
  title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
8628
8737
  eyebrow: t.eyebrow,
8629
- right: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
8738
+ right: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
8630
8739
  onBack,
8631
8740
  backLabel: ui.back
8632
8741
  }
8633
8742
  );
8634
8743
  function statusScreen(title, score) {
8635
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8744
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8636
8745
  header,
8637
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
8746
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
8638
8747
  ] });
8639
8748
  }
8640
8749
  if (alreadyPlayed) {
@@ -8643,9 +8752,9 @@ function StartingXiGame({
8643
8752
  if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
8644
8753
  }
8645
8754
  if (!config) {
8646
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8755
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8647
8756
  header,
8648
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8757
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8649
8758
  ] });
8650
8759
  }
8651
8760
  const { formation, slots } = formationSlots(config.formation);
@@ -8680,27 +8789,27 @@ function StartingXiGame({
8680
8789
  onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
8681
8790
  }
8682
8791
  const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
8683
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8792
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8684
8793
  header,
8685
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8794
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8686
8795
  SegmentProgress,
8687
8796
  {
8688
8797
  segments,
8689
8798
  ariaLabel: t.picked(pickedCount),
8690
8799
  leftLabel: t.picked(pickedCount),
8691
8800
  rightLabel: t.toGo(XI_SIZE - pickedCount),
8692
- right: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { children: formation })
8801
+ right: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { children: formation })
8693
8802
  }
8694
8803
  ),
8695
- /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
8696
- /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-xi-pitch", children: [
8697
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(PitchSvg, { variant: "half" }),
8804
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-body", children: [
8805
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-xi-pitch", children: [
8806
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PitchSvg, { variant: "half" }),
8698
8807
  slots.map((s) => {
8699
8808
  const playerId = slotPlayers[s.index] ?? null;
8700
8809
  const player = playerId !== null ? byId.get(playerId) ?? null : null;
8701
8810
  const name = player?.playerName ?? "";
8702
8811
  const state = player ? "filled" : active === s.index ? "active" : "empty";
8703
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
8812
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
8704
8813
  "button",
8705
8814
  {
8706
8815
  type: "button",
@@ -8712,21 +8821,21 @@ function StartingXiGame({
8712
8821
  disabled: submitting,
8713
8822
  onClick: () => tapSlot(s.index),
8714
8823
  children: [
8715
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconPlus, { size: 18 }) }),
8716
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8824
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconPlus, { size: 18 }) }),
8825
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8717
8826
  ]
8718
8827
  },
8719
8828
  s.index
8720
8829
  );
8721
8830
  })
8722
8831
  ] }),
8723
- /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-xi-picker", children: [
8724
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(import_jsx_runtime85.Fragment, { children: [
8725
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
8726
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("strong", { children: t.pickFor(activeSlot.label) })
8727
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("strong", { children: t.allPicked }) }),
8728
- activeSlot && /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(import_jsx_runtime85.Fragment, { children: [
8729
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8832
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-xi-picker", children: [
8833
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(import_jsx_runtime86.Fragment, { children: [
8834
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
8835
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("strong", { children: t.pickFor(activeSlot.label) })
8836
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("strong", { children: t.allPicked }) }),
8837
+ activeSlot && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(import_jsx_runtime86.Fragment, { children: [
8838
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8730
8839
  SearchField,
8731
8840
  {
8732
8841
  id: searchId,
@@ -8738,18 +8847,18 @@ function StartingXiGame({
8738
8847
  disabled: submitting
8739
8848
  }
8740
8849
  ),
8741
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8742
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8743
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8744
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8850
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8851
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8852
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8853
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8745
8854
  ] }) }, p.playerId)) })
8746
8855
  ] })
8747
8856
  ] })
8748
8857
  ] }),
8749
- /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(FooterBar, { children: [
8750
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8751
- /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("p", { className: "ss-g-xi-lock", children: [
8752
- /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconLock, {}),
8858
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(FooterBar, { children: [
8859
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8860
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("p", { className: "ss-g-xi-lock", children: [
8861
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconLock, {}),
8753
8862
  lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
8754
8863
  ] })
8755
8864
  ] })
@@ -8758,7 +8867,7 @@ function StartingXiGame({
8758
8867
 
8759
8868
  // src/components/games/StatLadderGame.tsx
8760
8869
  var import_react53 = require("react");
8761
- var import_jsx_runtime86 = require("react/jsx-runtime");
8870
+ var import_jsx_runtime87 = require("react/jsx-runtime");
8762
8871
  function ladderClue(ladder) {
8763
8872
  const mystery = ladder.find((r) => r.rank === 2);
8764
8873
  if (!mystery) return null;
@@ -8780,9 +8889,9 @@ function parseClientState9(json) {
8780
8889
  }
8781
8890
  function NameStack({ name }) {
8782
8891
  const { first, last } = splitName(name);
8783
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "ss-g-sl-name", children: [
8784
- first && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("small", { children: `${first[0]}.` }),
8785
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("b", { children: last })
8892
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("span", { className: "ss-g-sl-name", children: [
8893
+ first && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("small", { children: `${first[0]}.` }),
8894
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("b", { children: last })
8786
8895
  ] });
8787
8896
  }
8788
8897
  function StatLadderGame({
@@ -8799,11 +8908,11 @@ function StatLadderGame({
8799
8908
  const searchId = (0, import_react53.useId)();
8800
8909
  const clientState = parseClientState9(result?.clientStateJson);
8801
8910
  const revealed = clientState != null;
8802
- const header = /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8911
+ const header = /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8803
8912
  if (!config) {
8804
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8913
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8805
8914
  header,
8806
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8915
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8807
8916
  ] });
8808
8917
  }
8809
8918
  const question = t.question(config.statLabel);
@@ -8815,45 +8924,45 @@ function StatLadderGame({
8815
8924
  if (selectedId === null || submitting || revealed) return;
8816
8925
  onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
8817
8926
  }
8818
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8927
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8819
8928
  header,
8820
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-body", children: [
8821
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
8822
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-sl-prompt", children: [
8823
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8824
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("h3", { className: "ss-g-sl-q", children: [
8929
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-body", children: [
8930
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
8931
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-sl-prompt", children: [
8932
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8933
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("h3", { className: "ss-g-sl-q", children: [
8825
8934
  question.pre,
8826
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("em", { children: question.emph }),
8935
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("em", { children: question.emph }),
8827
8936
  question.post
8828
8937
  ] })
8829
8938
  ] }),
8830
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8831
- (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
8939
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8940
+ (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
8832
8941
  "li",
8833
8942
  {
8834
8943
  className: "ss-g-sl-rung ss-g-sl-rung--mystery",
8835
8944
  "data-testid": "sl-mystery-rung",
8836
8945
  "data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
8837
8946
  children: [
8838
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
8839
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Silhouette, { size: 52, variant: "mystery" }),
8840
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8841
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8947
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
8948
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Silhouette, { size: 52, variant: "mystery" }),
8949
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8950
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8842
8951
  ]
8843
8952
  },
8844
8953
  rung.rank
8845
- ) : /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("li", { className: "ss-g-sl-rung", children: [
8846
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
8847
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8848
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(NameStack, { name: rung.playerName ?? "?" }),
8849
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
8954
+ ) : /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("li", { className: "ss-g-sl-rung", children: [
8955
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
8956
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8957
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(NameStack, { name: rung.playerName ?? "?" }),
8958
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
8850
8959
  ] }, rung.rank)
8851
8960
  ) }),
8852
- clue && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("p", { className: "ss-g-sl-clue", children: [
8853
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconBulb, {}),
8854
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: t.clue(clue, config.statLabel) })
8961
+ clue && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("p", { className: "ss-g-sl-clue", children: [
8962
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconBulb, {}),
8963
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: t.clue(clue, config.statLabel) })
8855
8964
  ] }),
8856
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
8965
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
8857
8966
  "button",
8858
8967
  {
8859
8968
  type: "button",
@@ -8866,13 +8975,13 @@ function StatLadderGame({
8866
8975
  setQuery(p.playerName);
8867
8976
  },
8868
8977
  children: [
8869
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8870
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8871
- selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconCheck, {})
8978
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8979
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8980
+ selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconCheck, {})
8872
8981
  ]
8873
8982
  }
8874
8983
  ) }, p.playerId)) }),
8875
- revealed && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8984
+ revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
8876
8985
  ResultCard,
8877
8986
  {
8878
8987
  tone: clientState.isCorrect ? "win" : "lose",
@@ -8883,8 +8992,8 @@ function StatLadderGame({
8883
8992
  }
8884
8993
  )
8885
8994
  ] }),
8886
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-sl-guess", children: [
8887
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8995
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-sl-guess", children: [
8996
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
8888
8997
  SearchField,
8889
8998
  {
8890
8999
  id: searchId,
@@ -8899,13 +9008,13 @@ function StatLadderGame({
8899
9008
  disabled: submitting
8900
9009
  }
8901
9010
  ),
8902
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
9011
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
8903
9012
  ] }) })
8904
9013
  ] });
8905
9014
  }
8906
9015
 
8907
9016
  // src/components/games/FanMotmGame.tsx
8908
- var import_jsx_runtime87 = require("react/jsx-runtime");
9017
+ var import_jsx_runtime88 = require("react/jsx-runtime");
8909
9018
  function parseClientState10(json) {
8910
9019
  if (!json) return null;
8911
9020
  try {
@@ -8926,20 +9035,20 @@ function FanMotmGame({
8926
9035
  const clientState = parseClientState10(result?.clientStateJson);
8927
9036
  const alreadyVoted = result?.alreadyPlayed === true;
8928
9037
  const pickedId = clientState?.pickedPlayerId ?? null;
8929
- const header = /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
9038
+ const header = /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8930
9039
  GameHeader,
8931
9040
  {
8932
9041
  title: t.title,
8933
9042
  eyebrow: t.eyebrow,
8934
- right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconCheck, {}), children: t.voted }) : void 0,
9043
+ right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(IconCheck, {}), children: t.voted }) : void 0,
8935
9044
  onBack,
8936
9045
  backLabel: ui.back
8937
9046
  }
8938
9047
  );
8939
9048
  if (!config) {
8940
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9049
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8941
9050
  header,
8942
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
9051
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8943
9052
  ] });
8944
9053
  }
8945
9054
  const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
@@ -8947,12 +9056,12 @@ function FanMotmGame({
8947
9056
  if (alreadyVoted || submitting) return;
8948
9057
  onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
8949
9058
  }
8950
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
9059
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8951
9060
  header,
8952
- /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-body", children: [
8953
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
9061
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-body", children: [
9062
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
8954
9063
  const isVoted = alreadyVoted && pickedId === c.playerId;
8955
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
9064
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
8956
9065
  "button",
8957
9066
  {
8958
9067
  type: "button",
@@ -8961,24 +9070,24 @@ function FanMotmGame({
8961
9070
  disabled: alreadyVoted || submitting,
8962
9071
  onClick: () => handleVote(c.playerId),
8963
9072
  children: [
8964
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
8965
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
8966
- isVoted && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
9073
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
9074
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
9075
+ isVoted && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
8967
9076
  ]
8968
9077
  }
8969
9078
  ) }, c.playerId);
8970
9079
  }) }),
8971
- alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
9080
+ alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
8972
9081
  ] }),
8973
- /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(FooterBar, { children: [
8974
- !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
8975
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
9082
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(FooterBar, { children: [
9083
+ !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
9084
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
8976
9085
  ] })
8977
9086
  ] });
8978
9087
  }
8979
9088
 
8980
9089
  // src/components/GameScreenHost.tsx
8981
- var import_jsx_runtime88 = require("react/jsx-runtime");
9090
+ var import_jsx_runtime89 = require("react/jsx-runtime");
8982
9091
  var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
8983
9092
  "matchday-predictor",
8984
9093
  "starting-xi",
@@ -9054,7 +9163,7 @@ function GameScreenHost({
9054
9163
  function renderScreen() {
9055
9164
  switch (gameId) {
9056
9165
  case "mystery-tiger":
9057
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9166
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9058
9167
  MysteryTigerGame,
9059
9168
  {
9060
9169
  ...sharedProps,
@@ -9062,7 +9171,7 @@ function GameScreenHost({
9062
9171
  }
9063
9172
  );
9064
9173
  case "higher-or-lower":
9065
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9174
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9066
9175
  HigherOrLowerGame,
9067
9176
  {
9068
9177
  ...sharedProps,
@@ -9070,7 +9179,7 @@ function GameScreenHost({
9070
9179
  }
9071
9180
  );
9072
9181
  case "career-path":
9073
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9182
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9074
9183
  CareerPathGame,
9075
9184
  {
9076
9185
  ...sharedProps,
@@ -9079,7 +9188,7 @@ function GameScreenHost({
9079
9188
  );
9080
9189
  case "beat-the-grid": {
9081
9190
  const btgConfig = safeParseConfig(configJson);
9082
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9191
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9083
9192
  BeatTheGridGame,
9084
9193
  {
9085
9194
  ...sharedProps,
@@ -9089,7 +9198,7 @@ function GameScreenHost({
9089
9198
  );
9090
9199
  }
9091
9200
  case "guess-the-xi":
9092
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9201
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9093
9202
  GuessTheXiGame,
9094
9203
  {
9095
9204
  ...sharedProps,
@@ -9097,7 +9206,7 @@ function GameScreenHost({
9097
9206
  }
9098
9207
  );
9099
9208
  case "daily-quiz":
9100
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9209
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9101
9210
  DailyQuizGame,
9102
9211
  {
9103
9212
  ...sharedProps,
@@ -9105,7 +9214,7 @@ function GameScreenHost({
9105
9214
  }
9106
9215
  );
9107
9216
  case "matchday-predictor":
9108
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9217
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9109
9218
  MatchdayPredictorGame,
9110
9219
  {
9111
9220
  ...sharedProps,
@@ -9113,7 +9222,7 @@ function GameScreenHost({
9113
9222
  }
9114
9223
  );
9115
9224
  case "starting-xi":
9116
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9225
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9117
9226
  StartingXiGame,
9118
9227
  {
9119
9228
  ...sharedProps,
@@ -9121,7 +9230,7 @@ function GameScreenHost({
9121
9230
  }
9122
9231
  );
9123
9232
  case "stat-ladder":
9124
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9233
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9125
9234
  StatLadderGame,
9126
9235
  {
9127
9236
  ...sharedProps,
@@ -9129,7 +9238,7 @@ function GameScreenHost({
9129
9238
  }
9130
9239
  );
9131
9240
  case "fan-motm":
9132
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9241
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9133
9242
  FanMotmGame,
9134
9243
  {
9135
9244
  ...sharedProps,
@@ -9137,10 +9246,10 @@ function GameScreenHost({
9137
9246
  }
9138
9247
  );
9139
9248
  default:
9140
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
9249
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
9141
9250
  }
9142
9251
  }
9143
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
9252
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
9144
9253
  }
9145
9254
 
9146
9255
  // src/components/games/ui/fonts.ts
@@ -9157,7 +9266,7 @@ function ensureGamesFonts(doc = document) {
9157
9266
  }
9158
9267
 
9159
9268
  // src/components/GamesPanel.tsx
9160
- var import_jsx_runtime89 = require("react/jsx-runtime");
9269
+ var import_jsx_runtime90 = require("react/jsx-runtime");
9161
9270
  function GamesPanel({
9162
9271
  loggedIn,
9163
9272
  games,
@@ -9170,9 +9279,9 @@ function GamesPanel({
9170
9279
  (0, import_react55.useEffect)(() => {
9171
9280
  ensureGamesFonts();
9172
9281
  }, []);
9173
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(GamesLoginWall, { ui });
9282
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(GamesLoginWall, { ui });
9174
9283
  if (selected !== null) {
9175
- return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9284
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
9176
9285
  GameScreenHost,
9177
9286
  {
9178
9287
  selected,
@@ -9186,7 +9295,7 @@ function GamesPanel({
9186
9295
  }
9187
9296
  ) });
9188
9297
  }
9189
- return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
9298
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
9190
9299
  GamesHub,
9191
9300
  {
9192
9301
  games,
@@ -9201,7 +9310,7 @@ function GamesPanel({
9201
9310
  var import_react56 = require("react");
9202
9311
 
9203
9312
  // src/components/LeaderboardRow.tsx
9204
- var import_jsx_runtime90 = require("react/jsx-runtime");
9313
+ var import_jsx_runtime91 = require("react/jsx-runtime");
9205
9314
  function formatPoints(n) {
9206
9315
  return n.toLocaleString("en");
9207
9316
  }
@@ -9210,14 +9319,14 @@ function LeaderboardWeeklyRow({
9210
9319
  isMe
9211
9320
  }) {
9212
9321
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
9213
- return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9214
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("span", { className: rankClass, children: [
9322
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9323
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: rankClass, children: [
9215
9324
  "#",
9216
9325
  row.rank
9217
9326
  ] }),
9218
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
9219
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9220
- row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("span", { className: "ss-w-lb2-streak", children: [
9327
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
9328
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9329
+ row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-lb2-streak", children: [
9221
9330
  "\u{1F525} ",
9222
9331
  row.currentStreak
9223
9332
  ] })
@@ -9228,18 +9337,18 @@ function LeaderboardAllTimeRow({
9228
9337
  isMe
9229
9338
  }) {
9230
9339
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
9231
- return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9232
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("span", { className: rankClass, children: [
9340
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
9341
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: rankClass, children: [
9233
9342
  "#",
9234
9343
  row.rank
9235
9344
  ] }),
9236
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
9237
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9345
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
9346
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9238
9347
  ] });
9239
9348
  }
9240
9349
 
9241
9350
  // src/components/LeaderboardEmpty.tsx
9242
- var import_jsx_runtime91 = require("react/jsx-runtime");
9351
+ var import_jsx_runtime92 = require("react/jsx-runtime");
9243
9352
  function LeaderboardEmpty({
9244
9353
  segment,
9245
9354
  lastWeek,
@@ -9248,36 +9357,36 @@ function LeaderboardEmpty({
9248
9357
  ui
9249
9358
  }) {
9250
9359
  if (segment === "alltime") {
9251
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
9252
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9253
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9360
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
9361
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9362
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9254
9363
  ] });
9255
9364
  }
9256
9365
  const fresh = lastWeek != null;
9257
9366
  const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
9258
9367
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
9259
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-lb-empty", children: [
9260
- weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-prize", children: [
9261
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9262
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9368
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty", children: [
9369
+ weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-prize", children: [
9370
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9371
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9263
9372
  ] }),
9264
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
9265
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9266
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
9267
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
9268
- onPlay && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9373
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
9374
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9375
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
9376
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
9377
+ onPlay && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9269
9378
  ] }),
9270
- fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-lb-last", children: [
9271
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9272
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9273
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9274
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9379
+ fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-last", children: [
9380
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9381
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9382
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9383
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9275
9384
  ] })
9276
9385
  ] });
9277
9386
  }
9278
9387
 
9279
9388
  // src/components/Leaderboard.tsx
9280
- var import_jsx_runtime92 = require("react/jsx-runtime");
9389
+ var import_jsx_runtime93 = require("react/jsx-runtime");
9281
9390
  function Leaderboard({
9282
9391
  data,
9283
9392
  ui,
@@ -9287,9 +9396,9 @@ function Leaderboard({
9287
9396
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
9288
9397
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
9289
9398
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
9290
- return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb2", children: [
9291
- /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-seg", children: [
9292
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9399
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-lb2", children: [
9400
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-seg", children: [
9401
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9293
9402
  "button",
9294
9403
  {
9295
9404
  type: "button",
@@ -9299,7 +9408,7 @@ function Leaderboard({
9299
9408
  children: ui.leaderboardThisWeek
9300
9409
  }
9301
9410
  ),
9302
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9411
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9303
9412
  "button",
9304
9413
  {
9305
9414
  type: "button",
@@ -9310,7 +9419,7 @@ function Leaderboard({
9310
9419
  }
9311
9420
  )
9312
9421
  ] }),
9313
- isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9422
+ isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9314
9423
  LeaderboardEmpty,
9315
9424
  {
9316
9425
  segment,
@@ -9319,15 +9428,15 @@ function Leaderboard({
9319
9428
  onPlay,
9320
9429
  ui
9321
9430
  }
9322
- ) : /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment, { children: [
9323
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9431
+ ) : /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment, { children: [
9432
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9324
9433
  LeaderboardWeeklyRow,
9325
9434
  {
9326
9435
  row,
9327
9436
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
9328
9437
  },
9329
9438
  row.operatorUserId
9330
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9439
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9331
9440
  LeaderboardAllTimeRow,
9332
9441
  {
9333
9442
  row,
@@ -9335,18 +9444,18 @@ function Leaderboard({
9335
9444
  },
9336
9445
  row.operatorUserId
9337
9446
  )) }),
9338
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9339
- myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb2-rows", children: [
9340
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
9341
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9447
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9448
+ myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-lb2-rows", children: [
9449
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
9450
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9342
9451
  ] })),
9343
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
9452
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
9344
9453
  ] })
9345
9454
  ] });
9346
9455
  }
9347
9456
 
9348
9457
  // src/components/LeaderboardPanel.tsx
9349
- var import_jsx_runtime93 = require("react/jsx-runtime");
9458
+ var import_jsx_runtime94 = require("react/jsx-runtime");
9350
9459
  var EMPTY_PAYLOAD = {
9351
9460
  week: "",
9352
9461
  weeklyTop: [],
@@ -9357,19 +9466,19 @@ var EMPTY_PAYLOAD = {
9357
9466
  lastWeek: null
9358
9467
  };
9359
9468
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
9360
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(GamesLoginWall, { ui });
9361
- if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-mon-list" });
9362
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
9469
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(GamesLoginWall, { ui });
9470
+ if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "ss-w-mon-list" });
9471
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
9363
9472
  }
9364
9473
 
9365
9474
  // src/components/PresetSpeedDial.tsx
9366
9475
  var import_react57 = require("react");
9367
- var import_jsx_runtime94 = require("react/jsx-runtime");
9476
+ var import_jsx_runtime95 = require("react/jsx-runtime");
9368
9477
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
9369
9478
  const pillsId = (0, import_react57.useId)();
9370
9479
  const tabIndex = expanded ? 0 : -1;
9371
- return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
9372
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
9480
+ return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
9481
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
9373
9482
  "button",
9374
9483
  {
9375
9484
  ref: buttonRef,
@@ -9380,20 +9489,20 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
9380
9489
  "aria-label": strings.dialName,
9381
9490
  onClick: onToggle,
9382
9491
  children: [
9383
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(SlidersIcon, {}) }),
9384
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(CloseIcon, {}) }),
9385
- showDot && !expanded ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
9492
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SlidersIcon, {}) }),
9493
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(CloseIcon, {}) }),
9494
+ showDot && !expanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
9386
9495
  ]
9387
9496
  }
9388
9497
  ),
9389
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
9390
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
9391
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(SlidersIcon, {}),
9392
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
9498
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
9499
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
9500
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SlidersIcon, {}),
9501
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
9393
9502
  ] }),
9394
- /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
9395
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(ComboIcon, {}),
9396
- /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
9503
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
9504
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(ComboIcon, {}),
9505
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
9397
9506
  ] })
9398
9507
  ] })
9399
9508
  ] });
@@ -9401,7 +9510,7 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
9401
9510
 
9402
9511
  // src/components/PresetTools.tsx
9403
9512
  var import_react58 = require("react");
9404
- var import_jsx_runtime95 = require("react/jsx-runtime");
9513
+ var import_jsx_runtime96 = require("react/jsx-runtime");
9405
9514
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
9406
9515
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
9407
9516
  const dialogRef = (0, import_react58.useRef)(null);
@@ -9439,79 +9548,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
9439
9548
  first.focus();
9440
9549
  }
9441
9550
  };
9442
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
9443
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "ss-w-tool-head", children: [
9444
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
9445
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(CloseIcon, {}) })
9551
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
9552
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-head", children: [
9553
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
9554
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(CloseIcon, {}) })
9446
9555
  ] }),
9447
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "ss-w-tool-body", children }),
9448
- footer ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "ss-w-tool-foot", children: footer }) : null
9556
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-body", children }),
9557
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-foot", children: footer }) : null
9449
9558
  ] }) });
9450
9559
  }
9451
9560
  function fillTemplate(template, slots) {
9452
9561
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
9453
9562
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
9454
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_react58.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
9563
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_react58.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
9455
9564
  });
9456
9565
  }
9457
9566
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
9458
9567
  const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
9459
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "ss-w-tool-num", children: [
9460
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
9461
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
9568
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-num", children: [
9569
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
9570
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
9462
9571
  const c = choices2[Number(e.target.value)];
9463
9572
  if (c) onChoose(c.value);
9464
- }, children: choices2.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
9573
+ }, children: choices2.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
9465
9574
  ] });
9466
9575
  }
9467
9576
  function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
9468
9577
  const sizeText = sizeLabels[currentIdx] ?? "";
9469
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "ss-w-tool-num", children: [
9470
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
9471
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("option", { value: String(i), children: opt }, i)) })
9578
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-num", children: [
9579
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
9580
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("option", { value: String(i), children: opt }, i)) })
9472
9581
  ] });
9473
9582
  }
9474
9583
  function SendButton({ label, display, disabled, onClick }) {
9475
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
9584
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
9476
9585
  }
9477
9586
  function PickList({ picks, formatKickoff }) {
9478
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("li", { className: "ss-w-tool-pick", children: [
9479
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "ss-w-tool-pick-match", children: [
9587
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("li", { className: "ss-w-tool-pick", children: [
9588
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-pick-match", children: [
9480
9589
  p.homeTeamName,
9481
9590
  " \u2013 ",
9482
9591
  p.awayTeamName
9483
9592
  ] }),
9484
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "ss-w-tool-pick-sel", children: [
9593
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-pick-sel", children: [
9485
9594
  p.marketLabel,
9486
9595
  ": ",
9487
9596
  p.selectionLabel,
9488
9597
  p.line ? ` ${p.line}` : ""
9489
9598
  ] }),
9490
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
9491
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
9599
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
9600
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
9492
9601
  ] }, p.matchOddsId)) });
9493
9602
  }
9494
9603
  function ComboPreview({ cell, formatKickoff }) {
9495
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_jsx_runtime95.Fragment, { children: [
9496
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(PickList, { picks: cell.combo.legs, formatKickoff }),
9497
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
9604
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
9605
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(PickList, { picks: cell.combo.legs, formatKickoff }),
9606
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
9498
9607
  ] });
9499
9608
  }
9500
9609
  function Unavailable({ text }) {
9501
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "ss-w-tool-unavailable", children: text });
9610
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-tool-unavailable", children: text });
9502
9611
  }
9503
9612
  function AskRow({ icon, ask, ready, send }) {
9504
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
9505
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
9506
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "ss-w-tool-main", children: [
9507
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "ss-w-tool-ask", children: ask }),
9508
- ready ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-ready", children: ready }) : null
9613
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
9614
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
9615
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-main", children: [
9616
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-tool-ask", children: ask }),
9617
+ ready ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-ready", children: ready }) : null
9509
9618
  ] }),
9510
9619
  send
9511
9620
  ] });
9512
9621
  }
9513
9622
  function RoundSend({ label, display, disabled, onClick }) {
9514
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SendIcon, {}) });
9623
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(SendIcon, {}) });
9515
9624
  }
9516
9625
  var BIG_COMBO = { total: 50, legs: 6 };
9517
9626
  function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
@@ -9577,77 +9686,77 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
9577
9686
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
9578
9687
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
9579
9688
  const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
9580
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
9581
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
9689
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
9690
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
9582
9691
  AskRow,
9583
9692
  {
9584
9693
  icon: "\u{1F3AF}",
9585
9694
  ask: fillTemplate(strings.maxPriceRow, {
9586
9695
  count: String(count),
9587
- price: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
9696
+ price: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
9588
9697
  }),
9589
9698
  ready: singlesReady(maxCell),
9590
- send: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
9699
+ send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
9591
9700
  if (maxCell) onSend(maxPriceAsk(maxCell, strings));
9592
9701
  } })
9593
9702
  }
9594
9703
  ),
9595
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
9704
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
9596
9705
  AskRow,
9597
9706
  {
9598
9707
  icon: "\u{1F4C8}",
9599
9708
  ask: fillTemplate(strings.minPriceRow, {
9600
9709
  count: String(count),
9601
- price: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
9710
+ price: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
9602
9711
  }),
9603
9712
  ready: singlesReady(minCell),
9604
- send: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
9713
+ send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
9605
9714
  if (minCell) onSend(minPriceAsk(minCell, strings));
9606
9715
  } })
9607
9716
  }
9608
9717
  ),
9609
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
9718
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
9610
9719
  AskRow,
9611
9720
  {
9612
9721
  icon: "\u2728",
9613
9722
  ask: fillTemplate(strings.comboRow, {
9614
- legs: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9615
- total: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9723
+ legs: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9724
+ total: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9616
9725
  }),
9617
9726
  ready: comboReady(comboCell),
9618
- send: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9727
+ send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9619
9728
  if (comboCell) onSend(comboAsk(comboCell, strings));
9620
9729
  } })
9621
9730
  }
9622
9731
  ),
9623
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
9732
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
9624
9733
  AskRow,
9625
9734
  {
9626
9735
  icon: "\u{1F3C6}",
9627
9736
  ask: fillTemplate(strings.bigComboRow, {
9628
- legs: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9629
- total: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9737
+ legs: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9738
+ total: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9630
9739
  }),
9631
9740
  ready: comboReady(bigCell),
9632
- send: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9741
+ send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9633
9742
  if (bigCell) onSend(comboAsk(bigCell, strings));
9634
9743
  } })
9635
9744
  }
9636
9745
  ),
9637
- markets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
9746
+ markets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
9638
9747
  AskRow,
9639
9748
  {
9640
9749
  icon: "\u26BD",
9641
9750
  ask: fillTemplate(strings.marketRow, {
9642
- market: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9751
+ market: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9643
9752
  }),
9644
9753
  ready: marketCell ? strings.readyCount(marketCell.count) : null,
9645
- send: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9754
+ send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9646
9755
  if (marketCell) onSend(marketAsk(marketCell, strings));
9647
9756
  } })
9648
9757
  }
9649
9758
  ),
9650
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9759
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9651
9760
  ] });
9652
9761
  }
9653
9762
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
@@ -9671,24 +9780,24 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
9671
9780
  const d = strings.comboDisplay(nextLegs, nextTotal);
9672
9781
  setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
9673
9782
  };
9674
- const footer = /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9783
+ const footer = /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9675
9784
  if (cell) onSend(comboAsk(cell, strings));
9676
9785
  } });
9677
- return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9678
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9679
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9680
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
9786
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9787
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9788
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9789
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
9681
9790
  ] }),
9682
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9683
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9684
- /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { className: "ss-w-tool-stepper", children: [
9685
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9686
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-tool-count", children: legs }),
9687
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9791
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9792
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9793
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-stepper", children: [
9794
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9795
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-count", children: legs }),
9796
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9688
9797
  ] })
9689
9798
  ] }),
9690
- cell ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Unavailable, { text: strings.unavailable }),
9691
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9799
+ cell ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Unavailable, { text: strings.unavailable }),
9800
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9692
9801
  ] });
9693
9802
  }
9694
9803
 
@@ -9790,7 +9899,7 @@ function markToolSeen() {
9790
9899
  }
9791
9900
 
9792
9901
  // src/components/ChatPanel.tsx
9793
- var import_jsx_runtime96 = require("react/jsx-runtime");
9902
+ var import_jsx_runtime97 = require("react/jsx-runtime");
9794
9903
  var FULLSCREEN_QUERY = "(max-width: 639px)";
9795
9904
  function useIsModal() {
9796
9905
  const [modal, setModal] = (0, import_react60.useState)(false);
@@ -9893,8 +10002,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9893
10002
  focusAfterCloseRef.current = "composer";
9894
10003
  setTool(null);
9895
10004
  }, [tool, onChatTab, presetGrid]);
9896
- return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9897
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10005
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
10006
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9898
10007
  ChatHeader,
9899
10008
  {
9900
10009
  onClose: close,
@@ -9907,7 +10016,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9907
10016
  moreOptionsLabel: ui.moreOptions
9908
10017
  }
9909
10018
  ),
9910
- monitor && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10019
+ monitor && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9911
10020
  TabBar,
9912
10021
  {
9913
10022
  monitor,
@@ -9919,9 +10028,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9919
10028
  gamesEnabled: gamesResult?.enabled ?? false
9920
10029
  }
9921
10030
  ),
9922
- /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9923
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9924
- showDial ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10031
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
10032
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
10033
+ showDial ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9925
10034
  PresetSpeedDial,
9926
10035
  {
9927
10036
  expanded: dial.expanded,
@@ -9933,12 +10042,12 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9933
10042
  buttonRef: dialButtonRef
9934
10043
  }
9935
10044
  ) : null,
9936
- tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
10045
+ tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
9937
10046
  ] }),
9938
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(TodayPanel, { discovery, ui, monitor }),
9939
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
9940
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(OddsPanel, { monitor, ui, slip }),
9941
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10047
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(TodayPanel, { discovery, ui, monitor }),
10048
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
10049
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(OddsPanel, { monitor, ui, slip }),
10050
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9942
10051
  GamesPanel,
9943
10052
  {
9944
10053
  loggedIn: !!loggedIn,
@@ -9952,7 +10061,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9952
10061
  }
9953
10062
  }
9954
10063
  ),
9955
- monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10064
+ monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9956
10065
  LeaderboardPanel,
9957
10066
  {
9958
10067
  loggedIn: !!loggedIn,
@@ -9962,9 +10071,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9962
10071
  ui
9963
10072
  }
9964
10073
  ),
9965
- (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
9966
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
9967
- paused ? null : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
10074
+ (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(import_jsx_runtime97.Fragment, { children: [
10075
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
10076
+ paused ? null : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
9968
10077
  ChatInput,
9969
10078
  {
9970
10079
  ref: inputRef,
@@ -9983,9 +10092,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9983
10092
  }
9984
10093
 
9985
10094
  // src/components/HostEventsProvider.tsx
9986
- var import_jsx_runtime97 = require("react/jsx-runtime");
10095
+ var import_jsx_runtime98 = require("react/jsx-runtime");
9987
10096
  function HostEventsProvider({ value, children }) {
9988
- return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(SlipStateContext.Provider, { value: value.slipState, children });
10097
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(SlipStateContext.Provider, { value: value.slipState, children });
9989
10098
  }
9990
10099
 
9991
10100
  // src/styles/css.generated.ts
@@ -11220,6 +11329,24 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
11220
11329
  .ss-w-today-tile-star:disabled { cursor: default; opacity: .4; }
11221
11330
  .ss-w-today-tile-star svg { width: 18px; height: 18px; }
11222
11331
 
11332
+ /* Capped row groups (variant B of u521): one league's section-header plus up to
11333
+ ROW_CAP_PER_LEAGUE inline fixture rows, used in place of a tile when the section row budget
11334
+ allows it. Mirrors LeagueTile's button-body + sibling-star-button shape. */
11335
+ .ss-w-today-rowsection { display: flex; flex-direction: column; gap: 12px; }
11336
+ .ss-w-today-rowgroup { display: flex; flex-direction: column; }
11337
+ .ss-w-today-rowgroup-head { display: flex; align-items: center; gap: 4px; }
11338
+ .ss-w-today-rowgroup-head-body { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; padding: 2px; background: none; border: none; font: inherit; color: var(--ss-w-ink); cursor: pointer; text-align: left; }
11339
+ .ss-w-today-rowgroup-head-body:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
11340
+ .ss-w-today-rowgroup-name { font-size: 11px; font-weight: 800; letter-spacing: .02em; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
11341
+ .ss-w-today-rowgroup-star { flex: none; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; background: none; border: none; border-radius: 8px; color: var(--ss-w-faint); cursor: pointer; }
11342
+ .ss-w-today-rowgroup-star:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
11343
+ .ss-w-today-rowgroup-star[aria-pressed="true"] { color: var(--ss-w-accent); }
11344
+ .ss-w-today-rowgroup-star:disabled { cursor: default; opacity: .4; }
11345
+ .ss-w-today-rowgroup-star svg { width: 16px; height: 16px; }
11346
+ .ss-w-today-rowgroup-rows { display: flex; flex-direction: column; }
11347
+ .ss-w-today-rowgroup-seeall { align-self: flex-start; background: none; border: none; font: inherit; font-size: 11px; font-weight: 700; color: var(--ss-w-faint); cursor: pointer; padding: 4px 2px 0; }
11348
+ .ss-w-today-rowgroup-seeall:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
11349
+
11223
11350
  /* League detail (Task 6): the drill-in view opened from a tile. Its header star is always
11224
11351
  enabled (spec \xA73/\xA77's one exception to the tile rule), so it carries no :disabled styling. */
11225
11352
  .ss-w-today-detail { position: relative; display: flex; flex-direction: column; gap: 10px; }
@@ -11726,7 +11853,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
11726
11853
  `;
11727
11854
 
11728
11855
  // src/StatsWidget.tsx
11729
- var import_jsx_runtime98 = require("react/jsx-runtime");
11856
+ var import_jsx_runtime99 = require("react/jsx-runtime");
11730
11857
  function buildClient(props) {
11731
11858
  try {
11732
11859
  if ("client" in props && props.client) {
@@ -11945,7 +12072,7 @@ function StatsWidget(props) {
11945
12072
  }, [built, ui.injectStyles]);
11946
12073
  if (!built) return null;
11947
12074
  const attrs = themeAttrs(ui);
11948
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ (0, import_jsx_runtime98.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_runtime98.jsx)(
12075
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ (0, import_jsx_runtime99.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_runtime99.jsx)(
11949
12076
  ChatPanel,
11950
12077
  {
11951
12078
  controller,
@@ -11960,7 +12087,7 @@ function StatsWidget(props) {
11960
12087
  conversation: built?.conversation ?? null,
11961
12088
  presetGrid
11962
12089
  }
11963
- ) : /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
12090
+ ) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
11964
12091
  ChatFab,
11965
12092
  {
11966
12093
  label: ui.launcherLabel,