/* Liv Covert recruiting site. Build 5: spec §22 type & density overhaul (supersedes earlier size/spacing values).
   Type sizes come only from the §22.1 role tokens in tokens.css; spacing is on an 8px grid (4px for related lines). OLSM tokens only. */
@font-face{font-family:"Playfair Display";src:url(/fonts/playfair-600-700.woff2) format("woff2");font-weight:600 700;font-display:swap}
@font-face{font-family:"Lora";src:url(/fonts/lora-400-600.woff2) format("woff2");font-weight:400 600;font-display:swap}
@font-face{font-family:"Lora";src:url(/fonts/lora-italic-400.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Playfair Display";src:url(/fonts/playfair-italic-400-sub.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}   /* Build 8g: Coach quote face (Playfair Display Italic, OFL, instanced at wght 400, Latin subset) so the italic is real, not synthesized */
@font-face{font-family:"Alfa Slab One";src:url(/fonts/alfa-slab-one-sub.woff2) format("woff2");font-weight:400;font-display:swap}   /* subset (spec §19): StatFeature + metric numerals */

/* ---------- base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:72px}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
body{margin:0;background:var(--ols-paper);color:var(--ols-ink);font-family:var(--font-body);font-size:var(--t-body);line-height:var(--lh-t-body)}
img,video,svg{display:block;max-width:100%}
a{color:var(--c-link);text-underline-offset:3px}
a:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--c-link);outline-offset:2px;box-shadow:var(--ring-focus)}
h1,h2,h3{font-family:var(--font-display);color:var(--c-heading);margin:0}
h1{font-weight:var(--fw-bold);font-size:var(--t-h1);line-height:var(--lh-t-h1);letter-spacing:var(--tr-t-h1)}
h2{font-weight:var(--fw-semi);font-size:var(--t-h2);line-height:var(--lh-t-h2);letter-spacing:var(--tr-t-h2)}
h3{font-weight:var(--fw-semi);font-size:var(--t-h3);line-height:var(--lh-t-h3);letter-spacing:var(--tr-t-h3)}
p{margin:0}
main p{max-width:var(--measure)}   /* §22.1 prose measure */
main p.bandlabel,main p.clink,main .preread p,main .sf-card p{max-width:none}
.num{font-variant-numeric:lining-nums tabular-nums}
.lnum{font-variant-numeric:lining-nums proportional-nums}
.wrap{max-width:var(--container-max);margin:0 auto;padding:0 20px}
.eyebrow{font-weight:var(--fw-semi);font-size:var(--t-label);line-height:var(--lh-t-label);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--ols-stone)}
.muted{color:var(--ols-stone)}
.small{font-size:var(--t-support);line-height:var(--lh-t-support)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:8px;background:var(--c-bar);color:var(--ols-ivory);padding:8px 12px;z-index:50}
.skip:focus{left:8px}

/* open-item placeholders (none render since Todd, 10:32 PM): preview builds only; the production build removes them and their parent item */
.confirm{display:inline-block;font:var(--fw-semi) 14px/1.3 var(--font-body);color:var(--warning);border:1px dashed var(--warning);background:var(--ols-ivory);border-radius:var(--r-2);padding:1px 6px;letter-spacing:0;text-transform:none;vertical-align:middle}
.preview-banner{background:var(--ols-ivory);border-bottom:1px dashed var(--warning);color:var(--ols-ink-soft);font-size:14px;line-height:1.35;text-align:center;padding:4px 12px}

/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:20;background:var(--ols-paper);border-bottom:1px solid var(--ols-line-soft)}
.topbar .wrap{display:flex;align-items:center;justify-content:space-between;min-height:56px;gap:16px}
.wordmark{font:var(--fw-bold) 15px/1 var(--font-display);letter-spacing:var(--tr-t-label);color:var(--c-heading);text-decoration:none}
.anchors{display:none;gap:28px}
.anchors a{font-weight:var(--fw-semi);font-size:var(--t-ui);text-decoration:none;color:var(--ols-ink-soft)}
.anchors a:hover{color:var(--c-link)}
.coachlink{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-weight:var(--fw-semi);font-size:var(--t-ui);text-decoration:none}
.coachlink svg{width:14px;height:14px}
.stamp{font-style:italic;font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-stone)}
.stamp-d{display:none}

/* ---------- film hero ---------- */
.film{position:relative;aspect-ratio:16/9;background:var(--c-film-deep);border-radius:var(--r-2);overflow:hidden;box-shadow:var(--sh-2)}
.film video,.film .poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.film picture.poster img{width:100%;height:100%;object-fit:cover}
.poster-note{position:absolute;left:10px;top:10px;z-index:2}
.poster-note .confirm{background:var(--c-film-deep)}
.play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:64px;height:64px;border-radius:50%;border:0;background:var(--ols-crimson);color:var(--ols-ivory);display:grid;place-items:center;cursor:pointer;box-shadow:var(--sh-3);transition:background var(--dur-base) var(--ease-standard)}
.play:hover{background:var(--ols-crimson-deep)}
.play svg{width:24px;height:24px;margin-left:4px}
.play-ivory{background:var(--ols-ivory);color:var(--c-heading)}
.play-ivory:hover{background:var(--ols-cream)}
.film-cap{position:absolute;left:0;right:0;bottom:0;padding:24px 16px 12px;color:var(--ols-ivory);font-size:var(--t-support);line-height:var(--lh-t-support);font-weight:var(--fw-semi);background:linear-gradient(transparent,rgba(46,5,7,.85))}
.film.playing .play,.film.playing .film-cap,.film.playing .poster,.film.playing .poster-note{display:none}
/* chapter chips: 15px, 44px tall (§22.4) */
.chips{display:flex;gap:8px;overflow-x:auto;padding:12px 20px 0;margin:0 -20px;scrollbar-width:none;list-style:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border:1px solid var(--ols-line);border-radius:var(--r-pill);background:var(--ols-ivory);font:var(--fw-semi) var(--t-ui)/1 var(--font-body);color:var(--ols-ink-soft);cursor:pointer;white-space:nowrap}
.chip b{color:var(--c-heading);font-variant-numeric:lining-nums tabular-nums}
.chip:hover,.chip.on{border-color:var(--c-link)}
.chip.on{color:var(--c-link)}

/* ---------- identity: name 46px, 8px to lines, 12px to tags, 20px to the feature block (§22.2) ---------- */
.identity{padding-top:16px}
.identity .line{margin-top:8px;color:var(--ols-ink-soft)}
.identity .line + .line{margin-top:4px}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.tag{font-size:14px;line-height:1.3;font-weight:var(--fw-semi);border:1px solid var(--ols-line);border-radius:var(--r-pill);padding:4px 12px;color:var(--ols-ink-soft)}

/* ---------- StatFeature (home + /coach): open on paper, 3px gold top rule, 16px, eyebrow, number, events line (§22.3) ---------- */
.statfeature{border-top:3px solid var(--c-rule-gold);padding-top:16px}
.sf-card{margin-top:20px}
/* Build 8b (Todd): AFCS logo tile, homepage card only. Its own dark ground is kept (white/grey marks vanish on cream) as a small rounded tile.
   Build 8d: 56px at every width, right of the label + 34-FOR-65 rows and vertically centred on them, so the label starts right under the gold rule
   (no logo-height gap). .523 AVG runs full width under both; the logo never touches the band's tournament columns. */
.sf-card{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:16px;grid-template-areas:"eye logo" "big logo" "avg avg"}
.sf-card > .sf-eyebrow{grid-area:eye}
.sf-card > .sf-big{grid-area:big}
.sf-card > .sf-avg{grid-area:avg}
.sf-logo{grid-area:logo;align-self:center;justify-self:end;display:block;width:56px;height:56px}
.sf-logo img{display:block;width:100%;height:100%;border-radius:var(--r-4)}
.herocol > .sf-card{margin-top:16px;padding-top:12px}
.sf-eyebrow{font:var(--fw-semi) var(--t-label)/var(--lh-t-label) var(--font-body);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--c-link)}
.sf-big{font-family:"Alfa Slab One",var(--font-display);font-weight:400;font-size:var(--t-feature);line-height:var(--lh-t-feature);color:var(--ols-crimson-ink);margin-top:8px;white-space:nowrap;text-transform:uppercase}
.sf-avg{font:var(--fw-bold) var(--t-feature-avg)/1.1 var(--font-display);color:var(--c-heading);margin-top:4px}
.sf-avgn{font-family:"Alfa Slab One",var(--font-display);font-weight:400;letter-spacing:0}
.sf-events{font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-ink-soft);margin-top:8px}
.sf-under{margin-top:8px;color:var(--ols-ink-soft)}

/* ---------- metric boxes (Build 8c; was the §22.3 open tile grid) ---------- */
/* ---------- §23 (9:59 PM) national tournaments band: homepage only, the page's one strong color block (maroon, cream text, gold numerals).
   Phones: full-bleed after 34-FOR-65, three stacked rows, labels once at top (subgrid keeps the numeral columns aligned). Contrast on #5E0A0E:
   ivory 12.3:1, ivory 80% 8.2:1, ivory 70% 6.5:1, gold 5.7:1 (build.py recomputes these from tokens.css + this block). ---------- */
.tourn{margin-top:24px;padding:32px 0;background:var(--c-bar);color:var(--ols-ivory);box-shadow:0 0 0 100vmax var(--c-bar);clip-path:inset(0 -100vmax);
  display:grid;grid-template-columns:repeat(3,auto);justify-content:space-between;column-gap:12px}
.tn-labels,.tn-list,.tn-ev{display:grid;grid-column:1/-1;grid-template-columns:subgrid}
.tn-list{list-style:none;margin:0;padding:0}
.tn-labels span{font:var(--fw-semi) var(--t-label)/var(--lh-t-label) var(--font-body);letter-spacing:.1em;text-transform:uppercase;color:rgba(247,242,231,.7)}
.tn-ev{padding:20px 0;align-items:baseline}
.tn-ev:first-child{padding-top:8px}
.tn-ev:last-child{padding-bottom:0}
.tn-ev + .tn-ev{border-top:1px solid rgba(247,242,231,.2)}
.tn-name,.tn-when{grid-column:1/-1}
.tn-name{font:600 20px/1.25 var(--font-display);color:var(--ols-ivory);letter-spacing:0;margin:0}
.tn-when{font-size:15px;line-height:1.4;color:rgba(247,242,231,.8);margin-top:4px}
.tn-pill{display:block;width:fit-content;margin-top:8px;border:1px solid var(--ols-gold);border-radius:999px;padding:4px 10px;background:transparent;color:var(--ols-gold);
  font:var(--fw-semi) var(--t-label)/1 var(--font-body);letter-spacing:var(--tr-t-label);text-transform:uppercase}
.tn-nums,.tn-nums > div{display:contents}
.tn-num{font-family:"Alfa Slab One",var(--font-display);font-weight:400;font-size:36px;line-height:1.1;color:var(--ols-gold);margin:10px 0 0;white-space:nowrap}
/* Build 8d (Todd 6:59 AM + Design Lead): the three boxed stats are the hero headline, right under the identity chips and above the 34-FOR-65 card.
   One row of equal boxes at every width; 1px line border, tight padding, so the numerals carry the weight. Numeral size comes from --t-metric-box
   (44px phones, up to 72px desktop, capped by the box width via container units on .metrics). One label + one small source line per box. */
.metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin-top:14px;container-type:inline-size}
.metric{display:flex;flex-direction:column;padding:6px 5px;border:1px solid var(--ols-line);border-radius:var(--r-2);background:var(--ols-paper);text-decoration:none;color:inherit;min-width:0}
.metric .val{font-family:"Alfa Slab One",var(--font-display);font-weight:400;letter-spacing:0;color:var(--c-heading);font-variant-numeric:lining-nums tabular-nums;line-height:1;font-size:var(--t-metric-box);white-space:nowrap}
.metric .val small{font-family:var(--font-display);font-weight:var(--fw-semi);font-size:var(--t-metric-box-unit);margin-left:3px}   /* "mph" as small Playfair text */
.metric .lbl{font-weight:var(--fw-semi);font-size:14px;line-height:1.2;color:var(--ols-ink);margin-top:4px}
.metric .proof{font-size:14px;line-height:1.2;color:var(--ols-ink-soft);margin-top:2px}
a.metric:hover{border-color:var(--c-link)}
/* one small line under the row: "Also 2.78, CBJ verified · Sept 2025 · Watch the timed run" (only the last three words link; no chip) */
.metric-foot{grid-column:1/-1;grid-row:2;font-size:14px;line-height:1.3;color:var(--ols-ink-soft);margin:2px 0 0}
.metric-foot .fn-go{font-weight:var(--fw-semi);color:var(--c-link);text-decoration:underline;text-underline-offset:2px}
@media (max-width:599.98px){ .metric-foot .fn-also{display:none} }   /* Build 8d fit: phones read "2.78, CBJ verified · Sept 2025 · Watch the timed run" on one line at 390 */
@media (min-width:1024px){
  .metrics{gap:8px;margin-top:20px}
  .metric{padding:8px 6px}
  .metric .lbl,.metric .proof,.metric-foot{font-size:15px}
  .metric-foot{margin-top:4px}
}
.metric-held{justify-content:center}
/* Build 8d step 1 (Todd + Design Lead): phones (<600px) hide the homepage chapter-button row under the film; chapters stay in the film's chapter track, and on /coach */
@media (max-width:599.98px){ .hero .chips{display:none} }
.bat-line{margin-top:16px;color:var(--ols-ink-soft)}   /* only rendered when data.GPA_TILE is on (copy v2.9) */
.verified{display:inline-flex;align-items:center;gap:4px;font:var(--fw-semi) 14px/1 var(--font-body);color:var(--c-verified);background:var(--ols-ivory);border:1px solid var(--c-verified);border-radius:var(--r-pill);padding:4px 8px;white-space:nowrap}
.verified svg{width:10px;height:10px}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 24px;border-radius:var(--r-pill);font:var(--fw-semi) 16px/1.2 var(--font-body);text-align:center;text-decoration:none;cursor:pointer;border:1px solid var(--c-link);color:var(--c-link);background:transparent;transition:background var(--dur-base) var(--ease-standard)}
.btn:hover{background:var(--ols-ivory)}
.btn-primary{background:var(--ols-crimson);border-color:var(--ols-crimson);color:var(--ols-ivory)}
.btn-primary:hover{background:var(--ols-crimson-deep)}
.btn-block{width:100%}
.cta{margin-top:16px}

/* ---------- sections: 40px / 72px top, a 40x2 gold rule 12px above each band h2 (replaces the repeated eyebrow), 16px / 24px to content (§22.2) ---------- */
section.band{padding-top:var(--gap-band)}
.band-head{display:flex;flex-direction:column;gap:8px;margin-bottom:var(--gap-head)}
.band-head::before{content:"";display:block;width:40px;height:2px;background:var(--c-rule-gold);margin-bottom:4px}
.band-head > p{color:var(--ols-stone)}
.card{background:var(--ols-ivory);border:1px solid var(--ols-line);border-radius:var(--r-2);padding:16px}   /* boxes: only the /coach pre-read (§22.3) */
.links{display:flex;gap:16px;margin-top:8px;font-weight:var(--fw-semi);font-size:var(--t-support)}
.links a{min-height:44px;display:inline-flex;align-items:center}

/* ---------- film rails (§22.4): one clip = full width; 2+ clips = 82% so the next one peeks ---------- */
.rail-h{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin:24px 0 8px}
.band-head + .rail-h{margin-top:0}
.rail-h a{font-weight:var(--fw-semi)}
.rail{display:flex;gap:12px;overflow-x:auto;margin:0 -20px;padding:0 20px 4px;scroll-snap-type:x mandatory;scroll-padding-inline:20px;list-style:none}
.clip{flex:none;width:82%;scroll-snap-align:start}
.clip:only-child{width:100%}
.clip .thumb{display:block;aspect-ratio:16/9;border-radius:var(--r-2);background:linear-gradient(160deg,var(--c-film),var(--c-film-deep));position:relative;overflow:hidden;color:var(--ols-ivory)}
.clip .thumb img{width:100%;height:100%;object-fit:cover;border-radius:var(--r-2)}
.clip .thumb picture{display:block;width:100%;height:100%}
.clip .thumb .cplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:48px;height:48px;border-radius:50%;background:rgba(46,5,7,.82);display:grid;place-items:center;transition:background var(--dur-base) var(--ease-standard)}
.clip .thumb .cplay svg{width:18px;height:18px;margin-left:3px}
a.thumb:hover .cplay{background:var(--c-film)}
.clip .thumb .dur{position:absolute;right:8px;bottom:8px;background:rgba(46,5,7,.9);color:var(--ols-ivory);font-size:14px;line-height:1.3;padding:1px 6px;border-radius:var(--r-1)}
.clip .thumb.playing{background:var(--c-film-deep)}
.clip .thumb.playing video{width:100%;height:100%;object-fit:contain}
.clip h3{font-family:var(--font-body);font-size:var(--t-body);line-height:1.35;font-weight:var(--fw-semi);color:var(--ols-ink);letter-spacing:0;margin-top:8px}
.clip p{font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-stone);margin-top:4px}
.clip p.cnote{color:var(--ols-ink-soft);margin-top:8px}
.rail + .small{margin-top:16px}
.rail-coach{margin-top:16px}
/* Build 8g (spec §31): /coach Athletic metrics clip grid (not a rail): 2.54 | Arm Strength, 50/50 from 768 with a 24px gap, full card-row width;
   stacked on phones (2.54 first). Captions under each clip; 16:9 posters top-aligned; no filler for uneven captions. */
.cgrid{list-style:none;margin:24px 0 0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
.cgrid > .clip,.cgrid > .clip:only-child{width:auto}
@media (min-width:768px){ .cgrid{grid-template-columns:repeat(2,minmax(0,1fr))} }

/* ---------- schedule ---------- */
.next{border-left:3px solid var(--c-heading);padding-left:16px}   /* no box (§22.3) */
.next h3{margin-top:4px}
.next p{margin-top:4px}
.sched{list-style:none;margin:16px 0 0;padding:0}
.sched li{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:12px 0;border-top:1px solid var(--ols-line-soft)}
.sched .d{font-weight:var(--fw-semi);color:var(--c-heading);font-variant-numeric:lining-nums tabular-nums;font-size:var(--t-support);line-height:var(--lh-t-body)}
.sched .where{color:var(--ols-stone);font-size:var(--t-support);line-height:var(--lh-t-support)}
.sched li.grp{display:block;border:0;padding:16px 0 4px}
.sched li.done{color:var(--ols-ink-soft)}
.sched li.done .d{color:var(--ols-stone)}
.sched li.done .res{color:var(--ols-ink-soft);font-weight:var(--fw-semi);font-size:var(--t-support)}
#schedule > p.small{margin-top:16px}
#schedule > p.small + p.small{margin-top:4px}

/* ---------- academics + contact ---------- */
.facts{display:grid;margin:0}
.facts div{display:grid;grid-template-columns:120px 1fr;gap:12px;padding:12px 0;border-top:1px solid var(--ols-line-soft)}
.facts dt{font-weight:var(--fw-semi);font-size:var(--t-support);line-height:var(--lh-t-body);color:var(--ols-stone)}
.facts dd{margin:0}
#academics > p.small,#contact > p.small{margin-top:16px}
/* contacts: a flat list, groups separated by a hairline, full-width 48px outline actions (§22.3) */
.contacts{display:grid;gap:0}
.contact{padding:16px 0;border-top:1px solid var(--ols-line-soft)}
.contact:first-child{border-top:0;padding-top:0}
.contact .role{font-size:var(--t-label);line-height:var(--lh-t-label);font-weight:var(--fw-semi);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--ols-stone)}
.contact .who{font-weight:var(--fw-semi);margin-top:8px}
.contact .who + p{margin-top:4px}
.contact > p.small:last-child{margin-top:8px}
.clinks{display:grid;gap:8px;margin-top:12px}
.clink{display:flex;flex-direction:column;justify-content:center;min-height:48px;width:100%;padding:6px 16px;border:1px solid var(--c-link);border-radius:var(--r-2);background:transparent;color:var(--c-link);text-decoration:none;font-weight:var(--fw-semi);font-size:16px;line-height:1.3}
.clink:hover{background:var(--ols-ivory)}
.clink .muted{font-weight:400;color:var(--ols-ink-soft);overflow-wrap:anywhere}
.clink[hidden]{display:none}

/* ---------- footer ---------- */
footer.site{margin-top:var(--gap-foot);background:var(--c-bar);color:var(--ols-ivory);padding:32px 0 calc(96px + env(safe-area-inset-bottom));font-size:var(--t-support);line-height:var(--lh-t-support)}
footer.site a{color:var(--ols-ivory)}
footer.site p + p{margin-top:8px}
footer.site .rule{height:1px;background:var(--ols-gold);opacity:.6;margin:16px 0}

/* ---------- bottom tab bar (mobile) ---------- */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:20;background:var(--ols-paper);border-top:1px solid var(--ols-line);display:grid;grid-template-columns:repeat(5,1fr);padding-bottom:env(safe-area-inset-bottom)}
.tabbar a{display:flex;align-items:center;justify-content:center;min-height:52px;font-weight:var(--fw-semi);font-size:14px;color:var(--ols-ink-soft);text-decoration:none;border-top:2px solid transparent;margin-top:-1px}
.tabbar a.active{color:var(--c-link);border-top-color:var(--c-link)}

/* ---------- tables: open on paper; 1px line under the head, soft hairlines between rows, 12px row padding; the combined row stays maroon to the table edge (§22.3) ---------- */
.dtable{width:100%;border-collapse:collapse;font-size:var(--t-table);line-height:var(--lh-t-table)}
.dtable th,.dtable td{vertical-align:top;text-align:left;padding:12px 8px}
.dtable th:first-child,.dtable td:first-child{padding-left:0}
.dtable th:last-child,.dtable td:last-child{padding-right:0}
.dtable thead th{font-size:var(--t-label);line-height:var(--lh-t-label);font-weight:var(--fw-semi);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--ols-stone);padding-top:0;padding-bottom:8px;border-bottom:1px solid var(--ols-line)}
.dtable tbody tr + tr > *{border-top:1px solid var(--ols-line-soft)}
.dtable tbody th{font-weight:var(--fw-semi);color:var(--ols-ink);text-transform:none;letter-spacing:0}
.dtable td:first-child{white-space:nowrap}
/* StatFeature table (§20 / §22.6): phones show Event · H-AB · AVG · OPS on home and /coach; all 7 columns from 600px */
.sftable th{font-variant-numeric:lining-nums proportional-nums}
.sftable td{font-variant-numeric:lining-nums tabular-nums;white-space:nowrap;text-align:right}
.sftable thead th{white-space:nowrap}
.sftable thead th:not(:first-child){text-align:right}
.sftable .ev-name{display:block}
.sftable .ev-date{display:block;font-weight:400;font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-stone);margin-top:4px}
.sftable .pill{display:block;width:fit-content;margin-top:8px;font:var(--fw-semi) var(--t-label)/1 var(--font-body);letter-spacing:var(--tr-t-label);text-transform:uppercase;
  color:var(--c-heading);   /* spec §19: no gold text on cream; the pill's gold is decorative (border + tint) */
  background:color-mix(in srgb,var(--ols-gold) 16%,var(--ols-cream));border:1px solid var(--ols-gold);border-radius:var(--r-pill);padding:4px 8px;white-space:nowrap}
.sftable td.blank{color:var(--ols-stone)}
.sftable tr.total > *{background:var(--ols-crimson-dark);color:var(--ols-ivory);font-weight:var(--fw-semi);border-top:0}
.sftable tr.total th{text-transform:uppercase;letter-spacing:var(--tr-t-label);font-size:var(--t-label);line-height:var(--lh-t-label);padding-left:12px;vertical-align:middle}
.sftable tr.total td:last-child{padding-right:12px}
.sftable tr.total td.blank{color:var(--ols-ivory)}
.sftable .c-m{display:none;white-space:nowrap}
@media (max-width:599px){
  .sftable .c-d{display:none}
  .sftable .c-m{display:table-cell}
}
/* last-resort scroller (§22.6): used only if a table can ever be wider than its container; the check in tools/checks-b5.mjs keeps every table inside it at 360 and 390 */
.tscroll{overflow-x:auto;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent)}
#last2 .sf-under{margin-top:8px}
.cta-pdf{margin-top:24px}
/* Build 8g (spec §28): Coach Langlois pull quote. Open block, no box/fill/card: 3px maroon left rule + 16px padding (same as Schedule .next).
   Home: Playfair 400 italic 20px phone / 24px >=1024 (--t-quote), lh 1.4, ink, max 62ch; 32/32px around it on phones, 48/48 at >=1024.
   /coach (under Coach Langlois's card): body size italic, same rule and credit line. */
.cquote{margin:32px 0;border-left:3px solid var(--c-heading);padding-left:16px}
.cquote blockquote{margin:0}
.cquote blockquote p{margin:0;max-width:62ch;color:var(--ols-ink);font-style:italic}
.cq-home blockquote p{font:italic 400 var(--t-quote)/var(--lh-t-quote) var(--font-display)}
.cq-coach{margin:16px 0 0}
.cq-coach blockquote p{font:italic 400 var(--t-body)/var(--lh-t-body) var(--font-body)}
.cquote figcaption{margin-top:8px;font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-stone)}
.cquote .cq-by{display:block}
.cquote .nw{white-space:nowrap}
.cquote .cq-x{display:inline-block;margin-top:4px}
.cq-home + .cta-pdf{margin-top:32px}
@media (min-width:1024px){ .cq-home{margin:48px 0} .cq-home + .cta-pdf{margin-top:48px} }
@media (min-width:768px){ .cta-pdf{max-width:420px} }

/* ---------- /coach ---------- */
.coachbar{position:sticky;top:0;z-index:20;background:var(--c-bar);color:var(--ols-ivory)}
.coachbar .wrap{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:60px}
.coachbar .t{font-size:var(--t-ui);font-weight:var(--fw-semi)}
.coachbar .t span{font-weight:400;opacity:.85;display:none}
.coachbar .sm{display:inline}.coachbar .lg{display:none}
/* spec §19 (5:17 PM): on the maroon bar the PDF button is an ivory fill with crimson-dark text; bright crimson stays on light backgrounds */
.coachbar .btn-primary{min-height:44px;padding:0 16px;font-size:var(--t-ui);background:var(--ols-ivory);border-color:var(--ols-ivory);color:var(--c-heading)}
.coachbar .btn-primary:hover{background:var(--ols-cream);border-color:var(--ols-cream)}
.jump{position:sticky;top:60px;z-index:19;background:var(--ols-paper);border-bottom:1px solid var(--ols-line-soft);padding:8px 20px}
.jump select{width:100%;min-height:44px;font:var(--fw-semi) var(--t-ui) var(--font-body);color:var(--ols-ink);background:var(--ols-ivory);border:1px solid var(--ols-line);border-radius:var(--r-2);padding:0 12px}
.dossier-head{padding:24px 0 0}
.dossier-head h1{margin-top:8px}
.dh-id{display:flex;align-items:center;gap:16px}
.headshot img{width:96px;height:122px;object-fit:cover;object-position:50% 20%;border-radius:var(--r-2);box-shadow:var(--sh-1)}
/* identity list: open 2-col definition list with hairlines, no fill (§22.3) */
.idgrid{display:grid;grid-template-columns:1fr 1fr;column-gap:16px;margin:24px 0 0}
.idgrid div{padding:12px 0;border-top:1px solid var(--ols-line-soft);min-width:0}
.idgrid .wide{grid-column:span 2}
.idgrid dt{font-size:var(--t-label);line-height:var(--lh-t-label);font-weight:var(--fw-semi);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--ols-stone)}
.idgrid dd{margin:4px 0 0;font-weight:var(--fw-semi);line-height:1.4;word-spacing:normal;text-align:left}
.idgrid dd .hline{display:block;margin-top:4px}   /* Build 8f: the hitting-streak line sits on its own line under the sophomore honors */
.toc{display:none}
.bandlabel{font:var(--fw-semi) var(--t-label)/var(--lh-t-label) var(--font-body);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--c-heading);border-top:2px solid var(--c-heading);padding-top:12px;margin-top:var(--gap-band)}
.item{padding-top:var(--gap-band)}
.bandlabel + .item{padding-top:var(--gap-head)}
.item h2 .n{font-family:var(--font-body);font-size:var(--t-support);font-weight:var(--fw-semi);letter-spacing:0;color:var(--ols-stone);margin-right:8px;font-variant-numeric:lining-nums tabular-nums;vertical-align:.35em}
.item > p.sub{color:var(--ols-ink-soft);margin-top:8px}
.item > h2 + *:not(.sub),.item > p.sub + *{margin-top:var(--gap-head)}
.item > p.small{margin-top:16px}
.subh{font-size:var(--t-h3);margin:32px 0 8px}
.item .subh:first-of-type{margin-top:0}
.item > p.sub + .subh{margin-top:var(--gap-head)}
.sfnotes{margin:12px 0 0;padding-left:20px;color:var(--ols-ink-soft)}
.sfnotes li + li{margin-top:4px}
/* open items separated by hairlines, 16px padding: proof cards, result rows, defense, clubs (§22.3) */
.proofs,.defs{display:grid;column-gap:32px}
.proofcard,.defcard{padding:16px 0;border-top:1px solid var(--ols-line-soft)}
.proofcard .big{font:var(--fw-bold) var(--t-metric)/1 var(--font-display);color:var(--c-heading);font-variant-numeric:lining-nums tabular-nums;margin-top:8px}
.proofcard .big small{font-size:var(--t-metric-unit)}
.proofcard .verified{margin-top:8px}
.proofcard dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:12px 0 16px;font-size:var(--t-support);line-height:var(--lh-t-support)}
.proofcard dt{color:var(--ols-stone);font-weight:var(--fw-semi)}
.proofcard dd{margin:0}
.proofcard .btns{display:flex;flex-wrap:wrap;gap:8px}
.proofcard .pnote{margin-bottom:8px}
.rows{list-style:none;margin:0;padding:0;font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-ink-soft)}
.rows li{padding:16px 0;border-top:1px solid var(--ols-line-soft)}
.rows li:first-child{border-top:0;padding-top:0}
.rows li strong{display:block;font-size:var(--t-body);line-height:1.4;color:var(--ols-ink);margin-bottom:4px}
.statline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:12px 0 0}
.statline dt{font-size:var(--t-label);line-height:var(--lh-t-label);font-weight:var(--fw-semi);letter-spacing:var(--tr-t-label);text-transform:uppercase;color:var(--ols-stone)}
.statline dd{margin:4px 0 0;font:var(--fw-bold) var(--t-h3)/1.1 var(--font-display);color:var(--c-heading)}
.comp th.opp{font:var(--fw-semi) var(--t-body)/1.3 var(--font-display);color:var(--c-heading);letter-spacing:var(--tr-t-h3)}
.comp td.line{font-weight:var(--fw-semi);color:var(--ols-ink);white-space:nowrap}
.comp td.ctx{font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-ink-soft)}
/* Build 8d: ranked rows. The rank sits in the left column in the BODY font with tabular figures (not Alfa: its subset has no "No."); source caption under the table */

.item .subh.othopp{margin-top:32px}
#competition .more{margin-top:16px;font-weight:var(--fw-semi);font-size:var(--t-support)}
.whatsnew{list-style:none;padding:0;margin:0;font-size:var(--t-support);line-height:var(--lh-t-support)}
.whatsnew li{padding:8px 0;border-top:1px solid var(--ols-line-soft)}
.whatsnew .num{font-weight:var(--fw-semi);color:var(--c-heading);display:block}
.closing{margin-top:var(--gap-band);padding-top:var(--gap-head);border-top:1px solid var(--ols-line);text-align:center}   /* open, no fill (§22.3) */
.pdfbar{position:fixed;left:0;right:0;bottom:0;z-index:20;padding:8px 20px calc(8px + env(safe-area-inset-bottom));background:var(--ols-paper);border-top:1px solid var(--ols-line)}
.coach footer.site{padding-bottom:calc(88px + env(safe-area-inset-bottom))}
/* /coach Academic pre-read card (spec §16): the one boxed artifact; prints alone on one Letter page */
.preread{padding:16px;break-inside:avoid;page-break-inside:avoid}
.pr-head{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}
.pr-ptitle{display:none}
.pr-print{align-self:flex-start}
.pr-rows{margin:0;display:grid}
.pr-rows > div{display:grid;grid-template-columns:minmax(104px,34%) 1fr;gap:4px 16px;padding:12px 0;border-top:1px solid var(--ols-line-soft)}
.pr-rows dt{font-weight:var(--fw-semi);font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-stone)}
.pr-rows dd{margin:0;font-size:var(--t-support);line-height:var(--lh-t-support);color:var(--ols-ink);font-variant-numeric:lining-nums tabular-nums}
.pr-foot{margin-top:4px;padding-top:12px;border-top:1px solid var(--ols-line);color:var(--ols-ink-soft)}

/* phones (<600): clubs become stacked rows (§22.6); Build 8f (Todd 8:19 AM): the completed-events table was removed */
@media (max-width:599px){
  .comp,.comp tbody,.comp tr,.comp th.opp,.comp td{display:block}
  .comp thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .comp tbody tr,.comp tbody tr + tr{padding:16px 0;border-top:1px solid var(--ols-line-soft)}
  .comp tbody tr:first-child{border-top:0;padding-top:0}
  .comp tbody tr > *,.comp tbody tr + tr > *{padding:0;border:0}
  .comp td.line{white-space:normal;margin-top:4px}
  .comp td.ctx{margin-top:4px}
}
@media (min-width:600px){
  .clip{width:44%}
  .clip:only-child{width:60%}
  .proofs,.defs{grid-template-columns:1fr 1fr}
  .idgrid{grid-template-columns:repeat(4,1fr)}
  .coachbar .sm{display:none}.coachbar .lg{display:inline}.coachbar .t span{display:inline}
}
@media (min-width:768px){
  .preread{padding:24px}
  .pr-head{flex-direction:row;justify-content:space-between;align-items:flex-start}
  .pr-print{flex:none}
  .pr-rows > div{grid-template-columns:200px 1fr}
}
@media (min-width:1024px){
  .wrap{padding:0 32px}
  .anchors{display:flex}
  .tabbar,.pdfbar,.jump{display:none}
  footer.site,.coach footer.site{padding-bottom:40px}
  /* Build 5b (§22 desktop hero): film + chapters | identity + StatFeature; the tile grid (next in the DOM) is a full-width row under both columns */
  .hero{display:grid;grid-template-columns:7fr 5fr;column-gap:40px;align-items:start;padding-top:32px}
  /* Build 8d: both columns top-aligned at their natural height (no stretching, no pinned card); they may end unevenly */
  .hero > .filmcol{grid-column:1;grid-row:1;align-self:start}
  .hero > .herocol{grid-column:2;grid-row:1;align-self:start}
  .hero > .herocol > .sf-card{margin-top:20px;padding-top:12px}   /* Build 8d: fixed spacing, nothing pinned; 12px from the gold rule to the label */
  /* §23 ≥1024: the band runs full width directly under the hero, three tournaments across (cream 20% dividers), labels once in a leading column, 48px padding */
  .hero > .tourn{grid-column:1/-1;grid-row:2;margin-top:32px}
  .tourn{grid-template-columns:auto repeat(3,minmax(0,1fr));grid-template-rows:repeat(5,auto);justify-content:stretch;column-gap:0;padding:48px 0}
  .tn-labels{grid-column:1;grid-row:3/6;grid-template-columns:none;grid-template-rows:subgrid;padding-right:32px}
  .tn-labels span{align-self:center;margin-top:8px}   /* same 8px top margin as .tn-num so label and numeral centres line up */
  .tn-list{display:contents}
  .tn-ev{grid-row:1/6;grid-template-columns:none;grid-template-rows:subgrid;padding:0 32px;align-items:start}
  .tn-ev:first-child{grid-column:2;padding-top:0}
  .tn-ev:nth-child(2){grid-column:3}
  .tn-ev:nth-child(3){grid-column:4;padding-right:0}
  .tn-ev + .tn-ev{border-top:0;border-left:1px solid rgba(247,242,231,.2)}
  .tn-name,.tn-when{grid-column:auto}
  .tn-name{font-size:22px}
  .tn-num{font-size:44px;margin-top:8px;align-self:center}
  .stamp-d{display:block;margin-bottom:12px}
  .identity{padding-top:0}
  /* Build 8d: chapters in two columns under the film at normal row spacing (52px rows), top-aligned, never stretched to the profile column */
  .chips{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:52px;align-content:start;gap:0 24px;overflow:visible;margin:0;padding:16px 0 0}
  .chips li{width:100%;display:flex}
  .chip{width:100%;height:auto;border:0;border-top:1px solid var(--ols-line-soft);border-radius:0;background:transparent;justify-content:flex-start;padding:0 4px;gap:16px}
  .chip b{width:44px}
  .rail{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;overflow:visible;margin:0;padding:0}   /* §22.5: 3 columns */
  .clip,.clip:only-child{width:auto}
  /* Build 5c (§22, 7:28 PM): a clip alone in its row spans 2 of the 3 columns; its title, meta and caption sit in the third column, top-aligned */
  .rail > .clip:only-child{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:auto auto 1fr;column-gap:inherit;align-items:start}
  .rail > .clip:only-child > .thumb{grid-column:1/3;grid-row:1/-1}
  .rail > .clip:only-child > h3{grid-column:3;grid-row:1;margin-top:0}
  .rail > .clip:only-child > p{grid-column:3}
  /* Build 8e (Design Lead, 7:45 AM): general card-count rule. 3 columns; a short last row stays left-aligned with same-size cards (8 = 3/3/2).
     Only a lone card on the last row changes the grid: count = 3k+1 (k >= 1) -> 4 cards = 2x2, 7 or more = 4 columns (7 = 4/3). A single clip keeps the 2/3 + caption rule above. */
  .rail:has(> .clip:nth-child(3n+4):last-child){grid-template-columns:repeat(4,minmax(0,1fr))}
  .rail:has(> .clip:first-child:nth-last-child(4)){grid-template-columns:repeat(2,minmax(0,1fr))}
  /* Build 7 (spec 9:47 PM): a rail of exactly two clips runs as two equal halves (no empty third cell); 1 clip = 2/3 + caption, 3+ = the 3-col grid */
  .rail:has(> .clip:first-child:nth-last-child(2)){grid-template-columns:repeat(2,minmax(0,1fr))}
  .two{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:start}   /* §22.5: schedule | academics + contact */
  .dossier{display:grid;grid-template-columns:240px 1fr;gap:48px}
  .toc{display:block;position:sticky;top:84px;align-self:start;padding-top:var(--gap-band);font-size:var(--t-support);line-height:var(--lh-t-support)}
  .toc ol{list-style:none;margin:0;padding:0}
  .toc > ol > li{margin-bottom:12px}
  .toc > ol > li > a{font-weight:var(--fw-semi);color:var(--c-heading);text-decoration:none}
  .toc ol ol{margin-top:4px}
  .toc ol ol a{color:var(--ols-ink-soft);text-decoration:none;display:block;padding:4px 0 4px 12px;border-left:2px solid var(--ols-line-soft)}
  .toc ol ol a.active{color:var(--c-link);border-left-color:var(--c-link)}
  .toc .whatsnew{margin-top:8px}
  .toc > .eyebrow{margin-top:24px}
  .statline dd{font-size:var(--t-h2)}
  /* Build 5b (§22 /coach Athletic metrics): 2.54 · 2.78 · 64 mph three across; the unedited timed-run clip sits in the first column under them */
  .proofwrap{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:32px}
  .proofwrap > .proofs{display:contents}
  .proofwrap > .rail-coach{grid-column:1/-1;gap:32px;margin-top:0;padding-top:16px}
  .proofwrap > .cgrid{grid-column:1/-1}   /* Build 8g: spans the card row (left edge under 2.54, right edge under 64 mph) */   /* Build 5c: the timed-run clip on its own row at 2/3 width, columns aligned with the proofs above */
  /* Build 8 / copy v3.0: two contact cards (Alivia, Coach Langlois) side by side as equal halves; phones keep the stacked list */
  .contacts{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:32px;align-items:start}
  .contacts > .contact{border-top:0;padding-top:0}
}

/* ---------- print ---------- */
@page{size:letter;margin:0.6in}
@media print{
  .topbar,.tabbar,.pdfbar,.jump,.coachbar,.preview-banner,.skip,.play,.chips{display:none!important}
  body{background:#fff}
  /* card-only print: hide every element that neither is nor contains nor sits inside the card */
  body.print-preread *:not(:has(#preread)):not(#preread):not(#preread *){display:none!important}
  body.print-preread,body.print-preread main,body.print-preread .dossier,body.print-preread .dossier > div,body.print-preread .item{display:block!important;margin:0!important;padding:0!important;max-width:none!important;border:0!important;background:#fff!important}
  body.print-preread .preread{border:1px solid #9a9a9a;border-radius:0;box-shadow:none;background:#fff;padding:0.3in 0.35in;font-size:11pt}
  body.print-preread .pr-ptitle{display:block;font:700 22pt/1.1 var(--font-display);color:#000;margin:0 0 4pt}
  body.print-preread .pr-print{display:none!important}
  body.print-preread .pr-rows > div{grid-template-columns:1.9in 1fr;padding:7pt 0;border-top:1px solid #ccc}
  body.print-preread .pr-rows dt{color:#444;font-size:10pt}
  body.print-preread .pr-rows dd{color:#000;font-size:10.5pt}
  body.print-preread .pr-foot{color:#222;border-top:1px solid #999;font-size:9.5pt}
  body.print-preread .confirm{border-color:#999;color:#555}
}
/* Build 8e (design-spec §26): Todd's "Nationally Ranked Teams" table. Body font, tabular figures; team result / hitting / AVG right-aligned;
   credential in the muted meta color (one line from 1280); Combined row bold under a 1px gold rule (a rule on cream only; no gold text, no highlighted row). */
.rtab{font-family:var(--font-body);font-variant-numeric:lining-nums proportional-nums}   /* Build 8g (§30 fix 1): Lora's tnum widens the space glyph, so tabular figures go on td.num only; th + text cells stay proportional (as .sftable) */
.rtab th,.rtab td.cred{font-variant-numeric:lining-nums proportional-nums}
.rtab th.opp{font-weight:var(--fw-semi);color:var(--c-heading)}
.rtab td.cred{color:var(--ols-ink-soft);font-size:var(--t-support);line-height:var(--lh-t-table)}
.rtab .num{text-align:right;white-space:nowrap}
.rtab td.num{color:var(--ols-ink);font-weight:400;font-variant-numeric:lining-nums tabular-nums}
.rtab tr.sum > *{border-top:1px solid var(--c-rule-gold);font-weight:var(--fw-semi)}
.rtab tr.sum th.opp{color:var(--ols-ink)}
@media (min-width:1280px){ .rtab td.cred,.rtab th.opp{white-space:nowrap} }   /* Build 8g (§30 fix 1): "Turnin2 Pezz · two games" on one line */
/* phones (<=767px): each row is a stacked card: opponent (bold), credential meta line, then "result · hitting · AVG" on one line; Combined last, after the gold rule */
@media (max-width:767px){
  .rtab,.rtab tbody,.rtab tr,.rtab th.opp,.rtab td.cred{display:block}
  .rtab thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .rtab thead tr,.rtab thead th{display:block;width:1px;height:1px;padding:0;overflow:hidden;white-space:nowrap}
  .rtab tbody tr{padding:14px 0;border-top:1px solid var(--ols-line-soft)}
  .rtab tbody tr:first-child{border-top:0;padding-top:0}
  .rtab tbody tr > *{padding:0;border:0}
  .rtab td.cred{margin:2px 0 6px}
  .rtab td.num{display:inline;text-align:left}
  .rtab td.num.sep::before{content:"\00a0·\00a0" / "";color:var(--ols-stone);font-weight:400}
  .rtab td.empty{display:none}
  .rtab tbody tr.sum{border-top:1px solid var(--c-rule-gold);padding-bottom:0}
  .rtab tr.sum > *{border-top:0}
  .rtab tr.sum td.num{font-weight:var(--fw-semi)}
}
/* Build 8e (Todd 7:39 AM, design-spec §27): Film first row = two equal feature tiles (Speed | Arm Strength), same 16:9 poster + card style,
   larger than the 3-col cards. Phones: stacked full width (no swipe rail). >=768px: 50/50 with the standard grid gap. No row heading. */
.rail.feat{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;overflow:visible;margin:0;padding:0;scroll-snap-type:none}
.rail.feat > .clip{width:auto}
.rail.feat + .rail-h{margin-top:32px}
@media (min-width:768px){ .rail.feat{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px} }
/* first-screen academics + honors (Ivy coaches check admissibility first) */
.identity .line-acad{color:var(--ols-ink)}
.identity .line-acad strong{color:var(--c-heading)}
.identity .line-hon{font-size:.92em}
.identity .nw{white-space:nowrap}
/* bigger tap areas for small inline links without shifting layout */
.wordmark{display:inline-flex;align-items:center;min-height:44px}
.sched a{padding-block:10px;margin-block:-10px}
/* small links as tappable buttons */
.btn-sm{min-height:40px;padding:0 16px;font-size:15px}
.metric-foot .fn-go.btn{display:flex;width:fit-content;text-decoration:none;margin-top:8px}
.cquote .cq-x.btn{display:inline-flex;margin-top:8px}
.linkbtns{margin-top:16px}
footer.site .btn{color:var(--ols-ivory);border-color:currentColor}
footer.site .btn:hover{background:rgba(255,255,255,.08)}
/* AFCS: consistency claim, per-event bars, labeled credential */
.sf-card{display:block}
.sf-claim{margin-top:10px;font-size:var(--t-support);line-height:1.4;color:var(--ols-ink)}
.sf-claim strong{color:var(--c-heading)}
.sf-bars{list-style:none;margin:14px 0 0;padding:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(64px,1.1fr) auto;gap:8px 12px;align-items:center}
.sf-bars li{display:contents}
.sf-bl{font-size:14px;line-height:1.25;color:var(--ols-ink-soft)}
.sf-track{height:10px;border-radius:999px;background:var(--ols-line-soft);overflow:hidden}
.sf-fill{display:block;height:100%;width:calc(var(--v) / 600 * 100%);background:var(--c-heading);border-radius:inherit}
.sf-bv{font:400 16px/1 "Alfa Slab One",var(--font-display);color:var(--c-heading);font-variant-numeric:tabular-nums}
.sf-cred{display:flex;align-items:center;gap:14px;margin-top:18px;padding-top:14px;border-top:1px solid var(--ols-line-soft)}
.sf-cred .sf-logo{flex:none;width:72px;height:72px}
.sf-cred p{margin:0;font-size:14px;line-height:1.4;color:var(--ols-ink-soft)}
.sf-cred strong{display:block;font-size:15px;color:var(--ols-ink)}
.tn-pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.tn-pills .tn-pill{margin-top:0}
.tn-afcs{border-color:var(--ols-ivory);color:var(--ols-ivory)}
.tn-nat{border-color:rgba(247,242,231,.5);color:rgba(247,242,231,.8)}
/* About Me: Alivia in her own words */
.about-text{font-size:max(var(--t-support),18px);line-height:1.6;color:var(--ols-ink);max-width:68ch}
.about-sig{margin-top:12px;font-style:italic;color:var(--ols-ink-soft)}
.sf-next{margin-top:14px;padding:10px 14px;border-left:3px solid var(--c-rule-gold);background:var(--ols-ivory);color:var(--c-heading);font-size:var(--t-support)}
/* Best At-Bats: clutch situations, with inline Watch buttons */
.bigabs{margin:8px 0 28px;padding:18px 20px;border:1px solid var(--ols-line-soft);border-left:3px solid var(--c-rule-gold);border-radius:var(--r-4);background:var(--ols-ivory)}
.bigabs-h{font:600 20px/1.25 var(--font-display);color:var(--c-heading);margin:0}
.bigabs-list{list-style:none;margin:10px 0 0;padding:0}
.bigabs-list li{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 0;border-top:1px solid var(--ols-line-soft)}
.bigabs-list li:first-child{border-top:0}
.bigabs-list p{margin:0;line-height:1.45}
.bigabs-list .btn{flex:none}
/* CBJ-verified 2.78: bold green per family request */
.metric-foot .fn-cbj{font-weight:var(--fw-bold);color:#1E6B34}
/* Vs. nationally ranked teams: home section + highlighted coach-file section */
.ranked{margin-top:40px;padding:24px 22px;border:1px solid var(--ols-line-soft);border-top:3px solid var(--c-rule-gold);border-radius:var(--r-4);background:var(--ols-ivory)}
.rk-big{font-family:"Alfa Slab One",var(--font-display);font-weight:400;font-size:clamp(36px,7vw,56px);line-height:1.05;color:var(--ols-crimson-ink);margin:8px 0 0;letter-spacing:0}
.rk-sub{margin-top:8px;color:var(--ols-ink);max-width:62ch}
.rk-list{list-style:none;margin:18px 0 0;padding:0}
.rk-list li{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:14px 0;border-top:1px solid var(--ols-line-soft)}
.rk-opp{display:flex;flex-direction:column;gap:2px;min-width:0}
.rk-opp strong{font:600 18px/1.25 var(--font-display);color:var(--c-heading)}
.rk-opp span{font-size:14px;line-height:1.35;color:var(--ols-ink-soft)}
.rk-line{flex:none;text-align:right;display:flex;flex-direction:column;align-items:flex-end}
.rk-line b{font:400 22px/1.1 "Alfa Slab One",var(--font-display);color:var(--c-heading);white-space:nowrap}
.rk-line span{font-size:14px;color:var(--ols-ink-soft);font-variant-numeric:tabular-nums}
.rk-line .rk-note{font-size:13px}
.rk-foot{margin-top:12px;font-size:14px;color:var(--ols-ink-soft)}
.rk-feature{padding:20px;border:1px solid var(--ols-line-soft);border-left:4px solid var(--c-rule-gold);border-radius:var(--r-4);background:var(--ols-ivory)}
.rk-big-c{margin:6px 0 4px}
.rk-feature .rtab td.cred{white-space:normal}
.rk-feature{min-width:0}
@media (max-width:767px){ .rtab tbody tr + tr > *{border-top:0} }
/* footer: CBJ video placeholder next to SportsRecruits */
.linkbtns{display:flex;flex-wrap:wrap;gap:10px}
.btn-soon{cursor:default;border-style:dashed;opacity:.85}
.btn-soon em{font-style:normal;font-weight:400;margin-left:6px;font-size:.85em;opacity:.8}
footer.site .btn-soon:hover{background:transparent}
