/* =============================================================================
   Houtos Labs — "Precision Instrument" design system (shared stylesheet)
   Faithful port of the designer's .dc.html visual source of truth.
   Light = default theme. Dark via html[data-theme="dark"]. Gold is retired.
   Token names from DESIGN-GUIDE §2. Literal UTF-8 throughout.
   ============================================================================= */

/* ------------------------------------------------------------------ RESET -- */
*{box-sizing:border-box}
html,body{margin:0}
html{-webkit-text-size-adjust:100%}
img,svg,video{max-width:100%;height:auto}
button,input,select,textarea{font:inherit;color:inherit}
a{color:inherit}
:where(h1,h2,h3,h4,h5,h6,p){margin:0}

/* ===========================================================================
   1. TOKENS  —  :root is LIGHT (default);  html[data-theme="dark"] overrides
   Exact hex from DESIGN-GUIDE §2.
   =========================================================================== */
:root{
  --paper:#F4F2EC;   --paper-2:#FBFAF6;  --card:#FFFFFF;
  --ink:#1A1916;     --ink-2:#3A382F;    --muted:#6E6A5E;   --faint:#726E5D;
  --faint-line:#A8A395;   /* pale — NON-TEXT hairlines/decoration only (fails AA for text by design) */
  --line:#E5E2D8;    --line-2:#D5D1C4;
  --grid:rgba(26,25,22,.05);   --grid-2:rgba(26,25,22,.09);
  --accent:#2A4FDD;  --accent-2:#1E3FC4; --accent-soft:#E9EDFC; --accent-ink:#FFFFFF;
  --good:#2E8F5B;    --fair:#BC851E;     --poor:#C8462F;
  --shadow:0 1px 2px rgba(26,22,12,.05),0 14px 34px -14px rgba(26,22,12,.14);

  /* type + layout tokens (shared) */
  --font:'Satoshi',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --maxw:1240px;
  --pad-y:clamp(56px,8vw,104px);
  --pad-x:clamp(16px,3vw,40px);
  --r:14px;   --r-lg:20px;  --r-sm:10px;

  color-scheme:light;
}
html[data-theme="dark"]{
  --paper:#0E0D0A;   --paper-2:#15130E;  --card:#16140F;
  --ink:#F1EEE4;     --ink-2:#CFCBBE;    --muted:#9F9A8B;   --faint:#8C8676;
  --faint-line:#6B6657;   /* pale — NON-TEXT hairlines/decoration only (fails AA for text by design) */
  --line:#262318;    --line-2:#37331F;
  --grid:rgba(255,255,255,.045); --grid-2:rgba(255,255,255,.08);
  --accent:#6E8CFF;  --accent-2:#9DB2FF; --accent-soft:#1A1E30; --accent-ink:#0A0A07;
  --good:#56C98E;    --fair:#E0A93C;     --poor:#EC6A52;
  --shadow:0 1px 2px rgba(0,0,0,.5),0 24px 60px -24px rgba(0,0,0,.8);
  color-scheme:dark;
}

/* -- Compatibility aliases: keep the legacy report/dashboard classes rendering
      in the new (gold-retired) language. Old names → Precision tokens.
      Nothing new should USE these; they exist so ported pages don't break. -- */
:root,html[data-theme="dark"]{
  --bg:var(--paper);           --bg-2:var(--paper-2);
  --surface:var(--card);       --surface-2:var(--paper-2);   --surface-solid:var(--card);
  --hairline:var(--line);      --hairline-2:var(--line-2);
  --muted-2:var(--faint);
  --track:var(--line);
  /* gold retired → cobalt accent stands in everywhere gold was referenced */
  --gold:var(--accent);        --gold-2:var(--accent-2);
  --gold-text:var(--accent);   --gold-line:var(--line-2);    --gold-soft:var(--accent-soft);
  --on-gold:var(--accent-ink); --accent-contrast:var(--accent-ink);
  --grad:linear-gradient(90deg,var(--accent),var(--accent-2));
  --glow-1:color-mix(in oklab,var(--accent),transparent 78%);
}

/* ===========================================================================
   2. BASE  —  body, links, headings, mono helper
   =========================================================================== */
body{
  font-family:var(--font);
  color:var(--ink);
  background:var(--paper);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
h1,h2,h3,h4{letter-spacing:-.03em;line-height:1.08;font-weight:900}
p{line-height:1.6}
a{text-decoration:none}

.hmono{font-family:var(--mono);font-feature-settings:"tnum"}

.wrap{max-width:var(--maxw);margin:0 auto;padding-left:var(--pad-x);padding-right:var(--pad-x)}
.section{padding-top:var(--pad-y);padding-bottom:var(--pad-y)}

/* skip link */
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--accent);color:var(--accent-ink);
  padding:10px 16px;border-radius:0 0 8px 0;font-weight:700}
.skip:focus{left:0}

/* keyboard focus — visible in both themes */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

/* ===========================================================================
   3. MOTIF CLASSES  (verbatim intent from the .dc <style>)
   =========================================================================== */
.dotbg{background-image:radial-gradient(var(--grid) 1.1px,transparent 1.1px);background-size:24px 24px}
.gridbg{background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:58px 58px}

.navlink{color:var(--muted);text-decoration:none;font-weight:500;transition:color .18s}
.navlink:hover{color:var(--ink)}

.ul{position:relative;text-decoration:none;color:inherit;display:inline-block}
.ul::after{content:"";position:absolute;left:0;bottom:-1px;height:1.5px;width:100%;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .32s cubic-bezier(.2,.7,.3,1)}
.ul:hover::after{transform:scaleX(1)}

.tcard{transition:transform .28s cubic-bezier(.2,.7,.3,1),border-color .28s,box-shadow .28s,background .28s}
.tcard:hover{transform:translateY(-4px);border-color:var(--line-2);box-shadow:var(--shadow)}

.cta{transition:background .2s,color .2s,box-shadow .25s,transform .2s}
.cta:hover{transform:translateY(-1px)}
.cta:hover .car{transform:translateX(4px)}
.car{transition:transform .25s}

.btn-q{transition:background .2s,border-color .2s,color .2s}
.btn-q:hover{border-color:var(--ink);color:var(--ink)}

/* theme icon swap (mono-driven; JS also paints, this is the CSS fallback) */
[data-ic="sun"]{display:none}
html[data-theme="dark"] [data-ic="sun"]{display:inline-flex}
html[data-theme="dark"] [data-ic="moon"]{display:none}

/* mobile menu (data-menu on <html>) */
[data-mobilemenu]{display:none}
html[data-menu="open"] [data-mobilemenu]{display:flex}

/* ===========================================================================
   4. KEYFRAMES  (hmarq hpulse hscan hsheen hspin) + spin helper
   =========================================================================== */
@keyframes hmarq{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}
@keyframes hpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.82)}}
@keyframes hscan{0%{transform:translateY(0);opacity:0}12%{opacity:.7}88%{opacity:.7}100%{transform:translateY(var(--scanh,180px));opacity:0}}
@keyframes hsheen{0%{background-position:-160% 0}100%{background-position:260% 0}}
@keyframes hspin{to{transform:rotate(360deg)}}
.spin{transform-origin:50% 50%;animation:hspin 3s linear infinite}
.hpulse{animation:hpulse 2.4s ease-in-out infinite}

/* ===========================================================================
   5. HEADER / NAV  (sticky, blurred) + STATUS STRIP
   =========================================================================== */
.statusbar-top{border-bottom:1px solid var(--line);background:var(--paper-2)}
.statusbar-top__in{display:flex;align-items:center;justify-content:space-between;gap:14px;
  max-width:var(--maxw);margin:0 auto;padding:7px var(--pad-x);
  font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.statusbar-top .op{display:inline-flex;align-items:center;gap:8px}
.statusbar-top .dot{width:6px;height:6px;border-radius:50%;background:var(--good);animation:hpulse 2.4s ease-in-out infinite}
.statusbar-top .tag{color:var(--faint)}

.nav{position:sticky;top:0;z-index:50;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  background:color-mix(in oklab,var(--paper),transparent 18%);border-bottom:1px solid var(--line)}
.nav__in{display:flex;align-items:center;justify-content:space-between;gap:18px;
  max-width:var(--maxw);margin:0 auto;padding:13px var(--pad-x)}

.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;flex-shrink:0}
.brand .mk{width:33px;height:33px;border-radius:9px;background:#0E1218;display:grid;place-items:center;
  box-shadow:inset 0 0 0 1px rgba(110,140,255,.28)}
.brand .mk svg{color:#6E8CFF}
.brand__name{font-weight:900;letter-spacing:-.02em;font-size:1.05rem;white-space:nowrap}
.brand__name span{font-weight:400;color:var(--muted)}

.nav__links{display:flex;align-items:center;gap:28px;font-size:.93rem}
.nav__act{display:flex;align-items:center;gap:12px;flex-shrink:0}

.tg,.navtoggle{width:40px;height:40px;border-radius:10px;border:1px solid var(--line);
  background:var(--card);color:var(--ink);display:grid;place-items:center;cursor:pointer}
.navtoggle{display:none}

/* mobile menu drawer (data-mobilemenu) */
.nav__menu{flex-direction:column;gap:2px;padding:8px var(--pad-x) 16px;border-top:1px solid var(--line)}
.nav__menu a{padding:10px 0}

/* legacy nav__links "open" (site.js can also toggle .open on the link list) */
@media(max-width:940px){
  .nav__links.open{display:flex;flex-direction:column;position:absolute;left:0;right:0;top:100%;
    background:var(--paper-2);border-bottom:1px solid var(--line);gap:2px;padding:8px var(--pad-x) 16px}
  .nav__links.open a{padding:10px 0}
}

/* ===========================================================================
   6. SECTION INDEX + RULER / HAIRLINE DIVIDERS
   =========================================================================== */
.sindex{display:flex;align-items:center;gap:14px;margin-bottom:30px}
.sindex__no{font-family:var(--mono);font-size:.7rem;font-weight:600;letter-spacing:.1em;color:var(--accent)}
.sindex__label{font-family:var(--mono);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.sindex__rule{flex:1;height:1px;background:var(--line)}

.hairline{height:1px;background:var(--line);border:0;margin:0}
.ruler{position:relative;height:1px;background:var(--line-2)}
.ruler__node{position:absolute;top:50%;width:11px;height:11px;border-radius:50%;background:var(--accent);
  transform:translateY(-50%);box-shadow:0 0 0 5px var(--paper-2)}

/* eyebrow pill (mono, cobalt) */
.eyebrow{display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);
  font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);
  border:1px solid var(--line-2);background:var(--card);border-radius:999px;padding:6px 13px}
.eyebrow .dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}

/* ===========================================================================
   7. BUTTONS  (primary cta / ghost btn-q)
   =========================================================================== */
.btn{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:.95rem;
  padding:12px 20px;border-radius:12px;text-decoration:none;white-space:nowrap;cursor:pointer;border:0;
  transition:background .2s,color .2s,box-shadow .25s,transform .2s,border-color .2s}
.btn--primary,.btn--gold{background:var(--accent);color:var(--accent-ink)}
.btn--primary:hover,.btn--gold:hover{transform:translateY(-1px);background:var(--accent-2)}
.btn--primary:hover .car,.btn--gold:hover .car{transform:translateX(4px)}
.btn--ghost{background:transparent;color:var(--muted);border:1px solid var(--line-2)}
.btn--ghost:hover{border-color:var(--ink);color:var(--ink)}
.btn--lg{padding:14px 24px;font-size:1rem}

/* --- Speedtest-style HOLLOW GO button (primary submit) --------------------
   A hollow gradient ring (no fill) like speedtest.net — cobalt "GO", generous
   size, and a slow, gentle pulse (~1/5 the earlier rate). Fitts + Von Restorff:
   one big, unmistakable target. Reduced-motion removes the pulse entirely.
   Field modifier `.field--go` gives the paired URL box a calmer, larger feel. */
/* --- lead form (Build page → hello@houtos.io; POST /api/lead stubbed) ------ */
.leadform{text-align:center}
.leadform__row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:560px){.leadform__row{grid-template-columns:1fr}}
/* visible field labels (WCAG 3.3.2 — no placeholder-only labelling) */
.leadform__field{display:flex;flex-direction:column;gap:6px;text-align:left;min-width:0}
.leadform__label{font-family:var(--mono);font-size:.64rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);font-weight:600}
.leadform__in{width:100%;background:var(--card);border:1px solid var(--line-2);border-radius:12px;
  padding:14px 15px;font-family:var(--sans);font-size:1rem;color:var(--ink);transition:border-color .18s,box-shadow .18s}
.leadform__in::placeholder{color:var(--faint)}
.leadform__in:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
select.leadform__in{appearance:none;-webkit-appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);
  background-position:calc(100% - 18px) 20px,calc(100% - 13px) 20px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.leadform__act{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:12px}
.leadform__note{font-family:var(--mono);font-size:.72rem;line-height:1.5;color:var(--faint);margin:12px 0 0}
.leadform__note b{color:var(--ink-2)}
.leadform__note.is-ok{color:var(--good)}.leadform__note.is-ok b{color:var(--good)}

/* --- premium hero URL box (.field.field--go) — one clean surface, no icon, no
   hard focus ring / "frame in a frame". `.field.field--go` (0,2,0) intentionally
   out-specifies the base `.field` rules so these actually win regardless of order. */
.field.field--go{gap:0;border:1px solid var(--line-2);border-radius:14px;padding:0 22px;
  background:var(--card);box-shadow:0 1px 2px color-mix(in oklab,var(--ink),transparent 93%);
  transition:border-color .2s ease,box-shadow .25s ease}
.field.field--go input{font-size:1.1rem;letter-spacing:.01em;padding:19px 4px}
.field.field--go:focus-within{border-color:var(--accent);
  box-shadow:0 12px 34px -14px color-mix(in oklab,var(--accent),transparent 55%)}
.go-wrap{display:flex;justify-content:center;margin:38px 0 24px}
.go-btn{position:relative;display:grid;place-items:center;width:clamp(154px,34vw,200px);aspect-ratio:1;
  border:0;border-radius:50%;cursor:pointer;isolation:isolate;-webkit-tap-highlight-color:transparent;
  background:radial-gradient(circle at 50% 50%,var(--paper) 0 56%,color-mix(in oklab,var(--accent),transparent 88%) 66%,transparent 74%);
  color:var(--accent);font-family:var(--sans);font-weight:800;letter-spacing:.12em;
  font-size:clamp(1.75rem,4.4vw,2.4rem)}
.go-btn__ring{position:absolute;inset:0;width:100%;height:100%;z-index:2;overflow:visible;
  filter:drop-shadow(0 8px 22px color-mix(in oklab,var(--accent),transparent 60%));
  transition:transform .28s cubic-bezier(.2,.7,.3,1)}
.go-btn__label{position:relative;z-index:3;transform:translateY(1px)}
.go-btn:hover .go-btn__ring{transform:scale(1.045)}
.go-btn:active .go-btn__ring{transform:scale(.965)}
.go-btn:focus-visible{outline:none;box-shadow:0 0 0 4px var(--paper),0 0 0 7px var(--accent)}
/* slow, gentle expanding pulse rings — ~1/5 the previous speed */
.go-btn::before,.go-btn::after{content:"";position:absolute;inset:0;border-radius:50%;z-index:1;pointer-events:none;
  border:1.5px solid color-mix(in oklab,#2E7BEE,transparent 55%)}
html.js .go-btn::before{animation:goPulse 11s ease-out infinite}
html.js .go-btn::after{animation:goPulse 11s ease-out infinite 5.5s}
@keyframes goPulse{0%{transform:scale(.94);opacity:.5}70%{opacity:0}100%{transform:scale(1.5);opacity:0}}

/* ===========================================================================
   8. FORMS / INPUTS  (URL field + generic)
   =========================================================================== */
.field{display:flex;align-items:center;gap:9px;background:var(--card);border:1px solid var(--line-2);
  border-radius:12px;padding:0 13px;flex:1 1 240px;min-width:0}
.field svg{flex-shrink:0}
.field input{flex:1;min-width:0;border:0;background:transparent;color:var(--ink);
  font-family:var(--mono);font-size:.92rem;padding:13px 0;outline:none}
.field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}

.form-row{display:flex;gap:9px;flex-wrap:wrap;max-width:480px}

input,textarea,select{background:var(--card);border:1px solid var(--line-2);color:var(--ink);
  border-radius:11px;padding:11px 14px}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}

/* ===========================================================================
   9. GRADE ENGINE GAUGE  (270° dashed bezel + score arc + center grade)
   =========================================================================== */
.gauge{position:relative;flex-shrink:0}
.gauge__svg{display:block}
.gauge__bezel{fill:none;stroke:var(--line);stroke-width:1;stroke-dasharray:1.5 11}
.gauge__track{fill:none;stroke:var(--line-2);stroke-width:13;stroke-linecap:round}
.gauge__arc{fill:none;stroke-width:13;stroke-linecap:round}       /* recolor per grade */
.gauge__arc.is-good{stroke:var(--good)} .gauge__arc.is-fair{stroke:var(--fair)} .gauge__arc.is-poor{stroke:var(--poor)}
.gauge__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.gauge__num{font-size:3.2rem;font-weight:900;letter-spacing:-.04em;line-height:1}
.gauge__grade{font-family:var(--mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;margin-top:2px}
.gauge__grade.is-good{color:var(--good)} .gauge__grade.is-fair{color:var(--fair)} .gauge__grade.is-poor{color:var(--poor)}
.gauge__end{position:absolute;bottom:20px;font-family:var(--mono);font-size:.64rem;color:var(--faint)}
.gauge__end--f{left:14px} .gauge__end--a{right:14px}

/* axis readout bars beside a gauge / in a card */
.axisbars{display:flex;flex-direction:column;gap:11px}
.axisrow{display:flex;align-items:center;gap:10px}
.axisrow .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.axisrow .nm{font-size:.78rem;color:var(--ink-2);width:84px;flex-shrink:0}
.axisrow .bar{flex:1;height:5px;background:var(--line);border-radius:9px;overflow:hidden}
.axisrow .bar>i{display:block;height:100%;border-radius:9px}
.axisrow .val{font-family:var(--mono);font-size:.76rem;width:18px;text-align:right}
.is-good{--sc:var(--good)} .is-fair{--sc:var(--fair)} .is-poor{--sc:var(--poor)}

/* card scan line (gauge card / scan console) */
.scanline{position:absolute;left:0;right:0;height:2px;pointer-events:none;
  background:linear-gradient(90deg,transparent,color-mix(in oklab,var(--accent),transparent 40%),transparent);
  animation:hscan 3.6s ease-in-out infinite}

/* ===========================================================================
   10. REGISTRATION / CROSSHAIR CORNER MARKS  (#x-cross placement helpers)
   =========================================================================== */
.xmark{position:absolute;color:var(--line-2)}
.xmark--accent{color:var(--accent)}
.xmark--tl{top:-5.5px;left:-5.5px} .xmark--tr{top:-5.5px;right:-5.5px}
.xmark--bl{bottom:-5.5px;left:-5.5px} .xmark--br{bottom:-5.5px;right:-5.5px}
/* inset variant (inside padding, e.g. section corners) */
.xmark--in-tl{top:12px;left:12px} .xmark--in-tr{top:12px;right:12px}
.xmark--in-bl{bottom:12px;left:12px} .xmark--in-br{bottom:12px;right:12px}

/* generic instrument card (header + body) */
.icard{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow);overflow:hidden}
.icard__head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;
  border-bottom:1px solid var(--line);font-family:var(--mono);font-size:.64rem;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}

/* ===========================================================================
   11. REPORT CARD  (hairline-ruled axis rows — the product's output)
   =========================================================================== */
.reportcard{position:relative;background:var(--card);border:1px solid var(--line);border-radius:22px;
  box-shadow:var(--shadow);overflow:hidden}
.reportcard__head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:14px 22px;border-bottom:1px solid var(--line);font-family:var(--mono);
  font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.axistable{display:flex;flex-direction:column}
.axistable__row{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;
  padding:10px 0;border-bottom:1px solid var(--line)}
.axistable__row:last-child{border-bottom:0}
.axistable__row .lhs{display:flex;align-items:center;gap:12px;min-width:0}
.axistable__row .nm{font-size:.92rem;width:108px;flex-shrink:0}
.axistable__row .bar{flex:1;height:6px;background:var(--line);border-radius:9px;overflow:hidden;min-width:48px}
.axistable__row .bar>i{display:block;height:100%;border-radius:9px}
.axistable__row .val{font-family:var(--mono);font-size:.84rem;width:20px;text-align:right}
.axistable__row .conf{font-family:var(--mono);font-size:.64rem;letter-spacing:.06em;text-transform:uppercase;width:58px;text-align:right}
.conf--measured{color:var(--good)} .conf--preview{color:var(--faint)}

/* ranked fix list */
.fixlist__k{font-family:var(--mono);font-size:.64rem;letter-spacing:.13em;text-transform:uppercase;color:var(--faint);margin:0 0 16px}
.fixrow{display:flex;gap:13px;align-items:flex-start}
.fixrow__n{font-family:var(--mono);font-size:.7rem;font-weight:600;color:var(--accent-ink);background:var(--accent);
  border-radius:7px;width:24px;height:24px;display:grid;place-items:center;flex-shrink:0}
.fixrow__t{font-weight:600;font-size:.96rem}
.fixrow__d{font-family:var(--mono);font-size:.66rem;color:var(--muted);margin-top:3px}

/* ===========================================================================
   12. METHOD TIMELINE  (steps hung off a top datum line + node dots)
   =========================================================================== */
.timeline{position:relative;margin-top:48px}
.timeline__datum{position:absolute;top:5px;left:0;right:0;height:1px;background:var(--line-2)}
.timeline__steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:30px}
.tstep{position:relative;padding-top:34px}
.tstep__node{position:absolute;top:0;left:0;width:11px;height:11px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px var(--paper-2)}
.tstep__no{position:absolute;top:0;left:22px;font-family:var(--mono);font-size:.64rem;color:var(--faint)}
.tstep__ic{color:var(--accent);margin-bottom:12px}
.tstep h4{font-size:1.1rem;font-weight:700;margin:0}
.tstep p{color:var(--muted);font-size:.92rem;line-height:1.5;margin:7px 0 0}

/* ===========================================================================
   13. MANIFESTO BAND  (deep #15140E band + cobalt radial glow) — both themes
   =========================================================================== */
.manifesto{position:relative;overflow:hidden;background:#15140E;color:#F1EEE4}
.manifesto__glow{position:absolute;top:-28%;right:6%;width:520px;height:520px;max-width:72%;border-radius:50%;
  background:radial-gradient(circle,rgba(110,140,255,.18),transparent 66%);pointer-events:none}
.manifesto__mark{position:absolute;right:-70px;top:50%;transform:translateY(-50%);opacity:.07;color:#F1EEE4;pointer-events:none}
.manifesto__in{position:relative;max-width:var(--maxw);margin:0 auto;padding:clamp(64px,9vw,128px) var(--pad-x)}
.manifesto .sindex__no{color:#8AA0FF}
.manifesto .sindex__label{color:rgba(241,238,228,.52)}
.manifesto p{color:rgba(241,238,228,.8)}

/* ===========================================================================
   14. MARQUEE TICKER  (hairline top/bottom, animated strip)
   =========================================================================== */
.marquee{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--paper-2);overflow:hidden}
.marquee__t{display:flex;width:max-content;animation:hmarq 34s linear infinite;padding:11px 0;
  font-family:var(--mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.marquee__t>span{display:flex;gap:26px;padding-right:26px;align-items:center}
.marquee__t b{color:var(--accent);font-weight:400}

/* ===========================================================================
   15. LENS / FEATURE CARDS  (grid of tcards) + STAT GRID
   =========================================================================== */
.cardgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px}
.lenscard{position:relative;display:block;background:var(--card);border:1px solid var(--line);
  border-radius:16px;padding:24px 22px 20px;text-decoration:none;color:var(--ink);overflow:hidden}
.lenscard__ico{width:44px;height:44px;border-radius:12px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center}
.lenscard__no{font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;color:var(--faint)}
.lenscard h3{font-size:1.16rem;font-weight:700;letter-spacing:-.012em;margin:18px 0 0}
.lenscard p{color:var(--muted);font-size:.93rem;line-height:1.55;margin:8px 0 0}
.taglist{display:flex;gap:6px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:.64rem;letter-spacing:.03em;color:var(--muted)}
.taglist span{border:1px solid var(--line);border-radius:5px;padding:3px 7px}

.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:1px;
  background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden}
.statcell{background:var(--card);padding:clamp(26px,3vw,38px) 26px}
.statcell__n{font-size:clamp(2.6rem,5vw,3.6rem);font-weight:900;letter-spacing:-.04em;line-height:1}
.statcell__n span{color:var(--accent)}
.statcell__k{font-family:var(--mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:8px}
.statcell__sub{font-family:var(--mono);font-size:.64rem;color:var(--faint);margin-top:4px}

/* footer Build link — gentle pulse to draw the eye (reduced-motion safe) */
50%{opacity:.52}}

/* ===========================================================================
   16. FOOTER
   =========================================================================== */
.foot{border-top:1px solid var(--line);background:var(--paper-2);overflow:hidden}
.foot__in{max-width:var(--maxw);margin:0 auto;padding:clamp(48px,6vw,76px) var(--pad-x) 0}
.foot__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:34px}
.foot__brandcol{grid-column:1/-1;max-width:340px;margin-bottom:6px}
.foot__brandcol p{color:var(--muted);font-size:.95rem;line-height:1.55;margin:0;max-width:32ch}
.foot h4{font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin:0 0 14px;font-weight:600}
.foot__links{display:flex;flex-direction:column;gap:11px}
.foot__watermark{font-weight:900;letter-spacing:-.04em;font-size:clamp(3.6rem,18vw,13rem);line-height:.78;
  color:var(--ink);opacity:.045;margin:clamp(22px,4vw,44px) 0 -.1em;user-select:none}
.foot__bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding:22px 0;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;color:var(--faint)}

/* ===========================================================================
   17. HERO CURSOR CROSSHAIR  (event-driven; JS moves the lines / readout)
   =========================================================================== */
.xhair{display:none !important}  /* crosshair pointer overlay turned off (Ryan) */
.xhair__v{position:absolute;top:0;bottom:0;left:0;width:1px;background:var(--grid-2)}
.xhair__h{position:absolute;left:0;right:0;top:0;height:1px;background:var(--grid-2)}
.xhair__label{position:absolute;left:0;top:0;font-family:var(--mono);font-size:.54rem;letter-spacing:.04em;
  color:var(--faint);background:var(--paper-2);border:1px solid var(--line);border-radius:5px;padding:1px 6px;white-space:nowrap}

/* ===========================================================================
   18. NO-JS RESILIENCE GATE
   Content is visible by default. Animation / reveal is opt-in via html.js.
   =========================================================================== */
[data-reveal]{opacity:1}                 /* resting state = final correct visual */

/* Reveal-on-scroll: only arm the hidden state when JS is present. */
html.js .reveal{opacity:0;transform:translateY(14px);transition:opacity .6s cubic-bezier(.2,.7,.3,1),transform .6s cubic-bezier(.2,.7,.3,1)}
html.js .reveal.in{opacity:1;transform:none}
/* Without JS the .reveal class does nothing → content stays fully visible. */

/* ===========================================================================
   19. RESPONSIVE
   =========================================================================== */
@media(max-width:940px){
  .nav__links{display:none}
  .navtoggle{display:grid}
  [data-hero]{grid-template-columns:1fr !important;gap:46px !important}
  /* touch targets: icon buttons reach the 44px WCAG 2.5.5 / HIG minimum on
     touch-first widths (theme toggle + hamburger). Fitts + motor-a11y. */
  .tg,.navtoggle{width:44px;height:44px}
  /* nav-drawer links: full-width rows with a comfortable tap height */
  .nav__menu a,.nav__links.open a{padding:12px 4px;min-height:44px;display:flex;align-items:center}
  /* footer links: comfortable vertical tap area on touch (Fitts + WCAG 2.5.8).
     Inline-flex + min-height keeps the hit target >=44px without changing the
     visual gap on desktop (this block is touch-width only). */
  .foot__links a{display:inline-flex;align-items:center;min-height:44px}
  /* sticky report scopebar button: the .scopebar .btn override trims padding to
     ~34px tall — restore a >=44px primary touch target on phones/tablets. */
  .scopebar .btn{padding:12px 18px;min-height:44px}
}

@media(min-width:941px){
  .navtoggle{display:none}
  [data-mobilemenu]{display:none !important}
}

/* ===========================================================================
   19b. GRADE EXPERIENCE  — Speedtest-style animated gauge + lens report
   Reusable block: [data-grade-exp] root, one big radial gauge, counting center
   number, sweeping value arc, a pulsing ring while "scanning", lens rows that
   grade in sequence, a summary, a labeled-sample banner + a $50 Deep Report CTA,
   and an aria-hidden confetti canvas. Resting state = final graded visual
   (no-JS safe). JS adds .is-* state classes to reset-then-animate.
   =========================================================================== */
.gx{position:relative}
.gx__canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:6}

/* --- reveal: the Grade Engine is hidden until the user hits GO, then it
   appears + expands as it grades (JS adds .is-revealed). No-JS shows it. --- */
html.js .gx:not(.is-revealed) .gx-console,
html.js .gx:not(.is-revealed) .gx-sample{display:none}
html.js .gx.is-revealed .gx-console{animation:gxReveal .62s cubic-bezier(.2,.7,.3,1) both}
html.js .gx.is-revealed .gx-sample{animation:gxReveal .62s cubic-bezier(.2,.7,.3,1) .12s both}
@keyframes gxReveal{from{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:none}}

/* --- the big Speedtest gauge --------------------------------------------- */
.gx-gauge{position:relative;width:clamp(220px,42vw,300px);aspect-ratio:1;margin:0 auto;flex-shrink:0}
.gx-gauge__svg{display:block;width:100%;height:100%;overflow:visible}
.gx-gauge__bezel{fill:none;stroke:var(--line);stroke-width:1.4;stroke-dasharray:1.5 10}
.gx-gauge__track{fill:none;stroke:var(--line-2);stroke-width:16;stroke-linecap:round}
.gx-gauge__arc{fill:none;stroke:url(#gxgrad);stroke-width:17;stroke-linecap:round;
  filter:drop-shadow(0 0 9px color-mix(in oklab,#6D4AFF,transparent 52%))}
/* the value arc always renders the cool Speedtest teal→cobalt gradient;
   the pass/fair/poor grade meaning lives in the letter badge + lens bars,
   not the big gauge sweep (which is pure energy, like a speed test). */
/* the pulsing ring shown while scanning */
.gx-gauge__pulse{fill:none;stroke:var(--accent);stroke-width:2;opacity:0}
.gx-gauge__tick{stroke:var(--faint);stroke-width:1.4;opacity:.55}
.gx-gauge__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.gx-gauge__num{font-weight:900;letter-spacing:-.05em;line-height:.9;font-size:clamp(3.4rem,8vw,5rem);
  font-variant-numeric:tabular-nums;color:var(--ink)}
.gx-gauge__den{font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;color:var(--faint);margin-top:2px}
.gx-gauge__grade{font-family:var(--mono);font-size:.74rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  margin-top:10px;padding:4px 12px;border-radius:999px;border:1px solid var(--line-2);color:var(--fair)}
.gx-gauge__grade.is-good{color:var(--good);border-color:color-mix(in oklab,var(--good),transparent 60%)}
.gx-gauge__grade.is-fair{color:var(--fair);border-color:color-mix(in oklab,var(--fair),transparent 60%)}
.gx-gauge__grade.is-poor{color:var(--poor);border-color:color-mix(in oklab,var(--poor),transparent 60%)}
.gx-gauge__ends{position:absolute;inset:0;pointer-events:none}
.gx-gauge__end{position:absolute;bottom:8%;font-family:var(--mono);font-size:.66rem;font-weight:600;color:var(--faint)}
.gx-gauge__end--f{left:14%} .gx-gauge__end--a{right:14%}

/* scanning-state affordances driven by JS state class on .gx */
.gx-gauge__pulse{transform-origin:center;transform-box:fill-box}
html.js .gx.is-scanning .gx-gauge__pulse{animation:gxpulse 1.15s ease-out infinite}
html.js .gx.is-scanning .gx-gauge__num{animation:gxflicker 1.15s ease-in-out infinite}
@keyframes gxpulse{
  0%{opacity:.55;transform:scale(.86)}
  70%{opacity:0;transform:scale(1.08)}
  100%{opacity:0;transform:scale(1.08)}
}
@keyframes gxflicker{0%,100%{opacity:1}50%{opacity:.62}}

/* --- console frame around the gauge -------------------------------------- */
.gx-console{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow);overflow:hidden}
.gx-console__head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 18px;
  border-bottom:1px solid var(--line);font-family:var(--mono);font-size:.64rem;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted)}
.gx-console__title{display:inline-flex;align-items:center;gap:8px;color:var(--ink);font-weight:600}
.gx-console__title svg{color:var(--accent)}
.gx-console__state{display:inline-flex;align-items:center;gap:7px}
.gx-console__state .dot{width:6px;height:6px;border-radius:50%;background:var(--good)}
html.js .gx.is-scanning .gx-console__state .dot{background:var(--accent);animation:hpulse 1s ease-in-out infinite}
.gx-console__body{position:relative;padding:20px clamp(16px,2.4vw,26px) 22px}
.gx-console__target{display:flex;align-items:center;gap:9px;background:var(--paper-2);border:1px solid var(--line);
  border-radius:10px;padding:9px 12px;font-family:var(--mono)}
.gx-console__target .dot{width:7px;height:7px;border-radius:50%;background:var(--good);flex-shrink:0}
.gx-console__target .u{font-size:.78rem;color:var(--ink-2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gx-console__target .t{font-size:.64rem;letter-spacing:.1em;color:var(--faint);border:1px solid var(--line-2);
  border-radius:5px;padding:2px 6px;flex-shrink:0}

/* --- lens rows (grade in sequence, report builds below) ------------------ */
.gx-lenses{display:flex;flex-direction:column;margin-top:20px;border-top:1px solid var(--line)}
.gx-lens{--sc:var(--accent);--sc2:color-mix(in oklab,var(--accent),#fff 32%);
  display:grid;grid-template-columns:112px 1fr auto auto;gap:14px;align-items:center;
  padding:12px 0;border-bottom:1px solid var(--line)}
.gx-lens:last-child{border-bottom:0}
.gx-lens__nm{font-size:.9rem;color:var(--ink-2);white-space:nowrap}
.gx-lens__bar{height:8px;border-radius:99px;background:color-mix(in oklab,var(--line-2),transparent 30%);
  overflow:hidden;min-width:40px;box-shadow:inset 0 1px 2px color-mix(in oklab,var(--ink),transparent 92%)}
.gx-lens__bar>i{display:block;height:100%;width:0;border-radius:99px;
  background:linear-gradient(90deg,#22D3EE 0%,#4361EE 52%,#C13FE0 100%);
  box-shadow:0 0 10px color-mix(in oklab,#6D4AFF,transparent 55%);
  transition:width .7s cubic-bezier(.2,.7,.3,1)}
/* synthwave bar palette (cyan→indigo→magenta), cohesive with the gauge sweep.
   Bar LENGTH carries the score (graphical integrity); color is aesthetic and
   never the sole encoder — the lens name + numeric value + conf label do that. */
.gx-lens__val{font-family:var(--mono);font-size:.86rem;font-weight:600;color:var(--ink);width:24px;text-align:right;
  font-variant-numeric:tabular-nums}
.gx-lens__conf{font-family:var(--mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;
  width:58px;text-align:right;color:var(--faint)}
.gx-lens__conf.is-measured{color:var(--good)}
.gx-lens__conf::before{content:"\25CB";margin-right:5px}
.gx-lens__conf.is-measured::before{content:"\25CF"}
/* row entrance while report "builds" (JS-only; resting = visible) */
html.js .gx.is-building .gx-lens{opacity:.32;transform:translateY(4px);
  transition:opacity .4s ease,transform .4s ease}
html.js .gx.is-building .gx-lens.is-in{opacity:1;transform:none}

/* --- summary line -------------------------------------------------------- */
.gx-summary{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap;margin-top:16px;padding-top:14px;
  border-top:1px solid var(--line)}
.gx-summary__badge{font-family:var(--mono);font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;
  display:inline-flex;align-items:center;gap:8px;color:var(--muted)}
.gx-summary__badge b{color:var(--ink);font-weight:600}
.gx-summary__fix{font-family:var(--mono);font-size:.66rem;letter-spacing:.02em;color:var(--muted);margin-left:auto}
.gx-summary__fix b{color:var(--accent);font-weight:600}

/* --- honesty label (labeled sample / demo — D-001) ----------------------- */
.gx-sample{display:flex;align-items:flex-start;gap:10px;margin-top:16px;padding:11px 14px;
  border:1px solid var(--line-2);border-radius:12px;background:var(--paper-2)}
.gx-sample svg{color:var(--accent);flex-shrink:0;margin-top:2px}
.gx-sample p{margin:0;font-family:var(--mono);font-size:.66rem;line-height:1.55;color:var(--muted)}
.gx-sample b{color:var(--ink-2);font-weight:600}

/* --- $50 Deep Report CTA banner (directly below the experience) ---------- */
.gx-cta{position:relative;overflow:hidden;margin-top:18px;border:1px solid var(--line-2);border-radius:var(--r-lg);
  background:var(--card);box-shadow:var(--shadow);padding:clamp(18px,2.6vw,26px)}
.gx-cta__glow{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(72% 120% at 92% -20%,var(--accent-soft),transparent 60%)}
.gx-cta__in{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:22px 44px;flex-wrap:wrap}
.gx-cta__copy{flex:1 1 320px;min-width:0}
.gx-cta__k{font-family:var(--mono);font-size:.64rem;letter-spacing:.13em;text-transform:uppercase;color:var(--accent);margin:0 0 8px}
.gx-cta__h{font-size:clamp(1.4rem,2.8vw,2rem);font-weight:800;letter-spacing:-.025em;line-height:1.07;margin:0}
.gx-cta__h span{color:var(--accent)}
.gx-cta__sub{color:var(--muted);font-size:.98rem;line-height:1.55;margin:13px 0 0;max-width:40ch}
.gx-cta__sub b{color:var(--ink-2);font-weight:600}
.gx-cta__act{display:flex;flex-direction:column;gap:10px;flex:0 0 auto;min-width:240px;align-items:stretch}
.gx-cta__price{font-family:var(--mono);font-size:.64rem;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);text-align:center}
.gx-cta__price b{color:var(--ink);font-weight:700;font-size:1.5em;letter-spacing:-.02em}

/* ===========================================================================
   20. REDUCED MOTION  — disable ALL animation; AA preserved
   =========================================================================== */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none !important;transition:none !important;scroll-behavior:auto !important}
  html.js .reveal{opacity:1;transform:none}
  /* grade experience: force the resolved final state, kill scan affordances */
  html.js .gx .gx-gauge__pulse{display:none !important}
  html.js .gx .gx-lens{opacity:1 !important;transform:none !important}
  html.js .gx .gx-lens__bar>i{transition:none !important}
}

/* ===========================================================================
   21. LEGACY REPORT / DASHBOARD COMPONENTS  (kept compatible, re-skinned)
   Consumed by the existing report.html (separated grade cards, consultation
   meter, provenance chips). Restyled in the Precision language using the
   aliased tokens above so the report port keeps rendering — gold-free.
   =========================================================================== */

/* provenance chips: Measured (cobalt) / Inferred (neutral) */
.chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.64rem;
  letter-spacing:.08em;text-transform:uppercase;border-radius:5px;padding:2px 8px;font-weight:600;
  border:1px solid var(--line-2);color:var(--muted);background:var(--paper-2)}
.chip.m{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.chip.i{border-color:var(--line-2);color:var(--faint)}

/* confidence chip */
.confchip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.64rem;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--line);
  border-radius:6px;padding:3px 8px}
.confchip .dt{width:8px;height:8px;border-radius:50%;background:var(--fair)}
.confchip.is-high .dt{background:var(--good)}
.confchip.is-med .dt{background:var(--fair)}
.confchip.is-low .dt{background:var(--poor)}

.tag-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.64rem;
  letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--line-2);color:var(--accent);
  border-radius:6px;padding:4px 9px;background:var(--accent-soft)}

/* separated grade cards */
.gradecards{display:grid;gap:clamp(16px,2vw,22px)}
.gradecard{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  overflow:hidden;box-shadow:var(--shadow)}
.gradecard__head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:clamp(18px,2.4vw,26px) clamp(18px,2.4vw,26px) 0}
.gradecard__titlewrap{min-width:0}
.gradecard__name{font-size:1.2rem;font-weight:800;letter-spacing:-.02em}
.gradecard__chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.gradecard__bar{height:6px;background:var(--line);overflow:hidden;margin:clamp(16px,2vw,20px) 0 0}
.gradecard__bar i{display:block;height:100%;background:var(--sc,var(--accent))}
.gradecard__body{padding:clamp(18px,2.4vw,26px)}
.gradecard.is-good{--sc:var(--good)} .gradecard.is-fair{--sc:var(--fair)}
.gradecard.is-urgent,.gradecard.is-poor{--sc:var(--poor)}

.gradebadge{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0}
.gradebadge__ltr{font-size:2.6rem;font-weight:900;letter-spacing:-.04em;line-height:.9;color:var(--sc,var(--accent))}
.gradebadge__sc{font-family:var(--mono);font-size:.86rem;font-weight:600}
.gradebadge__sc span{color:var(--faint)}
.gradebadge.is-good{--sc:var(--good)} .gradebadge.is-fair{--sc:var(--fair)}
.gradebadge.is-urgent,.gradebadge.is-poor{--sc:var(--poor)}

.gcblock{padding:16px 0;border-top:1px solid var(--line)}
.gcblock:first-child{border-top:0;padding-top:0}
.gcblock__k{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:.64rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin:0 0 8px}
.gcblock__k svg{color:var(--accent)}
.gcblock__p{color:var(--ink-2);font-size:.98rem;line-height:1.55;margin:0}
.gcfind{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
.gcfind li{display:flex;gap:9px;align-items:flex-start;font-size:.92rem;color:var(--ink-2);line-height:1.5}
.gcfind svg{color:var(--poor);flex-shrink:0;margin-top:3px}
.gcfind .loc{color:var(--faint);font-family:var(--mono);font-size:.82em}
.gcsteps,.gctools{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.gcstep,.gctool{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line);border-radius:var(--r);background:var(--paper-2);padding:14px 16px}
.gcstep__ic,.gctool__ic{color:var(--accent);flex-shrink:0}
.gcstep__ic svg,.gctool__ic svg{width:18px;height:18px}
.gcstep__main,.gctool__main{flex:1;min-width:0}
.gcstep__t{margin:0;font-size:.94rem;line-height:1.55;color:var(--ink-2)}
.gcstep__tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.efftag{font-family:var(--mono);font-size:.64rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
  border:1px solid var(--line-2);border-radius:6px;padding:3px 8px}
.efftag b{color:var(--ink);font-weight:600}
.efftag.imp-hi b{color:var(--accent)} .efftag.eff-lo b{color:var(--good)}
.gcsteps__note{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.64rem;color:var(--faint);margin:10px 0 0}
.gctool__nm{font-weight:700;font-size:.94rem;display:flex;align-items:center;gap:8px}
.gctool__nm .free{font-family:var(--mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--good)}
.gctool__d{color:var(--muted);font-size:.88rem;margin:4px 0 0}
.gctool__go{margin-left:auto;font-family:var(--mono);font-size:.72rem;color:var(--accent);display:inline-flex;align-items:center;gap:5px;flex-shrink:0;align-self:center}

/* score summary cards + meters (report six-axis) */
.sccard{border:1px solid var(--line);border-radius:var(--r);background:var(--card);padding:16px 18px;
  display:grid;grid-template-columns:auto 1fr auto;gap:6px 16px;align-items:center}
.sccard__nm{font-weight:800;letter-spacing:-.01em;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.sccard__sc{font-size:1.7rem;font-weight:900;font-variant-numeric:tabular-nums;line-height:1;text-align:right}
.sccard__st{font-family:var(--mono);font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;text-align:right}
.sccard__bar{grid-column:1/-1;height:6px;border-radius:4px;background:var(--track);overflow:hidden;margin-top:2px}
.sccard__bar i{display:block;height:100%;border-radius:4px;background:var(--grad)}
.sccard__means{grid-column:1/-1;color:var(--muted);font-size:.92rem;margin:2px 0 0}

.meter__top{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--mono);font-size:.78rem;color:var(--muted);margin-bottom:6px}
.meter__top .v{color:var(--ink);font-weight:600}
.meter__track{height:6px;border-radius:9px;background:var(--track);overflow:hidden}
.meter__fill{display:block;height:100%;border-radius:9px;background:var(--accent)}
.meter__zones{display:flex;justify-content:space-between;font-family:var(--mono);font-size:.64rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin-top:5px}

/* consultation panel + credit rail (the paid surface) */
.consult{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--card);
  padding:clamp(20px,3vw,30px);position:relative;overflow:hidden}
.consult__glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(70% 90% at 88% -10%,var(--glow-1),transparent 60%)}
.consult>*{position:relative;z-index:1}
.consult__title{font-weight:800;letter-spacing:-.01em;font-size:1.15rem;display:flex;align-items:center;gap:9px}
.cring{position:relative;display:grid;place-items:center;flex-shrink:0}
.cring svg{width:78px;height:78px;transform:rotate(-90deg)}
.cring .tk{fill:none;stroke:var(--track);stroke-width:9}
.cring .pr{fill:none;stroke:var(--accent);stroke-width:9;stroke-linecap:round}
.cring__n{position:absolute;font-family:var(--mono);font-weight:600;font-size:.92rem;color:var(--accent)}

/* consultation meter (role=meter) */
.cmeter{margin-top:16px}
.cmeter__top{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--mono);font-size:.74rem;letter-spacing:.04em;color:var(--muted);margin-bottom:7px}
.cmeter__top b{color:var(--accent);font-weight:600}
.cmeter__track{height:10px;border-radius:6px;background:var(--track);overflow:hidden}
.cmeter__fill{display:block;height:100%;border-radius:6px;background:var(--grad);transition:width .6s cubic-bezier(.2,.7,.3,1)}
.depleted .cmeter__top b{color:var(--poor)}
.depleted .cmeter__fill{background:var(--track)}

.qchips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.qchip{font-family:var(--font);font-size:.86rem;font-weight:500;color:var(--ink);border:1px solid var(--line-2);
  border-radius:99px;padding:7px 13px;background:var(--paper-2);cursor:default;display:inline-flex;align-items:center;gap:7px}
.qchip .free{font-family:var(--mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--good)}

.credit{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card);padding:clamp(20px,3vw,28px)}
.credit__price .amt{font-size:clamp(2rem,4vw,2.8rem);font-weight:900;letter-spacing:-.03em;font-variant-numeric:tabular-nums;line-height:1}
.credit__price .per{font-family:var(--mono);font-size:.72rem;letter-spacing:.05em;color:var(--faint)}
.creditcard{border:1px solid var(--line-2);background:var(--accent-soft);border-radius:var(--r);padding:14px 16px;margin-top:16px;display:flex;gap:12px;align-items:flex-start}
.creditcard svg{color:var(--accent);flex-shrink:0;margin-top:2px}
.creditcard p{margin:0;font-size:.92rem;color:var(--ink)}

.scopebar{position:sticky;bottom:14px;z-index:40;border:1px solid var(--line-2);border-radius:12px;
  background:var(--card);box-shadow:var(--shadow);padding:8px 8px 8px 15px;display:flex;gap:6px 14px;
  align-items:center;justify-content:space-between;flex-wrap:wrap}
.scopebar__txt b{font-weight:700;letter-spacing:-.01em;font-size:.9rem}
.scopebar__txt span{display:inline;color:var(--muted);font-size:.78rem;margin-left:8px}
.scopebar .btn{padding:9px 15px;font-size:.86rem}

/* priority rows / roadmap columns (report) */
.prio__row{border:1px solid var(--line);border-radius:var(--r);background:var(--card);padding:16px 18px;display:grid;grid-template-columns:auto 1fr;gap:6px 16px;align-items:start}
.prio__rank{font-family:var(--mono);font-weight:600;font-size:.9rem;color:var(--accent-ink);background:var(--accent);width:30px;height:30px;border-radius:8px;display:grid;place-items:center}
.prio__nm{font-weight:800;letter-spacing:-.01em}
.ptag{font-family:var(--mono);font-size:.64rem;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--line-2);border-radius:6px;padding:4px 9px;color:var(--muted)}
.ptag.lift{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.roadcol{border:1px solid var(--line);border-radius:var(--r);background:var(--card);padding:20px}
.roadcol .k{font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}

@media(prefers-reduced-motion:reduce){.cmeter__fill,.meter__fill{transition:none}}

/* ===========================================================================
   22. SMALL-PHONE TUNING  (≤560px)  — placed LAST so these overrides win the
   cascade over the base component rules above (equal specificity → source
   order decides). Reflows tight multi-column component grids to a single
   readable column and removes fixed minimums that could overflow a 360/390px
   viewport. Additive only — desktop and tablet are untouched.
   =========================================================================== */
@media(max-width:560px){
  /* Grade-experience lens rows (home + grader). Base grid is
     112px | 1fr | auto | auto — too tight below ~360px. Give the lens NAME its
     own full-width line; keep bar + value + confidence on one row. Nothing
     squishes or clips; graphical integrity of the bar length is preserved. */
  .gx-lens{grid-template-columns:1fr auto auto;gap:6px 12px}
  .gx-lens__nm{grid-column:1/-1;white-space:normal}
  /* $50 Deep-Report CTA action column: drop the 240px minimum so the banner
     never forces horizontal overflow on a ~328px content canvas. */
  .gx-cta__act{min-width:0;width:100%}
  /* Console body: trim inner padding so the gauge + rows get more usable width. */
  .gx-console__body{padding-left:14px;padding-right:14px}
  /* Summary subline: don't push itself to the far edge on a narrow row. */
  .gx-summary__fix{margin-left:0}
}
