/* ============================================================
   ONDERMAX — STYLES
   Class-based port of the design system. Load tokens.css first.
   Self-hosted fonts (SIL OFL 1.1) in /fonts.
   ============================================================ */
@import url('tokens.css');

/* ---- fonts ---- */
@font-face{font-family:'Space Grotesk';font-weight:400;font-display:swap;src:url(../fonts/SpaceGrotesk-Regular.woff2) format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:500;font-display:swap;src:url(../fonts/SpaceGrotesk-Medium.woff2) format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:600;font-display:swap;src:url(../fonts/SpaceGrotesk-SemiBold.woff2) format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:700;font-display:swap;src:url(../fonts/SpaceGrotesk-Bold.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-weight:400;font-display:swap;src:url(../fonts/IBMPlexMono-Regular.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-weight:500;font-display:swap;src:url(../fonts/IBMPlexMono-Medium.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-weight:600;font-display:swap;src:url(../fonts/IBMPlexMono-SemiBold.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-weight:400;font-display:swap;src:url(../fonts/IBMPlexSans-Regular.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-weight:600;font-display:swap;src:url(../fonts/IBMPlexSans-SemiBold.woff2) format('woff2')}
/* Public Sans (patches body) — self-hosted, latin subset, WOFF2.
   © 2015 The Public Sans Project Authors, SIL OFL 1.1. Replaces the
   former Google Fonts <link> (the site's only external dependency). */
@font-face{font-family:'Public Sans';font-weight:400;font-display:swap;src:url(../fonts/PublicSans-Regular.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:500;font-display:swap;src:url(../fonts/PublicSans-Medium.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:600;font-display:swap;src:url(../fonts/PublicSans-SemiBold.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:700;font-display:swap;src:url(../fonts/PublicSans-Bold.woff2) format('woff2')}

/* ---- reset ---- */
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{background:var(--paper);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;line-height:1.5}
img,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
::selection{background:var(--ink);color:var(--paper)}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---- global keyboard focus + jump-anchor offset (WCAG 2.4.7 / 2.4.11) ----
   Includes form controls + <summary> so any control on a styles.css-only page
   gets a ring; the scoped consult.css/staqs_funnel.css focus treatments have
   higher specificity and still win where they apply. Focus affordance, not
   motion (guardrail G1-safe). */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
[id]{scroll-margin-top:80px}

/* ---- skip link (WCAG 2.4.1) — visible only on focus ---- */
.skip-link{position:absolute;left:8px;top:-48px;z-index:100;background:var(--ink);color:var(--paper);font-family:var(--font-mono);font-size:13px;padding:10px 16px;border:1px solid var(--ink);transition:top .15s}
.skip-link:focus{top:8px}

/* ---- type helpers ---- */
.display{font-family:var(--font-display);font-weight:700;letter-spacing:-0.035em;line-height:1.0;text-wrap:balance}
.mono{font-family:var(--font-mono)}
.eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted)}
.lead{font-size:clamp(16px,1.6vw,20px);line-height:1.55;color:var(--body-text)}
.muted{color:var(--muted)}

/* ---- layout ---- */
.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}
.section{padding-block:clamp(48px,7vw,96px)}
.section--sunk{background:var(--paper-sunk);border-top:1px solid var(--line)}
.rule{height:1px;background:var(--line);border:0}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:28px}
.section-head h2{font-family:var(--font-display);font-weight:700;letter-spacing:-0.035em;font-size:clamp(22px,3vw,32px)}

/* ---- header / nav ---- */
.header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--paper) 86%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.header__bar{max-width:var(--maxw);margin-inline:auto;padding:18px var(--pad);display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:8px}
.brand__logo{height:24px}
.brand__sub{font-family:var(--font-mono);font-size:11px;color:var(--muted);margin-top:3px}
.nav{display:flex;gap:26px;align-items:center;font-family:var(--font-mono);font-size:12px;letter-spacing:0.04em;text-transform:uppercase;color:var(--body-text);flex-wrap:wrap}
.nav a{display:inline-flex;align-items:center;min-height:44px;padding:4px 0}
.nav a:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.nav a:hover{color:var(--ink)}
.header__bar .btn{padding-block:12px}

/* ---- mobile hamburger toggle (progressive enhancement) ---- */
.nav-toggle{display:none;width:44px;height:44px;align-items:center;justify-content:center;flex-direction:column;gap:5px;background:transparent;border:1px solid var(--muted);cursor:pointer}
.nav-toggle .bar{display:block;width:20px;height:2px;background:var(--ink);transition:transform .2s,opacity .2s}
.nav-toggle[aria-expanded="true"] .bar:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] .bar:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] .bar:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

@media (max-width:768px){
  .nav-toggle{display:inline-flex;order:3}
  .nav{display:none;order:4;flex-basis:100%;flex-direction:column;align-items:flex-start;gap:0;margin-top:8px;border-top:1px solid var(--line)}
  .nav.open{display:flex}
  .nav a{width:100%;min-height:48px;padding:6px 0}
  .header__bar .nav-cta{order:2}
}
@media (min-width:769px){
  .nav-toggle{display:none}
}

/* ---- buttons ---- */
.btn{display:inline-flex;align-items:center;gap:10px;min-height:44px;font-family:var(--font-mono);font-size:12px;letter-spacing:0.08em;text-transform:uppercase;font-weight:700;padding:15px 26px;border:1px solid var(--ink);cursor:pointer;transition:background .2s,color .2s}
.btn--solid{background:var(--ink);color:var(--paper)}
.btn--solid:hover{background:#000}
.btn--outline:hover{background:var(--ink);color:var(--paper)}
.btn:focus-visible{outline:2px solid var(--ink);outline-offset:3px}

/* ---- pre-footer CTA band (in-page anchor only; no form yet) ---- */
.cta-band{border-top:1px solid var(--line)}
.cta-band .inner{display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;padding-block:clamp(40px,6vw,72px)}
.cta-band h2{font-family:var(--font-display);font-weight:700;letter-spacing:-0.035em;font-size:clamp(24px,3.2vw,36px);max-width:20ch;text-wrap:balance}
.cta-band p{margin-top:10px;font-size:15px;line-height:1.55;color:var(--body-text);max-width:46ch}

/* ---- hero ---- */
.hero{padding-block:clamp(56px,9vw,120px) clamp(48px,7vw,96px)}
.hero__eyebrow{display:flex;gap:16px;flex-wrap:wrap}
.hero__eyebrow .sep{color:var(--line)}
.hero h1{font-family:var(--font-display);font-weight:700;letter-spacing:-0.04em;line-height:0.98;font-size:clamp(38px,7vw,90px);margin-top:28px;max-width:16ch;text-wrap:balance}
.hero p{margin-top:30px;max-width:58ch}

/* ---- stat row ---- */
.stats{margin-top:28px;display:flex;gap:40px;flex-wrap:wrap;font-family:var(--font-mono);font-size:12px;letter-spacing:0.04em;text-transform:uppercase;color:var(--muted)}
.stat b{display:block;font-family:var(--font-body);font-size:34px;font-weight:700;letter-spacing:-0.02em;color:var(--ink);text-transform:none}

/* ---- generic card grid on hairline gutters ---- */
.grid-gut{display:grid;gap:2px;background:var(--line);border:1px solid var(--line)}
.grid-gut > *{background:var(--paper)}
.cols-3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.cols-4{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}

/* ---- capability cards (corporate) ---- */
.cap-card{padding:30px 28px}
.cap-card .idx{font-family:var(--font-mono);font-size:12px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted)}
.cap-card h3{font-family:var(--font-display);font-weight:700;letter-spacing:-0.02em;font-size:22px;margin-top:14px}
.cap-card p{margin-top:10px;font-size:15px;line-height:1.55;color:var(--body-text)}

/* ---- audience chips ---- */
.audience{margin-top:2px;border:1px solid var(--line);border-top:0;background:var(--paper-sunk);padding:20px 26px;display:flex;gap:16px;flex-wrap:wrap;align-items:center}
.audience__label{font-family:var(--font-mono);font-size:11px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted)}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{font-family:var(--font-mono);font-size:12px;border:1px solid var(--line);background:var(--paper);padding:6px 12px}

/* ---- division gateway split (corporate) ---- */
.gateway-split{display:flex;gap:2px;flex-wrap:wrap;border:1px solid var(--line);background:var(--line)}
.gateway{flex:1 1 380px;background:var(--paper);padding:clamp(28px,3.5vw,48px);display:flex;flex-direction:column;min-height:360px;transition:background .25s,transform .25s,box-shadow .25s}
.gateway:hover{background:var(--paper-sunk);transform:translateY(-3px);box-shadow:0 12px 30px rgba(20,20,20,.08)}
.gateway:focus-visible{outline:3px solid var(--ink);outline-offset:4px}
.gateway--dark{background:var(--ink);color:var(--paper)}
.gateway--dark:hover{background:#1d1d1d}
.gw-label{display:flex;align-items:center;gap:12px;font-family:var(--font-mono);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;color:var(--accent-text)}
.gw-dot{width:10px;height:10px;border-radius:50%;background:var(--accent)}
.gw-name{font-family:var(--font-display);font-weight:700;letter-spacing:-0.04em;font-size:clamp(34px,4.5vw,56px);margin-top:18px;line-height:0.95}
.gw-domain{font-family:var(--font-mono);font-size:12px;color:var(--muted);margin-top:6px}
.gateway p{margin-top:18px;font-size:16px;line-height:1.55;max-width:40ch}
.gateway--dark p{color:#cfcac4}
.gw-cta{margin-top:auto;padding-top:28px;display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:13px;letter-spacing:0.04em;text-transform:uppercase;font-weight:700}
.gw-cta .arrow{color:var(--accent-text)}
/* On the dark STAQS gateway, accent-as-text needs a light tint for AA. */
.gateway--dark .gw-label{color:#9aabff}
.gateway--dark .gw-cta .arrow{color:#9aabff}

/* ---- standards rows ---- */
.std-stack{display:flex;flex-direction:column;gap:2px}
.std-row{background:var(--paper);padding:24px 26px;display:flex;gap:20px;align-items:baseline}
.std-row .n{font-family:var(--font-mono);font-size:12px;color:var(--muted);min-width:36px}
.std-row b{font-size:17px}
.std-row p{margin-top:6px;color:var(--body-text);font-size:15px;line-height:1.5}

/* ---- compliance ---- */
.compliance{background:var(--ink);color:var(--paper)}
.compliance .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:32px}
.compliance .ruo-research{font-family:var(--font-mono);font-size:11px;letter-spacing:0.16em;text-transform:uppercase;color:#7e93ff}
.compliance .ruo-patch{font-family:var(--font-mono);font-size:11px;letter-spacing:0.16em;text-transform:uppercase;color:#E8A24B}
.compliance p{font-family:var(--font-mono);font-size:13px;line-height:1.7;letter-spacing:0.02em;color:#cfcac4;margin-top:10px}
.compliance-band{background:var(--ink);color:var(--paper)}
.compliance-band .inner{max-width:var(--maxw);margin-inline:auto;padding:30px var(--pad);font-family:var(--font-mono);font-size:clamp(11px,1.5vw,14px);letter-spacing:0.1em;text-transform:uppercase;text-align:center;line-height:1.9}

/* ---- footer ---- */
.footer{background:var(--paper)}
.footer--dark{background:var(--ink);color:var(--paper)}
.footer__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:40px;align-items:start}
.footer__label{font-family:var(--font-mono);font-size:11px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-bottom:14px}
.footer address{font-style:normal;font-family:var(--font-mono);font-size:12px;line-height:1.7;color:var(--body-text)}
.footer--dark address{color:#bdb6ad}
.footer__bottom{margin-top:48px;padding-top:22px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-family:var(--font-mono);font-size:11px;letter-spacing:0.04em;color:var(--muted);text-transform:uppercase}
.footer--dark .footer__bottom{border-top-color:#3a352f;color:#bdb6ad}/* WCAG 1.4.3: muted-on-ink #6A645E was 3.16:1 — #bdb6ad clears 9.17:1 (same token as .footer--dark address) */
/* WCAG 1.4.1: text footer links sit beside non-link spans distinguished only by colour — add a hairline underline (matches consult.css/legal.css affordance pattern). Excludes .btn (border-box affordance) and .brand-line (heading-style gateway links). a11y, not motion (G1-safe). */
.footer a:not(.btn):not(.brand-line){border-bottom:1px solid var(--line)}
.footer a:not(.btn):not(.brand-line):hover{border-bottom-color:currentColor}
.footer--dark a:not(.btn):not(.brand-line){border-bottom-color:#7a746c}
.footer--dark a:not(.btn):not(.brand-line):hover{border-bottom-color:#bdb6ad}
.brand-line{display:flex;align-items:center;gap:9px;font-size:15px}
.brand-line .dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}

/* ---- STAQS wordmark + Q-tick ---- */
.qs-mark{font-family:var(--font-display);font-weight:700;letter-spacing:-0.045em}
.qs-mark .q{position:relative;display:inline-block}
.qs-mark .q::after{content:"";position:absolute;right:.04em;bottom:.16em;width:.26em;height:.075em;background:var(--brand);transform-origin:right center;transform:rotate(40deg);border-radius:1px}

/* ---- hero two-column (STAQS / patches) ---- */
.split2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:clamp(32px,5vw,64px);align-items:center}

/* ---- FIG specimen panel (STAQS hero) ---- */
.fig{border:1px solid var(--line);background:var(--paper-sunk);padding:22px}
.fig__head{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:11px;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:18px}
.fig__head .ref{color:var(--accent-text)}
.fig__table{font-family:var(--font-mono);font-size:11px;line-height:1.9;color:var(--body-text);border-top:1px solid var(--line);padding-top:14px}
.fig__row{display:flex;justify-content:space-between}
.fig__row .k{color:var(--muted)}
.fig__row .key{color:var(--accent-text)}

/* dual-chamber vial diagram (accent-keyed via --accent) */
.vial{position:relative;width:96px;margin-inline:auto}
.vial__cap{height:14px;width:54px;margin:0 auto;background:var(--ink);border-radius:3px 3px 0 0}
.vial__collar{height:10px;width:64px;margin:2px auto 0;background:#cfcac4;border-radius:2px}
.vial__body{border:2px solid var(--ink);border-radius:4px 4px 8px 8px;margin-top:4px;height:180px;position:relative;overflow:hidden;background:linear-gradient(var(--paper) 0 46%,var(--ink) 46% 48%,var(--paper) 48%)}
.vial__lower{position:absolute;left:0;right:0;bottom:0;height:38%;background:var(--accent);opacity:.9}
.vial__upper{position:absolute;left:0;right:0;top:8%;height:26%;background:var(--accent);opacity:.35}

/* ---- cm ruler ---- */
.cm-ruler{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 0;display:flex;flex-direction:column;gap:6px}
.cm-ticks{height:18px;border-left:1px solid var(--ink);background:linear-gradient(to right,var(--ink) 1px,transparent 1px) repeat-x;background-size:calc(100%/45) 100%}
.cm-ticks i{display:block;height:9px;width:100%;background:linear-gradient(to right,var(--ink) 1px,transparent 1px) repeat-x;background-size:calc(100%/22.5) 100%}
.cm-labels{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:10px;color:var(--muted);letter-spacing:0.04em}

/* ---- specimen cards (STAQS catalogue) ---- */
.specimen{padding:26px;transition:transform .25s,box-shadow .25s}
.specimen:hover{transform:translateY(-3px);box-shadow:0 12px 30px rgba(20,20,20,.08)}
.spec-tag{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:0.16em;text-transform:uppercase}
.spec-tag .area{color:var(--accent-text)}
.spec-tag .dot{width:13px;height:13px;border-radius:50%;background:var(--accent)}
.specimen h3{font-family:var(--font-body);font-weight:700;letter-spacing:-0.02em;font-size:22px;margin-top:16px;line-height:1.1}
.spec-fig{margin:18px 0;border:1px solid var(--line);background:var(--paper-sunk);padding:10px 12px;display:flex;align-items:center;gap:14px}
.spec-fig .mini{width:30px}
.spec-fig .mini .cap{height:6px;width:18px;margin:0 auto;background:var(--ink);border-radius:2px 2px 0 0}
.spec-fig .mini .b{border:1.5px solid var(--ink);border-radius:2px 2px 4px 4px;height:62px;position:relative;background:linear-gradient(var(--paper) 48%,var(--accent) 48%)}
.spec-fig .meta{font-family:var(--font-mono);font-size:10px;color:var(--muted);line-height:1.7}
.spec-table{font-family:var(--font-mono);font-size:11px;line-height:1.9;color:var(--body-text);border-top:1px solid var(--line);padding-top:14px}
.spec-table .row{display:flex;justify-content:space-between;gap:8px}
.spec-table .k{color:var(--muted)}
.spec-table .key{color:var(--accent-text)}

/* ---- assurance ---- */
.doc-card{background:var(--paper);padding:28px}
.doc-card .lbl{font-family:var(--font-mono);font-size:11px;color:var(--muted)}
.doc-card b{display:block;font-size:18px;margin-top:8px}
.doc-card p{margin-top:10px;font-size:14px;line-height:1.55;color:var(--body-text)}
.doc-card--dark{background:var(--ink);color:var(--paper);display:flex;flex-direction:column;justify-content:space-between}
.doc-card--dark .lbl{color:#7e93ff}
.qr{margin-top:18px;width:56px;height:56px;border:3px solid var(--paper);background:repeating-conic-gradient(var(--paper) 0 25%,var(--ink) 0 50%) 0/14px 14px}

/* ============================================================
   PATCHES (consumer) — uses .theme-patches on <body>
   ============================================================ */
.benefit-card{background:#fff;border-radius:14px;overflow:hidden;border:1px solid #ECE5DB;transition:transform .25s,box-shadow .25s}
.benefit-card:hover{transform:translateY(-4px);box-shadow:0 16px 40px rgba(26,23,21,.1)}
.benefit-card .cap-bar{height:10px;background:var(--accent)}
.benefit-card .body{padding:22px 22px 26px}
.benefit-card .tag{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--accent-text)}
.benefit-card .tag .dot{width:9px;height:9px;border-radius:50%;background:var(--accent)}
.benefit-card h3{font-size:21px;font-weight:700;margin-top:12px;letter-spacing:-0.01em}
.benefit-card p{margin-top:8px;font-size:15px;line-height:1.55;color:var(--body-text)}
.range-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px}
.imgslot{width:100%;aspect-ratio:3/2;background:var(--paper-sunk);display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:0.08em}
.imgslot--hero{aspect-ratio:4/5;border-radius:14px}
.imgslot--square{aspect-ratio:1/1;border-radius:14px}
.how-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:24px}
.step{background:var(--paper);border-radius:12px;padding:26px}
.step .n{font-family:var(--font-mono);font-size:13px;color:var(--muted)}
.step b{display:block;font-size:18px;margin-top:8px}
.step p{margin-top:8px;font-size:15px;line-height:1.55;color:var(--body-text)}
.trust-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:48px;align-items:center}
.trust-list{margin-top:28px;display:flex;flex-direction:column;gap:18px;max-width:46ch}
.trust-item{display:flex;gap:14px}
.trust-item .dot{width:8px;height:8px;border-radius:50%;background:var(--accent);margin-top:8px;flex:none}
.trust-item b{font-size:16px}
.trust-item p{font-size:15px;line-height:1.55;color:var(--body-text);margin-top:3px}
.btn--round{border-radius:10px;font-family:var(--font-body);font-size:15px;letter-spacing:normal;text-transform:none;padding:16px 30px}

/* ---- responsive: nav stacks; reduce hero pad ---- */
@media (max-width:600px){
  :root{--pad:20px}
  .nav{gap:18px;font-size:11px}
  .stats{gap:24px}
}
