/* tron-ac only: Oxanium everywhere except the hero name (Archivo) and code-like bits (Geist Mono). Oxanium: SIL OFL 1.1, self-hosted (intro.css @font-face, wght 200–800). */
html.ox{--ox:"Oxanium","Geist",ui-sans-serif,sans-serif;--code:"Geist Mono",ui-monospace,monospace;--sans:var(--ox);--mono:var(--ox)}
/* deliberate code-like exceptions keep the mono */
.ox .terminal,.ox .gd-code,.ox .logo{--mono:var(--code)}
.ox .mono{font-feature-settings:normal}
.ox .terminal,.ox .gd-code{font-feature-settings:"zero" 1}

/* small labels (were mono): a touch heavier and wider so squared caps hold up at 10–13px */
.ox .kicker,.ox .outlet,.ox .tile-label,.ox .feat-k,.ox .scroll-cue,.ox .medal-case figcaption,.ox .badge,.ox .book-front>span.mono{font-weight:500}
.ox .kicker{font-size:13.5px;letter-spacing:.1em}
.ox .outlet{letter-spacing:.08em}
.ox .tile-label{font-size:12.5px;letter-spacing:.08em}
.ox .pillar{font-weight:600;letter-spacing:.1em}
.ox .feat-cap{font-size:12px;letter-spacing:.02em}
.ox .af-no,.ox .otc-card figcaption span,.ox .otc-cap>span.mono{font-weight:600;letter-spacing:.06em}
.ox .af-status{font-size:13.5px;letter-spacing:.05em}
.ox .byline,.ox .pull figcaption,.ox .duel .sub,.ox .tile-foot,.ox .foot,.ox .status-line,.ox .medal-link,.ox .proof-thumb figcaption{letter-spacing:.02em}
.ox .nav a{font-weight:500;letter-spacing:.01em}
.ox .nav a span{font-weight:600}
.ox .status{font-weight:500;letter-spacing:.02em}
.ox .identity{letter-spacing:.04em;font-weight:500}
.ox .btn{font-weight:600;letter-spacing:.01em}

/* display + stats: Oxanium is wide and squared, so far less negative tracking than Geist */
.ox .af-title{font-weight:700;letter-spacing:-.03em}
.ox .af-label{font-weight:600;letter-spacing:-.02em}
.ox .h2{font-weight:600;letter-spacing:-.025em}
.ox .contact-title{font-weight:700;letter-spacing:-.03em}
.ox .num{font-weight:700;letter-spacing:-.02em}
.ox .mega{font-weight:700;letter-spacing:-.03em}
.ox .wm{font-weight:600;letter-spacing:-.01em}
.ox .gd-big,.ox .medal-big{font-weight:600;letter-spacing:-.02em}
.ox .mail{font-weight:500;letter-spacing:-.02em}
.ox .book-front strong{font-weight:700;letter-spacing:-.025em}
.ox .book-front em{letter-spacing:0}
.ox .story-meta h3,.ox .speaker-big{letter-spacing:-.015em}
.ox .pull blockquote p{letter-spacing:-.015em}
.ox .pull.small blockquote p{letter-spacing:-.005em}
.ox .af-claim{letter-spacing:-.005em}
.ox .tile-copy,.ox .otc-card figcaption,.ox .otc-cap{letter-spacing:-.01em}
.ox .t-nasdaq figcaption{letter-spacing:-.01em}
/* Oxanium is ~7% wider than Geist here: keep "All four." on one line in its column */
@media (min-width:521px){.ox .af-title{font-size:clamp(84px,13.6vw,220px)}}
/* small captions: Oxanium 400 runs light below 13px */
.ox .feat-cap,.ox .duel .sub,.ox .tile-foot,.ox .byline,.ox .pull figcaption,.ox .foot,.ox .proof-thumb figcaption,.ox .status-line,.ox .medal-link{font-weight:500}
.ox .duel .sub,.ox .tile-foot,.ox .pull figcaption,.ox .foot{font-size:13px}
.ox .medal-big{max-width:16ch}
/* hero identity: keep the same two-line wrap as before so the horizon stays in the gap */
@media (max-width:520px){.ox .identity{font-size:13.5px;letter-spacing:.02em}.ox .identity li:not(:last-child)::after{margin:0 .4em}}
.ox .terminal code{font:inherit}
/* rescue card: real Airman's Medal photo (portrait crop, edges faded in the file) */
.ox .medal-case img{width:120px;height:210px;border-radius:10px;object-fit:contain}
@media (max-width:980px){.ox .medal-case img{width:100px;height:175px}}
/* Nasdaq proof thumb: small, colour, opens the full image */
.ox .proof-open{display:block;border-radius:8px;outline-offset:3px}
.ox .proof-thumb img{width:72px;height:96px;transition:border-color .3s,box-shadow .3s}
.ox .proof-open:hover img,.ox .proof-open:focus-visible img{border-color:var(--acc);box-shadow:0 0 18px rgba(98,227,255,.35)}
@media (max-width:620px){.ox .proof-thumb img{width:60px;height:80px}.ox .t-forty .tile-label{margin-top:112px}}
/* All Four: bench photo on the 600 lb row (native 900px source, shown <=2x) */
.ox .af-item.has-photo{grid-template-columns:clamp(40px,6vw,96px) minmax(0,1fr) auto auto}
.ox .af-photo{margin:0;width:clamp(120px,10vw,168px);aspect-ratio:4/3;border-radius:10px;overflow:hidden;border:1px solid var(--line2);box-shadow:0 18px 40px -22px rgba(0,0,0,.9);transition:opacity .6s var(--ease)}
.ox .af-photo img{display:block;width:100%;height:100%;object-fit:cover}
.motion .af-item:not(.done) .af-photo{opacity:.25}
@media (max-width:520px){
  .ox .af-item.has-photo{grid-template-columns:28px minmax(0,1fr) 48px}
  .ox .af-item.has-photo .af-check{grid-column:3;grid-row:1}
  .ox .af-photo{grid-column:2;grid-row:2;width:min(240px,100%);margin-top:4px}
}
/* hero horizon fallback for tablets (no-JS); ox.js keeps it in the identity/lede gap at every size */
@media (min-width:981px){.ox.tv-archivo .hero{--horizon:calc(50% + min(9.6vw - 36px, 114px))}}
@media (min-width:521px) and (max-width:980px){.ox .hero{--horizon:366px}}
@media (max-width:370px){.ox.tv-archivo .hero{--horizon:365px}}
/* All Four clips: deadlift (row 02) and Ironman finish (row 04) */
.ox .af-item.has-clip{align-items:center}
.ox .af-media{position:relative;aspect-ratio:auto;overflow:visible;border:0;border-radius:0;box-shadow:none;display:flex;flex-direction:column;gap:7px}
.ox .af-media .af-vid{display:block;width:100%;height:auto;object-fit:cover;border-radius:10px;border:1px solid var(--line2);box-shadow:0 18px 40px -22px rgba(0,0,0,.9);background:var(--bg2)}
.ox .af-tall{width:clamp(84px,7vw,108px)}
.ox .af-tall .af-vid{aspect-ratio:3/4}
.ox .af-wide{width:clamp(200px,18vw,268px)}
.ox .af-wide .af-vid{aspect-ratio:534/296}
.ox .af-cap{font:500 10.5px/1.2 var(--code);letter-spacing:.04em;color:var(--dim);text-align:center;white-space:nowrap}
.ox .vbtn{position:absolute;display:grid;place-items:center;gap:6px;border:1px solid rgba(98,227,255,.45);background:rgba(5,6,8,.72);color:var(--fg);border-radius:999px;cursor:pointer;transition:background .25s,border-color .25s,box-shadow .25s,opacity .25s;padding:0}
.ox .vbtn svg{width:14px;height:14px;fill:currentColor}
.ox .vbtn .ln{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.ox .vbtn:hover,.ox .vbtn:focus-visible{border-color:var(--acc);box-shadow:0 0 16px rgba(98,227,255,.4);background:rgba(5,6,8,.9)}
.ox .vbtn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.ox .vbtn-play{width:28px;height:28px;left:6px;top:6px}
.ox .vbtn-play .i-pause,.ox .is-playing .vbtn-play .i-play{display:none}
.ox .is-playing .vbtn-play .i-pause{display:block}
.ox .af-media:not(.is-playing) .vbtn-play{left:50%;top:calc(50% - 10px);transform:translate(-50%,-50%);width:44px;height:44px;background:rgba(5,6,8,.62);border-color:var(--acc);box-shadow:0 0 22px rgba(98,227,255,.35)}
.ox .af-media:not(.is-playing) .vbtn-play svg{width:18px;height:18px;margin-left:2px}
.ox .af-tall:not(.is-playing) .vbtn-play{width:36px;height:36px}
.ox .vbtn-sound{right:7px;bottom:28px;height:28px;padding:0 10px 0 8px;grid-auto-flow:column}
.ox .vbtn-t{font:600 10px/1 var(--code);letter-spacing:.08em;text-transform:uppercase}
.ox .vbtn-sound .i-sound,.ox .is-sound .vbtn-sound .i-muted{display:none}
.ox .is-sound .vbtn-sound .i-sound{display:block}
.ox .is-sound .vbtn-sound{border-color:var(--acc);color:var(--acc)}
.no-js .vbtn{display:none}
@media (max-width:520px){
  .ox .af-item.has-clip .af-media{grid-column:2;grid-row:2;margin-top:4px;align-items:flex-start}
  .ox .af-tall{width:112px}
  .ox .af-wide{width:min(300px,100%)}
  .ox .af-cap{text-align:left}
}
/* Veterans section */
.ox .vets-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(36px,6vw,110px);align-items:center}
.ox .vets-copy .lede{max-width:34ch}
.ox .vets-tag{display:inline-flex;align-items:center;gap:10px;margin:28px 0 0;padding:8px 14px;border:1px solid rgba(98,227,255,.35);border-radius:999px;background:rgba(98,227,255,.06);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg)}
.ox .vets-tag i{width:7px;height:7px;border-radius:50%;background:var(--acc);box-shadow:0 0 10px var(--acc)}
.ox .vets-copy .medal-link{display:table;margin-top:22px}
.ox .vets-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),420px));gap:18px;justify-content:end}
.ox .vet-card{margin:0;position:relative;border-radius:var(--r);border:1px solid var(--line2);background:radial-gradient(90% 60% at 0% 100%,rgba(98,227,255,.08),transparent 60%),var(--bg2);overflow:hidden;box-shadow:0 30px 70px -40px rgba(0,0,0,.95),0 0 0 1px rgba(98,227,255,.05)}
.ox .vet-img{position:relative;aspect-ratio:4/5;overflow:hidden}
.ox .vet-img img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ease)}
.ox .vet-img::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 62%,rgba(5,6,8,.55));pointer-events:none}
.ox .vet-card:hover .vet-img img{transform:scale(1.03)}
.ox .vet-card figcaption{padding:16px 20px 18px;font-size:15px;line-height:1.4;color:var(--dim);border-top:1px solid var(--line2)}
.ox .speaker-link{display:table;margin-top:14px}
@media (max-width:900px){.ox .vets-grid{grid-template-columns:1fr}.ox .vets-gallery{justify-content:start}}
/* hero name: leaner + sharper (Oct 30). Overrides grid.css for tron-ac only: lighter weight, near-normal width, tighter tracking, thin edge, faint glow. */
.ox.tv-ac .hero-title{font-weight:680;font-variation-settings:'wdth' 104;letter-spacing:-.042em}
.ox.tv-ac .hero-title .line>span::after{-webkit-text-stroke:.6px rgba(196,246,255,.5)}
/* hero kicker: the punchline under the intro (orange accent, no glow, sentence case) */
.ox .hero-kicker{font-family:"Oxanium",var(--sans);font-weight:600;font-size:clamp(18px,1.45vw,21px);line-height:1.35;letter-spacing:.01em;color:#FF9A3D;margin-top:14px;max-width:34ch;text-shadow:0 1px 12px var(--bg)}
.motion .hero-kicker{opacity:0;transform:translateY(16px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.motion.loaded .hero-kicker{opacity:1;transform:none;transition-delay:.42s}


/* calm: reduced motion (and ?calm=1 / html.no-anim) = everything static. Light cycles fully drawn, terminal shown as instant text (site.js skips typing), no identity pass, no video autoplay. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .cursor-glow{display:none}
}
