@wral/hsot-data 0.1.12 → 0.1.14

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.
@@ -35,7 +35,7 @@ const ae = (a) => new Nt(typeof a == "string" ? a : a + "", void 0, lt), b = (a,
35
35
  for (const s of t.cssRules) e += s.cssText;
36
36
  return ae(e);
37
37
  })(a) : a;
38
- const { is: oe, defineProperty: ie, getOwnPropertyDescriptor: ne, getOwnPropertyNames: le, getOwnPropertySymbols: ce, getPrototypeOf: he } = Object, X = globalThis, kt = X.trustedTypes, de = kt ? kt.emptyScript : "", pe = X.reactiveElementPolyfillSupport, B = (a, t) => a, it = { toAttribute(a, t) {
38
+ const { is: oe, defineProperty: ie, getOwnPropertyDescriptor: ne, getOwnPropertyNames: le, getOwnPropertySymbols: ce, getPrototypeOf: he } = Object, X = globalThis, kt = X.trustedTypes, de = kt ? kt.emptyScript : "", pe = X.reactiveElementPolyfillSupport, R = (a, t) => a, it = { toAttribute(a, t) {
39
39
  switch (t) {
40
40
  case Boolean:
41
41
  a = a ? de : null;
@@ -85,21 +85,21 @@ let I = class extends HTMLElement {
85
85
  this[e] = i;
86
86
  } };
87
87
  return { get: r, set(i) {
88
- const n = r?.call(this);
89
- o?.call(this, i), this.requestUpdate(t, n, s);
88
+ const l = r?.call(this);
89
+ o?.call(this, i), this.requestUpdate(t, l, s);
90
90
  }, configurable: !0, enumerable: !0 };
91
91
  }
92
92
  static getPropertyOptions(t) {
93
93
  return this.elementProperties.get(t) ?? _t;
94
94
  }
95
95
  static _$Ei() {
96
- if (this.hasOwnProperty(B("elementProperties"))) return;
96
+ if (this.hasOwnProperty(R("elementProperties"))) return;
97
97
  const t = he(this);
98
98
  t.finalize(), t.l !== void 0 && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
99
99
  }
100
100
  static finalize() {
101
- if (this.hasOwnProperty(B("finalized"))) return;
102
- if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(B("properties"))) {
101
+ if (this.hasOwnProperty(R("finalized"))) return;
102
+ if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(R("properties"))) {
103
103
  const e = this.properties, s = [...le(e), ...ce(e)];
104
104
  for (const r of s) this.createProperty(r, e[r]);
105
105
  }
@@ -171,8 +171,8 @@ let I = class extends HTMLElement {
171
171
  if (r !== void 0 && this._$Em !== r) {
172
172
  const o = s.getPropertyOptions(r), i = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : it;
173
173
  this._$Em = r;
174
- const n = i.fromAttribute(e, o.type);
175
- this[r] = n ?? this._$Ej?.get(r) ?? n, this._$Em = null;
174
+ const l = i.fromAttribute(e, o.type);
175
+ this[r] = l ?? this._$Ej?.get(r) ?? l, this._$Em = null;
176
176
  }
177
177
  }
178
178
  requestUpdate(t, e, s, r = !1, o) {
@@ -208,8 +208,8 @@ let I = class extends HTMLElement {
208
208
  }
209
209
  const s = this.constructor.elementProperties;
210
210
  if (s.size > 0) for (const [r, o] of s) {
211
- const { wrapped: i } = o, n = this[r];
212
- i !== !0 || this._$AL.has(r) || n === void 0 || this.C(r, void 0, o, n);
211
+ const { wrapped: i } = o, l = this[r];
212
+ i !== !0 || this._$AL.has(r) || l === void 0 || this.C(r, void 0, o, l);
213
213
  }
214
214
  }
215
215
  let t = !1;
@@ -246,23 +246,23 @@ let I = class extends HTMLElement {
246
246
  firstUpdated(t) {
247
247
  }
248
248
  };
249
- I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[B("elementProperties")] = /* @__PURE__ */ new Map(), I[B("finalized")] = /* @__PURE__ */ new Map(), pe?.({ ReactiveElement: I }), (X.reactiveElementVersions ??= []).push("2.1.2");
249
+ I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[R("elementProperties")] = /* @__PURE__ */ new Map(), I[R("finalized")] = /* @__PURE__ */ new Map(), pe?.({ ReactiveElement: I }), (X.reactiveElementVersions ??= []).push("2.1.2");
250
250
  const ct = globalThis, St = (a) => a, Y = ct.trustedTypes, At = Y ? Y.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, Ot = "$lit$", k = `lit$${Math.random().toFixed(9).slice(2)}$`, Ht = "?" + k, me = `<${Ht}>`, T = document, F = () => T.createComment(""), N = (a) => a === null || typeof a != "object" && typeof a != "function", ht = Array.isArray, fe = (a) => ht(a) || typeof a?.[Symbol.iterator] == "function", rt = `[
251
- \f\r]`, R = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Tt = /-->/g, It = />/g, S = RegExp(`>|${rt}(?:([^\\s"'>=/]+)(${rt}*=${rt}*(?:[^
252
- \f\r"'\`<>=]|("|')|))|$)`, "g"), Ct = /'/g, Et = /"/g, Mt = /^(?:script|style|textarea|title)$/i, Lt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), c = Lt(1), Pt = Lt(2), P = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Dt = /* @__PURE__ */ new WeakMap(), A = T.createTreeWalker(T, 129);
251
+ \f\r]`, B = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Tt = /-->/g, It = />/g, S = RegExp(`>|${rt}(?:([^\\s"'>=/]+)(${rt}*=${rt}*(?:[^
252
+ \f\r"'\`<>=]|("|')|))|$)`, "g"), Ct = /'/g, Et = /"/g, Mt = /^(?:script|style|textarea|title)$/i, Lt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), n = Lt(1), Pt = Lt(2), P = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Dt = /* @__PURE__ */ new WeakMap(), A = T.createTreeWalker(T, 129);
253
253
  function jt(a, t) {
254
254
  if (!ht(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
255
  return At !== void 0 ? At.createHTML(t) : t;
256
256
  }
257
257
  const ue = (a, t) => {
258
258
  const e = a.length - 1, s = [];
259
- let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", i = R;
260
- for (let n = 0; n < e; n++) {
261
- const d = a[n];
262
- let l, h, p = -1, f = 0;
263
- for (; f < d.length && (i.lastIndex = f, h = i.exec(d), h !== null); ) f = i.lastIndex, i === R ? h[1] === "!--" ? i = Tt : h[1] !== void 0 ? i = It : h[2] !== void 0 ? (Mt.test(h[2]) && (r = RegExp("</" + h[2], "g")), i = S) : h[3] !== void 0 && (i = S) : i === S ? h[0] === ">" ? (i = r ?? R, p = -1) : h[1] === void 0 ? p = -2 : (p = i.lastIndex - h[2].length, l = h[1], i = h[3] === void 0 ? S : h[3] === '"' ? Et : Ct) : i === Et || i === Ct ? i = S : i === Tt || i === It ? i = R : (i = S, r = void 0);
264
- const u = i === S && a[n + 1].startsWith("/>") ? " " : "";
265
- o += i === R ? d + me : p >= 0 ? (s.push(l), d.slice(0, p) + Ot + d.slice(p) + k + u) : d + k + (p === -2 ? n : u);
259
+ let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", i = B;
260
+ for (let l = 0; l < e; l++) {
261
+ const d = a[l];
262
+ let c, h, p = -1, f = 0;
263
+ for (; f < d.length && (i.lastIndex = f, h = i.exec(d), h !== null); ) f = i.lastIndex, i === B ? h[1] === "!--" ? i = Tt : h[1] !== void 0 ? i = It : h[2] !== void 0 ? (Mt.test(h[2]) && (r = RegExp("</" + h[2], "g")), i = S) : h[3] !== void 0 && (i = S) : i === S ? h[0] === ">" ? (i = r ?? B, p = -1) : h[1] === void 0 ? p = -2 : (p = i.lastIndex - h[2].length, c = h[1], i = h[3] === void 0 ? S : h[3] === '"' ? Et : Ct) : i === Et || i === Ct ? i = S : i === Tt || i === It ? i = B : (i = S, r = void 0);
264
+ const u = i === S && a[l + 1].startsWith("/>") ? " " : "";
265
+ o += i === B ? d + me : p >= 0 ? (s.push(c), d.slice(0, p) + Ot + d.slice(p) + k + u) : d + k + (p === -2 ? l : u);
266
266
  }
267
267
  return [jt(a, o + (a[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
268
268
  };
@@ -271,12 +271,12 @@ class U {
271
271
  let r;
272
272
  this.parts = [];
273
273
  let o = 0, i = 0;
274
- const n = t.length - 1, d = this.parts, [l, h] = ue(t, e);
275
- if (this.el = U.createElement(l, s), A.currentNode = this.el.content, e === 2 || e === 3) {
274
+ const l = t.length - 1, d = this.parts, [c, h] = ue(t, e);
275
+ if (this.el = U.createElement(c, s), A.currentNode = this.el.content, e === 2 || e === 3) {
276
276
  const p = this.el.content.firstChild;
277
277
  p.replaceWith(...p.childNodes);
278
278
  }
279
- for (; (r = A.nextNode()) !== null && d.length < n; ) {
279
+ for (; (r = A.nextNode()) !== null && d.length < l; ) {
280
280
  if (r.nodeType === 1) {
281
281
  if (r.hasAttributes()) for (const p of r.getAttributeNames()) if (p.endsWith(Ot)) {
282
282
  const f = h[i++], u = r.getAttribute(p).split(k), $ = /([.?@])?(.*)/.exec(f);
@@ -322,11 +322,11 @@ class ge {
322
322
  u(t) {
323
323
  const { el: { content: e }, parts: s } = this._$AD, r = (t?.creationScope ?? T).importNode(e, !0);
324
324
  A.currentNode = r;
325
- let o = A.nextNode(), i = 0, n = 0, d = s[0];
325
+ let o = A.nextNode(), i = 0, l = 0, d = s[0];
326
326
  for (; d !== void 0; ) {
327
327
  if (i === d.index) {
328
- let l;
329
- d.type === 2 ? l = new M(o, o.nextSibling, this, t) : d.type === 1 ? l = new d.ctor(o, d.name, d.strings, this, t) : d.type === 6 && (l = new ye(o, this, t)), this._$AV.push(l), d = s[++n];
328
+ let c;
329
+ d.type === 2 ? c = new M(o, o.nextSibling, this, t) : d.type === 1 ? c = new d.ctor(o, d.name, d.strings, this, t) : d.type === 6 && (c = new ye(o, this, t)), this._$AV.push(c), d = s[++l];
330
330
  }
331
331
  i !== d?.index && (o = A.nextNode(), i++);
332
332
  }
@@ -411,9 +411,9 @@ class tt {
411
411
  let i = !1;
412
412
  if (o === void 0) t = D(this, t, e, 0), i = !N(t) || t !== this._$AH && t !== P, i && (this._$AH = t);
413
413
  else {
414
- const n = t;
415
- let d, l;
416
- for (t = o[0], d = 0; d < o.length - 1; d++) l = D(this, n[s + d], e, d), l === P && (l = this._$AH[d]), i ||= !N(l) || l !== this._$AH[d], l === m ? t = m : t !== m && (t += (l ?? "") + o[d + 1]), this._$AH[d] = l;
414
+ const l = t;
415
+ let d, c;
416
+ for (t = o[0], d = 0; d < o.length - 1; d++) c = D(this, l[s + d], e, d), c === P && (c = this._$AH[d]), i ||= !N(c) || c !== this._$AH[d], c === m ? t = m : t !== m && (t += (c ?? "") + o[d + 1]), this._$AH[d] = c;
417
417
  }
418
418
  i && !r && this.j(t);
419
419
  }
@@ -508,39 +508,39 @@ function Se(a = {}) {
508
508
  }
509
509
  function Ae({ baseUrl: a, token: t = "", fetchFn: e } = {}) {
510
510
  if (!a) throw new Error("createClient requires a baseUrl");
511
- const s = a.replace(/\/+$/, ""), r = e || ((...n) => fetch(...n));
512
- async function o(n) {
511
+ const s = a.replace(/\/+$/, ""), r = e || ((...l) => fetch(...l));
512
+ async function o(l) {
513
513
  const d = { Accept: "application/json" };
514
514
  t && (d.Authorization = `Bearer ${t}`);
515
- const l = await r(`${s}${n}`, { headers: d });
516
- if (!l.ok) {
517
- const h = new Error(`api-hsot ${l.status} on ${n}`);
518
- throw h.status = l.status, h;
515
+ const c = await r(`${s}${l}`, { headers: d });
516
+ if (!c.ok) {
517
+ const h = new Error(`api-hsot ${c.status} on ${l}`);
518
+ throw h.status = c.status, h;
519
519
  }
520
- return l.json();
520
+ return c.json();
521
521
  }
522
- async function i(n, d = {}) {
523
- const l = [];
522
+ async function i(l, d = {}) {
523
+ const c = [];
524
524
  let h = null;
525
525
  for (let p = 0; p < _e; p += 1) {
526
- const f = Se(h ? { ...d, cursor: h } : d), u = await o(`${n}${f}`);
527
- if (l.push(...u.items || []), h = u.nextCursor || null, !h) break;
526
+ const f = Se(h ? { ...d, cursor: h } : d), u = await o(`${l}${f}`);
527
+ if (c.push(...u.items || []), h = u.nextCursor || null, !h) break;
528
528
  }
529
- return { items: l, total: l.length, nextCursor: null };
529
+ return { items: c, total: c.length, nextCursor: null };
530
530
  }
531
531
  return {
532
- listSchools: (n) => i("/schools", n),
533
- getSchool: (n) => o(`/schools/${n}`),
534
- listTeams: (n) => i("/teams", n),
535
- getTeam: (n) => o(`/teams/${n}`),
536
- listConferences: (n) => i("/conferences", n),
537
- listPlayers: (n) => i("/players", n),
538
- listRosters: (n) => i("/rosters", n),
539
- listGames: (n) => i("/games", n),
540
- getGame: (n) => o(`/games/${n}`),
541
- listTournaments: (n) => i("/tournaments", n),
542
- listSeedings: (n, d) => i(`/tournaments/${n}/seedings`, d),
543
- listRankings: (n) => i("/rankings", n),
532
+ listSchools: (l) => i("/schools", l),
533
+ getSchool: (l) => o(`/schools/${l}`),
534
+ listTeams: (l) => i("/teams", l),
535
+ getTeam: (l) => o(`/teams/${l}`),
536
+ listConferences: (l) => i("/conferences", l),
537
+ listPlayers: (l) => i("/players", l),
538
+ listRosters: (l) => i("/rosters", l),
539
+ listGames: (l) => i("/games", l),
540
+ getGame: (l) => o(`/games/${l}`),
541
+ listTournaments: (l) => i("/tournaments", l),
542
+ listSeedings: (l, d) => i(`/tournaments/${l}/seedings`, d),
543
+ listRankings: (l) => i("/rankings", l),
544
544
  listSports: () => o("/sports")
545
545
  };
546
546
  }
@@ -575,6 +575,9 @@ function pt(a) {
575
575
  function Te(a) {
576
576
  return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
577
577
  }
578
+ function Ie(a) {
579
+ return (Array.isArray(a?.positions) ? a.positions : String(a?.position ?? "").split(/[/,]/)).map((e) => String(e ?? "").trim()).filter(Boolean).join("/");
580
+ }
578
581
  function et(a = /* @__PURE__ */ new Date()) {
579
582
  const t = a.getFullYear();
580
583
  return a.getMonth() >= 6 ? `${t}-${t + 1}` : `${t - 1}-${t}`;
@@ -583,7 +586,7 @@ function mt(a = /* @__PURE__ */ new Date()) {
583
586
  const t = (e) => String(e).padStart(2, "0");
584
587
  return `${a.getFullYear()}-${t(a.getMonth() + 1)}-${t(a.getDate())}`;
585
588
  }
586
- function Ie(a, t = mt()) {
589
+ function Ce(a, t = mt()) {
587
590
  const e = [...new Set((a || []).filter(Boolean))].sort();
588
591
  if (!e.length || e.includes(t)) return t;
589
592
  const s = e.filter((r) => r < t);
@@ -597,7 +600,7 @@ function K(a) {
597
600
  const t = parseInt(a.slice(1), 16), e = t >> 16 & 255, s = t >> 8 & 255, r = t & 255;
598
601
  return 0.299 * e + 0.587 * s + 0.114 * r > 150 ? "#0F1B33" : "#FFFFFF";
599
602
  }
600
- const Ce = (a) => {
603
+ const Ee = (a) => {
601
604
  const t = ["th", "st", "nd", "rd"], e = a % 100;
602
605
  return a + (t[(e - 20) % 10] || t[e] || t[0]);
603
606
  };
@@ -608,19 +611,22 @@ function zt(a, t) {
608
611
  }, s = e(a), r = e(t);
609
612
  return s !== null && r !== null && s !== r ? r - s : s !== null && r === null ? -1 : s === null && r !== null ? 1 : String(a ?? "").localeCompare(String(t ?? ""), "en", { sensitivity: "base" });
610
613
  }
611
- function Ee(a, t) {
614
+ function Pe(a, t) {
612
615
  const e = (s) => String(s?.name ?? s ?? "");
613
616
  return e(a).localeCompare(e(t), "en", { numeric: !0, sensitivity: "base" });
614
617
  }
615
618
  function Wt(a) {
616
- if (a.state === "live") return { kind: "live", label: `Live · ${a.period || ""}`.replace(/ · $/, "") };
619
+ if (a.state === "live") {
620
+ const t = [a.period, a.clock].filter(Boolean).join(" ");
621
+ return { kind: "live", label: t ? `Live · ${t}` : "Live" };
622
+ }
617
623
  if (a.state === "final") {
618
624
  const t = [];
619
625
  return a.finish === "overtime" && t.push("OT"), a.finish === "shootout" && t.push("PK-SO"), a.forfeit && a.forfeit !== "none" && t.push("Forfeit"), { kind: "final", label: `Final${t.length ? ` · ${t.join(" · ")}` : ""}` };
620
626
  }
621
627
  return a.state === "postponed" ? { kind: "warn", label: "Postponed" } : a.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${y(a.date, { month: "short", day: "numeric" })} · ${pt(a.time)}`.replace(/ · $/, "") };
622
628
  }
623
- const Pe = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
629
+ const De = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
624
630
  function _(a) {
625
631
  let t = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
626
632
  const e = t.indexOf("#");
@@ -629,13 +635,13 @@ function _(a) {
629
635
  let r = t.split("?")[0] + s;
630
636
  return r = r.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), r = r.replace(/^\/(?=#)/, ""), r.length > 1 && (r = r.replace(/\/+$/, "")), r.toLowerCase();
631
637
  }
632
- function qt() {
638
+ function Gt() {
633
639
  const a = globalThis.location;
634
640
  if (!a) return "";
635
641
  const t = (a.hash || "").startsWith("#/") ? a.hash : "";
636
642
  return _((a.pathname || "") + t);
637
643
  }
638
- function De(a, t, e) {
644
+ function ze(a, t, e) {
639
645
  if (!e) return null;
640
646
  const s = _(a);
641
647
  if (!s) return null;
@@ -644,10 +650,10 @@ function De(a, t, e) {
644
650
  const i = _(g(t.section, { sport: e, view: "" }));
645
651
  if (s === i) return "";
646
652
  if (!s.startsWith(`${i}/`)) return null;
647
- const n = s.slice(i.length + 1), d = n.split("/");
648
- return d.length > 2 || d.some((l) => !/^[a-z][a-z-]*$/.test(l)) || Pe.has(d[0]) ? null : n;
653
+ const l = s.slice(i.length + 1), d = l.split("/");
654
+ return d.length > 2 || d.some((c) => !/^[a-z][a-z-]*$/.test(c)) || De.has(d[0]) ? null : l;
649
655
  }
650
- function ze(a, t, e) {
656
+ function Be(a, t, e) {
651
657
  const s = (i) => g(e.section, { sport: a, view: i }).replace(/([^:])\/{2,}/g, "$1/"), o = new Set((t || []).map((i) => i && i.gender).filter((i) => i === "boys" || i === "girls")).size === 2 ? [
652
658
  { label: "Boys Standings", href: s("boys/standings") },
653
659
  { label: "Girls Standings", href: s("girls/standings") }
@@ -660,7 +666,7 @@ function ze(a, t, e) {
660
666
  { label: "Polls & Rankings", href: s("rankings") }
661
667
  ];
662
668
  }
663
- function Re(a, t = qt()) {
669
+ function Re(a, t = Gt()) {
664
670
  const e = _(t);
665
671
  for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
666
672
  e && _(s.getAttribute("href")) === e ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
@@ -725,13 +731,13 @@ class w extends E {
725
731
  this._refreshId && (clearInterval(this._refreshId), this._refreshId = null);
726
732
  }
727
733
  render() {
728
- return this.error === "not-configured" ? c`<div class="error">This component needs an <code>api</code> attribute (the api-hsot public read-surface base URL) or an injected client.</div>` : this.error ? c`<div class="error">Unable to load right now. <button class="chip" @click=${() => this.load()}>Retry</button></div>` : this.data ? this.renderView() : c`<div class="loading" role="status">Loading…</div>`;
734
+ return this.error === "not-configured" ? n`<div class="error">This component needs an <code>api</code> attribute (the api-hsot public read-surface base URL) or an injected client.</div>` : this.error ? n`<div class="error">Unable to load right now. <button class="chip" @click=${() => this.load()}>Retry</button></div>` : this.data ? this.renderView() : n`<div class="loading" role="status">Loading…</div>`;
729
735
  }
730
736
  renderView() {
731
- return c``;
737
+ return n``;
732
738
  }
733
739
  }
734
- const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
740
+ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Fe = b`
735
741
  :host {
736
742
  --hsot-red: var(--color-red, #D1232A);
737
743
  --hsot-red-deep: var(--color-red-dark, #951C21);
@@ -769,7 +775,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
769
775
  outline-offset: 1px;
770
776
  }
771
777
  .mut { color: var(--hsot-gray-5); }
772
- `, Fe = b`
778
+ `, Ne = b`
773
779
  .band { background: var(--hsot-white); color: var(--hsot-black); }
774
780
  .band .inner { max-width: 1366px; margin: 0 auto; padding: 1.1rem 1.25rem 0; }
775
781
  .band h1, .band h2.bandtitle {
@@ -818,7 +824,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
818
824
  @media (max-width: 720px) {
819
825
  .band h1, .band h2.bandtitle, .band.section h1, .band.section h2.bandtitle { font-size: 1.8rem; }
820
826
  }
821
- `, Ne = b`
827
+ `, Ue = b`
822
828
  .view { max-width: 1366px; margin: 0 auto; padding: 1.25rem; box-sizing: border-box; }
823
829
  /* Optional right rail (slot="rail" light-DOM children): a divided 300px
824
830
  column on desktop, stacked under the view content on smaller screens. */
@@ -882,7 +888,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
882
888
  .error { padding: 1.2rem 1rem; color: var(--hsot-red-deep); font-size: 0.9rem; }
883
889
  .note { font-size: 0.8125rem; color: var(--hsot-gray-5); margin: 0.6rem 0 0; }
884
890
  .loading { padding: 1.2rem; color: var(--hsot-gray-5); font-family: var(--hsot-heading-font); }
885
- `, Ue = b`
891
+ `, Oe = b`
886
892
  .pill {
887
893
  display: inline-block; font-family: var(--hsot-heading-font); font-weight: 700;
888
894
  font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.04em;
@@ -897,7 +903,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
897
903
  .pill.champ { background: var(--hsot-straw); color: #6b5900; }
898
904
  @keyframes hsot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
899
905
  @media (prefers-reduced-motion: reduce) { .pill.live { animation: none; } }
900
- `, Oe = b`
906
+ `, He = b`
901
907
  .tablewrap { overflow-x: auto; }
902
908
  table.data { font-family: var(--hsot-heading-font); font-size: 14px; border-collapse: collapse; width: 100%; }
903
909
  table.data th {
@@ -915,7 +921,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
915
921
  table.data tbody tr.rowlink:hover { background: var(--hsot-gray-1); }
916
922
  table.data td.teamcell a { color: inherit; text-decoration: none; font-weight: 500; }
917
923
  table.data td.teamcell a:hover { text-decoration: underline; }
918
- `, He = b`
924
+ `, Me = b`
919
925
  .swatch {
920
926
  display: inline-flex; align-items: center; justify-content: center;
921
927
  width: 26px; height: 26px; border-radius: 50%;
@@ -939,7 +945,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
939
945
  .dot.W { background: var(--hsot-win); }
940
946
  .dot.L { background: var(--hsot-loss); }
941
947
  .dot.T { background: var(--hsot-tie); }
942
- `, Me = b`
948
+ `, Le = b`
943
949
  ul.gamelist { list-style: none; margin: 0; padding: 0; }
944
950
  .gamelist li {
945
951
  display: flex; align-items: center; gap: 0.7rem; padding: 0.55rem 1rem;
@@ -989,24 +995,24 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
989
995
  .gamelist .ff { color: var(--hsot-gray-5); font-size: 0.78rem; font-style: italic; }
990
996
  .gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
991
997
  .gamelist a.box { font-size: 0.78rem; }
992
- `, j = [Be, Fe, Ne, Ue, Oe, He, Me];
998
+ `, j = [Fe, Ne, Ue, Oe, He, Me, Le];
993
999
  function ut(a) {
994
1000
  return a.state !== "final" ? null : a.forfeit === "home" ? "away" : a.forfeit === "away" || a.homeScore > a.awayScore ? "home" : a.awayScore > a.homeScore ? "away" : a.tiebreakWinner && a.tiebreakWinner !== "none" ? a.tiebreakWinner : "tie";
995
1001
  }
996
- function Le(a) {
1002
+ function je(a) {
997
1003
  return a && (a.forfeit === "home" || a.forfeit === "away") ? a.forfeit : null;
998
1004
  }
999
1005
  function W(a, t) {
1000
1006
  const e = {}, s = (o) => (e[o] = e[o] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, e[o]), r = a.filter((o) => o.state === "final" && o.gameType !== "scrimmage" && !0).sort((o, i) => String(o.date).localeCompare(String(i.date)));
1001
1007
  for (const o of r) {
1002
- const i = ut(o), n = o.gameType === "conference";
1008
+ const i = ut(o), l = o.gameType === "conference";
1003
1009
  for (const d of ["home", "away"]) {
1004
- const l = d === "home" ? o.homeTeamId : o.awayTeamId;
1005
- if (!l) continue;
1006
- const h = s(l), p = d === "home" ? o.homeScore : o.awayScore, f = d === "home" ? o.awayScore : o.homeScore;
1010
+ const c = d === "home" ? o.homeTeamId : o.awayTeamId;
1011
+ if (!c) continue;
1012
+ const h = s(c), p = d === "home" ? o.homeScore : o.awayScore, f = d === "home" ? o.awayScore : o.homeScore;
1007
1013
  h.pf += p, h.pa += f;
1008
1014
  let u = "T";
1009
- i === "tie" ? (h.t += 1, n && (h.ct += 1)) : i === d ? (h.w += 1, n && (h.cw += 1), u = "W") : (h.l += 1, n && (h.cl += 1), u = "L"), h.results.push({ gameId: o.id, date: o.date, mark: u, my: p, their: f, opp: d === "home" ? o.awayTeamId : o.homeTeamId, conf: n });
1015
+ i === "tie" ? (h.t += 1, l && (h.ct += 1)) : i === d ? (h.w += 1, l && (h.cw += 1), u = "W") : (h.l += 1, l && (h.cl += 1), u = "L"), h.results.push({ gameId: o.id, date: o.date, mark: u, my: p, their: f, opp: d === "home" ? o.awayTeamId : o.homeTeamId, conf: l });
1010
1016
  }
1011
1017
  }
1012
1018
  return e;
@@ -1018,19 +1024,19 @@ function st(a) {
1018
1024
  for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
1019
1025
  return t + e;
1020
1026
  }
1021
- const Rt = (a, t, e) => {
1027
+ const Bt = (a, t, e) => {
1022
1028
  const s = a + t + e;
1023
1029
  return s ? (a + e / 2) / s : 0;
1024
- }, Bt = (a) => a.toFixed(3).replace("0.", ".");
1030
+ }, Rt = (a) => a.toFixed(3).replace("0.", ".");
1025
1031
  function x(a, t = !1) {
1026
1032
  if (!a) return "0-0";
1027
1033
  const e = t ? a.cw : a.w, s = t ? a.cl : a.l, r = t ? a.ct : a.t;
1028
1034
  return `${e}-${s}${r ? `-${r}` : ""}`;
1029
1035
  }
1030
- function Gt(a, t) {
1036
+ function qt(a, t) {
1031
1037
  return a.map((e) => {
1032
1038
  const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
1033
- return { team: e, rec: s, confPct: Rt(s.cw, s.cl, s.ct), overallPct: Rt(s.w, s.l, s.t) };
1039
+ return { team: e, rec: s, confPct: Bt(s.cw, s.cl, s.ct), overallPct: Bt(s.w, s.l, s.t) };
1034
1040
  }).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
1035
1041
  }
1036
1042
  function gt(a, t) {
@@ -1046,17 +1052,17 @@ function vt(a, t, e, s, r) {
1046
1052
  const i = /* @__PURE__ */ new Map();
1047
1053
  for (const d of a || []) {
1048
1054
  if (d.sport !== s || r && d.effectiveDate > r || d.gender && o.gender !== d.gender && o.gender !== "coed") continue;
1049
- const l = d.gender || "", h = i.get(l);
1050
- (!h || d.effectiveDate > h.effectiveDate) && i.set(l, d);
1055
+ const c = d.gender || "", h = i.get(c);
1056
+ (!h || d.effectiveDate > h.effectiveDate) && i.set(c, d);
1051
1057
  }
1052
- let n = null;
1058
+ let l = null;
1053
1059
  for (const d of i.values()) {
1054
- const l = (d.teamIds || []).indexOf(e);
1055
- l !== -1 && (!n || d.effectiveDate > n.effectiveDate) && (n = { poll: d, rank: l + 1 });
1060
+ const c = (d.teamIds || []).indexOf(e);
1061
+ c !== -1 && (!l || d.effectiveDate > l.effectiveDate) && (l = { poll: d, rank: c + 1 });
1056
1062
  }
1057
- return n ? n.rank : null;
1063
+ return l ? l.rank : null;
1058
1064
  }
1059
- function je(a, t, e) {
1065
+ function We(a, t, e) {
1060
1066
  if (!a) return { kind: "none", delta: 0 };
1061
1067
  const s = (a.teamIds || []).indexOf(e) + 1;
1062
1068
  if (!s) return { kind: "none", delta: 0 };
@@ -1066,11 +1072,11 @@ function je(a, t, e) {
1066
1072
  const o = r - s;
1067
1073
  return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
1068
1074
  }
1069
- function We(a) {
1075
+ function Ge(a) {
1070
1076
  return /^https?:\/\//i.test(String(a || ""));
1071
1077
  }
1072
1078
  function Vt(a, { w: t, h: e } = {}) {
1073
- if (!We(a)) return "";
1079
+ if (!Ge(a)) return "";
1074
1080
  const s = [];
1075
1081
  t && s.push(`w=${Math.max(1, Math.round(t))}`), e && s.push(`h=${Math.max(1, Math.round(e))}`), s.push("f=webp");
1076
1082
  const r = a.includes("?") ? "&" : "?";
@@ -1084,18 +1090,18 @@ function qe(a, t) {
1084
1090
  return Vt(a?.photoAssetId, { w: t * 2 });
1085
1091
  }
1086
1092
  function $t(a, t, { title: e, sub: s, teams: r }) {
1087
- const o = qt(), n = !!a.querySelector(':scope > a[slot="nav"]') || De(o, t.hrefs, t.sport) !== null;
1088
- return c`
1093
+ const o = Gt(), l = !!a.querySelector(':scope > a[slot="nav"]') || ze(o, t.hrefs, t.sport) !== null;
1094
+ return n`
1089
1095
  <div class="band section">
1090
1096
  <div class="inner">
1091
1097
  <h1>${e}</h1>
1092
- ${s ? c`<p class="sub">${s}</p>` : m}
1098
+ ${s ? n`<p class="sub">${s}</p>` : m}
1093
1099
  </div>
1094
- ${n ? c`
1100
+ ${l ? n`
1095
1101
  <nav class="sectionnav" aria-label="${z(t.sport)} section">
1096
1102
  <div class="navrow">
1097
1103
  <slot name="nav">
1098
- ${ze(t.sport, r, t.hrefs).map((d) => c`<a href=${d.href}
1104
+ ${Be(t.sport, r, t.hrefs).map((d) => n`<a href=${d.href}
1099
1105
  aria-current=${o && _(d.href) === o ? "page" : m}>${d.label}</a>`)}
1100
1106
  </slot>
1101
1107
  </div>
@@ -1111,50 +1117,50 @@ function H(a, t = 26) {
1111
1117
  if (!a) return m;
1112
1118
  const e = Q(a, t);
1113
1119
  if (e)
1114
- return c`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
1120
+ return n`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
1115
1121
  src=${e} style="width:${t}px;height:${t}px" />`;
1116
1122
  const s = a.colorPrimary || "#030711", r = K(s);
1117
- return c`<span class="swatch" aria-hidden="true"
1123
+ return n`<span class="swatch" aria-hidden="true"
1118
1124
  style="width:${t}px;height:${t}px;background:${s};color:${r};font-size:${Math.max(8, t * 0.28)}px"
1119
1125
  >${ft(a)}</span>`;
1120
1126
  }
1121
1127
  function bt(a, t, e) {
1122
1128
  const s = vt(a.rankings, a.teamsById, t, a.sport, e);
1123
- return s ? c`<span class="rankbadge">#${s}</span>` : m;
1129
+ return s ? n`<span class="rankbadge">#${s}</span>` : m;
1124
1130
  }
1125
1131
  function Yt(a, t, e) {
1126
1132
  const s = O(a, t);
1127
- return s ? c`${bt(a, t, e)}<a href=${g(a.hrefs.school, { id: s.id })}>${s.name}</a>` : c`<span class="mut">TBD</span>`;
1133
+ return s ? n`${bt(a, t, e)}<a href=${g(a.hrefs.school, { id: s.id })}>${s.name}</a>` : n`<span class="mut">TBD</span>`;
1128
1134
  }
1129
1135
  function yt(a, t, e = 5) {
1130
1136
  const s = a.records[t];
1131
- if (!s || !s.results.length) return c`<span class="mut">·</span>`;
1137
+ if (!s || !s.results.length) return n`<span class="mut">·</span>`;
1132
1138
  const r = s.results.slice(-1 * e);
1133
- return c`<span class="dots" role="img" aria-label="last ${r.length} results">
1134
- ${r.map((o) => c`<a class="dot ${o.mark}"
1139
+ return n`<span class="dots" role="img" aria-label="last ${r.length} results">
1140
+ ${r.map((o) => n`<a class="dot ${o.mark}"
1135
1141
  title="${o.mark} ${o.my}-${o.their} vs ${C(a, o.opp)}"
1136
1142
  href=${g(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
1137
1143
  </span>`;
1138
1144
  }
1139
- function q(a, t) {
1140
- return a.querySelector(':scope > [slot="rail"]') ? c`<div class="view withrail">
1145
+ function G(a, t) {
1146
+ return a.querySelector(':scope > [slot="rail"]') ? n`<div class="view withrail">
1141
1147
  <div class="viewmain">${t}</div>
1142
1148
  <aside class="viewrail"><slot name="rail"></slot></aside>
1143
- </div>` : c`<div class="view">${t}</div>`;
1149
+ </div>` : n`<div class="view">${t}</div>`;
1144
1150
  }
1145
- function G(a) {
1151
+ function q(a) {
1146
1152
  if (!a.promoImage) return m;
1147
- const t = c`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
1148
- return c`<div class="promo">${a.promoHref ? c`<a href=${a.promoHref} target="_blank" rel="sponsored noopener">${t}</a>` : t}</div>`;
1153
+ const t = n`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
1154
+ return n`<div class="promo">${a.promoHref ? n`<a href=${a.promoHref} target="_blank" rel="sponsored noopener">${t}</a>` : t}</div>`;
1149
1155
  }
1150
1156
  function J(a) {
1151
1157
  const t = Wt(a);
1152
- return c`<span class="pill ${t.kind}">${t.label}</span>`;
1158
+ return n`<span class="pill ${t.kind}">${t.label}</span>`;
1153
1159
  }
1154
1160
  function Kt(a, t, e) {
1155
- if (!t) return c`<span class="mut">·</span>`;
1161
+ if (!t) return n`<span class="mut">·</span>`;
1156
1162
  const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId, r = t.homeTeamId === e ? "vs" : "at";
1157
- return c`${t.state === "live" ? c`<span class="pill live">Live</span> ` : c`${y(t.date, { month: "numeric", day: "numeric" })} `}${r} ${Z(a, s)}`;
1163
+ return n`${t.state === "live" ? n`<span class="pill live">Live</span> ` : n`${y(t.date, { month: "numeric", day: "numeric" })} `}${r} ${Z(a, s)}`;
1158
1164
  }
1159
1165
  class Qt extends w {
1160
1166
  static styles = j;
@@ -1175,20 +1181,20 @@ class Qt extends w {
1175
1181
  this._datePinned = !!this.date;
1176
1182
  }
1177
1183
  async fetchData(t) {
1178
- const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
1184
+ const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
1179
1185
  t.listSchools(),
1180
1186
  t.listTeams({ sport: this.sport }),
1181
1187
  t.listConferences(),
1182
1188
  t.listGames({ sport: this.sport, season: e }),
1183
1189
  t.listRankings({ sport: this.sport })
1184
1190
  ]);
1185
- return this._datePinned || (this.date = Ie(i.items.map((d) => d.date)), this._datePinned = !0), {
1191
+ return this._datePinned || (this.date = Ce(i.items.map((d) => d.date)), this._datePinned = !0), {
1186
1192
  season: e,
1187
1193
  schools: s.items,
1188
1194
  teams: r.items,
1189
1195
  conferences: o.items,
1190
1196
  games: i.items,
1191
- rankings: n.items
1197
+ rankings: l.items
1192
1198
  };
1193
1199
  }
1194
1200
  get ctx() {
@@ -1202,30 +1208,30 @@ class Qt extends w {
1202
1208
  }, this._ctxData = this.data), this._ctx;
1203
1209
  }
1204
1210
  renderView() {
1205
- const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((l) => l.date).filter(Boolean))].sort(), r = Number.MAX_SAFE_INTEGER, o = (l) => {
1206
- const h = [l.awayTeamId, l.homeTeamId].map((p) => vt(t.rankings, t.teamsById, p, this.sport, l.date)).filter(Boolean);
1211
+ const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((c) => c.date).filter(Boolean))].sort(), r = Number.MAX_SAFE_INTEGER, o = (c) => {
1212
+ const h = [c.awayTeamId, c.homeTeamId].map((p) => vt(t.rankings, t.teamsById, p, this.sport, c.date)).filter(Boolean);
1207
1213
  return h.length ? Math.min(...h) : r;
1208
- }, i = this.data.games.filter((l) => l.date === this.date), n = new Map(i.map((l) => [l, o(l)]));
1209
- i.sort((l, h) => (l.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || n.get(l) - n.get(h));
1214
+ }, i = this.data.games.filter((c) => c.date === this.date), l = new Map(i.map((c) => [c, o(c)]));
1215
+ i.sort((c, h) => (c.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || l.get(c) - l.get(h));
1210
1216
  const d = /* @__PURE__ */ new Map();
1211
- return i.forEach((l) => {
1212
- const h = l.gameType === "conference" && l.conferenceId ? e[l.conferenceId]?.name || "Conference" : l.gameType === "playoff" ? "Playoffs" : l.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1213
- d.has(h) || d.set(h, []), d.get(h).push(l);
1214
- }), c`
1217
+ return i.forEach((c) => {
1218
+ const h = c.gameType === "conference" && c.conferenceId ? e[c.conferenceId]?.name || "Conference" : c.gameType === "playoff" ? "Playoffs" : c.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1219
+ d.has(h) || d.set(h, []), d.get(h).push(c);
1220
+ }), n`
1215
1221
  ${$t(this, t, {
1216
- title: c`${z(this.sport)} scores &amp; schedules`,
1217
- sub: c`${y(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${i.length} games`,
1222
+ title: n`${z(this.sport)} scores &amp; schedules`,
1223
+ sub: n`${y(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${i.length} games`,
1218
1224
  teams: this.data.teams
1219
1225
  })}
1220
- ${q(this, c`
1221
- ${G(this)}
1226
+ ${G(this, n`
1227
+ ${q(this)}
1222
1228
  <div class="toolbar">
1223
1229
  <label class="asof" for="datesel">Date</label>
1224
- <select id="datesel" @change=${(l) => {
1225
- this.date = l.target.value;
1230
+ <select id="datesel" @change=${(c) => {
1231
+ this.date = c.target.value;
1226
1232
  }}>
1227
- ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((l) => c`<option value=${l} ?selected=${l === this.date}>
1228
- ${y(l, { weekday: "short", month: "short", day: "numeric" })}${l === mt() ? " · today" : ""}
1233
+ ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((c) => n`<option value=${c} ?selected=${c === this.date}>
1234
+ ${y(c, { weekday: "short", month: "short", day: "numeric" })}${c === mt() ? " · today" : ""}
1229
1235
  </option>`)}
1230
1236
  </select>
1231
1237
  <button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
@@ -1239,9 +1245,9 @@ class Qt extends w {
1239
1245
  <span class="spacer"></span>
1240
1246
  <span class="asof">Live games first · report a score to see it update here</span>
1241
1247
  </div>
1242
- ${i.length ? m : c`<p class="empty">No ${this.sport} games on this date.</p>`}
1243
- ${[...d.entries()].map(([l, h]) => c`
1244
- <div class="section-title">${l}</div>
1248
+ ${i.length ? m : n`<p class="empty">No ${this.sport} games on this date.</p>`}
1249
+ ${[...d.entries()].map(([c, h]) => n`
1250
+ <div class="section-title">${c}</div>
1245
1251
  <div class="card"><ul class="gamelist">
1246
1252
  ${h.map((p) => this.renderGame(t, p))}
1247
1253
  </ul></div>
@@ -1253,14 +1259,14 @@ class Qt extends w {
1253
1259
  // a lone score column on the far right read as detached from the teams).
1254
1260
  // Scheduled games carry their start time on the status pill alone.
1255
1261
  renderGame(t, e) {
1256
- const s = e.state === "final" || e.state === "live", r = (i, n, d = m) => c`<span class="side">${Yt(t, i, e.date)}${s ? c`<span class="score">${n}</span>` : m}${d}</span>`, o = Le(e);
1257
- return c`
1262
+ const s = e.state === "final" || e.state === "live", r = (i, l, d = m) => n`<span class="side">${Yt(t, i, e.date)}${s ? n`<span class="score">${l}</span>` : m}${d}</span>`, o = je(e);
1263
+ return n`
1258
1264
  <li>
1259
1265
  ${J(e)}
1260
- <span class="opp matchup">${r(e.awayTeamId, e.awayScore, c`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
1261
- ${o ? c`<span class="ff">${C(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
1266
+ <span class="opp matchup">${r(e.awayTeamId, e.awayScore, n`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
1267
+ ${o ? n`<span class="ff">${C(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
1262
1268
  <span class="where">${e.venue || ""}</span>
1263
- ${e.broadcast ? c`<span class="pill class">${e.broadcast}</span>` : m}
1269
+ ${e.broadcast ? n`<span class="pill class">${e.broadcast}</span>` : m}
1264
1270
  <a class="box" href=${g(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score →</a>
1265
1271
  </li>
1266
1272
  `;
@@ -1280,7 +1286,7 @@ class Zt extends w {
1280
1286
  super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
1281
1287
  }
1282
1288
  async fetchData(t) {
1283
- const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
1289
+ const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
1284
1290
  t.listConferences({ active: !0 }),
1285
1291
  t.listSchools(),
1286
1292
  t.listTeams({ sport: this.sport }),
@@ -1293,7 +1299,7 @@ class Zt extends w {
1293
1299
  schools: r.items,
1294
1300
  teams: o.items,
1295
1301
  games: i.items,
1296
- rankings: n.items
1302
+ rankings: l.items
1297
1303
  };
1298
1304
  }
1299
1305
  get ctx() {
@@ -1307,18 +1313,18 @@ class Zt extends w {
1307
1313
  }, this._ctxData = this.data), this._ctx;
1308
1314
  }
1309
1315
  renderView() {
1310
- const t = this.ctx, e = ["All", ...[...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].sort(zt)].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter)).sort(Ee);
1311
- return c`
1316
+ const t = this.ctx, e = ["All", ...[...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].sort(zt)].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter)).sort(Pe);
1317
+ return n`
1312
1318
  ${$t(this, t, {
1313
- title: c`${z(this.sport)} standings`,
1314
- sub: c`${this.data.season} season · every conference, computed live from reported results`,
1319
+ title: n`${z(this.sport)} standings`,
1320
+ sub: n`${this.data.season} season · every conference, computed live from reported results`,
1315
1321
  teams: this.data.teams
1316
1322
  })}
1317
- ${q(this, c`
1318
- ${G(this)}
1323
+ ${G(this, n`
1324
+ ${q(this)}
1319
1325
  <div class="toolbar">
1320
1326
  <div role="group" aria-label="Classification filter">
1321
- ${e.map((r) => c`<button class="chip ${this.classFilter === r ? "on" : ""}"
1327
+ ${e.map((r) => n`<button class="chip ${this.classFilter === r ? "on" : ""}"
1322
1328
  @click=${() => {
1323
1329
  this.classFilter = r;
1324
1330
  }}>${r}</button>`)}
@@ -1337,12 +1343,12 @@ class Zt extends w {
1337
1343
  renderConference(t, e) {
1338
1344
  const s = this.data.teams.filter((i) => i.conferenceId === e.id);
1339
1345
  if (!s.length) return m;
1340
- const r = this.query.trim().toLowerCase(), o = Gt(s, t.records);
1341
- return c`
1346
+ const r = this.query.trim().toLowerCase(), o = qt(s, t.records);
1347
+ return n`
1342
1348
  <div class="card">
1343
1349
  <div class="card-head">
1344
1350
  <h2>${e.name}</h2>
1345
- ${[...e.classifications || []].sort(zt).map((i) => c`<span class="pill class">${i}</span>`)}
1351
+ ${[...e.classifications || []].sort(zt).map((i) => n`<span class="pill class">${i}</span>`)}
1346
1352
  <span class="meta">${o.length} teams · membership derives from teams</span>
1347
1353
  </div>
1348
1354
  <div class="tablewrap"><table class="data">
@@ -1352,7 +1358,7 @@ class Zt extends w {
1352
1358
  <th>Streak</th><th>Last 5</th><th>Next</th>
1353
1359
  </tr></thead>
1354
1360
  <tbody>
1355
- ${o.map((i, n) => this.renderRow(t, i, n, r))}
1361
+ ${o.map((i, l) => this.renderRow(t, i, l, r))}
1356
1362
  </tbody>
1357
1363
  </table></div>
1358
1364
  </div>
@@ -1361,12 +1367,12 @@ class Zt extends w {
1361
1367
  renderRow(t, e, s, r) {
1362
1368
  const o = t.schoolsById[e.team.schoolId], i = o?.name || e.team.name || "TBD";
1363
1369
  if (r && !i.toLowerCase().includes(r)) return m;
1364
- const n = e.rec.pf - e.rec.pa, d = gt(this.data.games, e.team.id), l = () => {
1370
+ const l = e.rec.pf - e.rec.pa, d = gt(this.data.games, e.team.id), c = () => {
1365
1371
  location.href = g(t.hrefs.school, { id: e.team.schoolId });
1366
1372
  };
1367
- return c`
1373
+ return n`
1368
1374
  <tr class="rowlink" @click=${(h) => {
1369
- h.target.closest("a") || l();
1375
+ h.target.closest("a") || c();
1370
1376
  }}>
1371
1377
  <td class="mut">${s + 1}</td>
1372
1378
  <td class="teamcell">
@@ -1374,12 +1380,12 @@ class Zt extends w {
1374
1380
  <a href=${g(t.hrefs.school, { id: e.team.schoolId })}>${i}</a>
1375
1381
  </td>
1376
1382
  <td class="num">${x(e.rec, !0)}</td>
1377
- <td class="num">${Bt(e.confPct)}</td>
1383
+ <td class="num">${Rt(e.confPct)}</td>
1378
1384
  <td class="num">${x(e.rec)}</td>
1379
- <td class="num">${Bt(e.overallPct)}</td>
1385
+ <td class="num">${Rt(e.overallPct)}</td>
1380
1386
  <td class="num">${e.rec.pf}</td>
1381
1387
  <td class="num">${e.rec.pa}</td>
1382
- <td class="num" style="color:${n >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${n > 0 ? "+" : ""}${n}</td>
1388
+ <td class="num" style="color:${l >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${l > 0 ? "+" : ""}${l}</td>
1383
1389
  <td>${st(e.rec.results) || "·"}</td>
1384
1390
  <td>${yt(t, e.team.id)}</td>
1385
1391
  <td>${Kt(t, d, e.team.id)}</td>
@@ -1388,7 +1394,7 @@ class Zt extends w {
1388
1394
  }
1389
1395
  }
1390
1396
  globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", Zt);
1391
- const Ge = b`
1397
+ const Ve = b`
1392
1398
  .hero1 {
1393
1399
  border-radius: var(--hsot-radius-md); color: var(--hsot-white);
1394
1400
  padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
@@ -1406,7 +1412,7 @@ const Ge = b`
1406
1412
  .sparkline { vertical-align: middle; }
1407
1413
  `;
1408
1414
  class Jt extends w {
1409
- static styles = [...j, Ge];
1415
+ static styles = [...j, Ve];
1410
1416
  static properties = {
1411
1417
  ...w.properties,
1412
1418
  sport: { type: String },
@@ -1423,20 +1429,20 @@ class Jt extends w {
1423
1429
  t && (this.pollDate = t);
1424
1430
  }
1425
1431
  async fetchData(t) {
1426
- const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
1432
+ const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
1427
1433
  t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
1428
1434
  t.listSchools(),
1429
1435
  t.listTeams({ sport: this.sport }),
1430
1436
  t.listConferences(),
1431
1437
  t.listGames({ sport: this.sport, season: e })
1432
- ]), d = s.items.filter((l) => !this.gender || !l.gender || l.gender === this.gender).sort((l, h) => h.effectiveDate.localeCompare(l.effectiveDate));
1438
+ ]), d = s.items.filter((c) => !this.gender || !c.gender || c.gender === this.gender).sort((c, h) => h.effectiveDate.localeCompare(c.effectiveDate));
1433
1439
  return {
1434
1440
  season: e,
1435
1441
  polls: d,
1436
1442
  schools: r.items,
1437
1443
  teams: o.items,
1438
1444
  conferences: i.items,
1439
- games: n.items
1445
+ games: l.items
1440
1446
  };
1441
1447
  }
1442
1448
  get ctx() {
@@ -1450,45 +1456,45 @@ class Jt extends w {
1450
1456
  }, this._ctxData = this.data), this._ctx;
1451
1457
  }
1452
1458
  sparkline(t, e, s) {
1453
- const n = e.map((p, f) => {
1459
+ const l = e.map((p, f) => {
1454
1460
  const u = (p.teamIds || []).indexOf(t);
1455
1461
  if (u === -1) return null;
1456
1462
  const $ = e.length === 1 ? 96 / 2 : f / (e.length - 1) * 90 + 3, at = 3 + u / 24 * 20;
1457
1463
  return { x: $, y: at };
1458
1464
  }), d = [];
1459
- let l = [];
1460
- if (n.forEach((p) => {
1461
- p ? l.push(p) : l.length && (d.push(l), l = []);
1462
- }), l.length && d.push(l), !d.length) return m;
1463
- const h = n[s];
1464
- return c`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1465
+ let c = [];
1466
+ if (l.forEach((p) => {
1467
+ p ? c.push(p) : c.length && (d.push(c), c = []);
1468
+ }), c.length && d.push(c), !d.length) return m;
1469
+ const h = l[s];
1470
+ return n`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1465
1471
  ${d.map((p) => Pt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1466
1472
  points=${p.map((f) => `${f.x.toFixed(1)},${f.y.toFixed(1)}`).join(" ")}></polyline>`)}
1467
1473
  ${h ? Pt`<circle cx=${h.x.toFixed(1)} cy=${h.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
1468
1474
  </svg>`;
1469
1475
  }
1470
1476
  movement(t, e, s) {
1471
- const r = je(t, e, s);
1472
- return r.kind === "up" ? c`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? c`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? c`<span class="delta new">NEW</span>` : r.kind === "same" ? c`<span class="delta same">—</span>` : c`<span class="delta same">·</span>`;
1477
+ const r = We(t, e, s);
1478
+ return r.kind === "up" ? n`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? n`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? n`<span class="delta new">NEW</span>` : r.kind === "same" ? n`<span class="delta same">—</span>` : n`<span class="delta same">·</span>`;
1473
1479
  }
1474
1480
  renderView() {
1475
1481
  const t = this.ctx, e = this.data.polls;
1476
- if (!e.length) return c`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
1477
- const s = Math.max(0, e.findIndex((p) => p.effectiveDate === this.pollDate)), r = e[s] || e[0], o = e[s + 1] || null, i = e.slice().reverse(), n = i.indexOf(r), d = v(this.data.conferences), l = (r.teamIds || [])[0], h = l ? O(t, l) : null;
1478
- return c`
1482
+ if (!e.length) return n`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
1483
+ const s = Math.max(0, e.findIndex((p) => p.effectiveDate === this.pollDate)), r = e[s] || e[0], o = e[s + 1] || null, i = e.slice().reverse(), l = i.indexOf(r), d = v(this.data.conferences), c = (r.teamIds || [])[0], h = c ? O(t, c) : null;
1484
+ return n`
1479
1485
  ${$t(this, t, {
1480
- title: c`${z(this.sport)} Top 25`,
1481
- sub: c`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
1486
+ title: n`${z(this.sport)} Top 25`,
1487
+ sub: n`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
1482
1488
  teams: this.data.teams
1483
1489
  })}
1484
- ${q(this, c`
1485
- ${G(this)}
1490
+ ${G(this, n`
1491
+ ${q(this)}
1486
1492
  <div class="toolbar">
1487
1493
  <label class="asof" for="pollsel">Poll of</label>
1488
1494
  <select id="pollsel" @change=${(p) => {
1489
1495
  this.pollDate = p.target.value;
1490
1496
  }}>
1491
- ${e.map((p, f) => c`<option value=${p.effectiveDate} ?selected=${p === r}>
1497
+ ${e.map((p, f) => n`<option value=${p.effectiveDate} ?selected=${p === r}>
1492
1498
  ${y(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${f === 0 ? " · current" : ""}
1493
1499
  </option>`)}
1494
1500
  </select>
@@ -1503,14 +1509,14 @@ class Jt extends w {
1503
1509
  <span class="spacer"></span>
1504
1510
  <span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
1505
1511
  </div>
1506
- ${h ? this.renderHero(t, r, o, l, h, d) : m}
1512
+ ${h ? this.renderHero(t, r, o, c, h, d) : m}
1507
1513
  <div class="card"><div class="tablewrap"><table class="data">
1508
1514
  <thead><tr>
1509
1515
  <th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
1510
1516
  <th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
1511
1517
  </tr></thead>
1512
1518
  <tbody>
1513
- ${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i, n, d, p, f + 1))}
1519
+ ${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i, l, d, p, f + 1))}
1514
1520
  </tbody>
1515
1521
  </table></div></div>
1516
1522
  <p class="note">Ranks elsewhere on the site resolve the poll in effect on the game date, so past box scores keep the ranks they were played under.</p>
@@ -1518,50 +1524,50 @@ class Jt extends w {
1518
1524
  `;
1519
1525
  }
1520
1526
  renderHero(t, e, s, r, o, i) {
1521
- const n = t.records[r], d = Ft(t.records, r), l = i[t.teamsById[r]?.conferenceId], h = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
1522
- return c`
1527
+ const l = t.records[r], d = Ft(t.records, r), c = i[t.teamsById[r]?.conferenceId], h = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
1528
+ return n`
1523
1529
  <div class="hero1" style="background:${h}">
1524
1530
  <div class="bigrank">#1</div>
1525
1531
  ${H(o, 64)}
1526
1532
  <div>
1527
1533
  <h2><a href=${g(t.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
1528
1534
  <div class="facts">
1529
- ${x(n)} overall${l ? c` · ${x(n, !0)} ${l.name}` : m}
1530
- · streak ${st(n?.results) || "·"}
1531
- ${d ? c` · last: ${d.mark} ${d.my}-${d.their} vs ${Z(t, d.opp)}` : m}
1535
+ ${x(l)} overall${c ? n` · ${x(l, !0)} ${c.name}` : m}
1536
+ · streak ${st(l?.results) || "·"}
1537
+ ${d ? n` · last: ${d.mark} ${d.my}-${d.their} vs ${Z(t, d.opp)}` : m}
1532
1538
  &nbsp;${this.movement(e, s, r)}
1533
1539
  </div>
1534
1540
  </div>
1535
1541
  </div>
1536
1542
  `;
1537
1543
  }
1538
- renderRow(t, e, s, r, o, i, n, d) {
1539
- const l = O(t, n);
1540
- if (!l) return m;
1541
- const h = t.records[n], p = Ft(t.records, n), f = gt(this.data.games, n), u = i[t.teamsById[n]?.conferenceId], $ = () => {
1542
- location.href = g(t.hrefs.school, { id: l.id });
1544
+ renderRow(t, e, s, r, o, i, l, d) {
1545
+ const c = O(t, l);
1546
+ if (!c) return m;
1547
+ const h = t.records[l], p = Ft(t.records, l), f = gt(this.data.games, l), u = i[t.teamsById[l]?.conferenceId], $ = () => {
1548
+ location.href = g(t.hrefs.school, { id: c.id });
1543
1549
  };
1544
- return c`
1550
+ return n`
1545
1551
  <tr class="rowlink" @click=${(at) => {
1546
1552
  at.target.closest("a") || $();
1547
1553
  }}>
1548
1554
  <td class="num" style="font-weight:700">${d}</td>
1549
- <td>${this.movement(e, s, n)}</td>
1550
- <td class="teamcell">${H(l)}<a href=${g(t.hrefs.school, { id: l.id })}>${l.name}</a>
1551
- <span class="mut" style="font-size:0.78rem">${l.mascot || ""}</span></td>
1555
+ <td>${this.movement(e, s, l)}</td>
1556
+ <td class="teamcell">${H(c)}<a href=${g(t.hrefs.school, { id: c.id })}>${c.name}</a>
1557
+ <span class="mut" style="font-size:0.78rem">${c.mascot || ""}</span></td>
1552
1558
  <td class="num">${x(h)}</td>
1553
1559
  <td class="mut">${u?.name || "Independent"}</td>
1554
- <td>${p ? c`<a class="box" style="text-decoration:none" href=${g(t.hrefs.game, { sport: this.sport, id: p.gameId })}>
1560
+ <td>${p ? n`<a class="box" style="text-decoration:none" href=${g(t.hrefs.game, { sport: this.sport, id: p.gameId })}>
1555
1561
  <b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
1556
- ${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` : c`<span class="mut">·</span>`}</td>
1557
- <td>${Kt(t, f, n)}</td>
1558
- <td>${this.sparkline(n, r, o)}</td>
1562
+ ${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` : n`<span class="mut">·</span>`}</td>
1563
+ <td>${Kt(t, f, l)}</td>
1564
+ <td>${this.sparkline(l, r, o)}</td>
1559
1565
  </tr>
1560
1566
  `;
1561
1567
  }
1562
1568
  }
1563
1569
  globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", Jt);
1564
- const Ve = b`
1570
+ const Ye = b`
1565
1571
  .schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
1566
1572
  .schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
1567
1573
  .schoolhero .crest {
@@ -1616,7 +1622,7 @@ const Ve = b`
1616
1622
  }
1617
1623
  `;
1618
1624
  class Xt extends w {
1619
- static styles = [...j, Ve];
1625
+ static styles = [...j, Ye];
1620
1626
  static properties = {
1621
1627
  ...w.properties,
1622
1628
  schoolId: { type: String, attribute: "school-id" },
@@ -1633,7 +1639,7 @@ class Xt extends w {
1633
1639
  t && !this.sport && (this.sport = t);
1634
1640
  }
1635
1641
  async fetchData(t) {
1636
- const e = this.season || et(), s = await t.getSchool(this.schoolId), o = (await t.listTeams({ schoolId: this.schoolId })).items, i = o.find(($) => $.sport === (this.sport || "football")) || o[0] || null, [n, d, l, h, p, f, u] = await Promise.all([
1642
+ const e = this.season || et(), s = await t.getSchool(this.schoolId), o = (await t.listTeams({ schoolId: this.schoolId })).items, i = o.find(($) => $.sport === (this.sport || "football")) || o[0] || null, [l, d, c, h, p, f, u] = await Promise.all([
1637
1643
  i ? t.listGames({ sport: i.sport, season: e }) : Promise.resolve({ items: [] }),
1638
1644
  i ? t.listTeams({ sport: i.sport }) : Promise.resolve({ items: [] }),
1639
1645
  t.listSchools(),
@@ -1649,9 +1655,9 @@ class Xt extends w {
1649
1655
  school: s,
1650
1656
  teams: o,
1651
1657
  active: i,
1652
- games: n.items,
1658
+ games: l.items,
1653
1659
  allTeams: d.items,
1654
- schools: l.items,
1660
+ schools: c.items,
1655
1661
  conferences: h.items,
1656
1662
  rankings: p.items,
1657
1663
  roster: f.items.find(($) => $.season === e) || null,
@@ -1673,61 +1679,61 @@ class Xt extends w {
1673
1679
  }
1674
1680
  renderView() {
1675
1681
  const { school: t, teams: e, active: s, season: r } = this.data;
1676
- if (!t) return c`<div class="view"><p class="empty">School not found.</p></div>`;
1677
- const o = this.ctx, i = K(t.colorPrimary || "#030711"), n = (t.adm || [])[0], d = v(this.data.conferences), l = s ? d[s.conferenceId] : null;
1678
- return c`
1682
+ if (!t) return n`<div class="view"><p class="empty">School not found.</p></div>`;
1683
+ const o = this.ctx, i = K(t.colorPrimary || "#030711"), l = (t.adm || [])[0], d = v(this.data.conferences), c = s ? d[s.conferenceId] : null;
1684
+ return n`
1679
1685
  <div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${i}">
1680
1686
  <div class="inner">
1681
- ${Q(t, 84) ? c`<img class="crest logo" alt="" loading="lazy" src=${Q(t, 84)} />` : c`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${K(t.colorSecondary || "#7C7C7C")}">${ft(t)}</div>`}
1687
+ ${Q(t, 84) ? n`<img class="crest logo" alt="" loading="lazy" src=${Q(t, 84)} />` : n`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${K(t.colorSecondary || "#7C7C7C")}">${ft(t)}</div>`}
1682
1688
  <div style="min-width:260px">
1683
1689
  <h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
1684
1690
  <div class="facts">
1685
- ${t.location ? c`<span><b>Location</b>${t.location}${t.county ? c` · ${t.county} County` : m}</span>` : m}
1686
- ${t.association ? c`<span><b>League</b>${t.association}${t.classification ? c` · ${t.classification}` : m}</span>` : m}
1687
- ${l ? c`<span><b>Conference</b>${l.name}</span>` : m}
1688
- ${n ? c`<span><b>Enrollment</b>${n.value.toLocaleString()} (${n.season} ADM)</span>` : m}
1689
- ${t.openingYear ? c`<span><b>Opened</b>${t.openingYear}</span>` : m}
1690
- ${t.areaCode ? c`<span><b>Area</b>${t.areaCode}</span>` : m}
1691
+ ${t.location ? n`<span><b>Location</b>${t.location}${t.county ? n` · ${t.county} County` : m}</span>` : m}
1692
+ ${t.association ? n`<span><b>League</b>${t.association}${t.classification ? n` · ${t.classification}` : m}</span>` : m}
1693
+ ${c ? n`<span><b>Conference</b>${c.name}</span>` : m}
1694
+ ${l ? n`<span><b>Enrollment</b>${l.value.toLocaleString()} (${l.season} ADM)</span>` : m}
1695
+ ${t.openingYear ? n`<span><b>Opened</b>${t.openingYear}</span>` : m}
1696
+ ${t.areaCode ? n`<span><b>Area</b>${t.areaCode}</span>` : m}
1691
1697
  </div>
1692
1698
  </div>
1693
1699
  </div>
1694
1700
  </div>
1695
1701
  <div class="band">
1696
1702
  <nav class="tabs" aria-label="Teams">
1697
- ${e.map((h) => h.id === s?.id ? c`<a class="on" href="#" @click=${(p) => p.preventDefault()}>${h.name}</a>` : c`<a href="#" @click=${(p) => {
1703
+ ${e.map((h) => h.id === s?.id ? n`<a class="on" href="#" @click=${(p) => p.preventDefault()}>${h.name}</a>` : n`<a href="#" @click=${(p) => {
1698
1704
  p.preventDefault(), this.switchSport(h.sport);
1699
1705
  }}>${h.name}</a>`)}
1700
1706
  </nav>
1701
1707
  </div>
1702
- ${q(this, c`
1703
- ${G(this)}
1704
- ${s ? this.renderTeam(o, s, l, r) : c`<p class="empty">No teams recorded for this school yet.</p>`}
1708
+ ${G(this, n`
1709
+ ${q(this)}
1710
+ ${s ? this.renderTeam(o, s, c, r) : n`<p class="empty">No teams recorded for this school yet.</p>`}
1705
1711
  `)}
1706
1712
  `;
1707
1713
  }
1708
1714
  renderTeam(t, e, s, r) {
1709
- const o = t.records[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, i = o.w + o.l + o.t, n = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], d = s ? Gt(n, t.records).findIndex((p) => p.team.id === e.id) + 1 : 0, l = vt(t.rankings, t.teamsById, e.id, e.sport, null), h = this.data.games.filter((p) => p.homeTeamId === e.id || p.awayTeamId === e.id).sort((p, f) => String(p.date).localeCompare(String(f.date)));
1710
- return c`
1715
+ const o = t.records[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, i = o.w + o.l + o.t, l = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], d = s ? qt(l, t.records).findIndex((p) => p.team.id === e.id) + 1 : 0, c = vt(t.rankings, t.teamsById, e.id, e.sport, null), h = this.data.games.filter((p) => p.homeTeamId === e.id || p.awayTeamId === e.id).sort((p, f) => String(p.date).localeCompare(String(f.date)));
1716
+ return n`
1711
1717
  <div class="tiles">
1712
1718
  <div class="tile"><div class="k">Overall</div><div class="v">${x(o)}</div><div class="s">${i} games played</div></div>
1713
1719
  <div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${x(o, !0)}</div>
1714
- <div class="s">${d ? `${Ce(d)} of ${n.length}` : "·"}</div></div>
1720
+ <div class="s">${d ? `${Ee(d)} of ${l.length}` : "·"}</div></div>
1715
1721
  <div class="tile"><div class="k">Points</div><div class="v">${i ? (o.pf / i).toFixed(1) : "0.0"}</div>
1716
1722
  <div class="s">scored per game · ${i ? (o.pa / i).toFixed(1) : "0.0"} allowed</div></div>
1717
1723
  <div class="tile"><div class="k">Streak</div><div class="v">${st(o.results) || "·"}</div>
1718
1724
  <div class="s">last 5: ${yt(t, e.id)}</div></div>
1719
- <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${l ? `#${l}` : "NR"}</div>
1725
+ <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${c ? `#${c}` : "NR"}</div>
1720
1726
  <div class="s"><a href=${g(t.hrefs.section, { sport: e.sport, view: "rankings" })}>full poll</a></div></div>
1721
1727
  </div>
1722
- ${(e.championships || []).length ? c`
1728
+ ${(e.championships || []).length ? n`
1723
1729
  <div style="margin:-0.2rem 0 1rem;display:flex;gap:0.4rem;flex-wrap:wrap">
1724
- ${e.championships.map((p) => c`<span class="pill champ">★ ${p.season} ${p.title} champion${p.classification ? ` · ${p.classification}` : ""}${p.region ? ` · ${p.region}` : ""}</span>`)}
1730
+ ${e.championships.map((p) => n`<span class="pill champ">★ ${p.season} ${p.title} champion${p.classification ? ` · ${p.classification}` : ""}${p.region ? ` · ${p.region}` : ""}</span>`)}
1725
1731
  </div>` : m}
1726
1732
  <div class="cols">
1727
1733
  <div>
1728
1734
  <div class="section-title">Schedule &amp; results</div>
1729
1735
  <div class="card">
1730
- ${h.length ? c`<ul class="gamelist">${h.map((p) => this.renderGameRow(t, e, p))}</ul>` : c`<p class="empty">No ${e.sport} games recorded for ${r}.</p>`}
1736
+ ${h.length ? n`<ul class="gamelist">${h.map((p) => this.renderGameRow(t, e, p))}</ul>` : n`<p class="empty">No ${e.sport} games recorded for ${r}.</p>`}
1731
1737
  </div>
1732
1738
  </div>
1733
1739
  <div>
@@ -1738,21 +1744,21 @@ class Xt extends w {
1738
1744
  `;
1739
1745
  }
1740
1746
  renderGameRow(t, e, s) {
1741
- const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, i = r ? s.homeScore : s.awayScore, n = r ? s.awayScore : s.homeScore;
1742
- let d = c`<span class="mut">${pt(s.time)}</span>`;
1747
+ const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, i = r ? s.homeScore : s.awayScore, l = r ? s.awayScore : s.homeScore;
1748
+ let d = n`<span class="mut">${pt(s.time)}</span>`;
1743
1749
  if (s.state === "final") {
1744
1750
  const h = ut(s), p = h === "tie" ? "T" : h === (r ? "home" : "away") ? "W" : "L";
1745
- d = c`<span class=${p}>${p}</span> ${i}-${n}${s.finish === "overtime" ? c` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? c` <span class="mut">FF</span>` : m}`;
1746
- } else s.state === "live" && (d = c`<span style="color:var(--hsot-red)">${i}-${n}</span>`);
1747
- const l = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1748
- return c`
1751
+ d = n`<span class=${p}>${p}</span> ${i}-${l}${s.finish === "overtime" ? n` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? n` <span class="mut">FF</span>` : m}`;
1752
+ } else s.state === "live" && (d = n`<span style="color:var(--hsot-red)">${i}-${l}</span>`);
1753
+ const c = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1754
+ return n`
1749
1755
  <li>
1750
1756
  <span class="d">${y(s.date)}</span>
1751
1757
  ${Wt(s).kind === "sched" ? m : J(s)}
1752
1758
  <span class="res">${d}</span>
1753
1759
  <span class="opp">${r ? "vs" : "at"} ${Yt(t, o, s.date)}
1754
- <span class="pill type">${l}</span>
1755
- ${s.broadcast ? c`<span class="pill class">${s.broadcast}</span>` : m}
1760
+ <span class="pill type">${c}</span>
1761
+ ${s.broadcast ? n`<span class="pill class">${s.broadcast}</span>` : m}
1756
1762
  </span>
1757
1763
  <span class="where">${s.venue || ""}</span>
1758
1764
  <a class="box" href=${g(t.hrefs.game, { sport: e.sport, id: s.id })}>Box score →</a>
@@ -1762,26 +1768,26 @@ class Xt extends w {
1762
1768
  renderRoster(t, e) {
1763
1769
  const s = this.data.roster;
1764
1770
  if (!s)
1765
- return c`<p class="empty">Roster not published for ${e}.</p>`;
1766
- const r = qe(s, 560), o = this.data.school?.name || "", i = v(this.data.players), n = s.entries.slice().sort((l, h) => (l.number || 0) - (h.number || 0)), d = n.some((l) => i[l.playerId]?.college);
1767
- return c`
1768
- ${r ? c`<img class="rosterphoto" src=${r} loading="lazy" decoding="async"
1771
+ return n`<p class="empty">Roster not published for ${e}.</p>`;
1772
+ const r = qe(s, 560), o = this.data.school?.name || "", i = v(this.data.players), l = s.entries.slice().sort((c, h) => (c.number || 0) - (h.number || 0)), d = l.some((c) => i[c.playerId]?.college);
1773
+ return n`
1774
+ ${r ? n`<img class="rosterphoto" src=${r} loading="lazy" decoding="async"
1769
1775
  alt="${o} ${t.name} ${e} team photo" />` : m}
1770
1776
  <div class="tablewrap"><table class="data roster">
1771
- <thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${d ? c`<th>College</th>` : m}</tr></thead>
1777
+ <thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${d ? n`<th>College</th>` : m}</tr></thead>
1772
1778
  <tbody>
1773
- ${n.map((l) => {
1774
- const h = i[l.playerId];
1779
+ ${l.map((c) => {
1780
+ const h = i[c.playerId];
1775
1781
  if (!h) return m;
1776
- const p = [l.position, h.classOf].filter(Boolean).join(" · ") || "·";
1777
- return c`<tr>
1778
- <td class="num mut">${l.number ?? "·"}</td>
1779
- <td class="player" style="font-weight:500">${h.firstName} ${h.lastName}<span class="sub">${p}</span></td>
1780
- <td class="pos">${l.position || "·"}</td>
1782
+ const p = Ie(c), f = [p, h.classOf].filter(Boolean).join(" · ") || "·";
1783
+ return n`<tr>
1784
+ <td class="num mut">${c.number ?? "·"}</td>
1785
+ <td class="player" style="font-weight:500">${h.firstName} ${h.lastName}<span class="sub">${f}</span></td>
1786
+ <td class="pos">${p || "·"}</td>
1781
1787
  <td class="cls mut">${h.classOf || "·"}</td>
1782
1788
  <td class="num">${Te(h.heightIn)}</td>
1783
1789
  <td class="num">${h.weightLb || "·"}</td>
1784
- ${d ? c`<td class="college">${h.college || "·"}</td>` : m}
1790
+ ${d ? n`<td class="college">${h.college || "·"}</td>` : m}
1785
1791
  </tr>`;
1786
1792
  })}
1787
1793
  </tbody>
@@ -1790,12 +1796,12 @@ class Xt extends w {
1790
1796
  }
1791
1797
  }
1792
1798
  globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", Xt);
1793
- const Ye = "https://api.wral.com/search";
1794
- function Ke(a) {
1799
+ const Ke = "https://api.wral.com/search";
1800
+ function Qe(a) {
1795
1801
  return a.map((t) => `uri:"${t}"`).join(" OR ");
1796
1802
  }
1797
- function Qe(a, t) {
1798
- const e = String(a || Ye).replace(/\/+$/, ""), s = new URLSearchParams({ query: Ke(t), sort: "score", lang: "en" });
1803
+ function Ze(a, t) {
1804
+ const e = String(a || Ke).replace(/\/+$/, ""), s = new URLSearchParams({ query: Qe(t), sort: "score", lang: "en" });
1799
1805
  return `${e}/v1/query?${s}`;
1800
1806
  }
1801
1807
  function te(a) {
@@ -1813,13 +1819,13 @@ function te(a) {
1813
1819
  }
1814
1820
  return { uri: a, title: a };
1815
1821
  }
1816
- async function Ze(a, t, e) {
1817
- const r = await ((...n) => fetch(...n))(Qe(a, t));
1822
+ async function Je(a, t, e) {
1823
+ const r = await ((...l) => fetch(...l))(Ze(a, t));
1818
1824
  if (!r.ok) throw new Error(`search answered ${r.status}`);
1819
- const o = await r.json(), i = new Map((o.items || []).map((n) => [n.uri, n]));
1820
- return t.map((n) => i.get(n) || te(n));
1825
+ const o = await r.json(), i = new Map((o.items || []).map((l) => [l.uri, l]));
1826
+ return t.map((l) => i.get(l) || te(l));
1821
1827
  }
1822
- const Je = b`
1828
+ const Xe = b`
1823
1829
  .breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
1824
1830
  .breadcrumbs a { text-decoration: none; }
1825
1831
  .scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
@@ -1848,6 +1854,20 @@ const Je = b`
1848
1854
  .covtitle { font-family: var(--hsot-heading-font); font-weight: 700; font-size: 1.05rem; line-height: 1.25; overflow-wrap: anywhere; }
1849
1855
  .covdesc { margin: 0.35rem 0 0; font-size: 0.85rem; color: var(--hsot-gray-5); line-height: 1.4; }
1850
1856
  .covmeta { margin-top: 0.45rem; font-size: 0.78rem; color: var(--hsot-gray-5); }
1857
+ /* Scoring plays: a compact log under the line score. The play cell is the
1858
+ one table.data cell allowed to wrap — a 60-yard touchdown description
1859
+ must fit a phone. */
1860
+ .plays { border-top: 1px solid var(--hsot-gray-2); padding: 0.7rem 1rem 0.9rem; }
1861
+ .plays-title {
1862
+ font-family: var(--hsot-heading-font); font-weight: 700; font-size: 0.9rem;
1863
+ text-transform: uppercase; letter-spacing: 0.03em; color: var(--hsot-gray-6);
1864
+ text-align: center; margin: 0 0 0.4rem;
1865
+ }
1866
+ table.plays-table { max-width: 720px; margin: 0 auto; }
1867
+ table.plays-table td.when { color: var(--hsot-gray-5); font-variant-numeric: tabular-nums; }
1868
+ table.plays-table td.play { white-space: normal; min-width: 12rem; }
1869
+ /* Game notes are typed with line breaks the desk means to keep. */
1870
+ .gamenote { padding: 0 1rem 0.9rem; text-align: center; white-space: pre-line; }
1851
1871
  .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
1852
1872
  .ctxcard { padding: 0.85rem 1rem; }
1853
1873
  .ctxcard .who { font-family: var(--hsot-heading-font); font-weight: 700; margin-bottom: 0.4rem; }
@@ -1859,7 +1879,7 @@ const Je = b`
1859
1879
  }
1860
1880
  `;
1861
1881
  class ee extends w {
1862
- static styles = [...j, Je];
1882
+ static styles = [...j, Xe];
1863
1883
  static properties = {
1864
1884
  ...w.properties,
1865
1885
  gameId: { type: String, attribute: "game-id" },
@@ -1873,7 +1893,7 @@ class ee extends w {
1873
1893
  super(), this.gameId = "", this.searchApi = "";
1874
1894
  }
1875
1895
  async fetchData(t) {
1876
- const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, i, n, d, l] = await Promise.all([
1896
+ const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, i, l, d, c] = await Promise.all([
1877
1897
  t.listSchools(),
1878
1898
  t.listTeams({ sport: e.sport }),
1879
1899
  t.listConferences(),
@@ -1881,16 +1901,16 @@ class ee extends w {
1881
1901
  t.listGames({ sport: e.sport, season: e.season }),
1882
1902
  // A search outage must not blank the box score — degrade to bare
1883
1903
  // links (fetchCoverage already degrades per-URL index misses).
1884
- s.length ? Ze(this.searchApi, s).catch(() => s.map(te)) : Promise.resolve([])
1904
+ s.length ? Je(this.searchApi, s).catch(() => s.map(te)) : Promise.resolve([])
1885
1905
  ]);
1886
1906
  return {
1887
1907
  game: e,
1888
1908
  schools: r.items,
1889
1909
  teams: o.items,
1890
1910
  conferences: i.items,
1891
- rankings: n.items,
1911
+ rankings: l.items,
1892
1912
  games: d.items,
1893
- coverage: l
1913
+ coverage: c
1894
1914
  };
1895
1915
  }
1896
1916
  get ctx() {
@@ -1905,11 +1925,11 @@ class ee extends w {
1905
1925
  }
1906
1926
  renderView() {
1907
1927
  const t = this.data.game;
1908
- if (!t) return c`<div class="view"><p class="empty">Game not found.</p></div>`;
1909
- const e = this.ctx, s = v(this.data.conferences), r = e.teamsById[t.awayTeamId] ? e.schoolsById[e.teamsById[t.awayTeamId].schoolId] : null, o = e.teamsById[t.homeTeamId] ? e.schoolsById[e.teamsById[t.homeTeamId].schoolId] : null, i = ut(t), n = (h) => t.state === "final" && i !== h && i !== "tie" ? "opacity:0.45" : "", d = t.conferenceId ? s[t.conferenceId] : null, l = this.data.games.filter((h) => h.id !== t.id && h.state === "final" && h.gameType !== "scrimmage" && (h.homeTeamId === t.homeTeamId && h.awayTeamId === t.awayTeamId || h.homeTeamId === t.awayTeamId && h.awayTeamId === t.homeTeamId));
1910
- return c`
1911
- ${q(this, c`
1912
- ${G(this)}
1928
+ if (!t) return n`<div class="view"><p class="empty">Game not found.</p></div>`;
1929
+ const e = this.ctx, s = v(this.data.conferences), r = e.teamsById[t.awayTeamId] ? e.schoolsById[e.teamsById[t.awayTeamId].schoolId] : null, o = e.teamsById[t.homeTeamId] ? e.schoolsById[e.teamsById[t.homeTeamId].schoolId] : null, i = ut(t), l = (h) => t.state === "final" && i !== h && i !== "tie" ? "opacity:0.45" : "", d = t.conferenceId ? s[t.conferenceId] : null, c = this.data.games.filter((h) => h.id !== t.id && h.state === "final" && h.gameType !== "scrimmage" && (h.homeTeamId === t.homeTeamId && h.awayTeamId === t.awayTeamId || h.homeTeamId === t.awayTeamId && h.awayTeamId === t.homeTeamId));
1930
+ return n`
1931
+ ${G(this, n`
1932
+ ${q(this)}
1913
1933
  <p class="breadcrumbs">
1914
1934
  <a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>${z(t.sport)}</a> /
1915
1935
  <a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
@@ -1920,34 +1940,35 @@ class ee extends w {
1920
1940
  ${this.teamBlock(e, t, t.awayTeamId, r, !1)}
1921
1941
  <div class="mid">
1922
1942
  <div class="bigscore">
1923
- <span style=${n("away")}>${t.awayScore}</span>
1943
+ <span style=${l("away")}>${t.awayScore}</span>
1924
1944
  <span class="mut" style="font-size:1.6rem">–</span>
1925
- <span style=${n("home")}>${t.homeScore}</span>
1945
+ <span style=${l("home")}>${t.homeScore}</span>
1926
1946
  </div>
1927
1947
  <div class="status">${J(t)}</div>
1928
- <div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? c` · ${pt(t.time)}` : m} · ${t.venue || "Venue TBD"}
1929
- ${t.broadcast ? c` · <span class="pill class">${t.broadcast}</span>` : m}</div>
1948
+ <div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? n` · ${pt(t.time)}` : m} · ${t.venue || "Venue TBD"}
1949
+ ${t.broadcast ? n` · <span class="pill class">${t.broadcast}</span>` : m}</div>
1930
1950
  <div class="status">
1931
1951
  <span class="pill type">${t.gameType === "conference" ? `${d?.name || "Conference"} game` : t.gameType}</span>
1932
- ${t.label ? c`<span class="pill type">Bracket ${t.label}</span>` : m}
1933
- ${(t.tags || []).map((h) => c`<span class="pill type">${h}</span>`)}
1952
+ ${t.label ? n`<span class="pill type">Bracket ${t.label}</span>` : m}
1953
+ ${(t.tags || []).map((h) => n`<span class="pill type">${h}</span>`)}
1934
1954
  </div>
1935
1955
  </div>
1936
1956
  ${this.teamBlock(e, t, t.homeTeamId, o, !0)}
1937
1957
  </div>
1938
1958
  ${this.renderLineScore(t, r, o)}
1939
- ${t.notes ? c`<p class="note" style="padding:0 1rem 0.9rem;text-align:center">${t.notes}</p>` : m}
1959
+ ${this.renderScoringPlays(t, r, o)}
1960
+ ${t.notes ? n`<p class="note gamenote">${t.notes}</p>` : m}
1940
1961
  </div>
1941
- ${(this.data.coverage || []).length ? c`
1962
+ ${(this.data.coverage || []).length ? n`
1942
1963
  <div class="section-title">Coverage</div>
1943
1964
  <div class="covgrid">
1944
- ${this.data.coverage.map((h) => c`
1965
+ ${this.data.coverage.map((h) => n`
1945
1966
  <a class="card covcard" href=${h.uri}>
1946
- ${h.image ? c`<img class="covimg" src=${h.image} alt="" loading="lazy" />` : m}
1967
+ ${h.image ? n`<img class="covimg" src=${h.image} alt="" loading="lazy" />` : m}
1947
1968
  <div class="covbody">
1948
- <div class="covtitle">${h.videoDuration ? c`<span class="pill live" style="animation:none">Video</span> ` : m}${h.photos ? c`<span class="pill live" style="animation:none">Photos</span> ` : m}${h.title || h.uri}</div>
1949
- ${h.description ? c`<p class="covdesc">${h.description}</p>` : m}
1950
- ${h.author || h.publishedTime ? c`
1969
+ <div class="covtitle">${h.videoDuration ? n`<span class="pill live" style="animation:none">Video</span> ` : m}${h.photos ? n`<span class="pill live" style="animation:none">Photos</span> ` : m}${h.title || h.uri}</div>
1970
+ ${h.description ? n`<p class="covdesc">${h.description}</p>` : m}
1971
+ ${h.author || h.publishedTime ? n`
1951
1972
  <div class="covmeta">${[h.author, h.publishedTime ? new Date(h.publishedTime).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) : ""].filter(Boolean).join(" · ")}</div>
1952
1973
  ` : m}
1953
1974
  </div>
@@ -1958,10 +1979,10 @@ class ee extends w {
1958
1979
  <div class="cols">
1959
1980
  ${[[t.awayTeamId, r], [t.homeTeamId, o]].map(([h, p]) => this.renderContext(e, h, p))}
1960
1981
  </div>
1961
- ${l.length ? c`
1982
+ ${c.length ? n`
1962
1983
  <div class="section-title">Head to head this season</div>
1963
1984
  <div class="card"><ul class="gamelist">
1964
- ${l.map((h) => c`<li>
1985
+ ${c.map((h) => n`<li>
1965
1986
  <span class="d">${y(h.date)}</span>${J(h)}
1966
1987
  <span class="opp">${C(e, h.awayTeamId)} ${h.awayScore}, ${C(e, h.homeTeamId)} ${h.homeScore}</span>
1967
1988
  <a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: h.id })}>Box score →</a>
@@ -1971,14 +1992,14 @@ class ee extends w {
1971
1992
  `;
1972
1993
  }
1973
1994
  teamBlock(t, e, s, r, o) {
1974
- if (!r) return c`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
1975
- const i = t.teamsById[s], n = t.records[s], d = Q(r, 58);
1976
- return c`
1995
+ if (!r) return n`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
1996
+ const i = t.teamsById[s], l = t.records[s], d = Q(r, 58);
1997
+ return n`
1977
1998
  <div class="teamblock ${o ? "right" : ""}">
1978
- ${d ? c`<img class="crest logo" alt="" loading="lazy" src=${d} />` : c`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${K(r.colorPrimary || "#030711")}">${ft(r)}</span>`}
1999
+ ${d ? n`<img class="crest logo" alt="" loading="lazy" src=${d} />` : n`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${K(r.colorPrimary || "#030711")}">${ft(r)}</span>`}
1979
2000
  <div>
1980
2001
  <div class="tname">${bt(t, s, e.date)}<a href=${g(t.hrefs.school, { id: r.id })}>${r.name}</a></div>
1981
- <div class="trec">${r.mascot || ""} · ${x(n)}${i?.conferenceId ? c` · ${x(n, !0)} conf` : m}</div>
2002
+ <div class="trec">${r.mascot || ""} · ${x(l)}${i?.conferenceId ? n` · ${x(l, !0)} conf` : m}</div>
1982
2003
  </div>
1983
2004
  </div>
1984
2005
  `;
@@ -1986,20 +2007,20 @@ class ee extends w {
1986
2007
  renderLineScore(t, e, s) {
1987
2008
  const r = t.periodScores || [];
1988
2009
  if (!r.length)
1989
- return c`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>`;
1990
- const o = Math.max(4, ...r.map((l) => l.period)), i = (l) => l <= 4 ? String(l) : `OT${l > 5 ? l - 4 : ""}`, n = (l, h) => {
2010
+ return n`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>`;
2011
+ const o = Math.max(4, ...r.map((c) => c.period)), i = (c) => c <= 4 ? String(c) : `OT${c > 5 ? c - 4 : ""}`, l = (c, h) => {
1991
2012
  const p = r.find((f) => f.period === h);
1992
- return p ? p[l] : t.state === "final" ? 0 : "·";
1993
- }, d = (l, h, p) => c`
2013
+ return p ? p[c] : t.state === "final" ? 0 : "·";
2014
+ }, d = (c, h, p) => n`
1994
2015
  <tr>
1995
- <td class="teamcell">${H(l, 20)}${l?.abbr || "TBD"}</td>
1996
- ${Array.from({ length: o }, (f, u) => c`<td class="num">${n(h, u + 1)}</td>`)}
2016
+ <td class="teamcell">${H(c, 20)}${c?.abbr || "TBD"}</td>
2017
+ ${Array.from({ length: o }, (f, u) => n`<td class="num">${l(h, u + 1)}</td>`)}
1997
2018
  <td class="num" style="font-weight:700">${p}</td>
1998
2019
  </tr>`;
1999
- return c`
2020
+ return n`
2000
2021
  <div class="tablewrap" style="border-top:1px solid var(--hsot-gray-2)">
2001
2022
  <table class="data" style="max-width:560px;margin:0.6rem auto 0.9rem">
2002
- <thead><tr><th>Team</th>${Array.from({ length: o }, (l, h) => c`<th class="num">${i(h + 1)}</th>`)}<th class="num">T</th></tr></thead>
2023
+ <thead><tr><th>Team</th>${Array.from({ length: o }, (c, h) => n`<th class="num">${i(h + 1)}</th>`)}<th class="num">T</th></tr></thead>
2003
2024
  <tbody>
2004
2025
  ${d(e, "away", t.awayScore)}
2005
2026
  ${d(s, "home", t.homeScore)}
@@ -2008,17 +2029,43 @@ class ee extends w {
2008
2029
  </div>
2009
2030
  `;
2010
2031
  }
2032
+ renderScoringPlays(t, e, s) {
2033
+ const r = Array.isArray(t.scoringPlays) ? t.scoringPlays : [];
2034
+ if (!r.length) return m;
2035
+ const o = (i) => [i.period, i.clock].filter(Boolean).join(" ");
2036
+ return n`
2037
+ <div class="plays">
2038
+ <div class="plays-title">Scoring plays</div>
2039
+ <div class="tablewrap">
2040
+ <table class="data plays-table">
2041
+ <thead><tr>
2042
+ <th>When</th><th>Play</th>
2043
+ <th class="num">${e?.abbr || "Away"}</th><th class="num">${s?.abbr || "Home"}</th>
2044
+ </tr></thead>
2045
+ <tbody>
2046
+ ${r.map((i) => n`<tr>
2047
+ <td class="when">${o(i) || "·"}</td>
2048
+ <td class="play">${i.description || "·"}</td>
2049
+ <td class="num">${i.awayScore}</td>
2050
+ <td class="num">${i.homeScore}</td>
2051
+ </tr>`)}
2052
+ </tbody>
2053
+ </table>
2054
+ </div>
2055
+ </div>
2056
+ `;
2057
+ }
2011
2058
  renderContext(t, e, s) {
2012
2059
  if (!s) return m;
2013
2060
  const r = t.records[e], o = gt(this.data.games, e);
2014
- return c`
2061
+ return n`
2015
2062
  <div class="card ctxcard">
2016
2063
  <div class="who">${H(s)}${s.name}</div>
2017
2064
  <div class="row">
2018
2065
  <span>Last 5: ${yt(t, e)}</span>
2019
2066
  <span>Streak: <b>${r ? st(r.results) : "·"}</b></span>
2020
2067
  <span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
2021
- <span>Next: ${o ? c`${y(o.date, { month: "numeric", day: "numeric" })}
2068
+ <span>Next: ${o ? n`${y(o.date, { month: "numeric", day: "numeric" })}
2022
2069
  ${o.homeTeamId === e ? "vs" : "at"} ${Z(t, o.homeTeamId === e ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
2023
2070
  </div>
2024
2071
  </div>
@@ -2026,7 +2073,7 @@ class ee extends w {
2026
2073
  }
2027
2074
  }
2028
2075
  globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", ee);
2029
- const Xe = 250, ts = 2;
2076
+ const ts = 250, es = 2;
2030
2077
  class se extends E {
2031
2078
  static properties = {
2032
2079
  api: { type: String },
@@ -2107,11 +2154,11 @@ class se extends E {
2107
2154
  }
2108
2155
  onInput(t) {
2109
2156
  const e = t.target.value.trim();
2110
- if (clearTimeout(this.debounceTimer), e.length < ts) {
2157
+ if (clearTimeout(this.debounceTimer), e.length < es) {
2111
2158
  this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
2112
2159
  return;
2113
2160
  }
2114
- this.debounceTimer = setTimeout(() => this.search(e), Xe);
2161
+ this.debounceTimer = setTimeout(() => this.search(e), ts);
2115
2162
  }
2116
2163
  async search(t) {
2117
2164
  this.abortController?.abort(), this.abortController = new AbortController();
@@ -2159,7 +2206,7 @@ class se extends E {
2159
2206
  const s = this.where(t), r = (o) => {
2160
2207
  o.preventDefault(), this.go(t);
2161
2208
  };
2162
- return c`
2209
+ return n`
2163
2210
  <li
2164
2211
  id="school-option-${e}"
2165
2212
  role="option"
@@ -2170,13 +2217,13 @@ class se extends E {
2170
2217
  }}"
2171
2218
  >
2172
2219
  <span class="name">${t.name}</span>
2173
- ${s ? c`<span class="where">${s}</span>` : m}
2220
+ ${s ? n`<span class="where">${s}</span>` : m}
2174
2221
  </li>
2175
2222
  `;
2176
2223
  }
2177
2224
  renderListbox() {
2178
- const t = this.searched && !this.results.length, e = c`<li class="empty">No schools found</li>`;
2179
- return c`
2225
+ const t = this.searched && !this.results.length, e = n`<li class="empty">No schools found</li>`;
2226
+ return n`
2180
2227
  <ul id="school-search-listbox" role="listbox" aria-label="Schools">
2181
2228
  ${this.results.map((s, r) => this.renderOption(s, r))}
2182
2229
  ${t ? e : m}
@@ -2185,7 +2232,7 @@ class se extends E {
2185
2232
  }
2186
2233
  render() {
2187
2234
  const t = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
2188
- return c`
2235
+ return n`
2189
2236
  <input
2190
2237
  type="text"
2191
2238
  role="combobox"
@@ -2205,7 +2252,7 @@ class se extends E {
2205
2252
  }
2206
2253
  }
2207
2254
  globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", se);
2208
- const es = {
2255
+ const ss = {
2209
2256
  "hsot-scores": Qt,
2210
2257
  "hsot-standings": Zt,
2211
2258
  "hsot-rankings": Jt,
@@ -2213,13 +2260,13 @@ const es = {
2213
2260
  "hsot-boxscore": ee,
2214
2261
  "hsot-school-search": se
2215
2262
  };
2216
- function ss() {
2263
+ function as() {
2217
2264
  const a = globalThis?.customElements;
2218
2265
  if (a)
2219
- for (const [t, e] of Object.entries(es))
2266
+ for (const [t, e] of Object.entries(ss))
2220
2267
  a.get(t) || a.define(t, e);
2221
2268
  }
2222
- typeof window < "u" && globalThis.customElements && ss();
2269
+ typeof window < "u" && globalThis.customElements && as();
2223
2270
  export {
2224
- ss as defineAll
2271
+ as as defineAll
2225
2272
  };