@wral/hsot-data 0.5.0 → 0.6.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.
@@ -1,15 +1,15 @@
1
- const J = globalThis, pe = J.ShadowRoot && (J.ShadyCSS === void 0 || J.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, me = /* @__PURE__ */ Symbol(), _e = /* @__PURE__ */ new WeakMap();
1
+ const J = globalThis, me = J.ShadowRoot && (J.ShadyCSS === void 0 || J.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, ue = /* @__PURE__ */ Symbol(), Ae = /* @__PURE__ */ new WeakMap();
2
2
  let qe = class {
3
3
  constructor(e, t, s) {
4
- if (this._$cssResult$ = !0, s !== me) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
4
+ if (this._$cssResult$ = !0, s !== ue) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
5
5
  this.cssText = e, this.t = t;
6
6
  }
7
7
  get styleSheet() {
8
8
  let e = this.o;
9
9
  const t = this.t;
10
- if (pe && e === void 0) {
10
+ if (me && e === void 0) {
11
11
  const s = t !== void 0 && t.length === 1;
12
- s && (e = _e.get(t)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), s && _e.set(t, e));
12
+ s && (e = Ae.get(t)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), s && Ae.set(t, e));
13
13
  }
14
14
  return e;
15
15
  }
@@ -17,25 +17,25 @@ let qe = class {
17
17
  return this.cssText;
18
18
  }
19
19
  };
20
- const kt = (a) => new qe(typeof a == "string" ? a : a + "", void 0, me), y = (a, ...e) => {
20
+ const kt = (a) => new qe(typeof a == "string" ? a : a + "", void 0, ue), y = (a, ...e) => {
21
21
  const t = a.length === 1 ? a[0] : e.reduce((s, r, o) => s + ((n) => {
22
22
  if (n._$cssResult$ === !0) return n.cssText;
23
23
  if (typeof n == "number") return n;
24
24
  throw Error("Value passed to 'css' function must be a 'css' function result: " + n + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
25
25
  })(r) + a[o + 1], a[0]);
26
- return new qe(t, a, me);
26
+ return new qe(t, a, ue);
27
27
  }, St = (a, e) => {
28
- if (pe) a.adoptedStyleSheets = e.map((t) => t instanceof CSSStyleSheet ? t : t.styleSheet);
28
+ if (me) a.adoptedStyleSheets = e.map((t) => t instanceof CSSStyleSheet ? t : t.styleSheet);
29
29
  else for (const t of e) {
30
30
  const s = document.createElement("style"), r = J.litNonce;
31
31
  r !== void 0 && s.setAttribute("nonce", r), s.textContent = t.cssText, a.appendChild(s);
32
32
  }
33
- }, Te = pe ? (a) => a : (a) => a instanceof CSSStyleSheet ? ((e) => {
33
+ }, Te = me ? (a) => a : (a) => a instanceof CSSStyleSheet ? ((e) => {
34
34
  let t = "";
35
35
  for (const s of e.cssRules) t += s.cssText;
36
36
  return kt(t);
37
37
  })(a) : a;
38
- const { is: _t, defineProperty: Tt, getOwnPropertyDescriptor: At, getOwnPropertyNames: It, getOwnPropertySymbols: Ct, getPrototypeOf: Et } = Object, re = globalThis, Ae = re.trustedTypes, Pt = Ae ? Ae.emptyScript : "", Bt = re.reactiveElementPolyfillSupport, G = (a, e) => a, he = { toAttribute(a, e) {
38
+ const { is: _t, defineProperty: At, getOwnPropertyDescriptor: Tt, getOwnPropertyNames: It, getOwnPropertySymbols: Ct, getPrototypeOf: Et } = Object, re = globalThis, Ie = re.trustedTypes, Pt = Ie ? Ie.emptyScript : "", Bt = re.reactiveElementPolyfillSupport, G = (a, e) => a, he = { toAttribute(a, e) {
39
39
  switch (e) {
40
40
  case Boolean:
41
41
  a = a ? Pt : null;
@@ -63,7 +63,7 @@ const { is: _t, defineProperty: Tt, getOwnPropertyDescriptor: At, getOwnProperty
63
63
  }
64
64
  }
65
65
  return t;
66
- } }, We = (a, e) => !_t(a, e), Ie = { attribute: !0, type: String, converter: he, reflect: !1, useDefault: !1, hasChanged: We };
66
+ } }, We = (a, e) => !_t(a, e), Ce = { attribute: !0, type: String, converter: he, reflect: !1, useDefault: !1, hasChanged: We };
67
67
  Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), re.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
68
68
  let R = class extends HTMLElement {
69
69
  static addInitializer(e) {
@@ -72,14 +72,14 @@ let R = class extends HTMLElement {
72
72
  static get observedAttributes() {
73
73
  return this.finalize(), this._$Eh && [...this._$Eh.keys()];
74
74
  }
75
- static createProperty(e, t = Ie) {
75
+ static createProperty(e, t = Ce) {
76
76
  if (t.state && (t.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(e) && ((t = Object.create(t)).wrapped = !0), this.elementProperties.set(e, t), !t.noAccessor) {
77
77
  const s = /* @__PURE__ */ Symbol(), r = this.getPropertyDescriptor(e, s, t);
78
- r !== void 0 && Tt(this.prototype, e, r);
78
+ r !== void 0 && At(this.prototype, e, r);
79
79
  }
80
80
  }
81
81
  static getPropertyDescriptor(e, t, s) {
82
- const { get: r, set: o } = At(this.prototype, e) ?? { get() {
82
+ const { get: r, set: o } = Tt(this.prototype, e) ?? { get() {
83
83
  return this[t];
84
84
  }, set(n) {
85
85
  this[t] = n;
@@ -90,7 +90,7 @@ let R = class extends HTMLElement {
90
90
  }, configurable: !0, enumerable: !0 };
91
91
  }
92
92
  static getPropertyOptions(e) {
93
- return this.elementProperties.get(e) ?? Ie;
93
+ return this.elementProperties.get(e) ?? Ce;
94
94
  }
95
95
  static _$Ei() {
96
96
  if (this.hasOwnProperty(G("elementProperties"))) return;
@@ -247,12 +247,12 @@ let R = class extends HTMLElement {
247
247
  }
248
248
  };
249
249
  R.elementStyles = [], R.shadowRootOptions = { mode: "open" }, R[G("elementProperties")] = /* @__PURE__ */ new Map(), R[G("finalized")] = /* @__PURE__ */ new Map(), Bt?.({ ReactiveElement: R }), (re.reactiveElementVersions ??= []).push("2.1.2");
250
- const ue = globalThis, Ce = (a) => a, X = ue.trustedTypes, Ee = X ? X.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, Ve = "$lit$", _ = `lit$${Math.random().toFixed(9).slice(2)}$`, Ye = "?" + _, Dt = `<${Ye}>`, C = document, j = () => C.createComment(""), q = (a) => a === null || typeof a != "object" && typeof a != "function", fe = Array.isArray, Rt = (a) => fe(a) || typeof a?.[Symbol.iterator] == "function", ce = `[
251
- \f\r]`, H = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Pe = /-->/g, Be = />/g, A = RegExp(`>|${ce}(?:([^\\s"'>=/]+)(${ce}*=${ce}*(?:[^
252
- \f\r"'\`<>=]|("|')|))|$)`, "g"), De = /'/g, Re = /"/g, Ke = /^(?:script|style|textarea|title)$/i, Qe = (a) => (e, ...t) => ({ _$litType$: a, strings: e, values: t }), l = Qe(1), ze = Qe(2), F = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Ne = /* @__PURE__ */ new WeakMap(), I = C.createTreeWalker(C, 129);
250
+ const fe = globalThis, Ee = (a) => a, X = fe.trustedTypes, Pe = X ? X.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, Ve = "$lit$", _ = `lit$${Math.random().toFixed(9).slice(2)}$`, Ke = "?" + _, Dt = `<${Ke}>`, C = document, j = () => C.createComment(""), q = (a) => a === null || typeof a != "object" && typeof a != "function", ge = Array.isArray, Rt = (a) => ge(a) || typeof a?.[Symbol.iterator] == "function", ce = `[
251
+ \f\r]`, H = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Be = /-->/g, De = />/g, T = RegExp(`>|${ce}(?:([^\\s"'>=/]+)(${ce}*=${ce}*(?:[^
252
+ \f\r"'\`<>=]|("|')|))|$)`, "g"), Re = /'/g, ze = /"/g, Ye = /^(?:script|style|textarea|title)$/i, Qe = (a) => (e, ...t) => ({ _$litType$: a, strings: e, values: t }), l = Qe(1), Ne = Qe(2), F = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Fe = /* @__PURE__ */ new WeakMap(), I = C.createTreeWalker(C, 129);
253
253
  function Ze(a, e) {
254
- if (!fe(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
- return Ee !== void 0 ? Ee.createHTML(e) : e;
254
+ if (!ge(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
+ return Pe !== void 0 ? Pe.createHTML(e) : e;
256
256
  }
257
257
  const zt = (a, e) => {
258
258
  const t = a.length - 1, s = [];
@@ -260,8 +260,8 @@ const zt = (a, e) => {
260
260
  for (let i = 0; i < t; i++) {
261
261
  const c = a[i];
262
262
  let p, d, h = -1, u = 0;
263
- for (; u < c.length && (n.lastIndex = u, d = n.exec(c), d !== null); ) u = n.lastIndex, n === H ? d[1] === "!--" ? n = Pe : d[1] !== void 0 ? n = Be : d[2] !== void 0 ? (Ke.test(d[2]) && (r = RegExp("</" + d[2], "g")), n = A) : d[3] !== void 0 && (n = A) : n === A ? d[0] === ">" ? (n = r ?? H, h = -1) : d[1] === void 0 ? h = -2 : (h = n.lastIndex - d[2].length, p = d[1], n = d[3] === void 0 ? A : d[3] === '"' ? Re : De) : n === Re || n === De ? n = A : n === Pe || n === Be ? n = H : (n = A, r = void 0);
264
- const f = n === A && a[i + 1].startsWith("/>") ? " " : "";
263
+ for (; u < c.length && (n.lastIndex = u, d = n.exec(c), d !== null); ) u = n.lastIndex, n === H ? d[1] === "!--" ? n = Be : d[1] !== void 0 ? n = De : d[2] !== void 0 ? (Ye.test(d[2]) && (r = RegExp("</" + d[2], "g")), n = T) : d[3] !== void 0 && (n = T) : n === T ? d[0] === ">" ? (n = r ?? H, h = -1) : d[1] === void 0 ? h = -2 : (h = n.lastIndex - d[2].length, p = d[1], n = d[3] === void 0 ? T : d[3] === '"' ? ze : Re) : n === ze || n === Re ? n = T : n === Be || n === De ? n = H : (n = T, r = void 0);
264
+ const f = n === T && a[i + 1].startsWith("/>") ? " " : "";
265
265
  o += n === H ? c + Dt : h >= 0 ? (s.push(p), c.slice(0, h) + Ve + c.slice(h) + _ + f) : c + _ + (h === -2 ? i : f);
266
266
  }
267
267
  return [Ze(a, o + (a[t] || "<?>") + (e === 2 ? "</svg>" : e === 3 ? "</math>" : "")), s];
@@ -279,10 +279,10 @@ class W {
279
279
  for (; (r = I.nextNode()) !== null && c.length < i; ) {
280
280
  if (r.nodeType === 1) {
281
281
  if (r.hasAttributes()) for (const h of r.getAttributeNames()) if (h.endsWith(Ve)) {
282
- const u = d[n++], f = r.getAttribute(h).split(_), v = /([.?@])?(.*)/.exec(u);
283
- c.push({ type: 1, index: o, name: v[2], strings: f, ctor: v[1] === "." ? Ft : v[1] === "?" ? Mt : v[1] === "@" ? Ot : oe }), r.removeAttribute(h);
282
+ const u = d[n++], f = r.getAttribute(h).split(_), g = /([.?@])?(.*)/.exec(u);
283
+ c.push({ type: 1, index: o, name: g[2], strings: f, ctor: g[1] === "." ? Ft : g[1] === "?" ? Mt : g[1] === "@" ? Ot : oe }), r.removeAttribute(h);
284
284
  } else h.startsWith(_) && (c.push({ type: 6, index: o }), r.removeAttribute(h));
285
- if (Ke.test(r.tagName)) {
285
+ if (Ye.test(r.tagName)) {
286
286
  const h = r.textContent.split(_), u = h.length - 1;
287
287
  if (u > 0) {
288
288
  r.textContent = X ? X.emptyScript : "";
@@ -290,7 +290,7 @@ class W {
290
290
  r.append(h[u], j());
291
291
  }
292
292
  }
293
- } else if (r.nodeType === 8) if (r.data === Ye) c.push({ type: 2, index: o });
293
+ } else if (r.nodeType === 8) if (r.data === Ke) c.push({ type: 2, index: o });
294
294
  else {
295
295
  let h = -1;
296
296
  for (; (h = r.data.indexOf(_, h + 1)) !== -1; ) c.push({ type: 7, index: o }), h += _.length - 1;
@@ -326,7 +326,7 @@ class Nt {
326
326
  for (; c !== void 0; ) {
327
327
  if (n === c.index) {
328
328
  let p;
329
- c.type === 2 ? p = new Y(o, o.nextSibling, this, e) : c.type === 1 ? p = new c.ctor(o, c.name, c.strings, this, e) : c.type === 6 && (p = new Ut(o, this, e)), this._$AV.push(p), c = s[++i];
329
+ c.type === 2 ? p = new K(o, o.nextSibling, this, e) : c.type === 1 ? p = new c.ctor(o, c.name, c.strings, this, e) : c.type === 6 && (p = new Ut(o, this, e)), this._$AV.push(p), c = s[++i];
330
330
  }
331
331
  n !== c?.index && (o = I.nextNode(), n++);
332
332
  }
@@ -337,7 +337,7 @@ class Nt {
337
337
  for (const s of this._$AV) s !== void 0 && (s.strings !== void 0 ? (s._$AI(e, s, t), t += s.strings.length - 2) : s._$AI(e[t])), t++;
338
338
  }
339
339
  }
340
- class Y {
340
+ class K {
341
341
  get _$AU() {
342
342
  return this._$AM?._$AU ?? this._$Cv;
343
343
  }
@@ -376,20 +376,20 @@ class Y {
376
376
  }
377
377
  }
378
378
  _$AC(e) {
379
- let t = Ne.get(e.strings);
380
- return t === void 0 && Ne.set(e.strings, t = new W(e)), t;
379
+ let t = Fe.get(e.strings);
380
+ return t === void 0 && Fe.set(e.strings, t = new W(e)), t;
381
381
  }
382
382
  k(e) {
383
- fe(this._$AH) || (this._$AH = [], this._$AR());
383
+ ge(this._$AH) || (this._$AH = [], this._$AR());
384
384
  const t = this._$AH;
385
385
  let s, r = 0;
386
- for (const o of e) r === t.length ? t.push(s = new Y(this.O(j()), this.O(j()), this, this.options)) : s = t[r], s._$AI(o), r++;
386
+ for (const o of e) r === t.length ? t.push(s = new K(this.O(j()), this.O(j()), this, this.options)) : s = t[r], s._$AI(o), r++;
387
387
  r < t.length && (this._$AR(s && s._$AB.nextSibling, r), t.length = r);
388
388
  }
389
389
  _$AR(e = this._$AA.nextSibling, t) {
390
390
  for (this._$AP?.(!1, !0, t); e !== this._$AB; ) {
391
- const s = Ce(e).nextSibling;
392
- Ce(e).remove(), e = s;
391
+ const s = Ee(e).nextSibling;
392
+ Ee(e).remove(), e = s;
393
393
  }
394
394
  }
395
395
  setConnected(e) {
@@ -461,18 +461,18 @@ class Ut {
461
461
  M(this, e);
462
462
  }
463
463
  }
464
- const Ht = ue.litHtmlPolyfillSupport;
465
- Ht?.(W, Y), (ue.litHtmlVersions ??= []).push("3.3.3");
464
+ const Ht = fe.litHtmlPolyfillSupport;
465
+ Ht?.(W, K), (fe.litHtmlVersions ??= []).push("3.3.3");
466
466
  const Lt = (a, e, t) => {
467
467
  const s = t?.renderBefore ?? e;
468
468
  let r = s._$litPart$;
469
469
  if (r === void 0) {
470
470
  const o = t?.renderBefore ?? null;
471
- s._$litPart$ = r = new Y(e.insertBefore(j(), o), o, void 0, t ?? {});
471
+ s._$litPart$ = r = new K(e.insertBefore(j(), o), o, void 0, t ?? {});
472
472
  }
473
473
  return r._$AI(a), r;
474
474
  };
475
- const ge = globalThis;
475
+ const ve = globalThis;
476
476
  class N extends R {
477
477
  constructor() {
478
478
  super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
@@ -495,10 +495,10 @@ class N extends R {
495
495
  return F;
496
496
  }
497
497
  }
498
- N._$litElement$ = !0, N.finalized = !0, ge.litElementHydrateSupport?.({ LitElement: N });
499
- const Gt = ge.litElementPolyfillSupport;
498
+ N._$litElement$ = !0, N.finalized = !0, ve.litElementHydrateSupport?.({ LitElement: N });
499
+ const Gt = ve.litElementPolyfillSupport;
500
500
  Gt?.({ LitElement: N });
501
- (ge.litElementVersions ??= []).push("4.2.2");
501
+ (ve.litElementVersions ??= []).push("4.2.2");
502
502
  const jt = 50;
503
503
  function qt(a = {}) {
504
504
  const e = Object.entries(a).filter(([, s]) => s != null && s !== "");
@@ -553,7 +553,7 @@ const L = {
553
553
  // reportHref() drops the parameter when there is none.
554
554
  report: "/report-a-score/?game={id}"
555
555
  };
556
- function g(a, e) {
556
+ function v(a, e) {
557
557
  return String(a).replace(/\{(\w+)\}/g, (t, s) => e[s] !== void 0 && e[s] !== null ? String(e[s]) : t);
558
558
  }
559
559
  function O(a) {
@@ -565,7 +565,7 @@ function O(a) {
565
565
  };
566
566
  }
567
567
  function Je(a, e = "") {
568
- const t = g(a.report || L.report, { id: e || "" });
568
+ const t = v(a.report || L.report, { id: e || "" });
569
569
  return e ? t : t.replace(/([?&])game=(?=&|$)/, "$1").replace(/[?&]$/, "").replace(/\?&/, "?");
570
570
  }
571
571
  const k = (a) => a ? a.charAt(0).toUpperCase() + a.slice(1) : "";
@@ -574,7 +574,7 @@ function x(a, e) {
574
574
  const [t, s, r] = String(a).split("-").map(Number);
575
575
  return !t || !s || !r ? "TBD" : new Date(t, s - 1, r).toLocaleDateString("en-US", e || { weekday: "short", month: "short", day: "numeric" });
576
576
  }
577
- function ve(a) {
577
+ function $e(a) {
578
578
  if (!a) return "";
579
579
  const [e, t] = String(a).split(":").map(Number);
580
580
  if (Number.isNaN(e)) return "";
@@ -584,24 +584,24 @@ function ve(a) {
584
584
  function Vt(a) {
585
585
  return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
586
586
  }
587
- function Yt(a) {
587
+ function Kt(a) {
588
588
  return (Array.isArray(a?.positions) ? a.positions : String(a?.position ?? "").split(/[/,]/)).map((t) => String(t ?? "").trim()).filter(Boolean).join("/");
589
589
  }
590
- function K(a = /* @__PURE__ */ new Date()) {
590
+ function Y(a = /* @__PURE__ */ new Date()) {
591
591
  const e = a.getFullYear();
592
592
  return a.getMonth() >= 6 ? `${e}-${e + 1}` : `${e - 1}-${e}`;
593
593
  }
594
- function $e(a = /* @__PURE__ */ new Date()) {
594
+ function be(a = /* @__PURE__ */ new Date()) {
595
595
  const e = (t) => String(t).padStart(2, "0");
596
596
  return `${a.getFullYear()}-${e(a.getMonth() + 1)}-${e(a.getDate())}`;
597
597
  }
598
- function Kt(a, e = $e()) {
598
+ function Yt(a, e = be()) {
599
599
  const t = [...new Set((a || []).filter(Boolean))].sort();
600
600
  if (!t.length || t.includes(e)) return e;
601
601
  const s = t.filter((r) => r < e);
602
602
  return s.length ? s[s.length - 1] : t[0];
603
603
  }
604
- function be(a) {
604
+ function ye(a) {
605
605
  return a ? (a.abbr || a.name || "?").slice(0, 4).toUpperCase() : "?";
606
606
  }
607
607
  function ee(a) {
@@ -613,7 +613,7 @@ const Qt = (a) => {
613
613
  const e = ["th", "st", "nd", "rd"], t = a % 100;
614
614
  return a + (e[(t - 20) % 10] || e[t] || e[0]);
615
615
  };
616
- function Fe(a, e) {
616
+ function de(a, e) {
617
617
  const t = (o) => {
618
618
  const n = /^\d+/.exec(String(o ?? ""));
619
619
  return n ? Number(n[0]) : null;
@@ -633,7 +633,7 @@ function et(a) {
633
633
  const e = [];
634
634
  return a.finish === "overtime" && e.push("OT"), a.finish === "shootout" && e.push("PK-SO"), a.forfeit && a.forfeit !== "none" && e.push("Forfeit"), { kind: "final", label: `Final${e.length ? ` · ${e.join(" · ")}` : ""}` };
635
635
  }
636
- return a.state === "postponed" ? { kind: "warn", label: "Postponed" } : a.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${x(a.date, { month: "short", day: "numeric" })} · ${ve(a.time)}`.replace(/ · $/, "") };
636
+ return a.state === "postponed" ? { kind: "warn", label: "Postponed" } : a.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${x(a.date, { month: "short", day: "numeric" })} · ${$e(a.time)}`.replace(/ · $/, "") };
637
637
  }
638
638
  const Zt = ["boys", "girls"];
639
639
  function tt(a, e) {
@@ -642,12 +642,12 @@ function tt(a, e) {
642
642
  function st(a, e) {
643
643
  return e ? (a || []).filter((t) => tt(t, e)) : a || [];
644
644
  }
645
- function de(a) {
645
+ function pe(a) {
646
646
  const e = new Set((a || []).map((t) => t && t.gender));
647
647
  return Zt.filter((t) => e.has(t));
648
648
  }
649
- const Jt = (a) => de(a).length === 2, Xt = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
650
- function T(a) {
649
+ const Jt = (a) => pe(a).length === 2, Xt = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
650
+ function A(a) {
651
651
  let e = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
652
652
  const t = e.indexOf("#");
653
653
  let s = "";
@@ -659,22 +659,22 @@ function at() {
659
659
  const a = globalThis.location;
660
660
  if (!a) return "";
661
661
  const e = (a.hash || "").startsWith("#/") ? a.hash : "";
662
- return T((a.pathname || "") + e);
662
+ return A((a.pathname || "") + e);
663
663
  }
664
664
  function es(a, e, t) {
665
665
  if (!t) return null;
666
- const s = T(a);
666
+ const s = A(a);
667
667
  if (!s) return null;
668
- const r = T(g(e.game, { sport: t, id: "" })), o = T(g(e.school, { id: "" }));
668
+ const r = A(v(e.game, { sport: t, id: "" })), o = A(v(e.school, { id: "" }));
669
669
  if (s === r || s.startsWith(`${r}/`) || s === o || s.startsWith(`${o}/`)) return null;
670
- const n = T(g(e.section, { sport: t, view: "" }));
670
+ const n = A(v(e.section, { sport: t, view: "" }));
671
671
  if (s === n) return "";
672
672
  if (!s.startsWith(`${n}/`)) return null;
673
673
  const i = s.slice(n.length + 1), c = i.split("/");
674
674
  return c.length > 2 || c.some((p) => !/^[a-z][a-z-]*$/.test(p)) || Xt.has(c[0]) ? null : i;
675
675
  }
676
676
  function ts(a, e, t) {
677
- const s = (o) => g(t.section, { sport: a, view: o }).replace(/([^:])\/{2,}/g, "$1/"), r = Jt(e) ? [
677
+ const s = (o) => v(t.section, { sport: a, view: o }).replace(/([^:])\/{2,}/g, "$1/"), r = Jt(e) ? [
678
678
  { label: "Boys Standings", href: s("boys/standings") },
679
679
  { label: "Girls Standings", href: s("girls/standings") }
680
680
  ] : [{ label: "Standings", href: s("standings") }];
@@ -687,9 +687,9 @@ function ts(a, e, t) {
687
687
  ];
688
688
  }
689
689
  function ss(a, e = at()) {
690
- const t = T(e);
690
+ const t = A(e);
691
691
  for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
692
- t && T(s.getAttribute("href")) === t ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
692
+ t && A(s.getAttribute("href")) === t ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
693
693
  }
694
694
  class w extends N {
695
695
  static properties = {
@@ -1059,14 +1059,14 @@ function rt(a, e) {
1059
1059
  return { team: t, rec: s, confPct: Me(s.cw, s.cl, s.ct), overallPct: Me(s.w, s.l, s.t) };
1060
1060
  }).sort((t, s) => s.confPct - t.confPct || s.overallPct - t.overallPct || s.rec.pf - s.rec.pa - (t.rec.pf - t.rec.pa));
1061
1061
  }
1062
- function ye(a, e) {
1062
+ function we(a, e) {
1063
1063
  return a.filter((t) => (t.homeTeamId === e || t.awayTeamId === e) && (t.state === "scheduled" || t.state === "live") && t.gameType !== "scrimmage").sort((t, s) => String(t.date).localeCompare(String(s.date)))[0] || null;
1064
1064
  }
1065
1065
  function Ue(a, e) {
1066
1066
  const t = a[e];
1067
1067
  return t && t.results.length ? t.results[t.results.length - 1] : null;
1068
1068
  }
1069
- function we(a, e, t, s, r) {
1069
+ function xe(a, e, t, s, r) {
1070
1070
  const o = e[t];
1071
1071
  if (!o) return null;
1072
1072
  const n = /* @__PURE__ */ new Map();
@@ -1122,7 +1122,7 @@ function le(a, e, { title: t, sub: s, teams: r }) {
1122
1122
  <div class="navrow">
1123
1123
  <slot name="nav">
1124
1124
  ${ts(e.sport, r, e.hrefs).map((c) => l`<a href=${c.href}
1125
- aria-current=${o && T(c.href) === o ? "page" : m}>${c.label}</a>`)}
1125
+ aria-current=${o && A(c.href) === o ? "page" : m}>${c.label}</a>`)}
1126
1126
  </slot>
1127
1127
  </div>
1128
1128
  </nav>` : m}
@@ -1142,24 +1142,24 @@ function P(a, e = 26) {
1142
1142
  const s = a.colorPrimary || "#030711", r = ee(s);
1143
1143
  return l`<span class="swatch" aria-hidden="true"
1144
1144
  style="width:${e}px;height:${e}px;background:${s};color:${r};font-size:${Math.max(8, e * 0.28)}px"
1145
- >${be(a)}</span>`;
1145
+ >${ye(a)}</span>`;
1146
1146
  }
1147
- function xe(a, e, t) {
1148
- const s = we(a.rankings, a.teamsById, e, a.sport, t);
1147
+ function ke(a, e, t) {
1148
+ const s = xe(a.rankings, a.teamsById, e, a.sport, t);
1149
1149
  return s ? l`<span class="rankbadge">#${s}</span>` : m;
1150
1150
  }
1151
1151
  function ae(a, e, t) {
1152
1152
  const s = E(a, e);
1153
- return s ? l`${xe(a, e, t)}<a href=${g(a.hrefs.school, { id: s.id })}>${s.name}</a>` : l`<span class="mut">TBD</span>`;
1153
+ return s ? l`${ke(a, e, t)}<a href=${v(a.hrefs.school, { id: s.id })}>${s.name}</a>` : l`<span class="mut">TBD</span>`;
1154
1154
  }
1155
- function ke(a, e, t = 5) {
1155
+ function Se(a, e, t = 5) {
1156
1156
  const s = a.records[e];
1157
1157
  if (!s || !s.results.length) return l`<span class="mut">·</span>`;
1158
1158
  const r = s.results.slice(-1 * t);
1159
1159
  return l`<span class="dots" role="img" aria-label="last ${r.length} results">
1160
1160
  ${r.map((o) => l`<a class="dot ${o.mark}"
1161
1161
  title="${o.mark} ${o.my}-${o.their} vs ${z(a, o.opp)}"
1162
- href=${g(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
1162
+ href=${v(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
1163
1163
  </span>`;
1164
1164
  }
1165
1165
  function B(a, e) {
@@ -1182,20 +1182,67 @@ function nt(a, e, t) {
1182
1182
  const s = e.homeTeamId === t ? e.awayTeamId : e.homeTeamId, r = e.homeTeamId === t ? "vs" : "at";
1183
1183
  return l`${e.state === "live" ? l`<span class="pill live">Live</span> ` : l`${x(e.date, { month: "numeric", day: "numeric" })} `}${r} ${se(a, s)}`;
1184
1184
  }
1185
- const us = ["all", "conferences"], it = "all", He = (a) => us.includes(a) ? a : it, lt = Number.MAX_SAFE_INTEGER, ct = (a, e, t) => {
1185
+ const us = "https://api.wral.com/search";
1186
+ function fs(a) {
1187
+ return a.map((e) => `uri:"${e}"`).join(" OR ");
1188
+ }
1189
+ function gs(a, e) {
1190
+ const t = String(a || us).replace(/\/+$/, ""), s = new URLSearchParams({ query: fs(e), sort: "score", lang: "en" });
1191
+ return `${t}/v1/query?${s}`;
1192
+ }
1193
+ function it(a) {
1194
+ try {
1195
+ const e = new URL(a);
1196
+ if (/(^|\.)smugmug\.com$/i.test(e.hostname)) {
1197
+ const t = e.pathname.split("/").filter(Boolean).pop() || "", s = !t || /^[ni]-[A-Za-z0-9]+$/.test(t);
1198
+ return {
1199
+ uri: a,
1200
+ title: s ? a : decodeURIComponent(t).replace(/-/g, " "),
1201
+ photos: !0
1202
+ };
1203
+ }
1204
+ } catch {
1205
+ }
1206
+ return { uri: a, title: a };
1207
+ }
1208
+ async function vs(a, e, t) {
1209
+ const r = await ((...i) => fetch(...i))(gs(a, e));
1210
+ if (!r.ok) throw new Error(`search answered ${r.status}`);
1211
+ const o = await r.json(), n = new Map((o.items || []).map((i) => [i.uri, i]));
1212
+ return e.map((i) => n.get(i) || it(i));
1213
+ }
1214
+ function $s(a) {
1215
+ try {
1216
+ const e = new URL(a);
1217
+ if (/(^|\.)smugmug\.com$/i.test(e.hostname)) return "Photos";
1218
+ const t = e.pathname.split("/").filter(Boolean)[0] || "";
1219
+ if (t === "video") return "Video";
1220
+ if (t === "news" || t === "story") return "Story";
1221
+ } catch {
1222
+ }
1223
+ return "Coverage";
1224
+ }
1225
+ function bs(a) {
1226
+ const e = /* @__PURE__ */ new Map();
1227
+ return (Array.isArray(a) ? a : []).filter((t) => /^https?:\/\//i.test(String(t || ""))).map((t) => {
1228
+ const s = $s(t), r = (e.get(s) || 0) + 1;
1229
+ return e.set(s, r), { href: t, label: r > 1 ? `${s} ${r}` : s };
1230
+ });
1231
+ }
1232
+ const ys = ["all", "conferences"], lt = "all", He = (a) => ys.includes(a) ? a : lt, ct = Number.MAX_SAFE_INTEGER, ht = (a, e, t) => {
1186
1233
  const s = a[t];
1187
1234
  return s && e[s.schoolId] || null;
1188
1235
  };
1189
- function fs(a, e) {
1236
+ function ws(a, e) {
1190
1237
  const t = (a || []).map((s) => e[s.schoolId]?.areaCode).filter(Boolean);
1191
1238
  return [...new Set(t)].sort();
1192
1239
  }
1193
- function gs(a, e, t, s) {
1194
- return e ? [a.awayTeamId, a.homeTeamId].some((r) => ct(t, s, r)?.areaCode === e) : !0;
1240
+ function xs(a, e, t, s) {
1241
+ return e ? [a.awayTeamId, a.homeTeamId].some((r) => ht(t, s, r)?.areaCode === e) : !0;
1195
1242
  }
1196
- function vs(a, e, t, s) {
1197
- const r = (i) => ct(t, s, i)?.name || "", o = (i, c) => !i - !c || Xe(i, c), n = new Map((a || []).map((i) => [i, {
1198
- rank: e(i) || lt,
1243
+ function ks(a, e, t, s) {
1244
+ const r = (i) => ht(t, s, i)?.name || "", o = (i, c) => !i - !c || Xe(i, c), n = new Map((a || []).map((i) => [i, {
1245
+ rank: e(i) || ct,
1199
1246
  away: r(i.awayTeamId),
1200
1247
  home: r(i.homeTeamId)
1201
1248
  }]));
@@ -1204,30 +1251,41 @@ function vs(a, e, t, s) {
1204
1251
  return p.rank - d.rank || o(p.away, d.away) || o(p.home, d.home) || String(i.time || "").localeCompare(String(c.time || ""));
1205
1252
  });
1206
1253
  }
1207
- function $s(a, e) {
1208
- const t = new Map((a || []).map((r) => [r, e(r) || lt])), s = (r) => r.state === "live" ? 0 : 1;
1254
+ function Ss(a, e) {
1255
+ const t = new Map((a || []).map((r) => [r, e(r) || ct])), s = (r) => r.state === "live" ? 0 : 1;
1209
1256
  return [...t.keys()].sort((r, o) => s(r) - s(o) || t.get(r) - t.get(o));
1210
1257
  }
1211
- function bs(a, e) {
1212
- return a.gameType === "conference" && a.conferenceId ? e[a.conferenceId]?.name || "Conference" : a.gameType === "playoff" ? "Playoffs" : a.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1258
+ function _s(a, e) {
1259
+ if (a.gameType === "conference" && a.conferenceId) {
1260
+ const t = e[a.conferenceId] || null;
1261
+ return { name: t?.name || "Conference", conference: t };
1262
+ }
1263
+ return a.gameType === "playoff" ? { name: "Playoffs", conference: null } : a.gameType === "scrimmage" ? { name: "Scrimmages", conference: null } : { name: "Nonconference", conference: null };
1213
1264
  }
1214
- function ys(a, e) {
1265
+ function As(a, e) {
1215
1266
  const t = /* @__PURE__ */ new Map();
1216
1267
  return (a || []).forEach((s) => {
1217
- const r = bs(s, e);
1218
- t.has(r) || t.set(r, []), t.get(r).push(s);
1219
- }), t;
1268
+ const { name: r, conference: o } = _s(s, e);
1269
+ t.has(r) || t.set(r, { name: r, conference: o, games: [] }), t.get(r).games.push(s);
1270
+ }), [...t.values()];
1220
1271
  }
1221
- const ws = y`
1272
+ const Ts = y`
1222
1273
  .toolbar.filters { gap: 0.5rem 1.1rem; }
1223
1274
  .filters [role="group"] { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; }
1224
1275
  .filters .asof { margin-right: 0.1rem; }
1225
1276
  /* A phone can't fit the label and six chips on one line; the label takes
1226
1277
  its own row so the chips stay together instead of stranding the last. */
1227
1278
  @media (max-width: 480px) { .filters .asof { flex-basis: 100%; } }
1279
+ /* Conference headings carry the standings cards' classification pills. */
1280
+ .section-title .pill { margin-left: 0.3rem; vertical-align: 0.1em; }
1281
+ /* The desk's coverage links ride in one group with the box-score link, in
1282
+ its style, so a narrow row wraps them together instead of leaving a
1283
+ lone "Story" beside the matchup and "Box score" on the next line. */
1284
+ .gamelist .links { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 0.2rem 0.6rem; }
1285
+ .gamelist .links a { font-size: 0.78rem; }
1228
1286
  `;
1229
- class ht extends w {
1230
- static styles = [...U, ws];
1287
+ class dt extends w {
1288
+ static styles = [...U, Ts];
1231
1289
  static properties = {
1232
1290
  ...w.properties,
1233
1291
  sport: { type: String },
@@ -1245,14 +1303,14 @@ class ht extends w {
1245
1303
  !this.date && e.get("date") && (this.date = e.get("date")), !this.view && e.get("view") && (this.view = e.get("view")), !this.areaCode && e.get("area") && (this.areaCode = e.get("area")), this._datePinned = !!this.date;
1246
1304
  }
1247
1305
  async fetchData(e) {
1248
- const t = this.season || K(), [s, r, o, n, i] = await Promise.all([
1306
+ const t = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1249
1307
  e.listSchools(),
1250
1308
  e.listTeams({ sport: this.sport }),
1251
1309
  e.listConferences(),
1252
1310
  e.listGames({ sport: this.sport, season: t }),
1253
1311
  e.listRankings({ sport: this.sport })
1254
1312
  ]);
1255
- return this._datePinned || (this.date = Kt(n.items.map((c) => c.date)), this._datePinned = !0), {
1313
+ return this._datePinned || (this.date = Yt(n.items.map((c) => c.date)), this._datePinned = !0), {
1256
1314
  season: t,
1257
1315
  schools: s.items,
1258
1316
  teams: r.items,
@@ -1276,15 +1334,19 @@ class ht extends w {
1276
1334
  e !== null && (this.view = e), t !== null && (this.areaCode = t);
1277
1335
  try {
1278
1336
  const s = new URL(globalThis.location.href), r = (o, n, i) => n && n !== i ? s.searchParams.set(o, n) : s.searchParams.delete(o);
1279
- r("view", He(this.view), it), r("area", this.areaCode, ""), globalThis.history?.replaceState(null, "", s);
1337
+ r("view", He(this.view), lt), r("area", this.areaCode, ""), globalThis.history?.replaceState(null, "", s);
1280
1338
  } catch {
1281
1339
  }
1282
1340
  }
1283
1341
  renderView() {
1284
- const e = this.ctx, t = b(this.data.conferences), s = [...new Set(this.data.games.map((h) => h.date).filter(Boolean))].sort(), r = He(this.view), o = fs(this.data.teams, e.schoolsById), n = o.includes(this.areaCode) ? this.areaCode : "", i = (h) => {
1285
- const u = [h.awayTeamId, h.homeTeamId].map((f) => we(e.rankings, e.teamsById, f, this.sport, h.date)).filter(Boolean);
1342
+ const e = this.ctx, t = b(this.data.conferences), s = [...new Set(this.data.games.map((h) => h.date).filter(Boolean))].sort(), r = He(this.view), o = ws(this.data.teams, e.schoolsById), n = o.includes(this.areaCode) ? this.areaCode : "", i = (h) => {
1343
+ const u = [h.awayTeamId, h.homeTeamId].map((f) => xe(e.rankings, e.teamsById, f, this.sport, h.date)).filter(Boolean);
1286
1344
  return u.length ? Math.min(...u) : null;
1287
- }, c = this.data.games.filter((h) => h.date === this.date), p = c.filter((h) => gs(h, n, e.teamsById, e.schoolsById)), d = r === "conferences" ? ys($s(p, i), t) : new Map(p.length ? [[n ? `All games · ${n}` : "All games", vs(p, i, e.teamsById, e.schoolsById)]] : []);
1345
+ }, c = this.data.games.filter((h) => h.date === this.date), p = c.filter((h) => xs(h, n, e.teamsById, e.schoolsById)), d = r === "conferences" ? As(Ss(p, i), t) : p.length ? [{
1346
+ name: n ? `All games · ${n}` : "All games",
1347
+ conference: null,
1348
+ games: ks(p, i, e.teamsById, e.schoolsById)
1349
+ }] : [];
1288
1350
  return l`
1289
1351
  ${le(this, e, {
1290
1352
  title: l`${k(this.sport)} scores &amp; schedules`,
@@ -1299,7 +1361,7 @@ class ht extends w {
1299
1361
  this.date = h.target.value;
1300
1362
  }}>
1301
1363
  ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((h) => l`<option value=${h} ?selected=${h === this.date}>
1302
- ${x(h, { weekday: "short", month: "short", day: "numeric" })}${h === $e() ? " · today" : ""}
1364
+ ${x(h, { weekday: "short", month: "short", day: "numeric" })}${h === be() ? " · today" : ""}
1303
1365
  </option>`)}
1304
1366
  </select>
1305
1367
  <button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
@@ -1331,10 +1393,10 @@ class ht extends w {
1331
1393
  ${c.length ? m : l`<p class="empty">No ${this.sport} games on this date.</p>`}
1332
1394
  ${c.length && !p.length ? l`<p class="empty">No ${this.sport} games in the ${n} area code on this date.
1333
1395
  <button class="chip" @click=${() => this.pick({ area: "" })}>Every area</button></p>` : m}
1334
- ${[...d.entries()].map(([h, u]) => l`
1335
- <div class="section-title">${h}</div>
1396
+ ${d.map(({ name: h, conference: u, games: f }) => l`
1397
+ <div class="section-title">${h}${[...u?.classifications || []].sort(de).map((g) => l`<span class="pill class">${g}</span>`)}</div>
1336
1398
  <div class="card"><ul class="gamelist">
1337
- ${u.map((f) => this.renderGame(e, f))}
1399
+ ${f.map((g) => this.renderGame(e, g))}
1338
1400
  </ul></div>
1339
1401
  `)}
1340
1402
  `)}
@@ -1343,6 +1405,10 @@ class ht extends w {
1343
1405
  // Each team's score rides in a block beside its name (reader feedback:
1344
1406
  // a lone score column on the far right read as detached from the teams).
1345
1407
  // Scheduled games carry their start time on the status pill alone.
1408
+ // The desk's coverage links (Game.coverageUrls, already on the games
1409
+ // list, so they cost no request) sit before the box score link, labelled
1410
+ // from each URL's shape (lib/search.mjs) rather than the site search the
1411
+ // box score's coverage cards query.
1346
1412
  renderGame(e, t) {
1347
1413
  const s = t.state === "final" || t.state === "live", r = (n, i, c = m) => l`<span class="side">${ae(e, n, t.date)}${s ? l`<span class="score">${i}</span>` : m}${c}</span>`, o = hs(t);
1348
1414
  return l`
@@ -1352,13 +1418,16 @@ class ht extends w {
1352
1418
  ${o ? l`<span class="ff">${z(e, o === "home" ? t.homeTeamId : t.awayTeamId)} forfeited</span>` : m}
1353
1419
  <span class="where">${t.venue || ""}</span>
1354
1420
  ${t.broadcast ? l`<span class="pill class">${t.broadcast}</span>` : m}
1355
- <a class="box" href=${g(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score →</a>
1421
+ <span class="links">
1422
+ ${bs(t.coverageUrls).map((n) => l`<a href=${n.href}>${n.label}</a>`)}
1423
+ <a class="box" href=${v(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score →</a>
1424
+ </span>
1356
1425
  </li>
1357
1426
  `;
1358
1427
  }
1359
1428
  }
1360
- globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", ht);
1361
- class dt extends w {
1429
+ globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", dt);
1430
+ class pt extends w {
1362
1431
  static styles = U;
1363
1432
  static properties = {
1364
1433
  ...w.properties,
@@ -1379,11 +1448,11 @@ class dt extends w {
1379
1448
  */
1380
1449
  get viewGender() {
1381
1450
  if (this.gender) return this.gender;
1382
- const e = de(this.data?.teams);
1451
+ const e = pe(this.data?.teams);
1383
1452
  return e.length < 2 ? "" : e.includes(this.pickedGender) ? this.pickedGender : e[0];
1384
1453
  }
1385
1454
  async fetchData(e) {
1386
- const t = this.season || K(), [s, r, o, n, i] = await Promise.all([
1455
+ const t = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1387
1456
  e.listConferences({ active: !0 }),
1388
1457
  e.listSchools(),
1389
1458
  // Deliberately NOT gender-filtered: the sub-nav decides whether to
@@ -1419,7 +1488,7 @@ class dt extends w {
1419
1488
  }, this._ctxData = this.data, this._ctxGender = this.viewGender), this._ctx;
1420
1489
  }
1421
1490
  renderView() {
1422
- const e = this.ctx, t = this.viewGender, s = this.gender ? [] : de(this.data.teams), r = ["All", ...[...new Set(this.data.conferences.flatMap((n) => n.classifications || []))].sort(Fe)].slice(0, 9), o = this.data.conferences.filter((n) => n.active !== !1).filter((n) => this.classFilter === "All" || (n.classifications || []).includes(this.classFilter)).sort(Xe);
1491
+ const e = this.ctx, t = this.viewGender, s = this.gender ? [] : pe(this.data.teams), r = ["All", ...[...new Set(this.data.conferences.flatMap((n) => n.classifications || []))].sort(de)].slice(0, 9), o = this.data.conferences.filter((n) => n.active !== !1).filter((n) => this.classFilter === "All" || (n.classifications || []).includes(this.classFilter)).sort(Xe);
1423
1492
  return l`
1424
1493
  ${le(this, e, {
1425
1494
  title: l`${t ? `${k(t)} ` : ""}${k(this.sport)} standings`,
@@ -1451,7 +1520,7 @@ class dt extends w {
1451
1520
  this.query = n.target.value;
1452
1521
  }}>
1453
1522
  <span class="spacer"></span>
1454
- <span class="asof">Records through ${x($e(), { month: "long", day: "numeric" })} · conference games count toward both records · scrimmages toward neither</span>
1523
+ <span class="asof">Records through ${x(be(), { month: "long", day: "numeric" })} · conference games count toward both records · scrimmages toward neither</span>
1455
1524
  </div>
1456
1525
  ${o.map((n) => this.renderConference(e, n))}
1457
1526
  `)}
@@ -1465,7 +1534,7 @@ class dt extends w {
1465
1534
  <div class="card">
1466
1535
  <div class="card-head">
1467
1536
  <h2>${t.name}</h2>
1468
- ${[...t.classifications || []].sort(Fe).map((n) => l`<span class="pill class">${n}</span>`)}
1537
+ ${[...t.classifications || []].sort(de).map((n) => l`<span class="pill class">${n}</span>`)}
1469
1538
  <span class="meta">${o.length} teams · membership derives from teams</span>
1470
1539
  </div>
1471
1540
  <div class="tablewrap"><table class="data">
@@ -1484,8 +1553,8 @@ class dt extends w {
1484
1553
  renderRow(e, t, s, r) {
1485
1554
  const o = e.schoolsById[t.team.schoolId], n = o?.name || t.team.name || "TBD";
1486
1555
  if (r && !n.toLowerCase().includes(r)) return m;
1487
- const i = t.rec.pf - t.rec.pa, c = ye(this.data.games, t.team.id), p = () => {
1488
- location.href = g(e.hrefs.school, { id: t.team.schoolId });
1556
+ const i = t.rec.pf - t.rec.pa, c = we(this.data.games, t.team.id), p = () => {
1557
+ location.href = v(e.hrefs.school, { id: t.team.schoolId });
1489
1558
  };
1490
1559
  return l`
1491
1560
  <tr class="rowlink" @click=${(d) => {
@@ -1493,8 +1562,8 @@ class dt extends w {
1493
1562
  }}>
1494
1563
  <td class="mut">${s + 1}</td>
1495
1564
  <td class="teamcell">
1496
- ${P(o)}${xe(e, t.team.id, null)}
1497
- <a href=${g(e.hrefs.school, { id: t.team.schoolId })}>${n}</a>
1565
+ ${P(o)}${ke(e, t.team.id, null)}
1566
+ <a href=${v(e.hrefs.school, { id: t.team.schoolId })}>${n}</a>
1498
1567
  </td>
1499
1568
  <td class="num">${S(t.rec, !0)}</td>
1500
1569
  <td class="num">${Oe(t.confPct)}</td>
@@ -1504,14 +1573,14 @@ class dt extends w {
1504
1573
  <td class="num">${t.rec.pa}</td>
1505
1574
  <td class="num" style="color:${i >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${i > 0 ? "+" : ""}${i}</td>
1506
1575
  <td>${ie(t.rec.results) || "·"}</td>
1507
- <td>${ke(e, t.team.id)}</td>
1576
+ <td>${Se(e, t.team.id)}</td>
1508
1577
  <td>${nt(e, c, t.team.id)}</td>
1509
1578
  </tr>
1510
1579
  `;
1511
1580
  }
1512
1581
  }
1513
- globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", dt);
1514
- const xs = y`
1582
+ globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", pt);
1583
+ const Is = y`
1515
1584
  .hero1 {
1516
1585
  border-radius: var(--hsot-radius-md); color: var(--hsot-white);
1517
1586
  padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
@@ -1528,8 +1597,8 @@ const xs = y`
1528
1597
  .delta.new { background: var(--hsot-straw); color: #6b5900; border-radius: var(--hsot-radius-xs); padding: 0.1rem 0.3rem; font-size: 0.7rem; }
1529
1598
  .sparkline { vertical-align: middle; }
1530
1599
  `;
1531
- class pt extends w {
1532
- static styles = [...U, xs];
1600
+ class mt extends w {
1601
+ static styles = [...U, Is];
1533
1602
  static properties = {
1534
1603
  ...w.properties,
1535
1604
  sport: { type: String },
@@ -1546,7 +1615,7 @@ class pt extends w {
1546
1615
  e && (this.pollDate = e);
1547
1616
  }
1548
1617
  async fetchData(e) {
1549
- const t = this.season || K(), [s, r, o, n, i] = await Promise.all([
1618
+ const t = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1550
1619
  e.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
1551
1620
  e.listSchools(),
1552
1621
  e.listTeams({ sport: this.sport }),
@@ -1576,8 +1645,8 @@ class pt extends w {
1576
1645
  const i = t.map((h, u) => {
1577
1646
  const f = (h.teamIds || []).indexOf(e);
1578
1647
  if (f === -1) return null;
1579
- const v = t.length === 1 ? 96 / 2 : u / (t.length - 1) * 90 + 3, $ = 3 + f / 24 * 20;
1580
- return { x: v, y: $ };
1648
+ const g = t.length === 1 ? 96 / 2 : u / (t.length - 1) * 90 + 3, $ = 3 + f / 24 * 20;
1649
+ return { x: g, y: $ };
1581
1650
  }), c = [];
1582
1651
  let p = [];
1583
1652
  if (i.forEach((h) => {
@@ -1585,9 +1654,9 @@ class pt extends w {
1585
1654
  }), p.length && c.push(p), !c.length) return m;
1586
1655
  const d = i[s];
1587
1656
  return l`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1588
- ${c.map((h) => ze`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1657
+ ${c.map((h) => Ne`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1589
1658
  points=${h.map((u) => `${u.x.toFixed(1)},${u.y.toFixed(1)}`).join(" ")}></polyline>`)}
1590
- ${d ? ze`<circle cx=${d.x.toFixed(1)} cy=${d.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
1659
+ ${d ? Ne`<circle cx=${d.x.toFixed(1)} cy=${d.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
1591
1660
  </svg>`;
1592
1661
  }
1593
1662
  movement(e, t, s) {
@@ -1647,7 +1716,7 @@ class pt extends w {
1647
1716
  <div class="bigrank">#1</div>
1648
1717
  ${P(o, 64)}
1649
1718
  <div>
1650
- <h2><a href=${g(e.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
1719
+ <h2><a href=${v(e.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
1651
1720
  <div class="facts">
1652
1721
  ${S(i)} overall${p ? l` · ${S(i, !0)} ${p.name}` : m}
1653
1722
  · streak ${ie(i?.results) || "·"}
@@ -1661,20 +1730,20 @@ class pt extends w {
1661
1730
  renderRow(e, t, s, r, o, n, i, c) {
1662
1731
  const p = E(e, i);
1663
1732
  if (!p) return m;
1664
- const d = e.records[i], h = Ue(e.records, i), u = ye(this.data.games, i), f = n[e.teamsById[i]?.conferenceId], v = () => {
1665
- location.href = g(e.hrefs.school, { id: p.id });
1733
+ const d = e.records[i], h = Ue(e.records, i), u = we(this.data.games, i), f = n[e.teamsById[i]?.conferenceId], g = () => {
1734
+ location.href = v(e.hrefs.school, { id: p.id });
1666
1735
  };
1667
1736
  return l`
1668
1737
  <tr class="rowlink" @click=${($) => {
1669
- $.target.closest("a") || v();
1738
+ $.target.closest("a") || g();
1670
1739
  }}>
1671
1740
  <td class="num" style="font-weight:700">${c}</td>
1672
1741
  <td>${this.movement(t, s, i)}</td>
1673
- <td class="teamcell">${P(p)}<a href=${g(e.hrefs.school, { id: p.id })}>${p.name}</a>
1742
+ <td class="teamcell">${P(p)}<a href=${v(e.hrefs.school, { id: p.id })}>${p.name}</a>
1674
1743
  <span class="mut" style="font-size:0.78rem">${p.mascot || ""}</span></td>
1675
1744
  <td class="num">${S(d)}</td>
1676
1745
  <td class="mut">${f?.name || "Independent"}</td>
1677
- <td>${h ? l`<a class="box" style="text-decoration:none" href=${g(e.hrefs.game, { sport: this.sport, id: h.gameId })}>
1746
+ <td>${h ? l`<a class="box" style="text-decoration:none" href=${v(e.hrefs.game, { sport: this.sport, id: h.gameId })}>
1678
1747
  <b style="color:${h.mark === "W" ? "var(--hsot-win)" : h.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${h.mark}</b>
1679
1748
  ${h.my}-${h.their} vs ${se(e, h.opp)}</a>` : l`<span class="mut">·</span>`}</td>
1680
1749
  <td>${nt(e, u, i)}</td>
@@ -1683,8 +1752,8 @@ class pt extends w {
1683
1752
  `;
1684
1753
  }
1685
1754
  }
1686
- globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", pt);
1687
- const ks = y`
1755
+ globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", mt);
1756
+ const Cs = y`
1688
1757
  .schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
1689
1758
  .schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
1690
1759
  .schoolhero .crest {
@@ -1738,8 +1807,8 @@ const ks = y`
1738
1807
  table.data.roster .sub { display: block; font-weight: 400; font-size: 0.78rem; color: var(--hsot-gray-5); }
1739
1808
  }
1740
1809
  `;
1741
- class mt extends w {
1742
- static styles = [...U, ks];
1810
+ class ut extends w {
1811
+ static styles = [...U, Cs];
1743
1812
  static properties = {
1744
1813
  ...w.properties,
1745
1814
  schoolId: { type: String, attribute: "school-id" },
@@ -1757,7 +1826,7 @@ class mt extends w {
1757
1826
  t && !this.sport && (this.sport = t), s && !this.gender && (this.gender = s);
1758
1827
  }
1759
1828
  async fetchData(e) {
1760
- const t = this.season || K(), s = await e.getSchool(this.schoolId), o = (await e.listTeams({ schoolId: this.schoolId })).items, n = this.sport || "football", i = o.find(($) => $.id === this.activeTeamId) || o.find(($) => $.sport === n && tt($, this.gender)) || o.find(($) => $.sport === n) || o[0] || null, [c, p, d, h, u, f, v] = await Promise.all([
1829
+ const t = this.season || Y(), s = await e.getSchool(this.schoolId), o = (await e.listTeams({ schoolId: this.schoolId })).items, n = this.sport || "football", i = o.find(($) => $.id === this.activeTeamId) || o.find(($) => $.sport === n && tt($, this.gender)) || o.find(($) => $.sport === n) || o[0] || null, [c, p, d, h, u, f, g] = await Promise.all([
1761
1830
  i ? e.listGames({ sport: i.sport, season: t }) : Promise.resolve({ items: [] }),
1762
1831
  i ? e.listTeams({ sport: i.sport }) : Promise.resolve({ items: [] }),
1763
1832
  e.listSchools(),
@@ -1779,7 +1848,7 @@ class mt extends w {
1779
1848
  conferences: h.items,
1780
1849
  rankings: u.items,
1781
1850
  roster: f.items.find(($) => $.season === t) || null,
1782
- players: v.items
1851
+ players: g.items
1783
1852
  };
1784
1853
  }
1785
1854
  get ctx() {
@@ -1807,7 +1876,7 @@ class mt extends w {
1807
1876
  return l`
1808
1877
  <div class="schoolhero" style="background:linear-gradient(115deg, ${e.colorPrimary || "#030711"} 0%, ${e.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${n}">
1809
1878
  <div class="inner">
1810
- ${te(e, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${te(e, 84)} />` : l`<div class="crest" style="background:${e.colorSecondary || "#7C7C7C"};color:${ee(e.colorSecondary || "#7C7C7C")}">${be(e)}</div>`}
1879
+ ${te(e, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${te(e, 84)} />` : l`<div class="crest" style="background:${e.colorSecondary || "#7C7C7C"};color:${ee(e.colorSecondary || "#7C7C7C")}">${ye(e)}</div>`}
1811
1880
  <div style="min-width:260px">
1812
1881
  <h1>${e.name} <span class="mascot">${e.mascot || ""}</span></h1>
1813
1882
  <div class="facts">
@@ -1835,7 +1904,7 @@ class mt extends w {
1835
1904
  `;
1836
1905
  }
1837
1906
  renderTeam(e, t, s, r) {
1838
- const o = e.records[t.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, n = o.w + o.l + o.t, i = s ? st(this.data.allTeams.filter((h) => h.conferenceId === s.id), t.gender) : [], c = s ? rt(i, e.records).findIndex((h) => h.team.id === t.id) + 1 : 0, p = we(e.rankings, e.teamsById, t.id, t.sport, null), d = this.data.games.filter((h) => h.homeTeamId === t.id || h.awayTeamId === t.id).sort((h, u) => String(h.date).localeCompare(String(u.date)));
1907
+ const o = e.records[t.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, n = o.w + o.l + o.t, i = s ? st(this.data.allTeams.filter((h) => h.conferenceId === s.id), t.gender) : [], c = s ? rt(i, e.records).findIndex((h) => h.team.id === t.id) + 1 : 0, p = xe(e.rankings, e.teamsById, t.id, t.sport, null), d = this.data.games.filter((h) => h.homeTeamId === t.id || h.awayTeamId === t.id).sort((h, u) => String(h.date).localeCompare(String(u.date)));
1839
1908
  return l`
1840
1909
  <div class="tiles">
1841
1910
  <div class="tile"><div class="k">Overall</div><div class="v">${S(o)}</div><div class="s">${n} games played</div></div>
@@ -1844,9 +1913,9 @@ class mt extends w {
1844
1913
  <div class="tile"><div class="k">Points</div><div class="v">${n ? (o.pf / n).toFixed(1) : "0.0"}</div>
1845
1914
  <div class="s">scored per game · ${n ? (o.pa / n).toFixed(1) : "0.0"} allowed</div></div>
1846
1915
  <div class="tile"><div class="k">Streak</div><div class="v">${ie(o.results) || "·"}</div>
1847
- <div class="s">last 5: ${ke(e, t.id)}</div></div>
1916
+ <div class="s">last 5: ${Se(e, t.id)}</div></div>
1848
1917
  <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${p ? `#${p}` : "NR"}</div>
1849
- <div class="s"><a href=${g(e.hrefs.section, { sport: t.sport, view: "rankings" })}>full poll</a></div></div>
1918
+ <div class="s"><a href=${v(e.hrefs.section, { sport: t.sport, view: "rankings" })}>full poll</a></div></div>
1850
1919
  </div>
1851
1920
  ${(t.championships || []).length ? l`
1852
1921
  <div style="margin:-0.2rem 0 1rem;display:flex;gap:0.4rem;flex-wrap:wrap">
@@ -1868,7 +1937,7 @@ class mt extends w {
1868
1937
  }
1869
1938
  renderGameRow(e, t, s) {
1870
1939
  const r = s.homeTeamId === t.id, o = r ? s.awayTeamId : s.homeTeamId, n = r ? s.homeScore : s.awayScore, i = r ? s.awayScore : s.homeScore;
1871
- let c = l`<span class="mut">${ve(s.time)}</span>`;
1940
+ let c = l`<span class="mut">${$e(s.time)}</span>`;
1872
1941
  if (s.state === "final") {
1873
1942
  const d = ne(s), h = d === "tie" ? "T" : d === (r ? "home" : "away") ? "W" : "L";
1874
1943
  c = l`<span class=${h}>${h}</span> ${n}-${i}${s.finish === "overtime" ? l` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? l` <span class="mut">FF</span>` : m}`;
@@ -1884,7 +1953,7 @@ class mt extends w {
1884
1953
  ${s.broadcast ? l`<span class="pill class">${s.broadcast}</span>` : m}
1885
1954
  </span>
1886
1955
  <span class="where">${s.venue || ""}</span>
1887
- <a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: s.id })}>Box score →</a>
1956
+ <a class="box" href=${v(e.hrefs.game, { sport: t.sport, id: s.id })}>Box score →</a>
1888
1957
  </li>
1889
1958
  `;
1890
1959
  }
@@ -1902,7 +1971,7 @@ class mt extends w {
1902
1971
  ${i.map((p) => {
1903
1972
  const d = n[p.playerId];
1904
1973
  if (!d) return m;
1905
- const h = Yt(p), u = [h, d.classOf].filter(Boolean).join(" · ") || "·";
1974
+ const h = Kt(p), u = [h, d.classOf].filter(Boolean).join(" · ") || "·";
1906
1975
  return l`<tr>
1907
1976
  <td class="num mut">${p.number ?? "·"}</td>
1908
1977
  <td class="player" style="font-weight:500">${d.firstName} ${d.lastName}<span class="sub">${u}</span></td>
@@ -1918,8 +1987,8 @@ class mt extends w {
1918
1987
  `;
1919
1988
  }
1920
1989
  }
1921
- globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", mt);
1922
- const ut = {
1990
+ globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", ut);
1991
+ const ft = {
1923
1992
  football: ["quarters", 4],
1924
1993
  flag_football: ["quarters", 4],
1925
1994
  basketball: ["quarters", 4],
@@ -1930,78 +1999,49 @@ const ut = {
1930
1999
  softball: ["innings", 7],
1931
2000
  volleyball: ["sets", 3]
1932
2001
  };
1933
- function ft(a) {
1934
- return (ut[a] || ["quarters", 4])[0];
2002
+ function gt(a) {
2003
+ return (ft[a] || ["quarters", 4])[0];
1935
2004
  }
1936
- function Se(a) {
1937
- return (ut[a] || ["quarters", 4])[1];
2005
+ function _e(a) {
2006
+ return (ft[a] || ["quarters", 4])[1];
1938
2007
  }
1939
- function Ss(a, e) {
1940
- const t = ft(a), s = Se(a);
2008
+ function Es(a, e) {
2009
+ const t = gt(a), s = _e(a);
1941
2010
  if (e <= s || t === "innings" || t === "sets") return String(e);
1942
2011
  const r = e - s;
1943
2012
  return `OT${r > 1 ? r : ""}`;
1944
2013
  }
1945
- function _s(a, e) {
2014
+ function Ps(a, e) {
1946
2015
  const t = String(a ?? "").trim();
1947
2016
  let s;
1948
- return (s = /^(\d+)Q$/i.exec(t)) || (s = /^(\d+)H$/i.exec(t)) ? Number(s[1]) : /^half$/i.test(t) ? ft(e) === "halves" ? 1 : 2 : (s = /^(\d*)OT(\d*)$/i.exec(t)) ? Se(e) + Number(s[1] || s[2] || 1) : (s = /^[TB](\d+)$/i.exec(t)) || (s = /^(\d+)(?:st|nd|rd|th)\s*set$/i.exec(t)) || (s = /^set\s*(\d+)$/i.exec(t)) ? Number(s[1]) : null;
2017
+ return (s = /^(\d+)Q$/i.exec(t)) || (s = /^(\d+)H$/i.exec(t)) ? Number(s[1]) : /^half$/i.test(t) ? gt(e) === "halves" ? 1 : 2 : (s = /^(\d*)OT(\d*)$/i.exec(t)) ? _e(e) + Number(s[1] || s[2] || 1) : (s = /^[TB](\d+)$/i.exec(t)) || (s = /^(\d+)(?:st|nd|rd|th)\s*set$/i.exec(t)) || (s = /^set\s*(\d+)$/i.exec(t)) ? Number(s[1]) : null;
1949
2018
  }
1950
2019
  const Z = (a) => Number.isInteger(a) && a >= 0 ? a : null;
1951
- function Ts(a) {
2020
+ function Bs(a) {
1952
2021
  const e = Array.isArray(a?.scoringPlays) ? a.scoringPlays : [];
1953
2022
  if (!e.length) return null;
1954
2023
  const t = a.sport, s = /* @__PURE__ */ new Map();
1955
2024
  for (const h of e) {
1956
- const u = _s(h?.period, t), f = Z(h?.homeScore), v = Z(h?.awayScore);
1957
- if (!u || f === null || v === null) return null;
2025
+ const u = Ps(h?.period, t), f = Z(h?.homeScore), g = Z(h?.awayScore);
2026
+ if (!u || f === null || g === null) return null;
1958
2027
  const $ = s.get(u) || { home: 0, away: 0 };
1959
- $.home = Math.max($.home, f), $.away = Math.max($.away, v), s.set(u, $);
2028
+ $.home = Math.max($.home, f), $.away = Math.max($.away, g), s.set(u, $);
1960
2029
  }
1961
2030
  const r = Math.max(...s.keys()), o = [];
1962
2031
  let n = !0, i = { home: 0, away: 0 };
1963
2032
  for (let h = 1; h <= r; h += 1) {
1964
- const u = s.get(h) || i, f = u.home - i.home, v = u.away - i.away;
1965
- (f < 0 || v < 0) && (n = !1), o.push({ period: h, home: Math.max(f, 0), away: Math.max(v, 0) }), i = { home: Math.max(u.home, i.home), away: Math.max(u.away, i.away) };
2033
+ const u = s.get(h) || i, f = u.home - i.home, g = u.away - i.away;
2034
+ (f < 0 || g < 0) && (n = !1), o.push({ period: h, home: Math.max(f, 0), away: Math.max(g, 0) }), i = { home: Math.max(u.home, i.home), away: Math.max(u.away, i.away) };
1966
2035
  }
1967
2036
  const c = Z(a.homeScore) ?? 0, p = Z(a.awayScore) ?? 0, d = n && i.home === c && i.away === p;
1968
2037
  return n = n && i.home <= c && i.away <= p, { periods: o, reconciled: d, consistent: n };
1969
2038
  }
1970
- function As(a) {
2039
+ function Ds(a) {
1971
2040
  if (Array.isArray(a?.periodScores) && a.periodScores.length) return a.periodScores;
1972
- const e = Ts(a);
2041
+ const e = Bs(a);
1973
2042
  return e ? a.state === "final" ? e.reconciled ? e.periods : null : e.consistent ? e.periods : null : null;
1974
2043
  }
1975
- const Is = "https://api.wral.com/search";
1976
- function Cs(a) {
1977
- return a.map((e) => `uri:"${e}"`).join(" OR ");
1978
- }
1979
- function Es(a, e) {
1980
- const t = String(a || Is).replace(/\/+$/, ""), s = new URLSearchParams({ query: Cs(e), sort: "score", lang: "en" });
1981
- return `${t}/v1/query?${s}`;
1982
- }
1983
- function gt(a) {
1984
- try {
1985
- const e = new URL(a);
1986
- if (/(^|\.)smugmug\.com$/i.test(e.hostname)) {
1987
- const t = e.pathname.split("/").filter(Boolean).pop() || "", s = !t || /^[ni]-[A-Za-z0-9]+$/.test(t);
1988
- return {
1989
- uri: a,
1990
- title: s ? a : decodeURIComponent(t).replace(/-/g, " "),
1991
- photos: !0
1992
- };
1993
- }
1994
- } catch {
1995
- }
1996
- return { uri: a, title: a };
1997
- }
1998
- async function Ps(a, e, t) {
1999
- const r = await ((...i) => fetch(...i))(Es(a, e));
2000
- if (!r.ok) throw new Error(`search answered ${r.status}`);
2001
- const o = await r.json(), n = new Map((o.items || []).map((i) => [i.uri, i]));
2002
- return e.map((i) => n.get(i) || gt(i));
2003
- }
2004
- const Bs = y`
2044
+ const Rs = y`
2005
2045
  .breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
2006
2046
  .breadcrumbs a { text-decoration: none; }
2007
2047
  .scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
@@ -2058,7 +2098,7 @@ const Bs = y`
2058
2098
  }
2059
2099
  `;
2060
2100
  class vt extends w {
2061
- static styles = [...U, Bs];
2101
+ static styles = [...U, Rs];
2062
2102
  static properties = {
2063
2103
  ...w.properties,
2064
2104
  gameId: { type: String, attribute: "game-id" },
@@ -2088,7 +2128,7 @@ class vt extends w {
2088
2128
  // links (fetchCoverage already degrades per-URL index misses).
2089
2129
  // The embed drops the Coverage grid, so it skips the search
2090
2130
  // round-trip entirely rather than fetching cards it will not render.
2091
- s.length && !this.embed ? Ps(this.searchApi, s).catch(() => s.map(gt)) : Promise.resolve([])
2131
+ s.length && !this.embed ? vs(this.searchApi, s).catch(() => s.map(it)) : Promise.resolve([])
2092
2132
  ]);
2093
2133
  return {
2094
2134
  game: t,
@@ -2119,8 +2159,8 @@ class vt extends w {
2119
2159
  ${D(this)}
2120
2160
  ${this.embed ? m : l`
2121
2161
  <p class="breadcrumbs">
2122
- <a href=${g(t.hrefs.section, { sport: e.sport, view: "scores" })}>${k(e.sport)}</a> /
2123
- <a href=${g(t.hrefs.section, { sport: e.sport, view: "scores" })}>Scores/Schedules</a> /
2162
+ <a href=${v(t.hrefs.section, { sport: e.sport, view: "scores" })}>${k(e.sport)}</a> /
2163
+ <a href=${v(t.hrefs.section, { sport: e.sport, view: "scores" })}>Scores/Schedules</a> /
2124
2164
  ${z(t, e.awayTeamId)} at ${z(t, e.homeTeamId)}
2125
2165
  </p>`}
2126
2166
  <div class="card">
@@ -2133,7 +2173,7 @@ class vt extends w {
2133
2173
  <span style=${i("home")}>${e.homeScore}</span>
2134
2174
  </div>
2135
2175
  <div class="status">${V(e)}</div>
2136
- <div class="status">${x(e.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${e.state === "scheduled" && e.time ? l` · ${ve(e.time)}` : m} · ${e.venue || "Venue TBD"}
2176
+ <div class="status">${x(e.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${e.state === "scheduled" && e.time ? l` · ${$e(e.time)}` : m} · ${e.venue || "Venue TBD"}
2137
2177
  ${e.broadcast ? l` · <span class="pill class">${e.broadcast}</span>` : m}</div>
2138
2178
  <div class="status">
2139
2179
  <span class="pill type">${e.gameType === "conference" ? `${c?.name || "Conference"} game` : e.gameType}</span>
@@ -2153,7 +2193,7 @@ class vt extends w {
2153
2193
  </div>
2154
2194
  ${this.embed ? l`
2155
2195
  <p class="fullbox">
2156
- <a href=${g(t.hrefs.game, { sport: e.sport, id: e.id })}>Full box score &rarr;</a>
2196
+ <a href=${v(t.hrefs.game, { sport: e.sport, id: e.id })}>Full box score &rarr;</a>
2157
2197
  </p>` : l`
2158
2198
  ${(this.data.coverage || []).length ? l`
2159
2199
  <div class="section-title">Coverage</div>
@@ -2181,7 +2221,7 @@ class vt extends w {
2181
2221
  ${p.map((d) => l`<li>
2182
2222
  <span class="d">${x(d.date)}</span>${V(d)}
2183
2223
  <span class="opp">${z(t, d.awayTeamId)} ${d.awayScore}, ${z(t, d.homeTeamId)} ${d.homeScore}</span>
2184
- <a class="box" href=${g(t.hrefs.game, { sport: e.sport, id: d.id })}>Box score →</a>
2224
+ <a class="box" href=${v(t.hrefs.game, { sport: e.sport, id: d.id })}>Box score →</a>
2185
2225
  </li>`)}
2186
2226
  </ul></div>` : m}`}
2187
2227
  `)}
@@ -2192,19 +2232,19 @@ class vt extends w {
2192
2232
  const n = e.teamsById[s], i = e.records[s], c = te(r, 58);
2193
2233
  return l`
2194
2234
  <div class="teamblock ${o ? "right" : ""}">
2195
- ${c ? l`<img class="crest logo" alt="" loading="lazy" src=${c} />` : l`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${ee(r.colorPrimary || "#030711")}">${be(r)}</span>`}
2235
+ ${c ? l`<img class="crest logo" alt="" loading="lazy" src=${c} />` : l`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${ee(r.colorPrimary || "#030711")}">${ye(r)}</span>`}
2196
2236
  <div>
2197
- <div class="tname">${xe(e, s, t.date)}<a href=${g(e.hrefs.school, { id: r.id })}>${r.name}</a></div>
2237
+ <div class="tname">${ke(e, s, t.date)}<a href=${v(e.hrefs.school, { id: r.id })}>${r.name}</a></div>
2198
2238
  <div class="trec">${r.mascot || ""} · ${S(i)}${n?.conferenceId ? l` · ${S(i, !0)} conf` : m}</div>
2199
2239
  </div>
2200
2240
  </div>
2201
2241
  `;
2202
2242
  }
2203
2243
  renderLineScore(e, t, s) {
2204
- const r = As(e);
2244
+ const r = Ds(e);
2205
2245
  if (!r)
2206
2246
  return e.state === "scheduled" ? l`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>` : m;
2207
- const o = Math.max(Se(e.sport), ...r.map((p) => p.period)), n = (p) => Ss(e.sport, p), i = (p, d) => {
2247
+ const o = Math.max(_e(e.sport), ...r.map((p) => p.period)), n = (p) => Es(e.sport, p), i = (p, d) => {
2208
2248
  const h = r.find((u) => u.period === d);
2209
2249
  return h ? h[p] : e.state === "final" ? 0 : "·";
2210
2250
  }, c = (p, d, h) => l`
@@ -2253,12 +2293,12 @@ class vt extends w {
2253
2293
  }
2254
2294
  renderContext(e, t, s) {
2255
2295
  if (!s) return m;
2256
- const r = e.records[t], o = ye(this.data.games, t);
2296
+ const r = e.records[t], o = we(this.data.games, t);
2257
2297
  return l`
2258
2298
  <div class="card ctxcard">
2259
2299
  <div class="who">${P(s)}${s.name}</div>
2260
2300
  <div class="row">
2261
- <span>Last 5: ${ke(e, t)}</span>
2301
+ <span>Last 5: ${Se(e, t)}</span>
2262
2302
  <span>Streak: <b>${r ? ie(r.results) : "·"}</b></span>
2263
2303
  <span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
2264
2304
  <span>Next: ${o ? l`${x(o.date, { month: "numeric", day: "numeric" })}
@@ -2269,7 +2309,7 @@ class vt extends w {
2269
2309
  }
2270
2310
  }
2271
2311
  globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", vt);
2272
- const Ds = 250, Rs = 2;
2312
+ const zs = 250, Ns = 2;
2273
2313
  class $t extends N {
2274
2314
  static properties = {
2275
2315
  api: { type: String },
@@ -2350,11 +2390,11 @@ class $t extends N {
2350
2390
  }
2351
2391
  onInput(e) {
2352
2392
  const t = e.target.value.trim();
2353
- if (clearTimeout(this.debounceTimer), t.length < Rs) {
2393
+ if (clearTimeout(this.debounceTimer), t.length < Ns) {
2354
2394
  this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
2355
2395
  return;
2356
2396
  }
2357
- this.debounceTimer = setTimeout(() => this.search(t), Ds);
2397
+ this.debounceTimer = setTimeout(() => this.search(t), zs);
2358
2398
  }
2359
2399
  async search(e) {
2360
2400
  this.abortController?.abort(), this.abortController = new AbortController();
@@ -2467,17 +2507,17 @@ function yt(a, e = [], t = 0) {
2467
2507
  for (const s of a.children || []) yt(s, e, t + 1);
2468
2508
  return e;
2469
2509
  }
2470
- const zs = (a) => Math.max(1, Math.round(Math.log2(a || 2)));
2471
- function Ns({ round: a, perGroup: e, groupCount: t = 1 }) {
2472
- const s = zs(e), o = (t === 4 ? s + 2 : t === 2 ? s + 1 : s) - a;
2510
+ const Fs = (a) => Math.max(1, Math.round(Math.log2(a || 2)));
2511
+ function Ms({ round: a, perGroup: e, groupCount: t = 1 }) {
2512
+ const s = Fs(e), o = (t === 4 ? s + 2 : t === 2 ? s + 1 : s) - a;
2473
2513
  return o === 0 ? t > 1 ? "Championship" : "Final" : o === 1 ? "Semifinal" : `Round ${a}`;
2474
2514
  }
2475
- function Fs(a) {
2515
+ function Os(a) {
2476
2516
  if (!a || !a.length) return "setup";
2477
2517
  const e = Math.max(...a.map((s) => s.round ?? 0)), t = a.filter((s) => (s.round ?? 0) === e);
2478
2518
  return t.length && t.every((s) => s.state === "final") ? "complete" : a.some((s) => s.state !== "scheduled" || s.homeScore || s.awayScore || s.round === 1 && (s.homeTeamId || s.awayTeamId)) ? "active" : "setup";
2479
2519
  }
2480
- function Ms(a, e) {
2520
+ function Us(a, e) {
2481
2521
  const t = a?.groupNames || [];
2482
2522
  if (t.length >= 2) {
2483
2523
  const r = t.map((o) => ({ key: o, name: o }));
@@ -2486,11 +2526,11 @@ function Ms(a, e) {
2486
2526
  const s = [...new Set((e || []).map((r) => r.bracketGroup).filter(Boolean))];
2487
2527
  return [{ key: null, name: s.length === 1 ? s[0] : "Bracket" }];
2488
2528
  }
2489
- const Os = (a, e) => e?.key == null ? [...a || []] : (a || []).filter((t) => t.bracketGroup === e.key), Le = (a) => {
2529
+ const Hs = (a, e) => e?.key == null ? [...a || []] : (a || []).filter((t) => t.bracketGroup === e.key), Le = (a) => {
2490
2530
  const e = /(\d+)\s*$/.exec(a.label || "");
2491
2531
  return e ? Number(e[1]) : 1 / 0;
2492
2532
  }, Ge = (a, e) => Le(a) - Le(e) || String(a.id).localeCompare(String(e.id));
2493
- function Us(a, e) {
2533
+ function Ls(a, e) {
2494
2534
  if (a.every((r) => Number.isInteger(r.round))) return (r) => r.round;
2495
2535
  const t = bt(a, e), s = /* @__PURE__ */ new Map();
2496
2536
  for (const r of Array.isArray(t) ? t : [t]) {
@@ -2499,10 +2539,10 @@ function Us(a, e) {
2499
2539
  }
2500
2540
  return (r) => Number.isInteger(r.round) ? r.round : s.get(r.id) || 1;
2501
2541
  }
2502
- function Hs(a, e, t) {
2503
- const s = Os(a, t);
2542
+ function Gs(a, e, t) {
2543
+ const s = Hs(a, t);
2504
2544
  if (!s.length) return [];
2505
- const r = Us(a || [], e || []), o = /* @__PURE__ */ new Map();
2545
+ const r = Ls(a || [], e || []), o = /* @__PURE__ */ new Map();
2506
2546
  for (const p of s) {
2507
2547
  const d = r(p);
2508
2548
  o.has(d) || o.set(d, []), o.get(d).push(p);
@@ -2516,7 +2556,7 @@ function Hs(a, e, t) {
2516
2556
  let d = [...o.get(p)];
2517
2557
  if (c) {
2518
2558
  const h = (u) => {
2519
- const f = (n.get(u.id) || []).map((v) => c.get(v)).filter((v) => v !== void 0);
2559
+ const f = (n.get(u.id) || []).map((g) => c.get(g)).filter((g) => g !== void 0);
2520
2560
  return f.length ? Math.min(...f) : 1 / 0;
2521
2561
  };
2522
2562
  d.sort((u, f) => h(u) - h(f) || Ge(u, f));
@@ -2526,7 +2566,7 @@ function Hs(a, e, t) {
2526
2566
  }
2527
2567
  return i;
2528
2568
  }
2529
- function Ls(a, e, t) {
2569
+ function js(a, e, t) {
2530
2570
  const s = a[`${e}TeamId`] || null, r = (t || []).find((n) => n.gameId === a.id && n.slot === e), o = a[`${e}Seed`] ?? r?.seed ?? null;
2531
2571
  return { teamId: s, seed: o, bye: !s && !!r?.isBye };
2532
2572
  }
@@ -2534,14 +2574,14 @@ function wt(a) {
2534
2574
  const e = ne(a);
2535
2575
  return e === "home" || e === "away" ? e : null;
2536
2576
  }
2537
- function Gs(a, e) {
2577
+ function qs(a, e) {
2538
2578
  const t = bt(a || [], e || []);
2539
2579
  if (!t || Array.isArray(t)) return null;
2540
2580
  const s = wt(t.game);
2541
2581
  return s && t.game[`${s}TeamId`] || null;
2542
2582
  }
2543
2583
  const je = { active: 0, setup: 1, complete: 2 };
2544
- function js(a, { id: e, param: t } = {}) {
2584
+ function Ws(a, { id: e, param: t } = {}) {
2545
2585
  const s = a || [];
2546
2586
  if (!s.length) return null;
2547
2587
  for (const r of [e, t]) {
@@ -2551,7 +2591,7 @@ function js(a, { id: e, param: t } = {}) {
2551
2591
  }
2552
2592
  return [...s].sort((r, o) => (je[r.status] ?? 3) - (je[o.status] ?? 3) || String(r.name || "").localeCompare(String(o.name || "")))[0];
2553
2593
  }
2554
- const qs = y`
2594
+ const Vs = y`
2555
2595
  .bracket { display: flex; gap: 1rem; align-items: stretch; overflow-x: auto; padding-bottom: 0.5rem; }
2556
2596
  .round { flex: 0 0 250px; display: flex; flex-direction: column; min-width: 0; }
2557
2597
  .roundhead {
@@ -2598,7 +2638,7 @@ const qs = y`
2598
2638
  @media (max-width: 720px) { .round { flex-basis: 215px; } }
2599
2639
  `;
2600
2640
  class xt extends w {
2601
- static styles = [U, qs];
2641
+ static styles = [U, Vs];
2602
2642
  static properties = {
2603
2643
  ...w.properties,
2604
2644
  sport: { type: String },
@@ -2611,7 +2651,7 @@ class xt extends w {
2611
2651
  super(), this.sport = "football", this.season = "", this.tournamentId = "", this.picked = "", this.group = null;
2612
2652
  }
2613
2653
  async fetchData(e) {
2614
- const t = this.season || K(), s = (await e.listTournaments({ sport: this.sport, season: t })).items, r = new URLSearchParams(globalThis.location?.search || "").get("tournament"), o = js(s, { id: this.picked || this.tournamentId, param: r });
2654
+ const t = this.season || Y(), s = (await e.listTournaments({ sport: this.sport, season: t })).items, r = new URLSearchParams(globalThis.location?.search || "").get("tournament"), o = Ws(s, { id: this.picked || this.tournamentId, param: r });
2615
2655
  if (!o) return { season: t, tournaments: s, tournament: null };
2616
2656
  const [n, i, c, p, d] = await Promise.all([
2617
2657
  e.listSeedings(o.id),
@@ -2664,7 +2704,7 @@ class xt extends w {
2664
2704
  ${D(this)}
2665
2705
  <div class="card"><div class="empty">No ${this.sport} brackets have been published for the ${e.season} season yet.</div></div>
2666
2706
  `)}`;
2667
- const r = Ms(e.tournament, e.games), o = r.find((h) => h.key === this.group) || r[0], n = (e.tournament.groupNames || []).length >= 2 ? e.tournament.groupNames.length : 1, i = (Number(e.tournament.size) || 0) / n, c = Hs(e.games, e.edges, o), p = Fs(e.games), d = Gs(e.games, e.edges);
2707
+ const r = Us(e.tournament, e.games), o = r.find((h) => h.key === this.group) || r[0], n = (e.tournament.groupNames || []).length >= 2 ? e.tournament.groupNames.length : 1, i = (Number(e.tournament.size) || 0) / n, c = Gs(e.games, e.edges, o), p = Os(e.games), d = qs(e.games, e.edges);
2668
2708
  return l`
2669
2709
  ${s}
2670
2710
  ${B(this, l`
@@ -2693,7 +2733,7 @@ class xt extends w {
2693
2733
  <div class="bracket" role="region" aria-label="${o.name} bracket">
2694
2734
  ${c.map((h) => l`
2695
2735
  <section class="round">
2696
- <h3 class="roundhead">${Ns({ round: h.round, perGroup: i, groupCount: n })}</h3>
2736
+ <h3 class="roundhead">${Ms({ round: h.round, perGroup: i, groupCount: n })}</h3>
2697
2737
  <div class="games">${h.games.map((u) => this.renderMatchup(t, u))}</div>
2698
2738
  </section>`)}
2699
2739
  </div>` : l`<div class="card"><div class="empty">This bracket has no games yet.</div></div>`}
@@ -2710,13 +2750,13 @@ class xt extends w {
2710
2750
  ${V(t)}
2711
2751
  ${t.label ? l`<span class="label">${t.label}</span>` : m}
2712
2752
  <span class="spacer"></span>
2713
- ${s ? l`<a class="box" href=${g(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score</a>` : m}
2753
+ ${s ? l`<a class="box" href=${v(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score</a>` : m}
2714
2754
  </footer>
2715
2755
  </article>
2716
2756
  `;
2717
2757
  }
2718
2758
  renderSlot(e, t, s) {
2719
- const { teamId: r, seed: o, bye: n } = Ls(t, s, this.data.seedings), i = wt(t), c = t.state === "live" || t.state === "final";
2759
+ const { teamId: r, seed: o, bye: n } = js(t, s, this.data.seedings), i = wt(t), c = t.state === "live" || t.state === "final";
2720
2760
  return l`
2721
2761
  <div class="slot ${i ? i === s ? "winner" : "loser" : ""}">
2722
2762
  <span class="seed">${o ?? ""}</span>
@@ -2727,22 +2767,22 @@ class xt extends w {
2727
2767
  }
2728
2768
  }
2729
2769
  globalThis?.customElements && !globalThis.customElements.get("hsot-brackets") && globalThis.customElements.define("hsot-brackets", xt);
2730
- const Ws = {
2731
- "hsot-scores": ht,
2732
- "hsot-standings": dt,
2733
- "hsot-rankings": pt,
2734
- "hsot-school": mt,
2770
+ const Ks = {
2771
+ "hsot-scores": dt,
2772
+ "hsot-standings": pt,
2773
+ "hsot-rankings": mt,
2774
+ "hsot-school": ut,
2735
2775
  "hsot-boxscore": vt,
2736
2776
  "hsot-school-search": $t,
2737
2777
  "hsot-brackets": xt
2738
2778
  };
2739
- function Vs() {
2779
+ function Ys() {
2740
2780
  const a = globalThis?.customElements;
2741
2781
  if (a)
2742
- for (const [e, t] of Object.entries(Ws))
2782
+ for (const [e, t] of Object.entries(Ks))
2743
2783
  a.get(e) || a.define(e, t);
2744
2784
  }
2745
- typeof window < "u" && globalThis.customElements && Vs();
2785
+ typeof window < "u" && globalThis.customElements && Ys();
2746
2786
  export {
2747
- Vs as defineAll
2787
+ Ys as defineAll
2748
2788
  };