*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

    :root {
      --void:          #080B18;
      --void-2:        #0D1126;
      --void-3:        #131830;
      --purple:        #7C3AED;
      --purple-mid:    #9B5CF6;
      --purple-soft:   #C4B5FD;
      --blue:          #00C6D4;
      --blue-soft:     #67DDE8;
      --sage:          #10B981;
      --sage-soft:     #6EE7B7;
      --ghost:         #F1F5F9;
      --muted:         #64748B;
      --muted-small:   #7688A0; /* sub-18px text on --muted only: --muted fails 4.5:1 AA below 18px (4.12:1); this clears 5.41:1. See architecture.md. */
      --subtle:        #1A2040;
      --border-p:      rgba(124,58,237,.22);
      --border-b:      rgba(0,198,212,.18);
      --ff-display:    'Space Grotesk', sans-serif;
      --ff-body:       'Inter', sans-serif;
      --ff-mono:       'JetBrains Mono', monospace;
    }

    html { scroll-behavior: smooth; }

    body {
      background: var(--void);
      color: var(--ghost);
      font-family: var(--ff-body);
      font-size: 16px;
      line-height: 1.6;
      overflow-x: hidden;
    }

    h1,h2,h3,h4 { font-family: var(--ff-display); line-height: 1.12; }

    /* ── UTILS ── */
    .wrap { max-width: 1180px; margin: 0 auto; padding: 0 28px; }

    .tag {
      font-family: var(--ff-mono);
      font-size: 10.5px;
      letter-spacing: .12em;
      text-transform: uppercase;
      padding: 5px 13px;
      border-radius: 2px;
      display: inline-block;
    }
    .tag-blue   { color: var(--blue);       background: rgba(0,198,212,.07);   border: 1px solid rgba(0,198,212,.22);  }
    .tag-purple { color: var(--purple-mid); background: rgba(124,58,237,.07); border: 1px solid rgba(124,58,237,.22); }
    .tag-sage   { color: var(--sage-soft);  background: rgba(16,185,129,.07);  border: 1px solid rgba(16,185,129,.22); }

    /* ── BUTTONS ── */
    .btn {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 12px 24px; border-radius: 3px;
      font-family: var(--ff-display); font-weight: 600; font-size: 14px;
      cursor: pointer; transition: all .2s; text-decoration: none; border: none;
      letter-spacing: .01em;
    }
    .btn-primary {
      background: var(--purple);
      color: #fff;
      box-shadow: 0 0 28px rgba(124,58,237,.4);
    }
    .btn-primary:hover {
      background: #6D28D9;
      box-shadow: 0 0 44px rgba(124,58,237,.6);
      transform: translateY(-1px);
    }
    .btn-blue {
      background: transparent;
      color: var(--blue);
      border: 1px solid rgba(0,198,212,.4);
    }
    .btn-blue:hover { background: rgba(0,198,212,.08); border-color: var(--blue); }
    .btn-ghost {
      background: transparent; color: rgba(241,245,249,.7);
      border: 1px solid rgba(255,255,255,.1);
    }
    .btn-ghost:hover { background: rgba(255,255,255,.05); color: var(--ghost); }
    .btn-lg { padding: 15px 32px; font-size: 15px; }

    /* ── NAV ── */
    nav {
      position: fixed; top: 0; left: 0; right: 0; z-index: 200;
      height: 66px;
      display: flex; align-items: center;
      background: rgba(8,11,24,.82);
      backdrop-filter: blur(18px) saturate(140%);
      border-bottom: 1px solid rgba(255,255,255,.04);
      transition: background .35s;
    }
    nav.scrolled { background: rgba(8,11,24,.97); }

    .nav-inner {
      width: 100%; max-width: 1180px; margin: 0 auto; padding: 0 28px;
      display: flex; align-items: center; justify-content: space-between;
    }

    .logo { display: flex; align-items: center; gap: 11px; text-decoration: none; }
    .logo-text { font-family: var(--ff-display); font-weight: 700; font-size: 19px; color: var(--ghost); letter-spacing: -.01em; }
    .logo-text em { font-style: normal; color: var(--purple-mid); }

    .nav-links { display: flex; align-items: center; gap: 34px; list-style: none; }
    .nav-links a {
      color: rgba(241,245,249,.55); text-decoration: none;
      font-size: 13.5px; font-weight: 500; letter-spacing: .01em;
      transition: color .2s;
    }
    .nav-links a:hover { color: var(--ghost); }

    .nav-cta { display: flex; align-items: center; gap: 14px; }

    .nav-toggle {
      display: none;
      flex-direction: column; justify-content: center; align-items: center; gap: 5px;
      width: 44px; height: 44px; padding: 0;
      background: transparent; border: none; cursor: pointer;
    }
    .nav-toggle span {
      display: block; width: 22px; height: 1.6px;
      background: var(--ghost); border-radius: 2px;
      transition: transform .25s ease, opacity .25s ease;
    }
    .nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.6px) rotate(45deg); }
    .nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
    .nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.6px) rotate(-45deg); }

    /* ── HERO ── */
    .hero {
      position: relative; min-height: 100vh;
      display: flex; align-items: center;
      overflow: hidden; padding-top: 66px;
    }

    #heroCanvas {
      position: absolute; inset: 0; width: 100%; height: 100%;
    }

    .hero-overlay {
      position: absolute; inset: 0; pointer-events: none;
      background:
        radial-gradient(ellipse 65% 55% at 48% 48%, rgba(124,58,237,.13) 0%, transparent 68%),
        radial-gradient(ellipse 40% 50% at 82% 18%, rgba(0,198,212,.06) 0%, transparent 55%),
        linear-gradient(180deg, transparent 55%, var(--void) 100%);
    }

    .hero-content {
      position: relative; z-index: 2;
      max-width: 720px;
      padding: 60px 0 80px;
    }

    .hero-eyebrow {
      display: flex; align-items: center; gap: 14px;
      margin-bottom: 30px;
    }

    .status-dot {
      width: 9px; height: 9px; border-radius: 50%;
      background: var(--sage); flex-shrink: 0; position: relative;
    }
    .status-dot::after {
      content: ''; position: absolute; inset: -5px; border-radius: 50%;
      background: var(--sage); opacity: .25;
      animation: statusPulse 2.2s ease-out infinite;
    }
    @keyframes statusPulse {
      0%   { transform: scale(1); opacity: .25; }
      100% { transform: scale(3.4); opacity: 0; }
    }
    .status-dot.dot-blue { background: var(--blue); }
    .status-dot.dot-blue::after { background: var(--blue); }

    .hero h1 {
      font-size: clamp(46px, 6.5vw, 86px);
      font-weight: 700;
      letter-spacing: -.035em;
      line-height: 1.03;
      margin-bottom: 26px;
    }
    .h1-blue   { color: var(--blue); }
    .h1-purple { color: var(--purple-mid); }

    .hero-sub {
      font-size: 17.5px;
      color: rgba(241,245,249,.58);
      max-width: 520px;
      line-height: 1.78;
      margin-bottom: 42px;
    }

    .hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }

    .hero-badge {
      position: absolute; bottom: 48px; right: 0; z-index: 2;
      display: flex; flex-direction: column; gap: 10px; align-items: flex-end;
    }
    .badge-pill {
      font-family: var(--ff-mono);
      font-size: 11px;
      color: rgba(241,245,249,.45);
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.07);
      padding: 7px 14px;
      border-radius: 2px;
      display: flex; align-items: center; gap: 8px;
    }
    .badge-pill span { color: var(--blue); }
    /* Pixel-node instrument readout (revised 2026-09-07): framed as a
       console/HUD instrument reading rather than a bare small icon, so
       the low pixel resolution reads as "this is a retro readout, by
       design" instead of "small blurry icon losing to the hero's smooth
       vector canvas." Corner-bracket frame is a common HUD/terminal
       motif already implied by the mono status pills elsewhere on the
       page; nothing here is a new color, only new structure. Deliberately
       separate from #heroCanvas's own smooth vector particle system --
       establishes the site's pixel-art language in a low-stakes hero
       spot before the Sentinel/Wire Phantom duality introduces full
       pixel figures. */
    .node-readout {
      display: flex; align-items: center; gap: 12px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.07);
      padding: 8px 14px 8px 8px;
      border-radius: 2px;
    }
    .node-readout-frame {
      position: relative;
      width: 34px; height: 34px; flex-shrink: 0;
      padding: 4px;
    }
    .node-readout-frame::before,
    .node-readout-frame::after,
    .node-readout-frame > .hero-node-canvas {
      box-sizing: border-box;
    }
    /* corner brackets, drawn with two pseudo-elements' box borders so no
       extra markup is needed for four corners */
    .node-readout-frame::before,
    .node-readout-frame::after {
      content: ''; position: absolute; width: 10px; height: 10px;
      border: 1.5px solid var(--blue-soft); opacity: .55;
    }
    .node-readout-frame::before { top: 0; left: 0; border-right: none; border-bottom: none; }
    .node-readout-frame::after  { bottom: 0; right: 0; border-left: none; border-top: none; }
    .hero-node-canvas {
      width: 26px; height: 26px;
      image-rendering: pixelated; image-rendering: crisp-edges;
    }
    .node-readout-text {
      display: flex; flex-direction: column; gap: 3px;
      font-family: var(--ff-mono);
    }
    .node-readout-label {
      font-size: 9.5px; letter-spacing: .1em;
      color: var(--muted-small);
    }
    .node-readout-value {
      font-size: 11px; color: var(--blue-soft);
    }
    .node-readout-cursor {
      display: inline-block; margin-left: 2px;
      animation: nodeCursorBlink 1.1s steps(1) infinite;
    }
    @keyframes nodeCursorBlink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
    @media (prefers-reduced-motion: reduce) {
      .node-readout-cursor { animation: none; opacity: 1; }
    }

    /* ── MARK RESOLUTION TRANSITION (added 2026-09-12) ── */
    /* Scroll-linked bridge between the hero's smooth vector language and
       the Duality Strip's hard pixel-grid language below (see
       architecture.md, "Mark Resolution Transition" and "Hero / Duality
       Art-Language Decision", amended this date). Not a new mascot: the
       same six-point mark as the nav logo, rendered two ways and
       crossfaded via js/mark-resolution.js, which computes the pixel
       state from the identical polygon coordinates so the two can't
       drift apart. No .wrap container: this is a centered icon moment,
       not reading-width content. */
    .mark-transition {
      position: relative; padding: 50px 0 60px;
      display: flex; flex-direction: column; align-items: center; gap: 26px;
      text-align: center;
    }
    .mt-frame { position: relative; width: 200px; height: 200px; }
    .mt-frame svg, .mt-frame canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
    .mt-vector { opacity: calc(1 - var(--mt-progress, 0)); }
    .mt-pixel {
      opacity: var(--mt-progress, 0);
      image-rendering: pixelated; image-rendering: crisp-edges;
    }
    .mt-scan {
      position: absolute; left: -6%; right: -6%; height: 2px;
      top: calc(var(--mt-progress, 0) * 100%);
      background: linear-gradient(90deg, transparent, var(--blue-soft), transparent);
      box-shadow: 0 0 12px 1px rgba(0,198,212,.5);
      pointer-events: none; opacity: .8;
    }
    .mt-readout {
      position: relative; height: 20px; width: 260px;
      font-family: var(--ff-mono); font-size: 11px; letter-spacing: .14em; text-transform: uppercase;
    }
    .mt-readout span { position: absolute; left: 50%; top: 0; transform: translateX(-50%); white-space: nowrap; }
    .mt-readout-top { color: var(--purple-soft); opacity: calc(1 - var(--mt-progress, 0)); }
    .mt-readout-bottom { color: var(--blue-soft); opacity: var(--mt-progress, 0); }

    /* Native scroll-driven path, same @supports gate and dual-path
       philosophy as .reveal above: the plain values on .mt-vector/
       .mt-pixel/.mt-readout-* are the js/mark-resolution.js fallback;
       this block overrides opacity where the browser supports it. */
    @supports (animation-timeline: view()) {
      .mt-vector, .mt-pixel, .mt-readout-top, .mt-readout-bottom {
        animation-timing-function: linear; animation-fill-mode: both;
        animation-timeline: view(); animation-range: cover 0% cover 90%;
      }
      .mt-vector          { animation-name: mtFadeOut; opacity: 1; }
      .mt-pixel           { animation-name: mtFadeIn;  opacity: 0; }
      .mt-readout-top     { animation-name: mtFadeOut; opacity: 1; }
      .mt-readout-bottom  { animation-name: mtFadeIn;  opacity: 0; }
    }
    @keyframes mtFadeOut { from { opacity: 1; } to { opacity: 0; } }
    @keyframes mtFadeIn  { from { opacity: 0; } to { opacity: 1; } }

    @media (prefers-reduced-motion: reduce) {
      .mt-vector, .mt-readout-top   { opacity: 0 !important; animation: none !important; }
      .mt-pixel, .mt-readout-bottom { opacity: 1 !important; animation: none !important; }
      .mt-scan { display: none; }
    }
    @media (max-width: 560px) {
      .mark-transition { padding: 36px 0 42px; }
      .mt-frame { width: 150px; height: 150px; }
    }

    /* #intel's leading edge overrides the shared `.section` top padding
       (108px) specifically for this seam. `.mark-transition` is already a
       bespoke, non-standard section (no shared rhythm to protect here,
       unlike Services/Process/Why/Recognition, which keep the standard
       108px on both sides), so trimming just the top of the section that
       follows it doesn't touch that rhythm elsewhere. `#intel`'s own
       bottom padding (into the Stats Bar) stays the standard 108px,
       untouched, since only the top longhand is overridden here. Verified
       on the live page (not a preview estimate): readout-to-"Signal
       active" gap measured 168px -> 116px at 1440px width. See
       architecture.md "Mark Resolution Transition" and changelog.md,
       2026-09-12, for the full measurement. */
    #intel { padding-top: 56px; }


    /* ── STATS BAR ── */
    .stats-bar {
      background: var(--void-2);
      border-top: 1px solid rgba(255,255,255,.04);
      border-bottom: 1px solid rgba(255,255,255,.05);
    }
    .stats-row {
      display: grid; grid-template-columns: repeat(4,1fr);
    }
    .stat-cell {
      padding: 28px 32px;
      border-right: 1px solid rgba(255,255,255,.05);
    }
    .stat-cell:last-child { border-right: none; }
    .stat-num {
      font-family: var(--ff-mono);
      font-size: 30px; font-weight: 500;
      color: var(--blue); line-height: 1;
      margin-bottom: 6px;
    }
    .stat-lbl { font-size: 12px; color: #7C8CA3; line-height: 1.45; max-width: 140px; }

    /* ── SECTION BASE ── */
    .section { padding: 108px 0; }
    .section-alt { background: var(--void-2); border-top: 1px solid rgba(255,255,255,.04); border-bottom: 1px solid rgba(255,255,255,.04); }

    .sh { margin-bottom: 62px; }
    .sh h2 {
      font-size: clamp(30px, 4vw, 52px);
      font-weight: 700; letter-spacing: -.028em;
      margin: 16px 0 18px;
    }
    .sh p { font-size: 16.5px; color: rgba(241,245,249,.56); max-width: 520px; line-height: 1.8; }

    /* ── SERVICES ── */
    .svc-grid {
      display: grid; grid-template-columns: repeat(3, 1fr);
      gap: 2px; background: rgba(255,255,255,.04);
      border: 1px solid rgba(255,255,255,.06);
    }
    .svc-card {
      background: var(--void-2); padding: 46px 36px;
      position: relative; overflow: hidden;
      transition: background .25s;
    }
    .svc-card:hover { background: var(--void-3); }

    .svc-card::before {
      content: ''; position: absolute;
      top: 0; left: 0; right: 0; height: 2px;
      opacity: .68; transition: opacity .3s;
    }
    .svc-card:hover::before { opacity: 1; }
    .svc-card.c-blue::before   { background: linear-gradient(90deg, var(--blue), transparent 70%); }
    .svc-card.c-purple::before { background: linear-gradient(90deg, var(--purple), transparent 70%); }
    .svc-card.c-sage::before   { background: linear-gradient(90deg, var(--sage), transparent 70%); }

    .svc-n {
      font-family: var(--ff-mono); font-size: 11px;
      color: var(--muted-small); letter-spacing: .1em; margin-bottom: 28px;
    }
    .svc-icon { width: 48px; height: 48px; margin-bottom: 20px; }
    .svc-card h3 { font-size: 22px; font-weight: 700; letter-spacing: -.02em; margin-bottom: 13px; }
    .svc-card > p { font-size: 13.5px; color: rgba(241,245,249,.57); line-height: 1.8; margin-bottom: 28px; }

    .svc-feat { list-style: none; display: flex; flex-direction: column; gap: 9px; }
    .svc-feat li {
      display: flex; align-items: flex-start; gap: 10px;
      font-size: 13px; color: rgba(241,245,249,.72);
    }
    .svc-dot { width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0; margin-top: 7px; }
    .c-blue   .svc-dot { background: var(--blue); }
    .c-purple .svc-dot { background: var(--purple-mid); }
    .c-sage   .svc-dot { background: var(--sage); }

    /* ── PHANTOM EDGE ── */
    .pe-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; }

    .device-wrap { display: flex; justify-content: center; align-items: center; }

    .spec-table { margin-top: 36px; display: flex; flex-direction: column; }
    .spec-row {
      display: flex; justify-content: space-between; align-items: center;
      padding: 13px 0; border-bottom: 1px solid rgba(255,255,255,.05);
    }
    .spec-k { font-family: var(--ff-mono); font-size: 11px; color: #7C8CA3; letter-spacing: .08em; text-transform: uppercase; }
    .spec-v { font-family: var(--ff-mono); font-size: 12.5px; color: var(--sage-soft); }

    /* ── PROCESS ── */
    .process-grid {
      display: grid; grid-template-columns: repeat(3,1fr);
      gap: 2px; background: rgba(255,255,255,.04);
    }
    .process-step {
      background: var(--void); padding: 46px 36px;
      position: relative;
    }
    .ps-phase {
      font-family: var(--ff-mono); font-size: 10px;
      letter-spacing: .14em; text-transform: uppercase;
      color: var(--muted-small); margin-bottom: 22px;
      display: flex; align-items: center; gap: 10px;
    }
    .ps-phase::before {
      content: ''; flex: 1; height: 1px;
      background: linear-gradient(90deg, transparent, rgba(255,255,255,.08));
    }
    .ps-title { font-size: 21px; font-weight: 700; margin-bottom: 13px; color: var(--ghost); }
    .ps-desc { font-size: 13.5px; color: rgba(241,245,249,.5); line-height: 1.8; }

    .ps-num {
      font-family: var(--ff-mono);
      font-size: 56px; font-weight: 500;
      color: rgba(124,58,237,.12);
      position: absolute; bottom: 24px; right: 28px;
      line-height: 1; user-select: none;
    }

    /* ── WHY ── */
    .why-grid { display: grid; grid-template-columns: repeat(2,1fr); gap: 20px; }
    .why-card {
      padding: 34px 32px;
      border: 1px solid rgba(255,255,255,.06);
      background: linear-gradient(145deg, var(--void-2), var(--void));
      transition: border-color .25s;
      border-radius: 2px;
    }
    .why-card:hover { border-color: rgba(124,58,237,.28); }
    .why-card h3 { font-size: 17px; font-weight: 600; margin-bottom: 10px; }
    .why-card p  { font-size: 13.5px; color: rgba(241,245,249,.52); line-height: 1.78; }

    /* ── RECOGNITION (2026-08-27) ── */
    /* Editorial, discretionary recognition list; no scoring, no logo
       requirement from the honoree. See business.md "Recognition." */
    .recog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
    .recog-card {
      padding: 32px 28px;
      border: 1px solid rgba(255,255,255,.06);
      background: linear-gradient(145deg, var(--void-2), var(--void));
      border-radius: 2px;
      transition: border-color .25s;
    }
    .recog-card:hover { border-color: rgba(16,185,129,.32); }
    .recog-mark { width: 40px; height: 40px; margin-bottom: 18px; }
    .recog-card h4 { font-size: 16px; font-weight: 600; letter-spacing: -.01em; margin-bottom: 8px; }
    .recog-citation { font-size: 13px; color: rgba(241,245,249,.56); line-height: 1.72; margin-bottom: 14px; }
    .recog-date { font-family: var(--ff-mono); font-size: 10px; color: var(--muted-small); letter-spacing: .08em; text-transform: uppercase; }
    .recog-empty {
      grid-column: 1 / -1;
      display: flex; flex-direction: column; align-items: center; gap: 16px;
      font-family: var(--ff-mono); font-size: 13px; color: #7C8CA3;
      text-align: center; padding: 44px 0;
      border: 1px dashed rgba(255,255,255,.09); border-radius: 2px;
    }
    .recog-empty p { margin: 0; }
    .recog-empty-mark { opacity: .6; }

    /* ── INVESTOR STRIP ── */
    .investor-strip {
      background: linear-gradient(135deg, rgba(124,58,237,.08) 0%, rgba(0,198,212,.05) 100%);
      border-top: 1px solid rgba(124,58,237,.14);
      border-bottom: 1px solid rgba(0,198,212,.1);
      padding: 72px 0;
    }
    .inv-inner { display: grid; grid-template-columns: 1.4fr 1fr; gap: 80px; align-items: center; }
    .inv-metrics { display: flex; flex-direction: column; gap: 0; }
    .inv-row {
      display: flex; justify-content: space-between; align-items: baseline;
      padding: 18px 0; border-bottom: 1px solid rgba(255,255,255,.05);
    }
    .inv-row:first-child { border-top: 1px solid rgba(255,255,255,.05); }
    .inv-k { font-size: 13.5px; color: rgba(241,245,249,.55); }
    .inv-v { font-family: var(--ff-mono); font-size: 15px; color: var(--blue); }



    /* ── CTA ── */
    .cta-section {
      position: relative; overflow: hidden;
      padding: 120px 0;
      text-align: center;
    }
    .cta-section::before {
      content: ''; position: absolute; inset: 0;
      background: radial-gradient(ellipse 70% 90% at 50% 50%, rgba(124,58,237,.09) 0%, transparent 70%);
      pointer-events: none;
    }
    .cta-section h2 {
      font-size: clamp(32px, 4.5vw, 60px);
      font-weight: 700; letter-spacing: -.032em;
      margin: 18px 0 18px;
    }
    .cta-section p { font-size: 16.5px; color: rgba(241,245,249,.56); max-width: 480px; margin: 0 auto 42px; line-height: 1.75; }

    .form-wrap { max-width: 540px; margin: 0 auto; display: flex; flex-direction: column; gap: 14px; }
    .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
    .f-input {
      width: 100%;
      background: var(--void-2); border: 1px solid rgba(255,255,255,.1);
      color: var(--ghost); padding: 13px 17px;
      font-family: var(--ff-body); font-size: 14.5px;
      outline: none; border-radius: 2px;
      transition: border-color .2s;
      appearance: none;
    }
    .f-input::placeholder { color: var(--muted-small); }
    .f-input:focus { border-color: rgba(124,58,237,.5); background: var(--void-3); }
    textarea.f-input { resize: vertical; }
    select.f-input { cursor: pointer; }

    .f-field { width: 100%; }

    /* Visually hidden but present for screen readers — used for form
       labels that are visually replaced by placeholder text so the
       layout doesn't change, but a real programmatic label still exists. */
    .sr-only {
      position: absolute; width: 1px; height: 1px;
      padding: 0; margin: -1px; overflow: hidden;
      clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
    }

    /* Skip link: hidden until keyboard-focused, lets a keyboard/screen
       reader user jump past the fixed nav and full-viewport hero canvas
       straight to the page's actual content. */
    .skip-link {
      position: fixed; top: -60px; left: 12px; z-index: 999;
      background: var(--purple); color: #fff;
      font-family: var(--ff-display); font-weight: 600; font-size: 13.5px;
      padding: 10px 18px; border-radius: 2px; text-decoration: none;
      transition: top .2s ease;
    }
    .skip-link:focus { top: 12px; }

    .form-note {
      font-family: var(--ff-mono); font-size: 11px;
      color: rgba(100,116,139,.6);
      text-align: center; margin-top: 4px;
    }

    /* ── FOOTER ── */
    footer {
      background: var(--void);
      border-top: 1px solid rgba(255,255,255,.06);
      padding: 64px 0 44px;
    }
    .footer-inner {
      display: grid; grid-template-columns: 2fr 1fr 1fr;
      gap: 48px; margin-bottom: 56px;
    }
    .footer-brand p {
      font-size: 13.5px; color: var(--muted-small);
      margin-top: 18px; line-height: 1.72; max-width: 270px;
    }
    .fc-title {
      font-family: var(--ff-mono); font-size: 10.5px;
      letter-spacing: .1em; text-transform: uppercase;
      color: rgba(100,116,139,.6); margin-bottom: 22px;
    }
    .fc-links { list-style: none; display: flex; flex-direction: column; gap: 12px; }
    .fc-links a { color: rgba(241,245,249,.62); text-decoration: none; font-size: 13.5px; transition: color .2s; }
    .fc-links a:hover { color: var(--ghost); }
    .footer-bottom {
      padding-top: 30px; border-top: 1px solid rgba(255,255,255,.05);
      display: flex; justify-content: space-between; align-items: center;
    }
    .footer-bottom p { font-size: 12.5px; color: #7C8CA3; }
    .ops-badge { display: flex; align-items: center; gap: 7px; }
    .ops-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--sage); animation: statusPulse 2.8s ease-out infinite; }

    /* ── ANIMATIONS ── */
    .reveal {
      opacity: 0; transform: translateY(22px);
      transition: opacity .65s ease, transform .65s ease;
    }
    .reveal.in { opacity: 1; transform: translateY(0); }

    /* Native CSS scroll-driven reveal (author-approved 2026-09-04, see
       docs/creative_direction/direction_2026-09-04.md and architecture.md
       "Reveal-on-Scroll Pattern"). Same choreography as the
       IntersectionObserver/.in path above, driven by the browser instead
       of js/main.js where `animation-timeline: view()` is supported
       (Chromium/Safari as of writing; Firefox stable falls through to the
       rule above untouched). A running CSS Animation's opacity/transform
       values override any plain-rule value for the same property on the
       same element, so this doesn't fight `.reveal.in` above during normal
       scrolling. js/main.js's IntersectionObserver and 3.5s force-reveal
       fallback keep running unconditionally in every browser as a safety
       net (e.g. screenshot/crawler pipelines that never scroll); that
       fallback cancels this animation (`el.style.animation = 'none'`)
       before adding `.in`, so it still works here too. */
    @supports (animation-timeline: view()) {
      .reveal {
        animation-name: reveal-in;
        animation-duration: auto;
        animation-timing-function: linear;
        animation-fill-mode: both;
        animation-timeline: view();
        animation-range: entry 0% entry 45%;
      }
      .reveal[data-stagger="1"] { animation-range: entry 6% entry 51%; }
      .reveal[data-stagger="2"] { animation-range: entry 12% entry 57%; }
      @keyframes reveal-in {
        from { opacity: 0; transform: translateY(22px); }
        to   { opacity: 1; transform: translateY(0); }
      }
    }

    ::-webkit-scrollbar { width: 4px; }
    ::-webkit-scrollbar-track { background: var(--void); }
    ::-webkit-scrollbar-thumb { background: var(--subtle); border-radius: 2px; }

    /* ── RESPONSIVE ── */
    @media (max-width: 1000px) {
      .pe-grid, .inv-inner { grid-template-columns: 1fr; gap: 48px; }
      .svc-grid { grid-template-columns: 1fr 1fr; }
      .svc-card:last-child { grid-column: span 2; }
      .recog-grid { grid-template-columns: 1fr 1fr; }
    }
    @media (max-width: 820px) {
      .svc-grid { grid-template-columns: 1fr; }
      .svc-card:last-child { grid-column: span 1; }
      .process-grid, .why-grid, .recog-grid { grid-template-columns: 1fr; }
      .stats-row { grid-template-columns: 1fr 1fr; }
      .footer-inner { grid-template-columns: 1fr; }

      .nav-toggle { display: flex; }
      .nav-links {
        position: fixed; top: 66px; left: 0; right: 0; z-index: 200;
        flex-direction: column; align-items: flex-start; gap: 0;
        background: var(--void);
        border-bottom: 1px solid rgba(255,255,255,.06);
        max-height: 0; overflow: hidden;
        transition: max-height .3s ease;
      }
      .nav-links.open { max-height: calc(100vh - 66px); overflow-y: auto; }
      .nav-links li { width: 100%; }
      .nav-links a {
        display: block; width: 100%; padding: 16px 28px;
        border-bottom: 1px solid rgba(255,255,255,.04);
        font-size: 15px;
      }
      .nav-cta-btn { display: none; }
    }
    @media (max-width: 560px) {
      .stats-row { grid-template-columns: 1fr; }
      .form-row { grid-template-columns: 1fr; }
      .footer-inner { grid-template-columns: 1fr; }
      .hero h1 { font-size: 40px; }
      .hero-badge { display: none; }
    }

    /* -- DUALITY STRIP: Sentinel vs. Wire Phantom --
       See claude.md, "Amendment, 2026-09-07," and architecture.md
       "Sentinel / Wire Phantom Duality." Replaces the first ship's
       cramped in-card rail (author feedback: too tucked in, no room to
       breathe, felt bolted-on) with a dedicated full-width stage above
       the briefing card, giving each figure real space for idle motion.
       The Sentinel's state still binds to the same isElevated() signal
       via js/duality.js listening for js/news.js's 'sp:briefing-rendered'
       event and the .intel-card[data-elevated] attribute -- narrating
       real content stays the point, only the container changed. */
    .duality-strip {
      margin: 0 0 40px;
      border: 1px solid var(--subtle); border-radius: 3px;
      background: linear-gradient(180deg, var(--void-2), var(--void-3) 130%);
      padding: 28px clamp(18px, 4vw, 40px);
      position: relative; overflow: hidden;
    }
    .duality-row {
      display: grid; grid-template-columns: 1fr auto 1fr; align-items: center;
      gap: 24px;
    }
    .duality-strip::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
      background: linear-gradient(90deg, var(--sage), var(--muted-small) 50%, var(--purple)); opacity: .75;
    }
    .duality-side {
      display: flex; flex-direction: column; align-items: center; gap: 10px;
      min-width: 0;
    }
    .duality-stage {
      width: 100%; max-width: 148px; aspect-ratio: 1 / 1.15; position: relative;
    }
    .duality-stage canvas {
      position: absolute; inset: 0; width: 100%; height: 100%;
      image-rendering: pixelated; image-rendering: crisp-edges;
    }
    .duality-label {
      display: flex; align-items: center; gap: 7px;
      font-family: var(--ff-mono); font-size: 10.5px; letter-spacing: .07em; text-transform: uppercase;
      color: var(--muted-small); text-align: center;
    }
    .duality-dot { width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0; position: relative; }
    .duality-dot::after { content: ''; position: absolute; inset: -4px; border-radius: 50%; opacity: .25; animation: statusPulse 2.2s ease-out infinite; }
    .duality-side-sentinel .duality-label { color: var(--blue-soft); }
    .duality-side-sentinel .duality-dot { background: var(--blue); box-shadow: 0 0 6px var(--blue); }
    .duality-side-sentinel .duality-dot::after { background: var(--blue); }
    .duality-side-phantom .duality-label { color: var(--purple-soft); }
    .duality-side-phantom .duality-dot { background: var(--purple-mid); box-shadow: 0 0 6px var(--purple-mid); }
    .duality-side-phantom .duality-dot::after { background: var(--purple-mid); }
    [data-elevated-strip="1"] .duality-side-sentinel .duality-label { color: var(--purple-soft); }
    [data-elevated-strip="1"] .duality-side-sentinel .duality-dot { background: var(--purple-mid); box-shadow: 0 0 7px var(--purple-mid); }
    [data-elevated-strip="1"] .duality-side-sentinel .duality-dot::after { background: var(--purple-mid); animation-duration: 1.3s; }

    .duality-mid {
      display: flex; flex-direction: column; align-items: center;
      padding: 0 4px; text-align: center;
      min-width: 180px;
      position: relative;
    }
    /* Signal lane + Network Rack (restructured 2026-09-07): the strip now
       reads as a scene rather than two characters facing a caption -- the
       rack is the contested asset in the center; the Phantom attacks it,
       the Sentinel defends it. The lane canvas (js/signal-lane.js) spans
       the full height of .duality-mid as a background layer, carrying two
       half-lane animations (attack: Phantom edge -> rack center; defense:
       rack center -> Sentinel edge), so events visually converge on the
       rack stage sitting in front of it. Deliberately restrained for an
       enterprise audience: exactly one attack/defense pair in flight at a
       time, small technical labels, and clean technical resolve/stress
       states on the rack -- never an impact, crack, or "damage" visual.
       See architecture.md "Network Rack" and "Signal Lane". */
    /* The lane canvas is sized/positioned to match the rack stage's own
       box (not the full .duality-mid column, which also includes the
       caption) so traveling glyphs converge on the rack's vertical
       center rather than passing behind the caption text. */
    .duality-lane {
      position: absolute; top: 0; left: 0; right: 0;
      height: 166px; z-index: 0;
    }
    .duality-lane canvas {
      position: absolute; inset: 0; width: 100%; height: 100%;
      image-rendering: pixelated; image-rendering: crisp-edges;
    }
    .duality-rack-stage {
      width: 100%; max-width: 118px; aspect-ratio: 20 / 28; position: relative;
      z-index: 1; margin-bottom: 20px;
    }
    .duality-rack-stage canvas {
      position: absolute; inset: 0; width: 100%; height: 100%;
      image-rendering: pixelated; image-rendering: crisp-edges;
    }
    .duality-mid p {
      font-family: var(--ff-mono); font-size: 11px; color: var(--muted-small);
      max-width: 170px; line-height: 1.6; margin: 0;
      position: relative; z-index: 1;
      background: linear-gradient(180deg, var(--void-2), var(--void-3) 130%);
    }
    @media (max-width: 760px) {
      .duality-row { grid-template-columns: 1fr; gap: 20px; }
      .duality-mid { flex-direction: column; padding: 20px 0; min-width: 0; }
      .duality-rack-stage { max-width: 96px; margin: 0 0 20px; }
      .duality-lane { height: 135px; }
    }
    @media (prefers-reduced-motion: reduce) {
      .duality-dot::after { animation: none; }
    }

    /* ── INTELLIGENCE BRIEFING ── */
    .intel-signal {
      display: flex; align-items: center; gap: 10px;
      font-family: var(--ff-mono); font-size: 11px; color: var(--blue-soft);
      letter-spacing: .08em; text-transform: uppercase; margin-bottom: 16px;
    }
    .intel-wrap { min-height: 80px; }
    .intel-loading, .intel-empty {
      font-family: var(--ff-mono); font-size: 13px; color: var(--muted-small);
      padding: 32px 0;
    }
    .intel-card {
      border: 1px solid rgba(255,255,255,.07);
      background: linear-gradient(145deg, var(--void-2), var(--void));
      border-radius: 2px; padding: 40px 40px 34px;
      position: relative; overflow: hidden;
    }
    .intel-card::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
      background: linear-gradient(90deg, var(--blue), var(--purple-mid) 45%, var(--sage) 78%, transparent 96%);
      animation: intelWire 3.2s ease-in-out infinite;
    }
    @keyframes intelWire {
      0%, 100% { opacity: .55; }
      50%      { opacity: 1; }
    }
    .intel-meta {
      display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
      font-family: var(--ff-mono); font-size: 11px; color: var(--muted-small);
      letter-spacing: .06em; text-transform: uppercase; margin-bottom: 18px;
    }
    .intel-freq { display: inline-flex; align-items: flex-end; gap: 2px; height: 11px; }
    .intel-freq i {
      display: block; width: 2px; border-radius: 1px;
      transform-origin: bottom; animation: intelFreq 1.1s ease-in-out infinite;
    }
    .intel-freq i:nth-child(1) { height: 5px;  background: var(--blue);       animation-delay: 0s;   }
    .intel-freq i:nth-child(2) { height: 11px; background: var(--purple-mid); animation-delay: .15s; }
    .intel-freq i:nth-child(3) { height: 7px;  background: var(--sage);       animation-delay: .3s;  }
    @keyframes intelFreq {
      0%, 100% { transform: scaleY(.4); opacity: .5; }
      50%      { transform: scaleY(1);  opacity: 1;  }
    }
    .intel-severity {
      font-family: var(--ff-mono); font-size: 10px; letter-spacing: .08em; text-transform: uppercase;
      color: var(--purple-soft); background: rgba(124,58,237,.1); border: 1px solid rgba(124,58,237,.28);
      padding: 3px 9px; border-radius: 2px; display: inline-flex; align-items: center; gap: 5px;
    }
    .intel-severity::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: var(--purple-mid); flex-shrink: 0; }

    /* Category glyph: one of a small fixed set selected from real tags at
       render time (js/news.js glyphKeyFor()), not generated per story.
       Bespoke art per render was considered and rejected: it doesn't
       reflow at narrow widths and quality would vary story to story.
       See lessons.md. */
    .intel-title-row { display: flex; align-items: flex-start; gap: 13px; margin-bottom: 14px; }
    .intel-glyph { width: 24px; height: 24px; flex-shrink: 0; margin-top: 3px; }
    .intel-card h3 { font-size: 26px; font-weight: 700; letter-spacing: -.02em; margin: 0; }
    .intel-dek { font-size: 15px; color: rgba(241,245,249,.62); line-height: 1.75; margin-bottom: 20px; }
    .intel-body p { font-size: 14.5px; color: rgba(241,245,249,.56); line-height: 1.85; margin-bottom: 14px; }
    .intel-body p:last-child { margin-bottom: 0; }
    .intel-updates {
      margin-top: 22px; padding: 14px 18px; border-left: 2px solid var(--blue);
      background: rgba(255,255,255,.02);
    }
    .intel-update {
      font-size: 13px; color: rgba(241,245,249,.6); line-height: 1.7;
    }
    .intel-update + .intel-update { margin-top: 10px; }
    .intel-update time {
      display: block; font-family: var(--ff-mono); font-size: 10.5px; color: var(--blue-soft);
      letter-spacing: .06em; text-transform: uppercase; margin-bottom: 3px;
    }
    .intel-sources {
      margin-top: 26px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.06);
      display: flex; flex-wrap: wrap; gap: 10px 20px;
    }
    .intel-sources a {
      font-family: var(--ff-mono); font-size: 11px; color: var(--blue-soft);
      text-decoration: none; opacity: .8;
    }
    .intel-sources a:hover { opacity: 1; text-decoration: underline; }
    .intel-archive-link { margin-top: 32px; }

    .archive-list { display: flex; flex-direction: column; gap: 24px; }
    .archive-list .intel-card { margin: 0; }
    .archive-more { display: flex; justify-content: center; padding-top: 8px; }
    .page-header { padding: 148px 0 40px; }
    .page-header h1 { font-size: clamp(32px, 4.5vw, 54px); font-weight: 700; letter-spacing: -.03em; margin: 16px 0 14px; }
    .page-header p { font-size: 16px; color: rgba(241,245,249,.56); max-width: 520px; line-height: 1.8; }
    .back-link { font-family: var(--ff-mono); font-size: 12px; color: var(--blue); text-decoration: none; display: inline-flex; align-items: center; gap: 6px; margin-bottom: 18px; }
    .back-link:hover { text-decoration: underline; }

    /* ── THREAT INTEL FEED (timeline + charts, 2026-08-27) ── */
    .intel-signal-strip { margin-top: 20px; }
    .intel-signal-strip:empty { display: none; }
    .signal-strip-inner {
      display: flex; align-items: center; gap: 30px; flex-wrap: wrap;
      padding: 18px 26px; border: 1px solid rgba(255,255,255,.06);
      background: rgba(255,255,255,.015); border-radius: 2px;
    }
    .signal-spark { flex-shrink: 0; line-height: 0; }
    .signal-readout { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
    .signal-stat { display: flex; flex-direction: column; gap: 4px; }
    .signal-stat b { font-family: var(--ff-mono); font-size: 16px; font-weight: 500; color: var(--blue-soft); line-height: 1; }
    .signal-stat span { font-family: var(--ff-mono); font-size: 10px; color: var(--muted-small); letter-spacing: .08em; text-transform: uppercase; }

    .feed-panel {
      border: 1px solid rgba(255,255,255,.07);
      background: linear-gradient(145deg, var(--void-2), var(--void));
      border-radius: 2px; padding: 40px 40px 36px;
      position: relative; overflow: hidden;
    }
    .feed-panel::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
      background: linear-gradient(90deg, var(--blue), var(--purple-mid) 45%, var(--sage) 78%, transparent 96%);
      opacity: .7;
    }
    .feed-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 26px; flex-wrap: wrap; margin-bottom: 34px; }
    .feed-head h2 { font-size: 21px; font-weight: 700; letter-spacing: -.02em; margin-top: 8px; }
    .feed-stats { display: flex; gap: 32px; flex-wrap: wrap; }
    .feed-stat b { display: block; font-family: var(--ff-mono); font-size: 22px; font-weight: 500; color: var(--blue-soft); line-height: 1; margin-bottom: 6px; }
    .feed-stat span { font-family: var(--ff-mono); font-size: 10.5px; color: var(--muted-small); letter-spacing: .08em; text-transform: uppercase; }

    .feed-timeline-wrap { margin-bottom: 38px; }
    .feed-timeline { width: 100%; height: auto; display: block; overflow: visible; }
    .feed-axis-label { font-family: var(--ff-mono); font-size: 9px; letter-spacing: .05em; fill: var(--muted-small); }
    .feed-axis-now { fill: var(--blue-soft); }
    .feed-marker { cursor: default; }
    .feed-marker:focus { outline: none; }
    .feed-marker-dot { transition: filter .15s; }
    .feed-marker:hover .feed-marker-dot, .feed-marker:focus .feed-marker-dot { filter: brightness(1.35); }

    .feed-charts-grid { display: grid; grid-template-columns: 1.3fr 1fr; gap: 44px; }
    .feed-chart-title { font-family: var(--ff-mono); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted-small); margin-bottom: 18px; }
    .feed-chart-caption { font-family: var(--ff-mono); font-size: 11px; color: var(--muted-small); margin-top: 12px; }
    .feed-frequency { width: 100%; height: auto; display: block; overflow: visible; }
    .feed-bar-hit { fill: transparent; }

    .feed-tags { display: flex; flex-direction: column; gap: 13px; }
    .feed-tag-row { display: grid; grid-template-columns: 108px 1fr 30px; align-items: center; gap: 12px; }
    .feed-tag-label { font-family: var(--ff-mono); font-size: 11.5px; color: rgba(241,245,249,.68); text-transform: uppercase; letter-spacing: .03em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .feed-tag-track { height: 6px; border-radius: 1px; background: rgba(0,198,212,.08); position: relative; }
    .feed-tag-fill { position: absolute; top: 0; left: 0; height: 100%; border-radius: 1px; background: var(--blue); }
    .feed-tag-count { font-family: var(--ff-mono); font-size: 11px; color: var(--blue-soft); text-align: right; }

    .feed-empty-note { font-family: var(--ff-mono); font-size: 12.5px; color: var(--muted-small); padding: 18px 0; }

    .feed-tooltip {
      position: fixed; z-index: 60; pointer-events: none;
      background: var(--void-2); border: 1px solid rgba(255,255,255,.1);
      padding: 10px 13px; border-radius: 2px;
      font-family: var(--ff-mono); font-size: 11.5px; color: var(--ghost); line-height: 1.65;
      max-width: 260px; opacity: 0; transform: translateY(4px);
      transition: opacity .12s, transform .12s;
    }
    .feed-tooltip.visible { opacity: 1; transform: translateY(0); }
    .feed-tooltip .ft-date {
      display: block; color: var(--blue-soft); font-size: 10px;
      letter-spacing: .06em; text-transform: uppercase; margin-bottom: 5px;
    }
    .feed-tooltip .ft-item { display: block; }
    .feed-tooltip .ft-item + .ft-item { margin-top: 3px; }

    @media (max-width: 820px) {
      .feed-charts-grid { grid-template-columns: 1fr; gap: 34px; }
    }
    @media (max-width: 560px) {
      .feed-panel { padding: 30px 22px 28px; }
      .signal-strip-inner { padding: 16px 18px; gap: 18px; }
      .feed-tag-row { grid-template-columns: 88px 1fr 28px; }
      .feed-stats { gap: 22px; }
    }


    @media (max-width: 560px) {
      .intel-card { padding: 30px 24px 26px; }
    }

    @media (prefers-reduced-motion: reduce) {
      .reveal { opacity: 1; transform: none; }
      * { animation-duration: .01ms !important; transition-duration: .01ms !important; }
      /* The scroll-driven `.reveal` animation above is progress-based, not
         time-based, so forcing animation-duration to .01ms doesn't stop
         its opacity/transform motion as scroll position changes. Kill it
         outright so `.reveal { opacity: 1; transform: none; }` above
         applies undisturbed, same as it always has for the JS/.in path. */
      @supports (animation-timeline: view()) {
        .reveal { animation: none !important; }
      }
    }

/* ══════════════ TWO QUARTERS ON THE WIRE (quarterly major-events timeline, #intel) ══════════════ */
.quarters-panel {
  background: linear-gradient(180deg, var(--void-2), var(--void-3) 130%);
  border: 1px solid var(--subtle); border-radius: 3px;
  padding: 36px clamp(18px, 4vw, 40px) 30px; margin: 40px 0; position: relative; overflow: hidden;
}
.quarters-panel::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg, var(--blue), var(--purple) 50%, var(--sage)); opacity: .75;
}
.qp-empty { font-family: var(--ff-mono); font-size: 12.5px; color: var(--muted-small); padding: 8px 0; }
.qp-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 28px; }
.qp-titles { max-width: 480px; }
.qp-eyebrow { display: flex; align-items: center; gap: 9px; font-family: var(--ff-mono); font-size: 11.5px; color: var(--blue-soft); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 10px; }
.qp-titles h3 { font-family: var(--ff-display); font-weight: 600; font-size: clamp(20px, 2.6vw, 26px); margin: 0 0 8px; letter-spacing: -.01em; }
.qp-titles p { margin: 0; color: var(--muted-small); font-size: 14.5px; max-width: 440px; }
.qp-stats { display: flex; gap: 26px; flex-wrap: wrap; }
.qp-stat { font-family: var(--ff-mono); }
.qp-stat .n { display: block; font-size: 20px; color: var(--ghost); font-weight: 500; font-variant-numeric: tabular-nums; }
.qp-stat .l { display: block; font-size: 10.5px; color: #7C8CA3; text-transform: uppercase; letter-spacing: .06em; margin-top: 2px; }

.timeline-scroll { overflow-x: auto; margin: 0 -4px; padding: 0 4px; }
.timeline-holder { min-width: 0; }
#wireSvg { display: block; width: 100%; height: auto; overflow: visible; }
#wireSvg text { font-family: var(--ff-mono); }

.marker-hit { cursor: pointer; }
.marker-hit:focus { outline: none; }
.marker-hit:focus circle.ring { stroke: var(--ghost); }
.marker-glow { opacity: 0; transition: opacity .3s ease; }
.marker-glow.active { opacity: 1; }

.legend-row { display: flex; flex-wrap: wrap; gap: 10px 18px; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--subtle); }
.legend-item { display: flex; align-items: center; gap: 7px; font-family: var(--ff-mono); font-size: 11px; color: var(--muted-small); text-transform: uppercase; letter-spacing: .03em; }
.legend-item svg { flex: none; }
.legend-item span { color: var(--ghost); }

.qp-footnote { margin-top: 16px; font-size: 12px; color: #7C8CA3; }
.qp-footnote a { color: var(--blue-soft); }

/* at-a-glance featured-signal ticker: fixed height, never crowds, identical on mobile */
.wire-ticker { display: flex; align-items: stretch; gap: 10px; margin-top: 22px; }
.wt-nav {
  flex: none; width: 34px; border: 1px solid var(--subtle); background: transparent; color: var(--muted-small);
  border-radius: 8px; font-family: var(--ff-mono); font-size: 16px; cursor: pointer; transition: border-color .15s, color .15s;
}
.wt-nav:hover, .wt-nav:focus-visible { border-color: var(--border-b); color: var(--blue-soft); outline: none; }
.wt-card {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 14px;
  background: rgba(255,255,255,.025); border: 1px solid var(--subtle); border-radius: 2px;
  padding: 14px 16px; min-height: 74px; cursor: pointer;
}
.wt-glyph { flex: none; width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,.04); }
.wt-body { min-width: 0; }
.wt-meta { font-family: var(--ff-mono); font-size: 10.5px; line-height: 1.35; text-transform: uppercase; letter-spacing: .05em; color: #7C8CA3; margin-bottom: 4px; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.wt-headline { font-family: var(--ff-display); font-size: 14.5px; font-weight: 600; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.wt-segments { display: flex; gap: 4px; margin-top: 10px; }
.wt-seg { flex: 1; height: 3px; border-radius: 2px; background: var(--subtle); border: none; padding: 0; cursor: pointer; position: relative; overflow: hidden; }
.wt-seg.active { background: rgba(0,198,212,.3); }
.wt-seg-fill { position: absolute; inset: 0; width: 0%; background: var(--blue-soft); border-radius: 2px; }
.wt-seg.done .wt-seg-fill { width: 100%; background: var(--muted); }
.wt-seg.active .wt-seg-fill.run { animation: segFill linear forwards; animation-duration: var(--seg-dur, 4200ms); }
@keyframes segFill { from { width: 0%; } to { width: 100%; } }

.wire-tip {
  position: fixed; z-index: 40; max-width: 300px; background: var(--void-2);
  border: 1px solid var(--border-p); border-radius: 10px; padding: 16px 18px;
  box-shadow: 0 18px 40px rgba(0,0,0,.5); opacity: 0; pointer-events: none;
  transform: translateY(4px); transition: opacity .14s ease, transform .14s ease;
}
.wire-tip.show { opacity: 1; transform: translateY(0); pointer-events: auto; }
.wire-tip .tip-cat { display: flex; align-items: center; gap: 7px; font-family: var(--ff-mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em; margin-bottom: 8px; }
.wire-tip .tip-date { font-family: var(--ff-mono); font-size: 10.5px; color: var(--muted-small); margin-left: auto; }
.wire-tip h4 { margin: 0 0 7px; font-family: var(--ff-display); font-weight: 600; font-size: 15.5px; line-height: 1.3; }
.wire-tip p { margin: 0 0 10px; font-size: 13px; color: #B7C0D6; line-height: 1.55; }
.wire-tip .tip-src { font-family: var(--ff-mono); font-size: 10.5px; color: var(--blue-soft); text-decoration: none; }
.wire-tip .tip-src:hover { text-decoration: underline; }

details.wire-list { margin-top: 4px; }
details.wire-list summary { cursor: pointer; font-family: var(--ff-mono); font-size: 11.5px; color: var(--muted-small); text-transform: uppercase; letter-spacing: .05em; list-style: none; display: inline-flex; align-items: center; gap: 6px; }
details.wire-list summary::-webkit-details-marker { display: none; }
details.wire-list summary::before { content: '+'; font-size: 14px; color: var(--blue-soft); }
details.wire-list[open] summary::before { content: '\2212'; }
.wire-list ol { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 10px; }
.wire-list li { font-size: 13px; color: #B7C0D6; padding: 10px 12px; background: rgba(255,255,255,.02); border-radius: 8px; border-left: 2px solid var(--subtle); }
.wire-list li b { color: var(--ghost); font-weight: 500; }
.wire-list .li-meta { display: block; font-family: var(--ff-mono); font-size: 10.5px; color: var(--muted-small); text-transform: uppercase; letter-spacing: .04em; margin-bottom: 4px; }

@media (max-width: 640px) {
  .qp-head { flex-direction: column; align-items: flex-start; }
}
