/* Pipeline Report v1 design (Nova, design-system v0.1). One file: @font-face + tokens + components. */
/* Self-hosted subsets. Barlow Condensed (SIL OFL 1.1, Jeremy Tribby) and Source Serif 4 (SIL OFL 1.1, Adobe/Frank Grießhammer). */
/* latin-ext */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/BarlowCondensed-500-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/BarlowCondensed-500-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/BarlowCondensed-700-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/BarlowCondensed-700-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Source Serif 4';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Source Serif 4';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-italic-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/SourceSerif4-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* ==========================================================================
   Pipeline Report — design tokens v0.1 (proposal, Oct 18 2026)
   Direction: sports-data editorial ("the agate page"), light theme primary.
   In production these sit at the top of site/static/style.css (one file).
   Contrast ratios are WCAG 2.2 relative-luminance, computed in data/contrast.py.
   ========================================================================== */
:root {
  /* ---------- Color: neutrals (cool "ice paper" family, one hue ~220) ---------- */
  --c-paper:          #f5f7f8; /* page background                           */
  --c-surface:        #ffffff; /* table/list sheets, inputs                 */
  --c-sunken:         #eaeff2; /* table header band, inset panels           */
  --c-ink:            #0d1821; /* primary text      16.71 on paper · 17.95 on surface */
  --c-ink-2:          #33424e; /* secondary text     9.63 on paper · 10.34 on surface */
  --c-muted:          #56636e; /* meta, captions     5.74 on paper ·  6.17 on surface · 5.32 on sunken */
  --c-line:           #d6dde2; /* hairlines (decorative structure, not a UI boundary) */
  --c-line-strong:    #7a8893; /* input/control borders 3.64 on surface · 3.39 on paper (≥3:1 UI) */

  /* ---------- Color: the one accent ("blue line") ---------- */
  --c-accent:         #1443b0; /* links, buttons (primary + quiet outline), active filter / current state, focus; decoration approved by Tara 2026-10-18: logo bar, #1 bar, .ourig top rule, success-notice edge + tint  7.95 on paper · 8.54 on surface */
  --c-accent-strong:  #0d3388; /* hover/pressed                             11.37 on surface */
  --c-accent-tint:    #e6edfa; /* selected row/tab fill; accent text on it 7.26 */
  --c-on-accent:      #ffffff; /* text on accent                            8.54 */

  /* ---------- Color: brand signal ("goal line red") — mark + one rule only ---------- */
  --c-goal:           #c5162e; /* never for text links or status. 5.54 on paper if ever used as large text */

  /* ---------- Color: data ink (decorative, numbers carry the meaning) ---------- */
  --c-bar:            #c3d3ea; /* share-of-leader bar fill (1.52:1, decorative, aria-hidden) */
  --c-bar-lead:       #1443b0; /* the #1 row's bar only */

  /* ---------- Color: status (status ONLY, never decoration) ---------- */
  --c-warn-bg:        #fff3d1;
  --c-warn-text:      #5e4100; /* 8.51 on warn-bg */
  --c-warn-line:      #c99a1f; /* decorative edge; message text carries meaning */
  --c-danger-bg:      #fdecee;
  --c-danger-text:    #9b1027; /* 7.37 on danger-bg · 8.41 on surface */
  --c-ok-bg:          #e5f3ec;
  --c-ok-text:        #14532d; /* 7.97 on ok-bg — reserved for roster-verified (future) */

  /* ---------- Type families (2 families; both SIL OFL 1.1, self-hosted woff2) ---------- */
  --f-display: "Barlow Condensed", "Arial Narrow", "Roboto Condensed", "Helvetica Neue", sans-serif-condensed, system-ui, sans-serif;
  --f-text:    "Source Serif 4", "Source Serif Pro", Georgia, "Times New Roman", serif;
  /* Barlow Condensed = team names, numerals, labels, nav, buttons, table text.
     Source Serif 4  = headlines' dek, prose, notes, methodology — the "editorial" voice. */

  /* ---------- Weights (3 total) ---------- */
  --w-text: 400;      /* Source Serif body */
  --w-ui: 500;        /* Barlow Condensed UI/table */
  --w-display: 700;   /* Barlow Condensed display, numerals, team names in boards */
  --w-bold:    600;  /* inline bold in serif text (b, strong) */

  /* ---------- Type scale ---------- */
  /* Display (fluid, rem floor) */
  --t-hero:   clamp(2.375rem, 1.6rem + 3.6vw, 4.5rem); /* 38 → 72  h1 home / team name */
  --t-h2:     clamp(1.75rem, 1.4rem + 1.4vw, 2.5rem);  /* 28 → 40  section heads      */
  --t-stat:   clamp(2.25rem, 1.7rem + 2.2vw, 3.5rem);  /* 36 → 56  big numerals       */
  --t-h3:     1.375rem;                                /* 22  rail/sub heads          */
  /* UI / data */
  --t-lead:   clamp(1.125rem, 1.05rem + 0.35vw, 1.3125rem); /* 18 → 21 serif dek */
  --t-body:   1.0625rem;  /* 17 serif prose */
  --t-row:    1.125rem;   /* 18 condensed team name in board rows (condensed reads ~2px smaller) */
  --t-ui:     1rem;       /* 16 condensed UI */
  --t-meta:   0.9375rem;  /* 15 condensed meta (min for condensed) */
  --t-label:  0.8125rem;  /* 13 condensed uppercase labels, tracked */
  --t-num:      1.5rem;   /* 24 board / commits main numeral */
  --t-wordmark: 1.625rem; /* 26 masthead wordmark (identity) */
  --lh-tight: 0.95; --lh-head: 1.08; --lh-ui: 1.25; --lh-text: 1.6;
  --track-label: 0.1em; --track-display: -0.01em;
  --measure: 38em;      /* prose column (~68ch serif) */

  /* ---------- Space (4px base) ---------- */
  --s-1: 0.25rem; --s-2: 0.5rem; --s-3: 0.75rem; --s-4: 1rem; --s-5: 1.5rem;
  --s-6: 2rem; --s-7: 3rem; --s-8: 4rem; --s-9: 6rem; --s-10: 8rem;
  --gutter: clamp(1rem, 0.6rem + 1.8vw, 2rem);
  --page-max: 78rem;  /* 1248px */

  /* ---------- Radius (mostly square: print, not app) ---------- */
  --r-0: 0; --r-1: 2px; --r-2: 4px; --r-pill: 999px;

  /* ---------- Elevation (structure first; shadow only for floating) ---------- */
  /* weights */
  --bw-hair:     1px;   /* hairlines, control borders */
  --bw-strong:   2px;   /* section rule */
  --bw-bar:      3px;   /* masthead rule, .ourig top rule, nav current underline, share bars */
  --rule:        var(--bw-hair) solid var(--c-line);
  --rule-strong: var(--bw-strong) solid var(--c-ink);   /* section rules — newspaper column heads */
  --rule-goal:   var(--bw-bar) solid var(--c-goal);  /* masthead underline ONLY */
  --rule-ink:    var(--bw-hair) solid var(--c-ink);   /* top/bottom edge of a data sheet (board, commits, feed, bars, empty) */
  --rule-edge:   4px;                      /* left edge width of notices */
  --rule-line-strong:        var(--bw-hair) solid var(--c-line-strong);   /* table-head underline, position chip */
  --rule-line-strong-dashed: var(--bw-hair) dashed var(--c-line-strong);  /* sponsor slot */
  --rule-control:            var(--bw-hair) solid var(--c-line-strong);   /* inputs, filter group outline */
  --bw-control:  var(--bw-hair);           /* button border width (colour set per button) */
  --bw-accent-rule: var(--bw-bar);         /* .ourig top rule weight (accent colour approved by Tara 2026-10-18) */
  --nav-underline: var(--bw-bar);          /* current-page nav underline */
  --bar-h:       var(--bw-bar);            /* share bar height */
  --e-0: none;
  --e-float: 0 12px 32px -12px rgb(13 24 33 / 0.28); /* sticky jump-bar on scroll, popovers */

  /* ---------- Focus ---------- */
  --ring-w:   2px;   /* ring stroke */
  --ring-gap: 4px;   /* stroke + gap */
  --focus-ring: 0 0 0 var(--ring-w) var(--c-surface), 0 0 0 var(--ring-gap) var(--c-accent); /* 2px gap + 2px ring, ≥3:1 on all surfaces */
  /* inset ring for scrollers (nav, filter group): never clipped */
  --focus-ring-inset:       inset 0 0 0 var(--ring-w) var(--c-ink), inset 0 0 0 var(--ring-gap) var(--c-surface);
  --focus-ring-inset-paper: inset 0 0 0 var(--ring-w) var(--c-ink), inset 0 0 0 var(--ring-gap) var(--c-paper);
  --nav-underline-focus: calc(var(--ring-gap) + var(--nav-underline)); /* underline sits inside the inset ring */

  /* ---------- Motion ---------- */
  --dur-fast: 120ms; --dur-base: 220ms; --dur-slow: 420ms;
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-emph:     cubic-bezier(0.22, 1, 0.36, 1);
  --ease-exit:     cubic-bezier(0.4, 0, 1, 1);

  /* ---------- Layout ---------- */
  --tap: 48px;          /* min touch target (Material 48dp; also clears HIG 44pt) */
  --header-h: 3.5rem;
}

@media (prefers-reduced-motion: reduce) {
  :root { --dur-fast: 0.01ms; --dur-base: 0.01ms; --dur-slow: 0.01ms; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important; animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important; scroll-behavior: auto !important;
  }
}
/* ==========================================================================
   Pipeline Report — component layer (proposal). In production:
   site/static/style.css = fonts @font-face + tokens.css + this file.
   No framework. Mobile-first. Every color/space/type value is a token.
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-padding-top: var(--s-8); scroll-padding-bottom: var(--s-6); } /* focus scrolled into view keeps its ring on screen */
body {
  margin: 0; background: var(--c-paper); color: var(--c-ink);
  font: var(--w-text) var(--t-body)/var(--lh-text) var(--f-text);
  font-variant-numeric: lining-nums;
}
img, svg { display: block; max-width: 100%; }
a { color: var(--c-accent); text-decoration-thickness: var(--bw-hair); text-underline-offset: 0.18em; }
a:hover { color: var(--c-accent-strong); }
/* links whose colour is set by a more specific rule still change colour (one property) on hover */
.crumbs a:hover, .presented a:hover, .ourig-head .kicker a:hover, .dateline a:hover, .foot ul a:hover, .from a:hover, .notice a:hover { color: var(--c-accent-strong); }
:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--r-1); }
.sr-only { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.wrap { max-width: var(--page-max); margin: 0 auto; padding: 0 var(--gutter); }

/* ---------- voice helpers ---------- */
.label, .kicker, .th-sub, .tag {
  font-family: var(--f-display); font-weight: var(--w-ui); font-size: var(--t-label);
  letter-spacing: var(--track-label); text-transform: uppercase; line-height: var(--lh-ui);
}
.kicker { color: var(--c-ink-2); margin: 0 0 var(--s-3); }
.num, .tnum { font-variant-numeric: tabular-nums lining-nums; }
.surname { font-variant-caps: small-caps; letter-spacing: 0.03em; } /* RinkNet surnames arrive UPPERCASE; we title-case for screen readers, small caps hide interior-case guesses (DeGraff vs Degraff) */

/* ---------- skip link ---------- */
.skip { position: absolute; left: var(--s-4); top: -100px; z-index: 10; background: var(--c-accent); color: var(--c-on-accent);
  padding: 0 var(--s-4); display: inline-flex; align-items: center; min-height: var(--tap); font: var(--w-ui) var(--t-ui) var(--f-display); }
.skip:focus { top: var(--s-2); }
.skip:hover { color: var(--c-on-accent); background: var(--c-accent-strong); } /* one visible change (bg); text stays white, as .btn:hover */

/* ---------- masthead ---------- */
.mast { background: var(--c-paper); border-bottom: var(--rule-goal); }
.mast-row { display: flex; align-items: center; justify-content: space-between; gap: var(--s-4); min-height: var(--header-h); padding-top: var(--s-2); padding-bottom: var(--s-2); flex-wrap: wrap; }
.brand { display: inline-flex; align-items: center; gap: var(--s-2); color: var(--c-ink); text-decoration: none; min-height: var(--tap); }
.brand:hover { color: var(--c-accent-strong); }
.brand svg { width: 34px; height: 24px; flex: none; }
.wordmark { font: var(--w-display) var(--t-wordmark)/1 var(--f-display); text-transform: uppercase; letter-spacing: 0.01em; }
.wordmark span { font-weight: var(--w-ui); color: var(--c-ink-2); }
.nav ul { list-style: none; margin: 0; padding: 0; display: flex; gap: var(--s-1); }
.nav a { display: inline-flex; align-items: center; min-height: var(--tap); padding: 0 var(--s-3);
  font: var(--w-ui) var(--t-ui)/1 var(--f-display); text-transform: uppercase; letter-spacing: 0.06em; color: var(--c-ink-2); text-decoration: none; }
.nav a:hover { color: var(--c-ink); }
.nav a[aria-current="page"]:hover { color: var(--c-accent-strong); } /* current link still answers hover */
.nav a[aria-current="page"] { color: var(--c-ink); box-shadow: inset 0 calc(-1 * var(--nav-underline)) 0 var(--c-accent); }
/* Inset ring: never clipped by the scrolling nav; on the current page it stacks above the underline. */
.nav a:focus-visible { border-radius: 0; box-shadow: var(--focus-ring-inset-paper); }
.nav a[aria-current="page"]:focus-visible { box-shadow: var(--focus-ring-inset-paper), inset 0 calc(-1 * var(--nav-underline-focus)) 0 var(--c-accent); }
.dateline { display: flex; justify-content: space-between; gap: var(--s-2) var(--s-4); flex-wrap: wrap;
  font: var(--w-ui) var(--t-meta)/var(--lh-ui) var(--f-display); color: var(--c-muted); padding-top: var(--s-2); padding-bottom: var(--s-2); border-top: var(--rule); }
.dateline a { color: var(--c-ink-2); }
@media (max-width: 47.99em) {
  .mast-row { padding-bottom: 0; }
  .nav { width: calc(100% + 2 * var(--gutter)); margin: 0 calc(-1 * var(--gutter)); overflow-x: auto; scrollbar-width: none; }
  .nav ul { padding: 0 calc(var(--gutter) - var(--s-3)); }
  .nav a { white-space: nowrap; }
}

/* ---------- notices (stale data, definition, errors) ---------- */
.notice { border-left: var(--rule-edge) solid var(--c-warn-line); background: var(--c-warn-bg); color: var(--c-warn-text);
  padding: var(--s-3) var(--s-4); font: var(--w-text) var(--t-meta)/1.5 var(--f-text); }
.notice strong { font-weight: var(--w-bold); }
.notice a { color: var(--c-warn-text); }
.notice--success { border-color: var(--c-accent); background: var(--c-accent-tint); color: var(--c-ink); } /* accent edge + tint approved by Tara 2026-10-18 (§3.1) */
.notice--danger { border-color: var(--c-danger-text); background: var(--c-danger-bg); color: var(--c-danger-text); }
.notice--danger a { color: var(--c-danger-text); }

/* ---------- lede (home + team) ---------- */
.lede { display: grid; gap: var(--s-5); padding: var(--s-5) 0 var(--s-6); }
@media (min-width: 64em) { .lede { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: end; padding-top: var(--s-7); } }
h1, .h1 { font: var(--w-display) var(--t-hero)/var(--lh-tight) var(--f-display); letter-spacing: var(--track-display); margin: 0; text-wrap: balance; }
.dek { font-size: var(--t-lead); line-height: 1.5; color: var(--c-ink-2); max-width: 32em; margin: var(--s-4) 0 0; }

/* tote board: the stat strip */
.tote { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; border-top: var(--rule-strong); }
.tote > div { padding: var(--s-3) var(--s-3) 0 0; }
.tote > div + div { padding-left: var(--s-3); border-left: var(--rule); }
.tote dt { order: 2; font: var(--w-ui) var(--t-label)/1.25 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); }
.tote dd { margin: 0 0 var(--s-1); font: var(--w-display) var(--t-stat)/1 var(--f-display); font-variant-numeric: tabular-nums; }
.tote > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; }
dd.dd-date { font-size: var(--t-h2); white-space: nowrap; }
.tote--4 { grid-template-columns: repeat(2, minmax(0,1fr)); row-gap: var(--s-4); }
.tote--4 > div:nth-child(3) { padding-left: 0; border-left: 0; }
@media (min-width: 48em) { dd.dd-date { font-size: var(--t-h2); white-space: nowrap; }
.tote--4 { grid-template-columns: repeat(4, minmax(0,1fr)); } .tote--4 > div:nth-child(3) { padding-left: var(--s-3); border-left: var(--rule); } }

/* definition strip: "active commits" — sits directly under the board head, where the number lives */
.defn { display: grid; gap: var(--s-1); padding: var(--s-3) 0; border-bottom: var(--rule); margin-bottom: var(--s-4); }
@media (min-width: 48em) { .defn { grid-template-columns: 11rem minmax(0, 1fr); gap: var(--s-4); align-items: baseline; }
  .defn p { grid-column: 2; grid-row: 1 / span 2; } .defn > a.tap-text { grid-column: 1; grid-row: 2; align-self: start; } } /* "How we count" sits on its own line under the term, so row 1 stays above the 1280 fold */
.defn h3 { margin: 0; color: var(--c-ink); }
.defn p { margin: 0; max-width: var(--measure); font-size: var(--t-meta); line-height: 1.5; color: var(--c-ink-2); }
.flag { display: inline-flex; align-items: center; gap: 0.35em; font: var(--w-display) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase;
  color: var(--c-ink); background: var(--c-sunken); padding: 0.15em 0.5em; border-radius: var(--r-1); white-space: nowrap; }

/* ---------- page grid: main + rail ---------- */
.page { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--s-8); padding-bottom: var(--s-8); }
.page--2 { gap: var(--s-7); }
@media (min-width: 48em) { .page--2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } }
@media (min-width: 64em) { .page { grid-template-columns: minmax(0, 8fr) minmax(17rem, 4fr); gap: var(--s-7); } }
.rail { display: grid; gap: var(--s-7); align-content: start; }

/* section heads: newspaper column rule */
.sec-head { border-top: var(--rule-strong); padding-top: var(--s-3); margin-bottom: var(--s-4); display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--s-1) var(--s-4); }
.sec-head h2 { font: var(--w-display) var(--t-h2)/var(--lh-head) var(--f-display); margin: 0; letter-spacing: var(--track-display); }
.sec-head h3, .rail h2 { font: var(--w-display) var(--t-h3)/var(--lh-head) var(--f-display); margin: 0; }
.sec-meta { font: var(--w-ui) var(--t-meta)/1.3 var(--f-display); color: var(--c-muted); margin: 0; }
a.sec-meta { display: inline-flex; align-items: center; min-height: var(--tap); }
/* A link that follows a sentence (not inside one) is a standalone target: a 48px hit area that doesn't change the line box. */
.board-foot a.tap-text, a.tap-text { display: flex; align-items: center; width: fit-content; min-height: var(--tap); min-width: var(--tap); } /* Tara 5:27 PM: its own line, a real 48px box; no other words share its band */
.presented { font: var(--w-ui) var(--t-meta)/1.3 var(--f-display); color: var(--c-muted); }
@media (min-width: 48em) { .sec-head > .presented { margin-block: 0; } } /* first line stays on the heading baseline; the 2nd line uses the old margin space */
.presented-note { display: block; } /* 2nd line of the sponsor slot */
.presented a { color: var(--c-ink-2); font-weight: var(--w-display); }

/* ---------- board tools ---------- */
.tools { display: flex; flex-wrap: wrap; gap: var(--s-3) var(--s-4); align-items: end; justify-content: space-between; margin-bottom: var(--s-3); }
.seg { display: flex; gap: 0; overflow-x: auto; scrollbar-width: none; border: var(--rule-control); border-radius: var(--r-2); max-width: 100%; }
.seg button { appearance: none; border: 0; background: var(--c-surface); color: var(--c-ink-2); min-height: var(--tap); min-width: calc(var(--tap) + var(--s-2)); flex-shrink: 0; padding: 0 var(--s-3);
  font: var(--w-ui) var(--t-meta)/1 var(--f-display); text-transform: uppercase; letter-spacing: 0.05em; white-space: nowrap; cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard); }
.seg button:focus-visible { border-radius: 0; box-shadow: var(--focus-ring-inset); }
.seg button + button { border-left: var(--rule); }
.seg button:hover { background: var(--c-sunken); }
.seg button[aria-pressed="true"] { background: var(--c-accent); color: var(--c-on-accent); }
.seg button span { font-variant-numeric: tabular-nums; opacity: 0.85; margin-left: 0.3em; }
.find { display: grid; gap: var(--s-1); flex: 1 1 14rem; max-width: 22rem; }
.find label { font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); }
input[type="search"], input[type="email"] { width: 100%; min-height: var(--tap); padding: 0 var(--s-3); border: var(--rule-control); border-radius: var(--r-2);
  background: var(--c-surface); color: var(--c-ink); font: var(--w-ui) var(--t-ui) var(--f-display); }
input[aria-invalid="true"] { border-color: var(--c-danger-text); } /* after the generic input rule, whose border shorthand would reset it */
input::placeholder { color: var(--c-muted); }

/* ---------- THE BOARD (leaderboard table) ---------- */
.board { width: 100%; border-collapse: collapse; background: var(--c-surface); border-top: var(--rule-ink); border-bottom: var(--rule-ink);
  font: var(--w-ui) var(--t-ui)/var(--lh-ui) var(--f-display); }
.board thead th { position: sticky; top: 0; z-index: 1; background: var(--c-sunken); text-align: left; vertical-align: bottom; padding: var(--s-2) var(--s-3);
  font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); border-bottom: var(--rule-line-strong); }
.board .th-sub { display: block; text-transform: none; letter-spacing: 0.01em; font-size: var(--t-label); color: var(--c-muted); margin-top: 2px; }
.board td, .board tbody th { padding: var(--s-3); border-bottom: var(--rule); text-align: left; vertical-align: middle; font-weight: var(--w-ui); }
.board tbody tr { position: relative; transition: background-color var(--dur-fast) var(--ease-standard); }
.board tbody tr:hover { background: var(--c-accent-tint); }
.c-rank { width: 3.25rem; color: var(--c-ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.c-rank .tie { color: var(--c-muted); margin-right: 1px; }
.c-num { text-align: right !important; white-space: nowrap; font-variant-numeric: tabular-nums; }
.c-num strong { font: var(--w-display) var(--t-num)/1 var(--f-display); }
.team { font: var(--w-display) var(--t-row)/1.15 var(--f-display); color: var(--c-ink); text-decoration: none; }
.team:hover { color: var(--c-accent-strong); }
.row-meta { display: block; margin-top: 2px; font-size: var(--t-meta); color: var(--c-muted); }
.lg { font-weight: var(--w-display); letter-spacing: 0.04em; color: var(--c-ink-2); text-decoration: none; }
.lg:hover { color: var(--c-accent-strong); }
.share { display: block; height: var(--bar-h); margin-top: var(--s-2); background: linear-gradient(var(--c-bar), var(--c-bar)) no-repeat 0 0 / calc(var(--share) * 100%) 100%; }
tr.lead .share { background-image: linear-gradient(var(--c-bar-lead), var(--c-bar-lead)); }
.board tbody tr[hidden] { display: none; }
/* mobile: 3 visible columns, stacked meta, whole row is the tap target */
@media (max-width: 47.99em) {
  .c-wide { display: none; }
  .board td, .board tbody th { padding: var(--s-3) var(--s-2); }
  .c-rank { width: 2.5rem; padding-left: var(--s-3) !important; }
  .board .c-num { padding-right: var(--s-3); }
  .board .team::after { content: ""; position: absolute; inset: 0; }   /* stretched link (tr is position:relative) */
  .board thead th { top: 0; }
  .board thead th.c-num { white-space: normal; width: 7.5rem; }
  .board tbody th { width: auto; }
}
@media (min-width: 48em) { .row-meta { display: none; } }
.board-foot a { display: inline-flex; align-items: center; min-height: var(--tap); }
.board-foot { display: flex; flex-wrap: wrap; gap: var(--s-3); align-items: center; justify-content: space-between; padding: var(--s-4) 0 0; font: var(--w-ui) var(--t-meta)/1.3 var(--f-display); color: var(--c-muted); }

/* ---------- buttons ---------- */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--s-2); min-height: var(--tap); padding: 0 var(--s-5); border: var(--bw-control) solid var(--c-accent); border-radius: var(--r-2);
  background: var(--c-accent); color: var(--c-on-accent); font: var(--w-display) var(--t-ui)/1 var(--f-display); text-transform: uppercase; letter-spacing: 0.06em; text-decoration: none; cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-standard), transform var(--dur-fast) var(--ease-standard); }
.btn:hover { background: var(--c-accent-strong); }
.btn:active { transform: translateY(1px); }
.btn--quiet { background: var(--c-surface); color: var(--c-accent); }
.btn--quiet:hover { background: var(--c-accent-tint); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: 0.45; cursor: not-allowed; }
.btn[disabled]:hover { background: var(--c-accent); }

/* ---------- commit feed (rail + team page list) ---------- */
.feed { list-style: none; margin: 0; padding: 0; border-top: var(--rule-ink); }
.feed li { display: grid; grid-template-columns: 3.25rem minmax(0, 1fr); gap: 0 var(--s-3); padding: var(--s-3) 0; border-bottom: var(--rule); }
.feed time { font: var(--w-ui) var(--t-meta)/1.35 var(--f-display); color: var(--c-muted); font-variant-numeric: tabular-nums; padding-top: 2px; }
.who { font: var(--w-display) var(--t-row)/1.2 var(--f-display); }
.pos { font: var(--w-ui) var(--t-label)/1 var(--f-display); letter-spacing: 0.06em; color: var(--c-ink-2); border: var(--rule-line-strong); border-radius: var(--r-1); padding: 2px 4px; margin-left: var(--s-1); vertical-align: 2px; }
.to { display: block; font: var(--t-meta)/1.4 var(--f-text); color: var(--c-ink-2); }
.to b { font-weight: var(--w-bold); color: var(--c-ink); }
.from { display: block; font: var(--w-ui) var(--t-meta)/1.35 var(--f-display); color: var(--c-muted); }
.from a { color: var(--c-ink-2); }
.tag { font-size: var(--t-label); color: var(--c-ink-2); background: var(--c-sunken); padding: 1px 5px; border-radius: var(--r-1); letter-spacing: 0.06em; margin-left: var(--s-1); vertical-align: 1px; }

/* ---------- rail units ---------- */
.unit { border-top: var(--rule-strong); padding-top: var(--s-3); }
.unit p { font-size: var(--t-meta); line-height: 1.55; color: var(--c-ink-2); margin: var(--s-2) 0 var(--s-4); }
.signup form { display: grid; gap: var(--s-2); }
.signup label { font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); }
.hint { font: var(--w-ui) var(--t-meta)/1.35 var(--f-display); color: var(--c-muted); margin: 0; }
.sponsor-slot { border: var(--rule-line-strong-dashed); background: var(--c-surface); padding: var(--s-4); }
.sponsor-slot .label { color: var(--c-muted); }
.sponsor-slot h3 { font: var(--w-display) var(--t-h3)/1.1 var(--f-display); margin: var(--s-2) 0 0; }
.sponsor-slot p { font-size: var(--t-meta); color: var(--c-ink-2); margin: var(--s-2) 0 var(--s-3); line-height: 1.5; }
.sponsor-slot a { display: inline-flex; align-items: center; min-height: var(--tap); font: var(--w-display) var(--t-meta)/1 var(--f-display); text-transform: uppercase; letter-spacing: 0.06em; }

/* ---------- league index (home) ---------- */
.index { display: grid; gap: 0 var(--s-6); margin: 0; }
@media (min-width: 48em) { .index { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.index > div { display: grid; gap: var(--s-1); padding: var(--s-3) 0; border-bottom: var(--rule); }
@media (min-width: 30em) { .index > div { grid-template-columns: 9.5rem minmax(0, 1fr); gap: var(--s-3); } }
.lgi { white-space: nowrap; }
.index-wrap .lgi { white-space: normal; } /* /leagues/ shows full league names, which must wrap at 320 */
@media (max-width: 63.99em) { .feed--rail li:nth-child(n+6) { display: none; } }
.index dt { font: var(--w-ui) var(--t-label)/1.5 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); padding-top: 2px; }
.index dd { margin: 0; display: flex; flex-wrap: wrap; gap: var(--s-1) var(--s-4); font: var(--w-display) var(--t-ui)/1.6 var(--f-display); }
.index dd a { display: inline-flex; align-items: center; column-gap: 0.25em; min-height: var(--tap); min-width: var(--tap); color: var(--c-ink); text-decoration-color: var(--c-line-strong); }
.index dd a:hover { color: var(--c-accent-strong); }
.index dd a:has(.lc) { text-decoration: none; } .index dd .lc { font-weight: inherit; color: inherit; margin-left: 0; text-decoration: underline; text-decoration-color: var(--c-line-strong); } /* code+count is one 48px target; only the code is underlined */
.index dd span { font-weight: var(--w-ui); color: var(--c-muted); font-variant-numeric: tabular-nums; margin-left: 0.25em; }

/* ---------- team page ---------- */
.crumbs { font: var(--w-ui) var(--t-meta)/1.3 var(--f-display); color: var(--c-muted); padding-top: var(--s-5); margin: 0; }
.crumbs ol { list-style: none; display: flex; flex-wrap: wrap; gap: var(--s-1); margin: 0; padding: 0; }
.crumbs li { display: inline-flex; align-items: center; }
.crumbs li + li::before { content: "/"; margin-right: var(--s-1); color: var(--c-line-strong); }
.crumbs a { display: inline-flex; align-items: center; justify-content: center; min-height: var(--tap); min-width: var(--tap); color: var(--c-ink-2); }
.team-head { padding: var(--s-5) 0 var(--s-6); display: grid; gap: var(--s-5); }
@media (min-width: 64em) { .team-head { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: end; } }
.team-head h1 { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-4); }
.rankline { font: var(--w-ui) var(--t-ui)/1.3 var(--f-display); color: var(--c-ink-2); margin: var(--s-3) 0 0; }
.rankline strong { font-weight: var(--w-display); color: var(--c-ink); }
.links { display: flex; flex-wrap: wrap; gap: var(--s-2) var(--s-5); margin: var(--s-4) 0 0; padding: 0; list-style: none; font: var(--w-ui) var(--t-ui)/1 var(--f-display); }
.links a { display: inline-flex; align-items: center; gap: var(--s-2); min-height: var(--tap); }
.links svg { width: 18px; height: 18px; }
.links .muted { color: var(--c-muted); display: inline-flex; align-items: center; min-height: var(--tap); }


.split { display: grid; gap: var(--s-8); padding-bottom: var(--s-8); }
@media (min-width: 64em) { .split { grid-template-columns: minmax(0, 7fr) minmax(16rem, 5fr); gap: var(--s-7); } }

/* commits on team page */
.commits { width: 100%; border-collapse: collapse; background: var(--c-surface); border-top: var(--rule-ink); border-bottom: var(--rule-ink); font: var(--w-ui) var(--t-ui)/1.3 var(--f-display); }
.commits thead th { background: var(--c-sunken); text-align: left; padding: var(--s-2) var(--s-3); font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); border-bottom: var(--rule-line-strong); position: sticky; top: 0; }
.commits td, .commits tbody th { padding: var(--s-3); border-bottom: var(--rule); text-align: left; vertical-align: top; font-weight: var(--w-ui); }
.commits time { color: var(--c-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.commits .school { font: var(--t-meta)/1.4 var(--f-text); color: var(--c-ink); }
.commits .yr { font-variant-numeric: tabular-nums; white-space: nowrap; }
@media (max-width: 47.99em) {
  .commits thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .commits td, .commits tbody th { padding: var(--s-2) var(--s-3); }
  .commits tr { display: grid; grid-template-columns: 3.75rem minmax(0,1fr); padding: var(--s-2) 0; border-bottom: var(--rule); }
  .commits td, .commits tbody th { border: 0; }
  .commits .c-date { grid-row: 1 / span 3; }
  .commits .y { display: block; }
  .commits .sep { display: none; }
  .commits .c-yr::before { content: "Starts "; color: var(--c-muted); }
  .commits .c-yr { padding-top: 0; color: var(--c-ink-2); }
  .commits .c-school { padding-top: 0; padding-bottom: 0; }
}

/* bar list: schools / seasons */
.bars { list-style: none; margin: 0; padding: 0; border-top: var(--rule-ink); }
.bars li { display: grid; grid-template-columns: minmax(0, 1fr) 2.5rem; gap: var(--s-1) var(--s-3); align-items: baseline; padding: var(--s-2) 0; border-bottom: var(--rule); }
.bars .nm { font: var(--t-meta)/1.35 var(--f-text); }
.bars .n { text-align: right; font: var(--w-display) var(--t-ui)/1 var(--f-display); font-variant-numeric: tabular-nums; }
.bars .share { grid-column: 1 / -1; margin-top: 0; }
.aside-block + .aside-block { margin-top: var(--s-7); }

/* instagram facade grid (team account posts) */
.ig { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-2); }
.ig-facade { border: var(--rule); background: var(--c-surface); padding: var(--s-3); text-align: left; transition: border-color var(--dur-fast) var(--ease-standard); }
.ig-facade:hover { border-color: var(--c-line-strong); }
.prose-sm { font-size: var(--t-body); line-height: var(--lh-text); max-width: var(--measure); color: var(--c-ink-2); margin: 0 0 var(--s-4); }

/* ---------- footer ---------- */
.foot { border-top: var(--rule-strong); padding: var(--s-6) 0 var(--s-8); font: var(--t-meta)/1.55 var(--f-text); color: var(--c-ink-2); }
.foot-grid { display: grid; gap: var(--s-5); }
@media (min-width: 64em) { .foot-grid { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); } }
.foot p { margin: 0 0 var(--s-3); max-width: var(--measure); }
.foot ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0 var(--s-4); font: var(--w-ui) var(--t-ui)/1 var(--f-display); }
.foot ul a { display: inline-flex; min-height: var(--tap); min-width: var(--tap); align-items: center; color: var(--c-ink-2); }
.foot .credit { font-weight: var(--w-bold); color: var(--c-ink); }
.foot b, .empty b { font-weight: var(--w-bold); } /* serif inline bold is 600, never the UA 700 */

/* ---------- motion: one intentional moment — the board's share bars draw in once on first paint ---------- */
@media (prefers-reduced-motion: no-preference) {
  .js .board .share { transform-origin: left; animation: draw var(--dur-slow) var(--ease-emph) both; animation-delay: calc(var(--i, 0) * 18ms); }
  .drawn .board .share { animation: none; } /* draw once: rows shown later by filter / Show all don't redraw */
  @keyframes draw { from { transform: scaleX(0); } to { transform: scaleX(1); } }
}


/* team page column order: on mobile the two columns melt into one flow, ordered by `order` on each section */
@media (max-width: 63.99em) { .split { display: flex; flex-direction: column; gap: var(--s-7); } .split > .main, .split > .side { display: contents; } .aside-block + .aside-block { margin-top: 0; } }
@media (min-width: 64em) { .split > .main > section + section { margin-top: var(--s-7); } .split > .side > * + * { margin-top: var(--s-7); } }

/* ---------- team page: From Pipeline Report (our editorial) ---------- */
.stories { list-style: none; margin: 0; padding: 0; }
.stories li { padding: var(--s-4) 0; border-bottom: var(--rule); }
.stories li:first-child { padding-top: var(--s-2); }
.stories .kicker { margin-bottom: var(--s-2); color: var(--c-muted); }
.stories h3 { font: var(--w-display) var(--t-h3)/1.1 var(--f-display); margin: 0; text-wrap: balance; }
.stories h3 a { display: flex; align-items: center; min-height: var(--tap); color: var(--c-ink); text-decoration: none; }
.stories h3 a:hover { color: var(--c-accent-strong); }
.st-dek { font: var(--t-meta)/1.5 var(--f-text); color: var(--c-ink-2); margin: var(--s-2) 0 0; max-width: var(--measure); }
.stories li:first-child h3 { font-size: var(--t-h2); } /* lead story gets the bigger head */

/* ---------- empty state (shared) ---------- */
.empty { border-top: var(--rule-ink); border-bottom: var(--rule); padding: var(--s-4) 0; }
.empty p { margin: 0; font: var(--t-meta)/1.55 var(--f-text); color: var(--c-ink-2); max-width: var(--measure); }

/* ---------- Instagram: privacy facade (no Meta requests until tap) ---------- */
ul.ig { list-style: none; margin: 0; padding: 0; }
.igsec .ig-facade { cursor: default; aspect-ratio: 4 / 5; display: flex; flex-direction: column; justify-content: flex-end; gap: var(--s-2); }
.igsec .ig-facade.is-loaded:not([aria-busy]) { aspect-ratio: auto; padding: 0; border: 0; } /* resets apply once the embed is in, not while loading */
.ig-meta { margin: 0; font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-muted); }
.ig-cap { margin: 0 0 auto; font: var(--t-meta)/1.45 var(--f-text); color: var(--c-ink); order: -1; display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; overflow: hidden; }
.ig-load { width: 100%; }
.ig-out { font: var(--w-ui) var(--t-meta)/1 var(--f-display); min-height: var(--tap); display: inline-flex; align-items: center; }
/* loading (aria-busy) and error states: real component styles, used by the facade script and the states reference */
.ig-facade[aria-busy="true"], .ig-facade.is-error { display: flex; flex-direction: column; justify-content: flex-end; gap: var(--s-2); }
.ig-facade[aria-busy="true"] { cursor: progress; }
.ig-inline[aria-busy="true"], .ig-inline.is-error { justify-content: flex-start; } /* row facade: states read left to right like the reference */
.ig-pair { display: grid; gap: var(--s-4); grid-template-columns: repeat(2, minmax(0, 1fr)); } /* states reference: the two facade states side by side at every width */
.ig-pair > .ig-facade { min-height: calc(var(--s-10) + var(--s-6)); } /* reference tiles keep baseline-v2's 10rem height */
.ig-facade .instagram-media { margin: 0; }
.ig-loading { margin: 0; font: var(--t-meta)/1.45 var(--f-text); color: var(--c-ink-2); }
.ig-facade.is-error { border-color: var(--c-danger-text); }
.ig-facade.is-error .ig-cap[role="alert"] { color: var(--c-danger-text); } /* only the error message; the stored caption stays ink */
.consent { font: var(--w-ui) var(--t-meta)/1.4 var(--f-display); color: var(--c-ink-2); margin: 0 0 var(--s-3); max-width: var(--measure); }
.remember { display: inline-flex; align-items: center; gap: var(--s-2); min-height: var(--tap); margin-top: var(--s-2); font: var(--w-ui) var(--t-meta)/1.3 var(--f-display); color: var(--c-ink-2); cursor: pointer; }
.remember input { width: 20px; height: 20px; accent-color: var(--c-accent); }
@media (max-width: 47.99em) { .igsec .ig { grid-template-columns: 1fr; } .igsec .ig > :nth-child(3) { display: block; } .igsec .ig-facade { aspect-ratio: auto; min-height: 11rem; } }
/* our IG posts inside "From Pipeline Report": inline facade row, not a tile */
.ig-inline { aspect-ratio: auto !important; display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-4); padding: var(--s-3); margin-top: var(--s-3); max-width: var(--measure); background: var(--c-surface); border: var(--rule); }
.ig-inline .ig-load { width: auto; }
.ig-inline.is-loaded:not([aria-busy]) { padding: 0; border: 0; display: block !important; }
.src-ig { display: inline-flex; align-items: center; gap: 0.35em; }
.src-ig svg { width: 1.1em; height: 1.1em; }

/* ---------- home: our Instagram (highlighted rail unit; on mobile it follows the leaderboard) ---------- */
.ourig { background: var(--c-surface); border: var(--rule); border-top: var(--bw-accent-rule) solid var(--c-accent); padding: var(--s-4); }
.ourig-head .kicker { display: flex; align-items: center; gap: 0.4em; margin-bottom: var(--s-2); color: var(--c-ink-2); }
.ourig-head .kicker svg { width: 1.1em; height: 1.1em; }
.ourig-head .kicker a { display: inline-flex; align-items: center; min-height: var(--tap); color: var(--c-ink-2); }
.ourig h2 { font: var(--w-display) var(--t-h3)/1.1 var(--f-display); margin: 0 0 var(--s-2); }
.ourig .consent { margin-bottom: var(--s-2); }
.ourig-list { list-style: none; margin: 0; padding: 0; }
.ourig-list li { padding: var(--s-3) 0; border-top: var(--rule); }
.ourig-list h3 { font: var(--w-display) var(--t-row)/1.2 var(--f-display); margin: var(--s-1) 0 0; }
.ourig .ig-inline { margin-top: var(--s-2); padding: var(--s-2) var(--s-3); }
.ourig .remember { margin-top: 0; }

/* ---------- team: this week's single post ---------- */
.ig-week { display: grid; gap: var(--s-4); }
@media (min-width: 48em) { .ig-week { grid-template-columns: minmax(0, 18rem) minmax(0, 1fr); align-items: end; } }
.igsec .ig-weekly { min-height: 14rem; }

/* ==========================================================================
   Production additions (v1 ship, Oct 18 2026). Same tokens; no new layouts.
   ========================================================================== */
[hidden] { display: none !important; } /* .btn/.notice set display; the hidden attribute must still win */
/* stale-data notice (client-side 30h check) */
.stale-wrap { padding-top: var(--s-3); }
/* league page */
.lede--league { padding-bottom: var(--s-5); }
.board-wrap { padding-bottom: var(--s-8); }
.board .c-rank .na { color: var(--c-muted); }
/* weekly commits page: one section per week, feed sheet */
.weeks { display: grid; gap: var(--s-7); padding-bottom: var(--s-8); max-width: 52rem; }
.sec-head .count-n { font: var(--w-display) var(--t-h3)/1 var(--f-display); color: var(--c-ink-2); font-variant-numeric: tabular-nums; }
/* methodology + leagues prose */
.prose { max-width: var(--measure); padding-bottom: var(--s-8); }
.prose section { margin-top: var(--s-7); }
.prose section:first-child { margin-top: 0; }
.prose p, .prose li { font-size: var(--t-body); line-height: var(--lh-text); color: var(--c-ink-2); }
.prose p { margin: 0 0 var(--s-4); }
.prose ul { padding-left: var(--s-5); margin: 0 0 var(--s-4); }
.prose li { margin: 0 0 var(--s-2); }
.prose b, .prose strong { font-weight: var(--w-bold); color: var(--c-ink); }
.prose .hint { margin-top: var(--s-5); }
/* leagues index page */
.index-wrap { padding-bottom: var(--s-8); }
.index-wrap .sec-head { margin-top: var(--s-7); }
.index-wrap .sec-head:first-child { margin-top: 0; }
.index dd .lname { display: none; }
/* newsletter: no provider yet, so a plain line (no form) */
.unit.nl-soon p { margin-bottom: 0; }
/* home rail when it holds only the latest-commits list */
.ig-loading[role="status"] { margin: 0; }
@media (min-width: 64em) { .split--solo { grid-template-columns: minmax(0, 1fr); } .split--solo > .side { display: none; } }

/* ==========================================================================
   v1.1 ADDITIONS — player profiles + women's section (screens-v1.1, Oct 18 2026)
   Component rules only. No new tokens, colours, type sizes or motion: every value
   below is an existing token from tokens.css. Everything above this block is the
   locked target-r5 stylesheet, unchanged.
   ========================================================================== */

/* ---------- section switch: Men's | Women's (under the masthead, every page) ----------
   The filter-chip pattern (.seg button) applied to links: same outline, fills, 48px height,
   inset focus ring. Current section = the active-chip fill (accent = "current state", §3.1). */
.switch-row { padding-top: var(--s-3); }
.switch { list-style: none; margin: 0; padding: 0; display: inline-flex; border: var(--rule-control); border-radius: var(--r-2); overflow: hidden; }
.switch li + li { border-left: var(--rule); }
.switch a { display: inline-flex; align-items: center; justify-content: center; min-height: var(--tap); min-width: calc(var(--tap) * 2);
  padding: 0 var(--s-4); background: var(--c-surface); color: var(--c-ink-2); text-decoration: none;
  font: var(--w-ui) var(--t-ui)/1 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase;
  transition: background-color var(--dur-fast) var(--ease-standard); }
.switch a:hover { background: var(--c-sunken); color: var(--c-ink-2); }
.switch a[aria-current="page"], .switch a[aria-current="page"]:hover { background: var(--c-accent); color: var(--c-on-accent); } /* current = pressed chip; like it, no hover change */
.switch a:focus-visible { border-radius: 0; box-shadow: var(--focus-ring-inset); }
.switch-row ~ main > .crumbs { padding-top: var(--s-2); } /* the switch already spaces the page top */

/* ---------- player page: head (extends .team-head) ---------- */
.commitline { font: var(--w-ui) var(--t-ui)/1.3 var(--f-display); color: var(--c-ink-2); margin: var(--s-3) 0 0; } /* same voice as .rankline */
.commitline .nw { white-space: nowrap; } /* never split "2027-28" at the hyphen */
.commitline strong { font-weight: var(--w-display); color: var(--c-ink); }
.player-head .hint { margin-top: var(--s-2); }
.player-head .flag { vertical-align: 1px; }

/* bio facts: a definition list in the tote's voice, smaller numerals; missing facts are omitted (no empty cells) */
.facts { display: grid; grid-template-columns: repeat(auto-fill, minmax(6.5rem, 1fr)); gap: var(--s-4) var(--s-3); margin: 0; padding-top: var(--s-3); border-top: var(--rule-strong); }
.facts > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; min-width: 0; }
.facts dt { font: var(--w-ui) var(--t-label)/1.25 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); }
.facts dd { margin: 0 0 var(--s-1); font: var(--w-display) var(--t-num)/1.1 var(--f-display); font-variant-numeric: tabular-nums lining-nums; overflow-wrap: anywhere; }
.facts dd small { font: var(--w-ui) var(--t-meta)/1 var(--f-display); color: var(--c-ink-2); margin-left: 0.2em; }

/* ---------- season stats: sticky first column, sideways scroll inside the table only ---------- */
.scroller { position: relative; /* containing block for sr-only text in cells */ overflow-x: auto; max-width: 100%; border-top: var(--rule-ink); border-bottom: var(--rule-ink); border-radius: 0;
  /* scroll cue: a soft edge where more columns hide (classic local/scroll gradients, existing tokens only) */
  background:
    linear-gradient(to left, var(--c-surface) 40%, transparent) right center / var(--s-6) 100% no-repeat local,
    linear-gradient(to left, var(--c-line-strong), transparent) right center / var(--s-3) 100% no-repeat scroll,
    var(--c-surface); }
.scroller:focus-visible { box-shadow: var(--focus-ring); }
.stats { border-collapse: separate; border-spacing: 0; width: 100%; font: var(--w-ui) var(--t-ui)/1.25 var(--f-display); font-variant-numeric: tabular-nums lining-nums; }
.stats th, .stats td { padding: var(--s-2) var(--s-3); border-bottom: var(--rule); text-align: right; white-space: nowrap; vertical-align: baseline; }
.stats thead th { background: var(--c-sunken); font: var(--w-ui) var(--t-label)/1.2 var(--f-display); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--c-ink-2); border-bottom: var(--rule-line-strong); vertical-align: bottom; }
.stats thead abbr { text-decoration: none; }
.stats .c-season { position: sticky; left: 0; z-index: 1; text-align: left; background: var(--c-surface); border-right: var(--rule); white-space: normal; min-width: 6.5rem; max-width: 9rem; font-weight: var(--w-display); color: var(--c-ink); }
.stats thead .c-season { background: var(--c-sunken); z-index: 2; }
.stats .c-team { text-align: left; color: var(--c-ink-2); }
.stats tbody tr:last-child > * { border-bottom: 0; }
.stats .na { color: var(--c-muted); }
.scroll-cue { margin: 0 0 var(--s-2); }
@media (min-width: 64em) { .stats th, .stats td { padding-left: var(--s-2); padding-right: var(--s-2); } .stats .c-season { max-width: 10rem; } } /* desktop: both tables fit the main column; the scroller stays as the safety net */

/* ---------- next games ---------- */
.games { list-style: none; margin: 0; padding: 0; background: var(--c-surface); border-top: var(--rule-ink); border-bottom: var(--rule-ink); font: var(--w-ui) var(--t-ui)/1.3 var(--f-display); }
.games li { display: grid; grid-template-columns: 6.5rem 4.5rem minmax(0, 1fr); gap: 0 var(--s-3); padding: var(--s-3); border-bottom: var(--rule); align-items: baseline; }
.games li:last-child { border-bottom: 0; }
.games time { font-weight: var(--w-display); color: var(--c-ink); white-space: nowrap; }
.games .g-time { color: var(--c-ink-2); white-space: nowrap; font-variant-numeric: tabular-nums; }
.games .g-ha { color: var(--c-muted); }
.games .tag { margin-left: var(--s-2); }
@media (max-width: 23.99em) { .games li { grid-template-columns: 5.75rem minmax(0, 1fr); } .games .g-opp { grid-column: 1 / -1; } }

/* ---------- women's home: the "not counted" note, inside the definition block above the board ---------- */
.defn .not-counted { margin-top: var(--s-2); } /* second paragraph of the "Active commits" definition; type comes from .defn p */
@media (min-width: 48em) { .defn:has(.not-counted) > p:first-of-type { grid-row: 1; } .defn .not-counted { grid-row: 2; margin-top: 0; } }


/* ---------- v1.1 build: player-name links in team-page commit rows (spec §6 "48px target") ----------
   The name stays a normal inline-block link; an absolutely positioned ::after gives it a 48px-tall hit area
   centred on the text (the row/cell already reserves that height). Existing tokens only. */
.commits a.plink { position: relative; display: inline-block; }
.commits a.plink::after { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: var(--tap); min-width: var(--tap); transform: translateY(-50%); }
@media (min-width: 48em) { .commits a.plink::after { height: calc(100% + 2 * var(--s-3)); } } /* desktop: band = the row, no overlap with the next row */
/* ---------- player-name links in commit feeds (weekly commits page + home "latest" rail) ----------
   .pick wraps name + position badge + school line. The link's ::after fills .pick from the top of the row
   (cancelling the li's --s-3 top padding) to the bottom of the school line, full column width, and stops above
   the .from line so it never covers the team link. Ink at rest; accent underline + focus ring on hover/focus. */
.feed .pick { display: block; position: relative; }
.feed a.plink { color: var(--c-ink); text-decoration: none; }
.feed a.plink::after { content: ""; position: absolute; left: 0; right: 0; top: calc(-1 * var(--s-3)); bottom: 0; }
.feed a.plink:hover, .feed a.plink:focus-visible { color: var(--c-ink); text-decoration: underline; text-decoration-color: var(--c-accent); }
/* league detail pages: the Leagues nav item marks the current section (aria-current="true"), not the current page; same look */
.nav a[aria-current="true"] { color: var(--c-ink); box-shadow: inset 0 calc(-1 * var(--nav-underline)) 0 var(--c-accent); }
.nav a[aria-current="true"]:hover { color: var(--c-accent-strong); }
.nav a[aria-current="true"]:focus-visible { box-shadow: var(--focus-ring-inset-paper), inset 0 calc(-1 * var(--nav-underline-focus)) 0 var(--c-accent); }
