/* ============================================================================
   Shared header: one nav on every page, with a mobile menu.
   ========================================================================= */
.nav-toggle{display:none;grid-column:2;grid-row:1;justify-self:end;align-items:center;gap:9px;background:none;border:1px solid var(--line);border-radius:8px;padding:9px 13px;font:inherit;font-size:11px;font-weight:900;letter-spacing:.6px;color:var(--ink);cursor:pointer}
.nav-toggle-bars{display:grid;gap:3px}
.nav-toggle-bars i{display:block;width:16px;height:2px;background:var(--ink);border-radius:2px}
.site-header nav a[aria-current="page"]{color:#0a851f}
.site-header nav a[aria-current="page"]:after{transform:scaleX(1)}
@media(max-width:1180px){.site-header nav{gap:clamp(16px,2.4vw,30px);font-size:11px}}
@media(max-width:850px){
  .site-header{position:relative;flex-wrap:wrap}
  .nav-toggle{display:inline-flex}
  .header-link{display:none}
  .site-header nav{display:none}
  .site-header.nav-open nav{display:grid;position:absolute;left:0;right:0;top:100%;z-index:40;gap:0;justify-content:stretch;white-space:normal;background:var(--paper);border-bottom:1px solid var(--line);box-shadow:0 22px 40px rgba(7,18,14,.12)}
  .site-header.nav-open nav a{padding:15px 4px;border-bottom:1px solid var(--line);font-size:13px}
  .site-header.nav-open nav a:after{display:none}
}

/* ============================================================================
   "The Signal Bench" hero. Everything is scoped under .signal-bench and
   prefixed sb- so it cannot collide with the rest of this stylesheet.
   ========================================================================= */
.signal-bench{--sb-sans:var(--font-geist-sans),ui-sans-serif,system-ui,"Helvetica Neue",Arial,sans-serif;--sb-mono:var(--font-geist-mono),ui-monospace,"SF Mono",Menlo,Consolas,monospace;--sb-dark:#06110c;--sb-darker:#030504;position:relative;display:flex;flex-direction:column;min-height:calc(100svh - 136px);overflow:hidden;font-family:var(--sb-sans);background:radial-gradient(1100px 500px at 82% -10%,rgba(185,255,102,.10),transparent 60%),radial-gradient(900px 600px at -8% 110%,rgba(217,255,207,.55),transparent 60%),var(--paper)}
.sb-field{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
.signal-bench>*:not(.sb-field){position:relative;z-index:1}
.sb-grid{flex:1;display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(32px,4.5vw,72px);align-items:center;padding-block:clamp(28px,4vw,56px)}
.sb-main{max-width:720px}
.sb-label{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-family:var(--sb-mono);font-size:11px;letter-spacing:2.2px;color:var(--muted);text-transform:uppercase;margin:0 0 22px}
.sb-dot{width:8px;height:8px;border-radius:50%;background:#24d45a;box-shadow:0 0 0 5px rgba(36,212,90,.13);flex:none}
.sb-idx{color:var(--ink);font-weight:700}
.sb-clock{margin-left:auto;color:var(--ink);font-weight:700;letter-spacing:1.4px}
.sb-heading{margin:0;display:grid;gap:10px}
.sb-kicker{font-size:clamp(24px,2.5vw,38px);font-weight:750;letter-spacing:-.8px;line-height:1.05;min-height:1.05em}
.sb-caret{display:inline-block;width:.55em;height:1em;transform:translateY(.12em);margin-left:2px;background:var(--acid);opacity:.9}
.sb-brand{display:block;white-space:nowrap;font-weight:900;letter-spacing:-2.5px;line-height:.94;font-size:clamp(56px,6.8vw,102px);background:linear-gradient(180deg,#123024 0%,#2b4137 30%,#8fa197 46%,#cfd9d3 50%,#74857c 55%,#12251c 82%,#07120e 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.sb-brand .sb-stop{color:var(--acid);-webkit-text-fill-color:var(--acid);font-style:normal}
.sb-positioning{letter-spacing:-.8px;max-width:660px;color:var(--ink);margin:20px 0 12px;font-size:clamp(20px,2vw,28px);font-weight:800;line-height:1.18}
.sb-lede{color:#56615c;max-width:600px;margin:0;font-size:16px;line-height:1.65}
.sb-actions{display:flex;align-items:center;gap:26px;margin-top:30px;flex-wrap:wrap}
.sb-button{background:var(--ink);color:#fff;border-radius:8px;display:inline-flex;justify-content:space-between;align-items:center;gap:32px;padding:16px 19px;font-size:13px;font-weight:900;cursor:pointer;transition:background .18s ease,color .18s ease,transform .18s ease}
.sb-button span{color:var(--acid);transition:color .18s ease}
.sb-button:hover{background:var(--acid);color:var(--ink);transform:translateY(-2px)}
.sb-button:hover span{color:var(--ink)}
.sb-quiet{border-bottom:1px solid #909992;padding-bottom:5px;font-size:12px;font-weight:800}
.sb-quiet:hover{border-color:var(--ink)}

/* instrument rig */
.sb-rig{justify-self:end;width:100%;max-width:620px}
.sb-rig-frame{background:var(--sb-dark);border:1px solid #26362e;border-radius:16px;overflow:hidden;box-shadow:0 30px 70px rgba(7,18,14,.25),0 2px 0 rgba(255,255,255,.04) inset}
.sb-rig-bar{display:flex;justify-content:space-between;align-items:center;font-family:var(--sb-mono);font-size:9px;letter-spacing:1.2px;color:#8c9d93;background:#111f19;border-bottom:1px solid #28362f;padding:15px 18px}
.sb-online{color:#a3ff8f;display:inline-flex;align-items:center;gap:7px}
.sb-online i{width:7px;height:7px;border-radius:50%;background:#a3ff8f;box-shadow:0 0 8px rgba(163,255,143,.8)}
.sb-screen{position:relative;background:var(--sb-darker);height:400px;overflow:hidden}
.sb-scan{position:absolute;inset:0;pointer-events:none;z-index:5;background:repeating-linear-gradient(180deg,rgba(255,255,255,.028) 0 1px,transparent 1px 3px)}
.sb-vig{position:absolute;inset:0;pointer-events:none;z-index:4;background:radial-gradient(120% 100% at 50% 42%,transparent 55%,rgba(0,0,0,.5) 100%)}
.sb-sgrid{position:absolute;inset:0;pointer-events:none;z-index:1;opacity:.55;background-image:linear-gradient(rgba(185,255,102,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(185,255,102,.05) 1px,transparent 1px);background-size:26px 26px;background-position:center}
.sb-boot{position:absolute;inset:0;padding:22px 24px;font-family:var(--sb-mono);font-size:12px;line-height:1.75;color:#9fe6b0;z-index:3;transition:opacity .5s ease,filter .5s ease}
.sb-bline{white-space:pre}
.sb-bline b{color:#d9ffcf;font-weight:400}
.sb-cursor{display:inline-block;width:8px;height:13px;background:#b9ff66;transform:translateY(2px)}
.sb-boot-tail{position:absolute;top:20px;left:24px;font-family:var(--sb-mono);font-size:11px;letter-spacing:1px;color:#5f8a70;z-index:3;opacity:0;transition:opacity .6s ease .2s}
.sb-boot-tail b{color:#a3ff8f;font-weight:400}
.sb-mark{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);width:min(300px,62%);z-index:2;opacity:0;transition:opacity .4s ease}
.sb-mark .sb-stroke{opacity:0;transform:translateY(10px) scaleY(.7);transform-origin:center;transition:opacity .5s cubic-bezier(.2,.8,.3,1),transform .55s cubic-bezier(.2,.8,.3,1)}
.sb-mark .sb-trace{fill:none;stroke:var(--acid);stroke-width:2.4;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;opacity:.9}
.sb-mark .sb-pad{fill:var(--acid)}
.sb-mark:hover .sb-stroke{transform:translateY(-3px)}
.sb-mark:hover .sb-stroke:nth-of-type(2){transition-delay:.03s}
.sb-mark:hover .sb-stroke:nth-of-type(3){transition-delay:.06s}
.sb-mark:hover .sb-stroke:nth-of-type(4){transition-delay:.09s}
.sb-trig{position:absolute;top:14px;right:18px;font-family:var(--sb-mono);font-size:9px;letter-spacing:1.4px;color:#4f7a60;z-index:3}
.sb-scope{position:absolute;left:0;right:0;bottom:0;z-index:2;border-top:1px solid #16281f;background:linear-gradient(180deg,rgba(6,17,12,0),rgba(3,5,4,.85))}
.sb-wave-row{display:flex;align-items:flex-end;gap:14px;padding:10px 18px 12px}
.sb-wave-read{font-family:var(--sb-mono);font-size:9px;letter-spacing:1.4px;color:#5f8a70;line-height:1.9;white-space:nowrap}
.sb-wave-read b{color:#b9ff66;font-weight:400}
.sb-wave-read-right{text-align:right}
.sb-wave{flex:1;height:56px;display:block;min-width:0}
.sb-tear{display:none;position:absolute;left:0;right:0;height:16%;top:38%;z-index:6;opacity:0;pointer-events:none;background:repeating-linear-gradient(180deg,rgba(185,255,102,.16) 0 2px,rgba(3,5,4,.6) 2px 5px)}

/* tool chips */
.sb-strip{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding:16px;background:#0c1a14;border-top:1px solid #26362e}
.sb-chip{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:center;background:#0c1a14;border:1px solid #26362e;border-radius:9px;padding:12px 13px;color:#e8efe9;opacity:0;transform:translateY(8px);transition:opacity .45s ease,transform .45s ease}
.sb-tag{font-family:var(--sb-mono);font-size:11px;font-weight:700;letter-spacing:.5px}
.sb-meta{line-height:1.3;min-width:0}
.sb-meta b{display:block;font-size:13px;font-weight:800}
.sb-meta small{display:block;font-size:10.5px;color:#7d8f85;font-family:var(--sb-mono);letter-spacing:.3px}
.sb-chip em{grid-column:1/-1;font-style:normal;font-family:var(--sb-mono);font-size:9px;letter-spacing:1.6px;text-transform:uppercase;color:#7d8f85;border-top:1px dashed #223229;margin-top:2px;padding-top:7px}
.sb-chip:hover{border-color:var(--acid)}

/* hero foot */
.sb-foot{display:flex;justify-content:space-between;align-items:center;gap:20px;padding-block:16px;border-top:1px solid var(--line);font-family:var(--sb-mono);font-size:9px;letter-spacing:1.6px;color:var(--muted)}
.sb-down{color:var(--ink);font-weight:700}

/* intro gating: hidden until JS boots; .sb-no-js-fallback restores for no-JS */
.sb-intro .sb-kicker,.sb-intro .sb-brand,.sb-intro .sb-positioning,.sb-intro .sb-lede,.sb-intro .sb-actions,.sb-intro .sb-label,.sb-intro .sb-rig-frame,.sb-intro .sb-foot{opacity:0}
.sb-intro .sb-kicker{transform:translateY(10px)}
.sb-loaded .sb-label,.sb-loaded .sb-foot{opacity:1;transition:opacity .5s ease}
.sb-loaded .sb-kicker{opacity:1;transform:none;transition:opacity .5s ease,transform .5s ease}
.sb-loaded .sb-positioning,.sb-loaded .sb-lede,.sb-loaded .sb-actions{opacity:1;transition:opacity .55s ease .35s}
.sb-loaded .sb-rig-frame{opacity:1;transition:opacity .5s ease .15s}
.sb-kicker-in .sb-brand{opacity:1;transition:opacity .01s ease}

/* assembled / settled states */
.sb-assembled .sb-mark{opacity:1}
.sb-assembled .sb-mark .sb-stroke{opacity:1;transform:none}
.sb-assembled .sb-mark .sb-stroke:nth-of-type(2){transition-delay:.09s}
.sb-assembled .sb-mark .sb-stroke:nth-of-type(3){transition-delay:.18s}
.sb-assembled .sb-mark .sb-stroke:nth-of-type(4){transition-delay:.27s}
.sb-assembled .sb-mark .sb-trace{transition:stroke-dashoffset .7s ease;stroke-dashoffset:0}
.sb-assembled .sb-mark .sb-trace:nth-of-type(2){transition-delay:.09s}
.sb-assembled .sb-mark .sb-trace:nth-of-type(3){transition-delay:.18s}
.sb-assembled .sb-mark .sb-trace:nth-of-type(4){transition-delay:.27s}
.sb-settled .sb-boot{opacity:0;filter:blur(2px)}
.sb-settled .sb-boot-tail{opacity:1}
.sb-assembled .sb-chip{opacity:1;transform:none}
.sb-assembled .sb-chip:nth-child(1){transition-delay:.30s}
.sb-assembled .sb-chip:nth-child(2){transition-delay:.40s}
.sb-assembled .sb-chip:nth-child(3){transition-delay:.50s}
.sb-assembled .sb-chip:nth-child(4){transition-delay:.60s}

@media(prefers-reduced-motion:no-preference){
  .sb-dot{animation:sbPulse 2.4s ease-in-out infinite}
  .sb-online i{animation:sbPulse 2.4s ease-in-out infinite}
  .sb-caret{animation:sbBlink 1s steps(1) infinite}
  .sb-kicker-in .sb-caret{display:none}
  .sb-cursor{animation:sbBlink 1s steps(1) infinite}
  .sb-button:hover span{animation:sbNudge .6s ease infinite}
  .sb-mark .sb-pad{animation:sbPadGlow 3.6s ease-in-out infinite}
  .sb-settled .sb-mark .sb-trace{stroke-dasharray:.16 .84;opacity:.75;animation:sbTraceFlow 5s linear infinite}
  .sb-settled .sb-mark .sb-trace:nth-of-type(2){animation-delay:.5s}
  .sb-settled .sb-mark .sb-trace:nth-of-type(3){animation-delay:1.1s}
  .sb-settled .sb-mark .sb-trace:nth-of-type(4){animation-delay:1.7s}
  .sb-tear{display:block}
  .sb-glitching .sb-screen{animation:sbJitter .26s steps(2)}
  .sb-glitching .sb-brand{animation:sbSlice .26s steps(3);text-shadow:4px 0 rgba(245,126,32,.75),-4px 0 rgba(74,108,199,.75)}
  .sb-glitching .sb-tear{animation:sbTearIn .26s steps(2)}
}
@keyframes sbPulse{0%,100%{box-shadow:0 0 0 4px rgba(36,212,90,.12)}50%{box-shadow:0 0 0 7px rgba(36,212,90,.05)}}
@keyframes sbBlink{50%{opacity:0}}
@keyframes sbNudge{50%{transform:translateY(3px)}}
@keyframes sbPadGlow{0%,100%{opacity:.35}50%{opacity:.85}}
@keyframes sbTraceFlow{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes sbJitter{0%{transform:translateY(0)}30%{transform:translateY(-4px) skewX(-1.5deg)}60%{transform:translateY(3px) skewX(1deg)}100%{transform:none}}
@keyframes sbSlice{0%{clip-path:inset(0 0 0 0)}25%{clip-path:inset(8% 0 52% 0);transform:translateX(-7px)}55%{clip-path:inset(44% 0 18% 0);transform:translateX(6px)}80%{clip-path:inset(0 0 58% 0);transform:translateX(-3px)}100%{clip-path:inset(0 0 0 0);transform:none}}
@keyframes sbTearIn{0%{opacity:0;transform:translateY(-8px)}40%{opacity:1}100%{opacity:0;transform:translateY(6px)}}
@media(prefers-reduced-motion:reduce){
  .signal-bench .sb-caret{display:none}
  .sb-settled .sb-mark .sb-trace{stroke-dasharray:.16 .84;stroke-dashoffset:0;opacity:.75}
  .signal-bench *,.signal-bench *::before,.signal-bench *::after{animation:none!important;transition:none!important}
}
.sb-no-anim *,.sb-no-anim *::before,.sb-no-anim *::after{animation:none!important;transition:none!important}

@media(max-width:1020px){
  .sb-grid{grid-template-columns:1fr}
  .sb-rig{justify-self:stretch}
  .sb-brand{white-space:normal}
}
@media(max-width:520px){
  .signal-bench{min-height:0}
  .sb-actions{align-items:flex-start;flex-direction:column;gap:18px}
  .sb-strip{grid-template-columns:1fr}
  .sb-screen{height:320px}
  .sb-clock{margin-left:0}
  .sb-foot{flex-direction:column;align-items:flex-start;gap:8px}
}

/* ============================================================================
   Mobile layout repairs.
   ========================================================================= */

/* Article pages: the header block (h1, dek, byline, tags) sits outside .shell,
   so on a phone it ran edge to edge with no gutter and a clipped headline. */
@media(max-width:850px){
  .article-page>article>header{padding-inline:16px}
  .article-page>article>header h1{font-size:clamp(32px,8.4vw,54px);line-height:1.02;letter-spacing:-1.5px;overflow-wrap:break-word;hyphens:auto}
  .article-page .article-dek{font-size:17px;line-height:1.5}
  .article-page .article-byline{flex-wrap:wrap;gap:6px 14px}
  .article-page .article-tags{flex-wrap:wrap;gap:8px}
}

/* Signal Bench hero: at phone widths the type was set for a desktop column and
   the instrument panel pushed the rest of the page nearly two screens down. */
@media(max-width:760px){
  .signal-bench{min-height:0}
  .sb-grid{gap:30px;padding-block:26px 18px}
  .sb-brand{font-size:clamp(38px,11.4vw,62px);letter-spacing:-1.6px;line-height:1}
  .sb-kicker{font-size:clamp(19px,5.4vw,26px)}
  .sb-positioning{font-size:clamp(18px,4.8vw,22px);margin-top:16px}
  .sb-lede{font-size:15px}
  .sb-label{gap:8px;letter-spacing:1.6px;margin-bottom:16px}
  .sb-clock{display:none}
  .sb-screen{height:250px}
  .sb-strip{grid-template-columns:repeat(2,1fr);gap:8px;padding:12px}
  .sb-chip{padding:10px}
  .sb-chip .sb-meta b{font-size:12px}
  .sb-chip .sb-meta small{font-size:9.5px}
  .sb-chip em{font-size:8px;letter-spacing:1.2px;padding-top:6px}
  .sb-mark{width:min(210px,58%)}
  .sb-boot{font-size:10.5px;padding:16px}
  .sb-foot{font-size:8px;letter-spacing:1.2px}
}
@media(max-width:420px){
  .sb-strip{grid-template-columns:1fr}
  .sb-screen{height:210px}
  .sb-actions{flex-direction:column;align-items:stretch;gap:14px}
  .sb-button{justify-content:space-between;gap:12px}
  .sb-quiet{align-self:flex-start}
}
@media(max-width:760px){
  .sb-trig{top:12px;right:12px;font-size:8px}
  .sb-boot-tail{top:13px;left:14px;font-size:9.5px}
}
@media(max-width:420px){
  .sb-screen{height:240px}
  .sb-mark{width:min(148px,44%);top:52%}
  .sb-wave-read{font-size:8px;letter-spacing:1px;line-height:1.7}
  .sb-wave{height:42px}
  .sb-wave-row{gap:10px;padding:8px 12px 10px}
  /* full-bleed article image keeps its caption inside the gutter */
  .article-page .article-figure figcaption{padding-inline:16px}
}
@media(max-width:760px){
  /* the trigger readout collides with the boot line on a narrow screen */
  .sb-trig{display:none}
}
@media(max-width:420px) and (min-width:380px){
  .sb-strip{grid-template-columns:repeat(2,1fr)}
}
