  :root{
    --bg:         #ffffff;
    --bg-soft:    #fbfbfd;
    --bg-dark:    #1d1d1f;
    --txt:        #1d1d1f;
    --txt-2:      #6e6e73;
    --txt-3:      #86868b;
    --rule:       #d2d2d7;
    --rule-soft:  #e8e8ed;
    --blue:       #0071e3;
    --blue-hover: #0077ed;
    --orange:     #ff9500;
    --green:      #34c759;
    --red:        #ff3b30;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  html,body{
    background:var(--bg);color:var(--txt);
    font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Inter','Helvetica Neue',Arial,sans-serif;
    font-weight:400;line-height:1.47;letter-spacing:-0.003em;
    -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
    overflow-x:hidden;
    overflow-x:clip; /* doesn't create a scroll container -> header position:sticky actually sticks */
  }
  a{color:inherit;font-weight:600;text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px}
  a:hover{text-decoration-color:currentColor}
  .wrap{max-width:1080px;margin:0 auto;padding:0 24px}
  [id]{scroll-margin-top:64px} /* sticky header clearance for in-page anchors */

  /* ---------- header ---------- */
  header{
    position:sticky;top:0;z-index:50;
    backdrop-filter:saturate(180%) blur(20px);
    -webkit-backdrop-filter:saturate(180%) blur(20px);
    background:rgba(255,255,255,0.78);
    border-bottom:1px solid var(--rule-soft);
  }
  .nav{display:flex;align-items:center;justify-content:space-between;padding:14px 0;font-size:13px;font-weight:500;max-width:720px;margin:0 auto} /* variant B: narrower span, balanced */
  .nav .brand{display:flex;align-items:center;gap:10px;color:var(--txt);font-weight:600;letter-spacing:-0.005em}
  a.brand{text-decoration:none}
  a.brand:hover{text-decoration:none;opacity:.7}
  .brand .mark{
    width:26px;height:26px;border-radius:7px;background:#1d1d1f;
    display:flex;align-items:center;justify-content:center;color:#fff;
    font-family:'Fraunces',serif;font-weight:600;font-size:14px;line-height:1;
  }
  .nav ul{display:flex;gap:26px;list-style:none;align-items:center}
  .nav ul a.lang-switch{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;letter-spacing:0.06em;
    border:1px solid var(--rule);border-radius:6px;
    padding:3px 8px;color:var(--txt-3);
  }
  .nav ul a.lang-switch:hover{
    text-decoration:none;border-color:var(--txt-2);color:var(--txt);
  }
  .nav ul a{text-decoration:none}
  .nav ul a:hover{text-decoration:underline;text-decoration-color:currentColor}
  .btn{
    display:inline-flex;align-items:center;gap:8px;
    background:#1d1d1f;color:#fff;
    padding:10px 18px;font-family:inherit;font-weight:500;font-size:14px;
    border:none;border-radius:980px;cursor:pointer;
    transition:background .15s ease;text-decoration:none;
  }
  .btn:hover{background:#000;color:#fff;text-decoration:none}
  .btn.lg{padding:13px 26px;font-size:15px}
  .btn.ghost{background:transparent;color:var(--txt);border:1px solid var(--rule)}
  .btn.ghost:hover{background:var(--bg-soft);color:var(--txt)}

  /* ---------- hero ---------- */
  .hero{padding:72px 0 48px;background:var(--bg-soft);text-align:center}
  .hero .eyebrow{
    display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--txt);font-weight:500;
    margin-bottom:18px;
  }
  .hero .eyebrow::before{content:"";width:6px;height:6px;background:var(--txt);border-radius:50%}
  .hero h1{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;font-weight:500;
    font-size:clamp(44px,7.2vw,84px);line-height:1.02;letter-spacing:-0.022em;
    color:var(--txt);margin:0 auto 22px;max-width:14ch;
  }
  .hero h1 em{font-style:italic;color:#4f3aa8}
  .hero .lede{
    max-width:640px;margin:0 auto 32px;
    font-size:20px;line-height:1.4;color:var(--txt-2);font-weight:400;letter-spacing:-0.011em;
  }
  .hero .lede em{color:var(--txt);font-style:italic;font-weight:500}
  .hero .cta{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
  .hero .meta-line{margin-top:24px;font-size:13px;color:var(--txt-3)}

  /* ---------- Hero grid: copy on the left, slab thumbnail on the right ---------- */
  .hero-grid{
    display:grid;grid-template-columns:1fr auto;
    gap:56px;align-items:center;
    max-width:1000px;margin:0 auto;text-align:left;
  }
  .hero-grid .hero-copy{min-width:0}
  .hero-grid h1{margin-left:0;margin-right:0;max-width:14ch}
  .hero-grid .lede{margin-left:0;margin-right:0}
  .hero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:6px}
  .hero-cta .btn-primary,
  .hero-cta .btn-ghost{
    appearance:none;border:0;cursor:pointer;font:inherit;
    letter-spacing:-0.005em;text-decoration:none;
    display:inline-flex;align-items:center;gap:8px;
    border-radius:10px;
  }
  .hero-cta .btn-primary{
    background:var(--txt);color:#fff;font-weight:500;font-size:14px;
    padding:13px 22px;
  }
  .hero-cta .btn-primary:hover{background:#000}
  .hero-cta .btn-ghost{
    background:transparent;color:var(--txt-2);
    border:1px solid var(--rule);font-weight:400;font-size:13px;
    padding:12px 18px;
  }
  .hero-cta .btn-ghost:hover{border-color:var(--txt);color:var(--txt)}
  .hero-slab{
    background:#0a0a0a;color:#f5f5f7;border-radius:6px;
    width:148px;height:208px;padding:14px 12px;
    display:flex;flex-direction:column;
    box-shadow:0 12px 32px rgba(0,0,0,0.18),0 2px 6px rgba(0,0,0,0.08);
    transform:rotate(-3deg);transition:transform .25s ease;
    flex-shrink:0;text-decoration:none;
  }
  .hero-slab,
  .hero-slab *{text-decoration:none}
  .hero-slab:hover{transform:rotate(-1deg) translateY(-2px)}
  .hero-slab-title{
    font-family:'Iowan Old Style','Fraunces','New York',ui-serif,Georgia,serif;
    font-weight:400;font-size:15px;line-height:1.04;letter-spacing:-0.012em;
    margin:0;color:#f5f5f7;
  }
  .hero-slab-lanes{margin:auto 0;width:100%;display:block}
  .hero-slab-author{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:7.5px;letter-spacing:0.08em;text-transform:uppercase;
    color:#86868b;margin-top:6px;
  }
  @media(max-width:720px){
    .hero{padding:56px 0 40px;text-align:center}
    .hero-grid{
      grid-template-columns:1fr;gap:22px;text-align:center;
    }
    .hero-grid .hero-copy{order:2}
    .hero-grid .hero-slab{
      order:1;justify-self:center;
      width:112px;height:158px;transform:rotate(-2deg);
    }
    .hero-grid h1{margin-left:auto;margin-right:auto}
    .hero-grid .lede{margin-left:auto;margin-right:auto}
    .hero-cta{justify-content:center}
  }

  /* ---------- marquee strip ---------- */
  .strip{
    overflow:hidden;border-top:none;border-bottom:1px solid var(--rule-soft);
    background:var(--bg);
  }
  .strip .track{
    display:flex;gap:48px;padding:18px 0;white-space:nowrap;
    animation:slide 38s linear infinite;
    font-size:14px;color:var(--txt-2);font-weight:500;letter-spacing:-0.005em;
  }
  .strip .track span{display:inline-flex;align-items:center;gap:14px}
.strip{margin-top:-72px;padding-bottom:0}
  .strip .track span::after{content:"·";color:var(--txt);font-weight:600}
  @keyframes slide{from{transform:translateX(0)}to{transform:translateX(-50%)}}

  /* Quiet sources strip — sits at the bottom of the audit section as a
     restrained acknowledgement of the disciplines the book draws on.
     No heading; the dots-separated list reads as a calm footer. */
  .sources-strip{
    margin:48px auto 0;padding-top:18px;
    border-top:1px solid #1c1c1e;
    display:flex;justify-content:center;flex-wrap:wrap;
    gap:6px 14px;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11.5px;color:#86868b;letter-spacing:0.02em;
    text-align:center;
  }
  .sources-strip span{position:relative;padding-right:14px}
  .sources-strip span:not(:last-child)::after{
    content:"·";position:absolute;right:0;color:#3a3a3e;font-weight:600;
  }
  @media (max-width:560px){
    .sources-strip{margin-top:32px;gap:4px 10px;font-size:10.5px}
    .sources-strip span{padding-right:10px}
  }

  /* ---------- sections ---------- */
  section{padding:104px 0;background:var(--bg)}
  section.soft{background:var(--bg-soft)}
  /* Use --no-bottom on the upper section and --no-top on the lower section
     to collapse the gap between two adjacent sections so they read as a
     continuous block. The card-pair section 03 + signup uses this. */
  section.no-bottom{padding-bottom:0}
  section.no-top{padding-top:32px}
  .sec-head{margin:0 auto 56px;max-width:780px;text-align:center}
  .sec-head .num{display:block;font-size:14px;color:var(--txt);font-weight:500;margin-bottom:10px;letter-spacing:-0.005em}
  .sec-head h2{
    font-family:inherit;font-weight:600;color:var(--txt);
    font-size:clamp(28px,4.2vw,46px);letter-spacing:-0.02em;line-height:1.1;
  }
  .sec-head p{
    font-size:18px;color:var(--txt-2);margin-top:14px;line-height:1.45;
    max-width:60ch;margin-left:auto;margin-right:auto;
  }

  /* ---------- USP panels (12-col grid) ---------- */
  .panels{display:grid;grid-template-columns:repeat(12,1fr);gap:16px}
  /* Section 5 — Workspace preview. Dark surface mirroring the audit's #calc
     palette: black section bg, dark card surfaces, light text. Two-tab toggle
     (Dashboard / Argument log) shares a single headline + subhead + email CTA.
     Both preview surfaces are forced to a matched min-height so toggling doesn't
     reflow the page. Sample data wears a "preview" pill so it isn't mistaken
     for live numbers. */
  #workspace{background:#0a0a0a;color:#f5f5f7;padding-top:88px;padding-bottom:96px}
  #workspace .sec-head{margin-bottom:24px}
  #workspace .sec-head .num{color:#6e6e73}
  #workspace .sec-head h2{color:#f5f5f7}
  #workspace .sec-head p{color:#a1a1a6}
  .ws-toggle{
    position:relative;display:inline-flex;align-items:stretch;
    background:rgba(255,255,255,0.03);border:1px solid #2a2a2c;
    border-radius:999px;padding:3px;gap:0;margin-bottom:18px;
  }
  .ws-tab{
    background:transparent;border:1px solid transparent;cursor:pointer;
    padding:6px 18px;font-family:inherit;font-size:13px;font-weight:500;
    color:#86868b;border-radius:999px;letter-spacing:-0.005em;
    transition:background-color .15s,color .15s,border-color .15s;
  }
  .ws-tab.active{
    background:rgba(245,245,247,0.08);color:#f5f5f7;
    border-color:rgba(245,245,247,0.22);font-weight:600;
  }
  .ws-tab:not(.active):hover{color:#f5f5f7}
  .ws-view{
    position:relative;border-radius:14px;padding:18px;margin-bottom:0;
    box-sizing:border-box;min-height:380px;
    display:flex;flex-direction:column;justify-content:space-between;gap:10px;
  }
  .ws-view-a{background:#111;border:1px solid #1c1c1e}
  .ws-view-b{background:#111;border:1px solid #1c1c1e}
  .ws-view .ws-stats{margin-bottom:0}
  .ws-view .ws-card{margin-bottom:0}
  .ws-view[hidden]{display:none}
  .ws-preview-pill{
    position:absolute;top:14px;right:16px;
    font-size:11px;color:#86868b;background:#0a0a0a;
    padding:3px 10px;border-radius:999px;border:1px solid #2a2a2c;
    letter-spacing:0.02em;
  }
  .ws-preview-pill-on-light{background:#1c1c1e;border-color:transparent;color:#86868b}
  .ws-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
  .ws-stat{
    background:#0a0a0a;border-radius:8px;padding:12px 14px;
    display:flex;flex-direction:column;justify-content:center;
    min-height:72px;box-sizing:border-box;
  }
  .ws-stat-lbl{font-size:12px;color:#86868b;margin-bottom:6px}
  .ws-stat-v{font-size:22px;font-weight:500;color:#f5f5f7;font-variant-numeric:tabular-nums;line-height:1}
  .ws-stat-v-sm{font-size:16px;line-height:1.1;margin-top:0}
  .ws-card{background:#0a0a0a;border-radius:8px;padding:12px 14px;margin-bottom:10px}
  .ws-card-lbl{font-size:12px;color:#86868b;margin-bottom:8px}
  .ws-chart{width:100%;height:60px;display:block}
  .ws-last{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:#f5f5f7;margin-bottom:0}
  .ws-last em{font-style:normal;font-weight:500;color:#f5f5f7}
  .ws-last .ws-dot{color:#6e6e73}
  .ws-logger-lbl{font-size:13px;color:#86868b;margin-bottom:12px}
  .ws-logger-fields{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
  .ws-logger-fields input,
  .ws-logger-fields select{
    font:inherit;font-size:14px;padding:8px 12px;
    border:1px solid #2a2a2c;border-radius:8px;background:#0a0a0a;color:#f5f5f7;
  }
  .ws-logger-fields input::placeholder{color:#6e6e73}
  .ws-logger-row{display:flex;gap:8px}
  .ws-logger-row select{flex:1}
  .ws-logger-output{background:#0a0a0a;border-radius:8px;padding:12px 14px}
  .ws-logger-out-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;color:#86868b}
  .ws-logger-risk{font-size:11px}
  .ws-cycle{width:100%;height:70px;display:block}
  .ws-cycle-labels{display:flex;justify-content:space-between;font-size:11px;color:#6e6e73;margin-top:4px}
  .ws-signup{display:flex;gap:8px;max-width:480px}
  .ws-signup input{
    flex:1;font:inherit;font-size:14px;padding:10px 14px;
    border:1px solid #2a2a2c;border-radius:8px;background:#111;color:#f5f5f7;
  }
  .ws-signup input::placeholder{color:#6e6e73}
  .ws-signup button{
    cursor:pointer;font:inherit;font-weight:600;font-size:14px;
    padding:10px 18px;border-radius:8px;
    background:rgba(245,245,247,0.08);
    border:1px solid rgba(245,245,247,0.22);
    color:#f5f5f7;letter-spacing:-0.005em;
    transition:background .15s,border-color .15s;
  }
  .ws-signup button:hover{
    background:rgba(245,245,247,0.14);
    border-color:rgba(245,245,247,0.35);
  }
  /* Replaces the email-signup form while the course is still in development.
     Sits flush against the bottom edge of the preview grid — no CTA energy,
     no gap above it, just a quiet metadata line. */
  .ws-status{
    font-size:12.5px;color:#6e6e73;letter-spacing:0.02em;
    margin:3px 0 0;
  }
  /* Quiet text trigger that collapses the whole preview surface
     (toggle + both views + status note) behind a single sage word.
     Sits centered below the section subcopy. */
  .ws-preview-collapse{margin:0}
  .ws-preview-collapse > summary{
    list-style:none;cursor:pointer;user-select:none;
    background:transparent;border:0;padding:6px 4px;
    color:#7fa39a;font:inherit;font-size:14px;font-weight:500;
    letter-spacing:-0.005em;
    display:block;width:fit-content;margin:0 auto;
    transition:opacity .15s;
  }
  .ws-preview-collapse > summary::-webkit-details-marker{display:none}
  .ws-preview-collapse > summary::marker{content:''}
  .ws-preview-collapse > summary:hover{opacity:0.7}
  .ws-preview-body{margin-top:24px}
  .ws-cohort-head{font-size:13px;color:#86868b;margin-bottom:14px;margin-top:2px}
  .ws-cohort-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;font-size:13.5px;color:#f5f5f7;line-height:1.45}
  .ws-cohort-list li{display:flex;gap:10px;align-items:flex-start}
  .ws-cohort-list li::before{content:"";flex:0 0 6px;width:6px;height:6px;background:#7fa39a;border-radius:50%;margin-top:8px}
  .ws-cohort-weeks{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
  .ws-cohort-week{
    background:#1c1c1e;border-radius:6px;padding:8px 6px;
    text-align:center;font-size:11.5px;color:#f5f5f7;font-weight:500;letter-spacing:-0.005em;
  }
  .ws-cohort-wk-n{display:block;font-size:10px;color:#86868b;font-weight:500;margin-bottom:3px;letter-spacing:0.04em;text-transform:uppercase}
  @media(max-width:640px){
    .ws-cohort-weeks{grid-template-columns:repeat(3,1fr)}
  }
  @media(max-width:640px){
    .ws-stats{grid-template-columns:repeat(2,1fr)}
    .ws-signup{flex-direction:column;max-width:none}
    .ws-view{min-height:0}
  }
  .panel{
    background:#fff;border:1px solid var(--rule-soft);border-radius:18px;
    padding:32px 30px;position:relative;
    display:flex;flex-direction:column;gap:18px;
  }
  .panel.col-4{grid-column:span 4}
  .panel.col-6{grid-column:span 6}
  .panel.col-7{grid-column:span 7}
  .panel.col-5{grid-column:span 5}
  .panel.col-12{grid-column:span 12}
  @media(max-width:900px){.panel.col-4,.panel.col-7,.panel.col-5,.panel.col-6{grid-column:span 12}}
  .panel .label{font-size:13px;font-weight:500;color:var(--txt-3)}
  .panel .label .id{color:var(--txt);font-weight:600;font-variant-numeric:tabular-nums}
  .panel h3{
    font-family:inherit;font-weight:600;color:var(--txt);
    font-size:22px;line-height:1.2;letter-spacing:-0.014em;margin:10px 0 10px;
  }
  .panel p{font-size:16px;color:var(--txt-2);line-height:1.5;max-width:50ch}
  .panel p em{font-style:italic;color:var(--txt);font-weight:500}
  /* One-line caption that sits under a principle's visual. Always visible
     even when the prose details are collapsed, so the visual is never mute. */
  .panel p.panel-caption{
    font-size:13.5px;color:var(--txt-3);font-style:italic;
    margin:10px 0 0;line-height:1.4;max-width:none;
  }
  /* Section 2 principle prose collapses behind a + chip so the visuals
     read first. Click expands the body; click again collapses it. */
  .principle-toggle{
    list-style:none;cursor:pointer;user-select:none;
    display:inline-flex;align-items:center;justify-content:center;
    width:28px;height:28px;border-radius:50%;
    border:1px solid var(--rule-soft);background:#fff;
    color:var(--txt-3);font-size:18px;line-height:1;font-weight:400;
    margin-top:6px;transition:background-color .15s,color .15s,border-color .15s;
  }
  .principle-toggle::-webkit-details-marker{display:none}
  .principle-toggle::marker{content:''}
  .principle-toggle:hover{background:#f5f5f7;color:var(--txt)}
  details.principle-details:not([open]) .principle-toggle::before{content:'+'}
  details.principle-details[open] .principle-toggle::before{content:'\2212'} /* − */
  details.principle-details > p{margin-top:14px}

  /* Mobile: hide each principle card's visual + caption + prose behind a
     single + chip in the top-right of the panel. Visitor sees the eyebrow
     and headline only; tap to reveal the diagram. Desktop keeps the
     visuals always-on. */
  .panel-mobile-btn{display:none}
  @media (max-width: 560px){
    #why .panel.panel-collapsible{position:relative}
    #why .panel.panel-collapsible > div:first-child{padding-right:36px}
    #why .panel-mobile-btn{
      position:absolute;top:18px;right:14px;
      width:28px;height:28px;border-radius:50%;
      border:1px solid var(--rule-soft);background:#fff;
      color:var(--txt-3);font-size:16px;line-height:1;font-weight:400;
      display:inline-flex;align-items:center;justify-content:center;
      cursor:pointer;padding:0;font-family:inherit;
    }
    #why .panel-mobile-btn:hover{background:#f5f5f7;color:var(--txt)}
    #why .panel.panel-collapsible[aria-collapsed="true"] .rooms,
    #why .panel.panel-collapsible[aria-collapsed="true"] .breath-wrap,
    #why .panel.panel-collapsible[aria-collapsed="true"] .ev-wrap,
    #why .panel.panel-collapsible[aria-collapsed="true"] .panel-caption,
    #why .panel.panel-collapsible[aria-collapsed="true"] details.principle-details{display:none !important}
  }
  .panel .readout{display:flex;gap:24px;margin-top:8px;font-size:13px;color:var(--txt-2);font-variant-numeric:tabular-nums;flex-wrap:wrap}
  .panel .readout span{display:flex;align-items:center;gap:8px;font-weight:500}
  .panel .readout span::before{content:"";width:7px;height:7px;background:var(--blue);border-radius:50%}
  .panel .readout span.amber::before{background:var(--orange)}

  /* breath / argument cycle */
  .breath-wrap{margin-top:8px}
  svg.breath{width:100%;height:100px;display:block}
  .breath-labels{
    display:grid;grid-template-columns:repeat(4,1fr);
    font-size:11px;color:var(--txt-3);font-weight:500;margin-top:4px;
  }
  .breath-labels span{text-align:center}
  .breath-labels span:first-child{text-align:left}
  .breath-labels span:last-child{text-align:right}

  /* EV chart — Hold'em Manager-style 2-line trace adapted to the book's
     domain: Actual frequency vs Expected Value over thought-count. The
     orange EV line diverges below the green actual line, showing the
     accumulating cost of a Frequency-EV-negative loop. */
  /* Real-data Frequency-EV chart for principle 03. Gridded axes carry the
     audit's own 0-600 frequency scale on Y and thought count on X. Jagged
     polylines mimic the look of a poker session-tracker. Two lines diverge:
     Potential (cyan, expanding band) drifts higher; Actual (orange,
     contracting band) drags below. A caption underneath calls it a
     conceptual model — visual authority without overclaiming. */
  .ev-wrap{margin-top:8px}
  /* The plot row: rotated Y-axis label on the left, SVG on the right.
     Rendering "Frequency" as HTML (not SVG <text>) ensures it uses real
     CSS pixels — same as "Thought count" — instead of being warped by the
     SVG's preserveAspectRatio="none" scaling. */
  .ev-plot{display:flex;align-items:stretch;gap:2px}
  .ev-y-label{
    writing-mode:vertical-rl;transform:rotate(180deg);
    font-size:13px;color:#6e6e73;font-weight:500;
    letter-spacing:-0.005em;
    font-family:ui-sans-serif,system-ui,sans-serif;
    display:flex;align-items:center;justify-content:center;
    padding-bottom:24px; /* aligns with the plot area (skipping x-axis label band) */
    flex-shrink:0;
  }
  svg.ev-chart{width:100%;height:180px;display:block;flex:1;min-width:0}
  .ev-axis-label{
    font-size:13px;color:#6e6e73;font-weight:500;
    text-align:center;margin-top:0;letter-spacing:-0.005em;
    font-family:ui-sans-serif,system-ui,sans-serif;
  }
  .ev-legend{
    display:flex;gap:18px;flex-wrap:nowrap;
    font-size:12px;color:var(--txt-2);font-weight:500;margin-top:10px;
    align-items:center;white-space:nowrap;
  }
  .ev-legend .dot{
    width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:6px;
    flex-shrink:0;
  }
  .ev-legend .dot.teal{background:#1f7f8a}
  .ev-legend .dot.coral{background:#d65a1c}
  /* Honest caption: the chart looks like measured data but isn't. We name
     this explicitly so a careful reader doesn't feel misled. */
  .ev-caption{
    font-size:11px;color:var(--txt-3);font-style:italic;margin-top:8px;
    letter-spacing:-0.005em;line-height:1.4;
  }

  /* locality rooms — pill/chip layout that wraps naturally */
  .rooms{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
  .room{
    position:relative;display:inline-flex;align-items:center;gap:8px;
    padding:8px 14px;border:1px solid var(--rule);border-radius:980px;
    font-size:13px;color:var(--txt);font-weight:600;letter-spacing:-0.005em;
    background:#f5f5f7;transition:.3s;
  }
  .room::before{
    content:"";width:6px;height:6px;border-radius:50%;
    background:#a1a1a6;flex-shrink:0;transition:.3s;
  }
  .room.active{border-color:var(--orange);background:#fff;box-shadow:0 0 0 2px rgba(255,149,0,0.12)}
  .room.active::before{background:var(--orange);box-shadow:0 0 0 4px rgba(255,149,0,0.2)}

  /* ---------- Object Gravity stage (Principle 01.OBJ — phone in sight) ----------
     Replaces the older "rooms" pill grid for the first principle card.
     A still phone in the center radiates three slow gravity rings; four
     thought-bubble labels orbit the phone, fading in and out on a long
     loop so the visual reads as a tide, not a flicker. */
  .obj-stage{
    position:relative;height:200px;margin-top:8px;
    background:var(--bg-soft);border-radius:10px;overflow:hidden;
  }
  .obj-phone{
    position:absolute;left:50%;top:50%;
    transform:translate(-50%,-50%);
    width:60px;height:112px;
    background:#0a0a0a;border-radius:10px;border:1.5px solid #1d1d1f;
    z-index:2;
  }
  .obj-phone::after{
    content:"";position:absolute;top:8px;left:50%;
    transform:translateX(-50%);
    width:28px;height:3px;background:#222;border-radius:2px;
  }
  .obj-pulse{
    position:absolute;left:50%;top:50%;
    width:60px;height:112px;border-radius:10px;
    border:2px solid #ff3b30;opacity:0;
    transform:translate(-50%,-50%);
    /* One pass each — last ring (delay 4s) finishes at ~10s, then the
       phone sits still. The visitor's eye comes back to the bubbles
       (the thoughts) instead of the gravity field repeating forever.
       Paused until .obj-stage enters viewport (set by the IO below).
       Each pulse runs 12s; staggered 0/4/8s so the last one ends at ~20s. */
    animation:objPulse 12s ease-out 1 forwards;
    animation-play-state:paused;
    z-index:1;pointer-events:none;
  }
  .obj-pulse.d2{animation-delay:4s}
  .obj-pulse.d3{animation-delay:8s}
  @keyframes objPulse{
    0%{opacity:0.55;transform:translate(-50%,-50%) scale(1)}
    100%{opacity:0;transform:translate(-50%,-50%) scale(3.8)}
  }
  .obj-bubble{
    position:absolute;font-size:10.5px;color:var(--txt-2);
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    background:#fff;padding:5px 11px;border-radius:980px;
    border:1px solid var(--rule-soft);white-space:nowrap;
    animation:objFloat 7.2s ease-in-out infinite;
    animation-play-state:paused;
    z-index:3;
  }
  /* IntersectionObserver flips .obj-stage to .in-view on first scroll-in;
     that unlocks the pulse + bubble animations. We don't reverse the
     class — the pulse is one-shot anyway and we don't want bubbles to
     restart every time the visitor scrolls past. */
  .obj-stage.in-view .obj-pulse,
  .obj-stage.in-view .obj-bubble{
    animation-play-state:running;
  }
  @media (prefers-reduced-motion: reduce){
    .obj-pulse,.obj-bubble{animation:none}
    .obj-bubble{opacity:0.85}
  }
  .obj-bubble.b1{top:14px;left:4%;animation-delay:0s}
  .obj-bubble.b2{top:34px;right:4%;animation-delay:1.8s}
  .obj-bubble.b3{bottom:44px;left:4%;animation-delay:3.6s}
  .obj-bubble.b4{bottom:18px;right:4%;animation-delay:5.4s}
  @keyframes objFloat{
    0%,100%{opacity:0.18;transform:translateY(0)}
    35%,65%{opacity:1;transform:translateY(-4px)}
  }
  @media (max-width:560px){
    .obj-stage{height:170px}
    .obj-phone,.obj-pulse{width:50px;height:96px}
    .obj-bubble{font-size:9.5px;padding:3px 8px}
  }

  /* ---------- Self-Enquiry Audit (matrix) ---------- */
  .matrix{
    background:#fff;border:1px solid var(--rule-soft);border-radius:24px;
    max-width:1080px;margin:0 auto;padding:36px;
    box-shadow:0 1px 0 rgba(0,0,0,0.02);
  }
  .m-intake{max-width:560px;margin:8px auto;padding:8px 0 8px}
  .m-intake .m-eyebrow{display:block;margin-bottom:14px}
  .m-intake h3{
    font-family:var(--serif);font-weight:400;
    font-size:clamp(28px,4vw,40px);line-height:1.05;letter-spacing:-0.018em;
    margin:0 0 18px;color:var(--txt);
  }
  .m-intake-lede{
    font-size:16px;line-height:1.55;color:var(--txt-2);
    margin:0 0 28px;max-width:54ch;
  }
  .m-intake-fields{display:flex;flex-direction:column;gap:10px;margin-bottom:10px}
  .m-intake-field{
    display:grid;grid-template-columns:1.4fr 1fr auto;gap:14px;align-items:end;
    padding:14px 16px;background:#fbfbfd;border:1px solid var(--rule-soft);border-radius:12px;
  }
  .m-intake-col{display:flex;flex-direction:column;gap:6px;min-width:0}
  .m-intake-lbl{
    font-size:11px;color:var(--txt-3);text-transform:uppercase;letter-spacing:0.08em;
    font-weight:500;
  }
  .m-intake-input,.m-intake-select{
    border:0;background:transparent;outline:0;font:inherit;
    font-size:16px;color:var(--txt);padding:4px 0;
    border-bottom:1px solid var(--rule-soft);
    width:100%;
  }
  .m-intake-select{
    appearance:none;-webkit-appearance:none;cursor:pointer;
    background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6"><path d="M0 0l5 6 5-6z" fill="%23999"/></svg>') no-repeat right 2px center / 10px 6px;
    padding-right:18px;
  }
  .m-intake-input::placeholder{color:var(--txt-3)}
  .m-intake-input:focus,.m-intake-select:focus{border-bottom-color:var(--txt)}
  .m-howto{
    display:grid;grid-template-columns:repeat(4,1fr);gap:20px;
    margin:-8px 0 32px;padding:22px;
    background:#fbfbfd;border:1px solid var(--rule-soft);border-radius:12px;
  }
  .m-howto-step .n{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:var(--blue);font-weight:500;margin-bottom:6px;display:block;letter-spacing:0.04em;
  }
  .m-howto-step h4{font-family:inherit;font-weight:600;font-size:13px;color:var(--txt);letter-spacing:-0.005em;margin:0 0 4px}
  .m-howto-step p{font-size:12.5px;color:var(--txt-2);line-height:1.5;margin:0}
  .m-howto-step p em{font-style:italic;color:var(--txt);font-weight:500}
  @keyframes mShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
  .m-intake-shake{animation:mShake .35s ease;border-bottom-color:#c44 !important}
  .m-intake-rm{
    align-self:end;
    background:transparent;border:0;cursor:pointer;
    width:28px;height:28px;border-radius:6px;
    color:var(--txt-3);font-size:18px;line-height:1;
  }
  .m-intake-rm:hover{background:#eee;color:var(--txt)}
  .m-intake-add{
    margin-top:6px;width:100%;
    background:transparent;border:1px dashed var(--rule);color:var(--txt-2);
    padding:14px;border-radius:10px;cursor:pointer;font:inherit;font-size:13px;
  }
  .m-intake-add:hover{border-color:var(--txt);color:var(--txt)}
  .m-intake-add[disabled]{opacity:0.45;cursor:not-allowed}
  .m-intake-cta{margin-top:32px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
  .m-start{padding:0}
  .m-start-cta{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:12px;flex-wrap:wrap;margin-top:28px}
  .m-start-cta .m-intake-go{padding:12px 22px}
  .m-start-skip{
    appearance:none;background:transparent;border:1px solid var(--rule);
    color:var(--txt-3);font:inherit;font-weight:400;font-size:13px;
    padding:11px 16px;border-radius:10px;letter-spacing:-0.005em;
    text-decoration:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;
    justify-content:center;white-space:nowrap;
  }
  /* ---------- Two-column audit intro ---------- */
  .audit-intro{
    display:grid;grid-template-columns:1fr 378px;
    gap:48px;align-items:center;
    max-width:1040px;margin:0 auto 40px;
  }
  /* Awakening-woman drawing (white line art) — replaces the example card */
  .awaken-fig{margin:0 auto;width:378px;max-width:100%} /* fill the column; margin auto centers it when stacked on mobile */
  .awaken-fig img{display:block;width:100%;height:auto}
  /* woven non-dual thread — quiet aside, dark sections only. Lived in index's
     takeaways style block after the phase-1 split; audit.html needs it too,
     so it now lives here (duplicate on index is harmless). */
  #calc .thread{max-width:600px;margin:24px 0 0;border-left:2px solid rgba(255,255,255,.35);padding:8px 0 8px 18px;font-family:'Fraunces','New York',ui-serif,Georgia,serif;font-style:italic;font-size:16px;line-height:1.55;color:rgba(255,255,255,.78)}
  .thread-mobile{display:none} /* desktop: thread stays in the copy column */
  .audit-intro-copy{min-width:0}
  .audit-intro .sec-head{
    text-align:left;margin:0;max-width:none;
  }
  .audit-intro .sec-head h2{margin-left:0;margin-right:0;max-width:18ch}
  .audit-intro .sec-head p{margin-left:0;margin-right:0}
  .audit-intro-example{min-width:0;justify-self:end}
  .audit-intro-example .m-example-output{margin:0;max-width:none;width:300px}
  /* Bind intro visibility to the existing mStart state flag (used by JS). */
  .audit-intro{display:grid}
  #calc:has(#mStart[hidden]) .audit-intro{display:none}
  @media (max-width:820px){
    .audit-intro{
      grid-template-columns:1fr;gap:30px;
      text-align:center;margin-bottom:32px;
    }
    .audit-intro .sec-head{text-align:center}
    .audit-intro .sec-head h2{margin-left:auto;margin-right:auto;max-width:14ch}
    .audit-intro .sec-head p{margin-left:auto;margin-right:auto;max-width:60ch}
    .audit-intro-example{justify-self:center}
    .audit-intro-example .m-example-output{width:auto;max-width:560px}
    .m-start-cta{justify-content:center}
    .thread-desktop{display:none}          /* mobile: hide the left-column copy */
    .thread-mobile{display:block;margin-top:18px} /* mobile: pair under the drawing */
  }
  .m-start-skip:hover{border-color:var(--txt-2);color:var(--txt-2)}
  /* ---- Example Mental Output preview card (shown above Get started) ---- */
  .m-example-output{
    background:#fbfbfd;border:1px solid var(--rule-soft);border-radius:14px;
    padding:20px 22px;margin:0 auto;max-width:560px;
  }
  .m-example-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
  .m-example-label{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10px;color:var(--txt-3);font-weight:600;
    letter-spacing:0.08em;text-transform:uppercase;
  }
  .m-example-rows{display:flex;flex-direction:column;gap:12px;margin-bottom:14px}
  .m-example-row{display:flex;align-items:center;gap:12px}
  .m-example-name{min-width:108px}
  .m-example-name strong{
    font-size:12.5px;font-weight:600;color:var(--txt);letter-spacing:-0.005em;
    display:block;
  }
  .m-example-name span{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:9.5px;color:var(--txt-3);letter-spacing:0.06em;
    text-transform:uppercase;margin-top:1px;display:block;
  }
  .m-example-seq{flex-shrink:0}
  .m-example-tag{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:9.5px;color:var(--txt-3);letter-spacing:0.06em;
    text-transform:uppercase;
  }
  .m-example-foot{
    padding-top:12px;border-top:1px solid var(--rule-soft);
  }
  .m-example-foot-lbl{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10px;color:var(--txt-3);font-weight:600;
    letter-spacing:0.06em;text-transform:uppercase;display:block;
  }
  .m-example-foot-v{
    font-weight:600;font-size:22px;color:var(--txt);
    margin-top:3px;font-variant-numeric:tabular-nums;display:block;
  }
  @media(max-width:560px){
    .m-example-output{padding:16px 14px}
    .m-example-name{min-width:88px}
    .m-example-name strong{font-size:11.5px}
    .m-example-row{gap:8px}
    .m-example-seq{width:84px}
  }
  /* While only the Get started screen is visible, drop the matrix card —
     the bare button should sit on the section background, not inside a card. */
  #calc .matrix:has(> #mStart:not([hidden])):not(:has(> #mIntake:not([hidden]))):not(:has(> #mAuditBody:not([hidden]))){
    background:transparent;border-color:transparent;box-shadow:none;padding:0;
  }
  .m-intake-go{
    background:var(--txt);color:#fff;border:0;cursor:pointer;
    padding:14px 24px;border-radius:10px;font:inherit;font-size:14px;font-weight:500;
    letter-spacing:-0.005em;
  }
  .m-intake-go:hover{background:#000}
  .m-intake-go[disabled]{opacity:0.4;cursor:not-allowed}
  .m-intake-example{
    background:transparent;border:0;cursor:pointer;color:var(--txt-3);
    font:inherit;font-size:13px;text-decoration:underline;text-underline-offset:3px;
    padding:4px 0;
  }
  .m-intake-example:hover{color:var(--txt)}
  .matrix-head{
    display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
    padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--rule-soft);flex-wrap:wrap;
  }
  .matrix-head h3{font-family:inherit;font-weight:600;font-size:22px;letter-spacing:-0.014em;color:var(--txt);line-height:1.2;margin-top:6px}
  .m-eyebrow{font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;font-size:11px;color:var(--blue);font-weight:500;letter-spacing:0.04em;text-transform:uppercase}
  .m-reset{
    background:transparent;border:1px solid var(--rule);color:var(--txt-2);
    font-family:inherit;font-size:13px;font-weight:500;
    padding:8px 14px;border-radius:980px;cursor:pointer;
    transition:background .15s,color .15s;
  }
  .m-reset:hover{background:var(--bg-soft);color:var(--txt)}
  .m-stories{display:flex;flex-direction:column;gap:14px}
  .m-card{
    background:var(--bg-soft);border:1px solid var(--rule-soft);border-radius:14px;
    padding:20px 22px;display:grid;gap:14px;position:relative;
    grid-template-columns:repeat(12,1fr);
  }
  .m-card .f{display:flex;flex-direction:column;gap:5px;min-width:0}
  .m-card .f .lbl{
    font-size:10px;color:var(--txt-3);font-weight:600;letter-spacing:0.06em;text-transform:uppercase;
  }
  .m-card .f .lbl em{font-style:normal;color:var(--txt-3);font-weight:400;text-transform:none;letter-spacing:0;margin-left:6px;font-size:11px}
  .m-card input[type=text],
  .m-card select{
    width:100%;border:none;background:transparent;
    font-family:inherit;font-size:14px;color:var(--txt);font-weight:500;
    padding:6px 0;border-bottom:1px solid var(--rule-soft);
    outline:none;letter-spacing:-0.005em;
    transition:border-color .15s;
  }
  .m-card input[type=text]:focus,
  .m-card select:focus{border-bottom-color:var(--blue)}
  .m-card input[type=text]::placeholder{color:var(--txt-3);font-weight:400}
  .m-card select{appearance:none;-webkit-appearance:none;cursor:pointer;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6"><path d="M1 1l4 4 4-4" stroke="%2386868b" stroke-width="1.5" fill="none"/></svg>') no-repeat right 4px center}
  .m-card .f-name{grid-column:span 4}
  .m-card .f-topic{grid-column:span 4}
  .m-card .f-age{grid-column:span 4}
  .m-card .f-role{grid-column:span 4}
  .m-card .f-escalation{grid-column:span 4}
  .m-card .f-compulsion{grid-column:span 4}
  .m-card .f-emotion{grid-column:span 4}
  .m-card .f-position{grid-column:span 4}
  .m-card .f-interest{grid-column:span 4}
  .m-card .f-inter{grid-column:span 6;border-top:1px dashed var(--rule-soft);padding-top:14px;margin-top:2px}
  /* Emotion / Position / Importance fill the last row (4+4+4). Interest and
     Inter-relation were removed from intake (derived / inferred). */
  .m-card .f-grav{grid-column:span 4}
  /* chip-grid controls on the stories edit screen (#calc is always dark) */
  #calc .m-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
  #calc .m-chip{border:1px solid #2a2a2c;background:transparent;color:#a1a1a6;border-radius:999px;
    padding:6px 13px;font-size:13px;cursor:pointer;font-family:inherit;line-height:1.2;
    transition:border-color .12s,color .12s,background .12s}
  #calc .m-chip:hover{border-color:#4a4a4d;color:#f5f5f7}
  #calc .m-chip.on{background:#2c2c2e;border-color:#5f5e5a;color:#fff}
  #calc .m-chip.dim{opacity:.4;pointer-events:none}
  #calc .f-emotion .m-emo-cnt{color:#e8e6df;font-variant-numeric:tabular-nums}
  /* ---- chip-grid accordion edit card ---- */
  #calc .cg-card{background:#111;border:1px solid #2a2a2c;border-radius:12px;overflow:hidden;margin-bottom:10px}
  #calc .cg-card.locked{opacity:.45}
  #calc .cg-hdr{display:flex;align-items:center;gap:10px;padding:14px 18px;cursor:pointer}
  #calc .cg-card.locked .cg-hdr{cursor:default}
  #calc .cg-card.open .cg-hdr{cursor:default;border-bottom:1px solid rgba(255,255,255,0.06)}
  #calc .cg-idx{font-size:11px;color:#86868b;font-variant-numeric:tabular-nums}
  #calc .cg-title{font-size:15px;font-weight:500;flex:0 1 auto;color:#f5f5f7}
  #calc .cg-name{background:transparent;border:none;border-bottom:1px solid #2a2a2c;color:#f5f5f7;font-size:15px;font-weight:500;padding:3px 2px;flex:0 1 200px;min-width:120px;font-family:inherit}
  #calc .cg-name:focus{outline:none;border-bottom-color:#f5f5f7}
  #calc .cg-name::placeholder{color:#6e6e73}
  #calc .cg-cat{appearance:none;-webkit-appearance:none;background-color:transparent;border:1px solid transparent;color:#a1a1a6;padding:5px 22px 5px 8px;border-radius:7px;font-size:12px;font-family:inherit;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%2386868b' stroke-width='1.4' stroke-linecap='round'/></svg>");background-repeat:no-repeat;background-position:right 6px center}
  #calc .cg-cat:hover{color:#f5f5f7}
  #calc .cg-cat:focus{outline:none;color:#f5f5f7}
  #calc .cg-cat option{background:#111;color:#f5f5f7}
  #calc .cg-cat-static{font-size:12px;color:#86868b}
  #calc .cg-st{font-size:11px;letter-spacing:0.03em;color:#86868b;display:flex;align-items:center;gap:6px;margin-left:auto}
  #calc .cg-st.done{color:#f5f5f7;font-weight:600}
  /* next card stays dim until the current card is complete, then lightens */
  #calc .cg-nextcard .cg-hdr{cursor:pointer}
  #calc .cg-nextcard .cg-title{color:#5a5a5d;transition:color .2s}
  #calc .cg-nextcard .cg-cat-static{color:#4a4a4d}
  #calc .cg-nextcard .cg-st{color:#4a4a4d}
  #calc .cg-nextcard.ready .cg-title{color:#f5f5f7}
  #calc .cg-nextcard.ready .cg-cat-static{color:#86868b}
  #calc .cg-nextcard.ready .cg-st{color:#a1a1a6}
  /* ---- needs-underneath spectrum (result screen) ---- */
  #calc .m-needspectrum{background:#0a0a0a;border:1px solid #1c1c1e;border-radius:12px;padding:16px 18px;margin-top:10px}
  #calc .m-needspectrum:empty{display:none}
  /* card headers match the stat labels (Dominant type): sans, 600, #86868b */
  #calc .m-need-lbl{font-size:11px;letter-spacing:0.06em;text-transform:uppercase;color:#86868b;font-weight:600;margin-bottom:11px}
  #calc .m-need-bar{display:flex;gap:3px}
  #calc .m-need-cell{flex:1;min-width:0;border:1px solid #2a2a2c;border-radius:4px;padding:8px 2px 7px;text-align:center;position:relative}
  #calc .m-need-cell.off{opacity:.4}
  #calc .m-need-cell::after{content:attr(data-full);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1c1c1e;border:1px solid #2a2a2c;color:#f5f5f7;font-size:10.5px;padding:3px 8px;border-radius:6px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .12s;z-index:6}
  #calc .m-need-cell:hover{opacity:1}
  #calc .m-need-cell:hover::after{opacity:1}
  #calc .m-need-ab{font-size:9.5px;color:#f5f5f7}
  #calc .m-need-cell.off .m-need-ab{color:#6e6e73}
  #calc .m-need-ct{position:absolute;top:-7px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:600;background:#f5f5f7;color:#0a0a0a;border-radius:7px;padding:0 4px;line-height:13px;min-width:13px}
  #calc .m-need-foot{font-size:11px;color:#86868b;margin-top:12px}
  #calc .m-need-foot strong{color:#a1a1a6;font-weight:500}
  /* escalation + compulsion: exactly two chips per row, packed tight. A JS
     break element (.cg-brk) forces the wrap after the 2nd chip — no column
     grid, so no hole after the shorter chip. row-gap 3px: the zero-height
     break line sits between two 3px gaps, netting the usual 6px rhythm. */
  #calc .cg-row2 .cg-chips{row-gap:3px}
  #calc .cg-brk{flex-basis:100%;height:0}
  /* ---- mental load (result screen) ---- */
  #calc .m-mentalload{background:#0a0a0a;border:1px solid #1c1c1e;border-radius:12px;padding:16px 18px;margin-top:10px}
  #calc .m-mentalload:empty{display:none}
  #calc .m-ml-sub{font-size:11.5px;color:#86868b;margin:0 0 13px;line-height:1.5}
  #calc .m-ml-row{display:grid;grid-template-columns:130px 1fr auto;gap:12px;align-items:center;margin-bottom:9px}
  /* story names sit below the card header in visual weight */
  #calc .m-ml-nm{font-size:12px;font-weight:400;color:#a1a1a6}
  #calc .m-ml-nm small{display:block;font-size:10.5px;color:#86868b;font-weight:400;text-transform:uppercase;letter-spacing:0.04em;margin-top:1px}
  #calc .m-ml-bar{position:relative;height:20px;background:#16242E;border-radius:5px;overflow:hidden}
  #calc .m-ml-bar i{display:block;height:100%;border-radius:5px;position:relative}
  #calc .m-ml-thr{position:absolute;top:-3px;bottom:-3px;width:0;border-left:1.5px dashed #6e6e73;z-index:2}
  #calc .m-ml-top{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:9.5px;font-weight:600;color:#fff;text-transform:uppercase;letter-spacing:0.06em;white-space:nowrap}
  #calc .m-ml-score{font-size:12.5px;color:#f5f5f7;font-weight:600;font-variant-numeric:tabular-nums}
  #calc .m-ml-row.heaviest{position:relative}
  #calc .m-ml-row.heaviest .m-ml-nm{cursor:help}
  #calc .m-ml-row.heaviest:hover::after{content:attr(data-risk);position:absolute;left:142px;top:calc(100% + 2px);z-index:20;background:#2c2c2e;color:#f5f5f7;font-size:11px;line-height:1.45;font-weight:400;border:1px solid #3a3a3d;border-radius:7px;padding:8px 11px;max-width:320px;box-shadow:0 6px 20px rgba(0,0,0,.45);pointer-events:none}
  #calc .m-ml-head{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap}
  #calc .m-ml-legend{display:flex;gap:15px;flex-wrap:wrap;font-size:10.5px;color:#86868b;align-items:center}
  #calc .m-ml-legend i{width:11px;height:11px;border-radius:3px;display:inline-block;margin-right:5px;vertical-align:-1px}
  /* "heaviest" tag clips inside the short mobile bars — hide it there */
  @media(max-width:560px){ #calc .m-ml-top{display:none} }
  #calc .cg-del{background:none;border:none;color:#6e6e73;font-size:18px;line-height:1;cursor:pointer;padding:0 2px}
  #calc .cg-del:hover{color:#f5f5f7}
  #calc .cg-body{padding:6px 18px 18px}
  #calc .cg-field{margin:14px 0}
  #calc .cg-flbl{font-size:11px;letter-spacing:0.04em;text-transform:uppercase;color:#86868b;margin-bottom:7px;display:flex;gap:8px;align-items:baseline}
  #calc .cg-flbl em{font-style:normal;text-transform:none;letter-spacing:0;color:#6e6e73}
  #calc .cg-badge{text-transform:none;letter-spacing:0;color:#e8e6df;font-size:10.5px;font-weight:500;display:inline-flex;align-items:center;gap:5px}
  #calc .cg-badge .cg-cnt{color:#e8e6df;font-variant-numeric:tabular-nums}
  #calc .cg-chips{display:flex;flex-wrap:wrap;gap:6px}
  #calc .cg-chip{border:1px solid #2a2a2c;background:#0a0a0a;color:#a1a1a6;border-radius:999px;padding:6px 13px;font-size:13px;cursor:pointer;user-select:none;font-family:inherit;line-height:1.2;transition:border-color .12s,color .12s,background .12s}
  #calc .cg-chip:hover{border-color:#4a4a4d;color:#f5f5f7}
  #calc .cg-chip.on{background:#2c2c2e;border-color:#5f5e5a;color:#fff}
  #calc .cg-chip.dim{opacity:.4;pointer-events:none}
  #calc .cg-row2{display:flex;gap:28px;flex-wrap:wrap;align-items:flex-start}
  /* paired fields share the row 50/50 and stay side-by-side (left-aligned);
     wide chip labels wrap INSIDE each field instead of dropping the whole
     second field onto its own line. flex-basis:0 + min-width:0 keeps them
     on one row down to very narrow widths, then wraps gracefully. */
  #calc .cg-row2 .cg-field{flex:1 1 0;min-width:0;max-width:100%}
  #calc .cg-grav{-webkit-appearance:none;appearance:none;width:100%;max-width:360px;height:4px;border-radius:2px;background:#2a2a2c;outline:none;margin:6px 0}
  #calc .cg-grav::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#a1a1a6;cursor:pointer;border:none}
  #calc .cg-grav::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#a1a1a6;cursor:pointer;border:none}
  #calc .cg-foot{margin-top:20px;display:flex;justify-content:flex-end}
  #calc .cg-next{border:1px solid #fff;background:#fff;color:#000;border-radius:8px;padding:9px 18px;font-size:13px;font-weight:500;cursor:pointer;font-family:inherit}
  #calc .cg-next:hover{background:#eaeaea}
  @keyframes cgMiss{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}60%{transform:translateX(4px)}}
  #calc .cg-field.miss{animation:cgMiss .34s ease}
  #calc .cg-field.miss .cg-flbl{color:#df6f6f}
  .m-card-head{
    grid-column:span 12;
    display:flex;align-items:center;gap:12px;cursor:pointer;
    padding:0;margin:-4px 0 4px;user-select:none;
  }
  .m-card-head .idx{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:var(--txt-3);font-weight:500;letter-spacing:0.04em;
  }
  .m-card-head .title{
    font-size:15px;font-weight:600;color:var(--txt-1);letter-spacing:-0.01em;flex:1;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  .m-card-head .status{
    font-size:11px;font-weight:500;color:var(--txt-3);
    text-transform:uppercase;letter-spacing:0.06em;
    padding:3px 8px;border:1px solid var(--rule);border-radius:999px;background:#fff;
  }
  .m-card-head .status.done{color:#1d7a4a;border-color:#cfe9d8;background:#e9f5ee}
  .m-card-head .chev{width:11px;height:7px;color:var(--txt-3);transition:transform .15s}
  .m-card.collapsed{padding:14px 22px;gap:0}
  .m-card.collapsed .m-card-head{margin:0}
  .m-card.collapsed .m-card-head .chev{transform:rotate(-90deg)}
  .m-card.collapsed > .f,
  .m-card.collapsed > .m-del{display:none}
  .m-card:not(.collapsed) .m-card-head{padding-bottom:10px;border-bottom:1px dashed var(--rule-soft)}
  .m-card.flash{animation:mCardFlash 0.9s ease}
  .m-card.shake{animation:mCardShake .42s ease-in-out}
  @keyframes mCardShake{
    0%, 100%{transform:translateX(0)}
    20%{transform:translateX(-6px)}
    40%{transform:translateX(5px)}
    60%{transform:translateX(-3px)}
    80%{transform:translateX(2px)}
  }
  @keyframes mCardFlash{
    0%{box-shadow:0 0 0 0 rgba(217,87,87,0.0)}
    20%{box-shadow:0 0 0 4px rgba(217,87,87,0.18)}
    100%{box-shadow:0 0 0 0 rgba(217,87,87,0.0)}
  }
  /* Importance side mirrors the inter-relation layout structure: header
     row (label + readout) on top, slider track alone below. Visually
     symmetric with the inter side (label + "Link to story" button on top,
     chips below). */
  .m-card .grav-head{display:flex;align-items:baseline;gap:14px}
  /* Push the slider down so it sits at the same baseline as the inter-
     relation chip strip on the left half of the row. The chips have ~10px
     of vertical padding plus a gap from the header — together about 26px
     below the label-row's baseline. Match it. */
  .m-card .grav-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:26px}
  .m-card .grav-row input[type=range]{flex:1;min-width:160px;accent-color:var(--blue)}
  .m-card .grav-label{
    font-size:13px;font-weight:600;color:var(--txt);letter-spacing:-0.005em;
    font-variant-numeric:tabular-nums;
  }
  .m-card .grav-label .n{color:var(--blue)}
  .m-card .m-del{
    position:absolute;top:14px;right:14px;
    width:28px;height:28px;border-radius:8px;border:none;background:transparent;
    color:var(--txt-3);cursor:pointer;display:flex;align-items:center;justify-content:center;
    font-size:16px;line-height:1;font-family:inherit;
    transition:background .15s,color .15s;
  }
  .m-card .m-del:hover{background:rgba(255,59,48,0.08);color:var(--red)}
  .m-multi{position:relative;padding-top:2px}
  .m-chips{
    display:flex;flex-wrap:wrap;gap:6px;min-height:30px;
    padding:4px 0;border-bottom:1px solid var(--rule-soft);
    align-items:center;
  }
  .m-chip{
    display:inline-flex;align-items:center;gap:6px;
    background:#fff;border:1px solid var(--rule-soft);border-radius:980px;
    padding:3px 4px 3px 10px;font-size:12px;font-weight:500;color:var(--txt);
    letter-spacing:-0.005em;
  }
  .m-chip .x{
    width:18px;height:18px;border-radius:50%;border:none;background:transparent;
    color:var(--txt-3);cursor:pointer;display:flex;align-items:center;justify-content:center;
    font-size:14px;line-height:1;padding:0;font-family:inherit;
  }
  .m-chip .x:hover{background:rgba(255,59,48,0.08);color:var(--red)}
  .m-chip-empty{font-size:12px;color:var(--txt-3);font-weight:400}
  .m-multi-trigger{
    background:transparent;border:1px dashed var(--rule);color:var(--txt-2);
    font-family:inherit;font-size:12px;font-weight:500;
    padding:3px 10px;border-radius:980px;cursor:pointer;
    transition:border-color .15s,color .15s;
  }
  .m-multi-trigger:hover{border-color:var(--blue);color:var(--blue)}
  .m-multi-trigger:disabled{opacity:0.4;cursor:not-allowed}
  .m-multi-menu{
    position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:5;
    background:#fff;border:1px solid var(--rule-soft);border-radius:12px;
    box-shadow:0 8px 24px -8px rgba(0,0,0,0.12),0 2px 6px rgba(0,0,0,0.04);
    padding:6px;display:none;max-height:240px;overflow:auto;
  }
  .m-multi.open .m-multi-menu{display:block}
  .m-multi-opt{
    display:flex;align-items:center;gap:10px;
    padding:8px 10px;border-radius:8px;cursor:pointer;
    font-size:13px;color:var(--txt);font-weight:500;
  }
  .m-multi-opt:hover{background:var(--bg-soft)}
  .m-multi-opt input{accent-color:var(--blue);cursor:pointer}
  .m-multi-empty{padding:12px;font-size:12px;color:var(--txt-3);text-align:center}
.m-nolink-opt{font-style:italic;opacity:0.8;border-bottom:1px solid var(--rule-soft);margin-bottom:4px;padding-bottom:8px}
  .m-add{
    margin-top:14px;width:100%;
    background:transparent;border:1px dashed var(--rule);color:var(--txt-2);
    font-family:inherit;font-size:14px;font-weight:500;
    padding:14px;border-radius:14px;cursor:pointer;
    transition:border-color .15s,color .15s,background .15s;
  }
  .m-add:hover{border-color:var(--blue);color:var(--blue);background:rgba(0,113,227,0.03)}
  .m-calc{
    margin-top:14px;width:100%;
    background:#1d1d1f;color:#fff;border:none;
    font-family:inherit;font-size:14px;font-weight:500;
    padding:14px;border-radius:14px;cursor:pointer;
    transition:background .15s;letter-spacing:-0.005em;
  }
  .m-calc:hover{background:#000}
  .m-result-head{
    display:grid;grid-template-columns:1fr auto;gap:18px;align-items:center;
    padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--rule-soft);
  }
  .m-result-head .m-result-title{text-align:left;min-width:0}
  .m-result-head .m-eyebrow{display:block;margin-bottom:6px}
  .m-result-head h3{
    font-family:var(--serif);font-weight:400;
    font-size:clamp(22px,2.4vw,28px);line-height:1.1;letter-spacing:-0.01em;
    margin:0;color:var(--txt);
  }
  .m-result-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
  .m-back{
    background:transparent;border:1px solid var(--rule);color:var(--txt-2);
    padding:8px 14px;border-radius:8px;cursor:pointer;font:inherit;font-size:13px;
    white-space:nowrap;
  }
  .m-back:hover{border-color:var(--txt);color:var(--txt)}
  .m-recalc{
    background:transparent;border:1px solid var(--rule);color:var(--txt-2);
    padding:8px 14px;border-radius:8px;cursor:pointer;font:inherit;font-size:13px;
    white-space:nowrap;
  }
  .m-recalc:hover{border-color:var(--txt);color:var(--txt)}
  .m-result{margin-top:24px;display:flex;flex-direction:column;gap:18px}
  .m-thoughts-wrap{
    background:#fbfbfd;border:1px solid var(--rule-soft);border-radius:14px;
    padding:24px 26px;
  }
  .m-phase-slider{
    position:relative;display:inline-flex;align-items:stretch;
    background:rgba(0,0,0,0.04);border:1px solid var(--rule-soft);
    border-radius:999px;padding:3px;gap:0;
  }
  .m-phase-slider-thumb{
    position:absolute;top:3px;bottom:3px;left:3px;
    width:calc(50% - 3px);background:rgba(0,0,0,0.06);
    border:1px solid rgba(0,0,0,0.16);
    border-radius:999px;
    transition:transform .25s cubic-bezier(.4,0,.2,1);
    z-index:0;
  }
  .m-phase-slider[data-active="2"] .m-phase-slider-thumb{transform:translateX(100%)}
  .m-phase-slider-opt{
    position:relative;z-index:1;
    background:transparent;border:0;
    padding:6px 18px;font-family:inherit;font-size:12px;font-weight:500;
    color:var(--txt-3);cursor:pointer;letter-spacing:-0.005em;
    min-width:88px;border-radius:999px;
    transition:color .2s;
  }
  .m-phase-slider-opt.active{color:var(--txt);font-weight:600}
  .m-phase-slider-opt:not(.active):hover{color:var(--txt)}
  .m-phases-stack{display:grid;grid-template-areas:"p"}
  .m-phase-print-title{display:none}
  .m-phase{grid-area:p;visibility:hidden;pointer-events:none}
  .m-phase.active{visibility:visible;pointer-events:auto}
  .m-phase-2{position:relative;cursor:pointer;background:transparent;border-radius:10px;overflow:visible}
  .m-circuit-svg{width:100%;display:block}
  .m-circuit-hint{
    position:absolute;top:-22px;right:14px;margin-top:6px;
    font-size:10px;color:#86868b;font-weight:500;
    letter-spacing:0.04em;text-transform:uppercase;pointer-events:none;
    transition:opacity .25s;
  }
  .m-phase-2.paused .m-circuit-hint::after{content:" · PAUSED"}
  /* Two-sentence legend under the Phase 2 orbit so the visual isn't
     mute on first read. Centered, low-contrast, max-width for readability. */
  .m-circuit-caption{
    margin:14px auto 0;max-width:60ch;
    font-size:13px;line-height:1.5;color:var(--txt-3);
    text-align:center;letter-spacing:-0.005em;
  }
  #calc .m-circuit-caption{color:#86868b}
  .m-formation{cursor:pointer}
  .m-formation:hover use{stroke-width:2}
  .m-tooltip{
    position:absolute;pointer-events:none;
    background:#1d1d1f;color:#f5f5f7;padding:10px 14px;
    border:1px solid #2a2a2c;border-radius:8px;
    font-size:12px;line-height:1.5;letter-spacing:-0.005em;
    max-width:240px;z-index:10;opacity:0;
    transition:opacity .15s;
    box-shadow:0 4px 12px rgba(0,0,0,.4);
  }
  .m-tooltip.visible{opacity:1}
  .m-tooltip .tt-name{font-weight:600;font-size:13px;color:#fff;margin-bottom:4px}
  .m-tooltip .tt-row{display:flex;gap:6px;color:#cfcfd4}
  .m-tooltip .tt-lbl{color:#86868b;min-width:78px}
  .m-thoughts-head{
    display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
    margin-bottom:18px;
  }
  .m-thoughts-legend{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
  .m-thoughts-legend .lg{
    display:inline-flex;align-items:center;gap:6px;
    font-size:11px;color:var(--txt-3);font-weight:500;letter-spacing:-0.005em;
  }
  .m-thoughts-legend .lg::before{
    content:"";width:16px;height:13px;display:inline-block;
    background:transparent;border:0;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%231a1a1a" stroke-width="1.6" stroke-linejoin="round"/></svg>');
    background-repeat:no-repeat;background-size:contain;background-position:center;
  }
  .m-thoughts-legend .lg-e::before{
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%231a1a1a" stroke-width="1.6" stroke-linejoin="round"/></svg>');
  }
  .m-thoughts-legend .lg-pc::before{
    background:#1a1a1a;border-radius:50%;width:11px;height:11px;background-image:none;
  }
  .m-thoughts-legend .lg-pe::before{
    background:transparent;border:1.5px solid #1a1a1a;border-radius:50%;width:11px;height:11px;background-image:none;
  }
  /* Emotionally-charged: parallelogram split diagonally — Anger left, Love right.
     No inner dot. Shows that a charged thought can hold two emotional pulls at once. */
  .m-thoughts-legend .lg-ec::before{
    width:16px;height:13px;background:transparent;border:0;clip-path:none;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L24.16 24.55 L1 24.55 Z" fill="%23d65a1c"/><path d="M7.63 1 L30.79 1 L24.16 24.55 Z" fill="%234f3aa8"/><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%231a1a1a" stroke-width="1.6" stroke-linejoin="round"/></svg>');
    background-repeat:no-repeat;background-size:contain;background-position:center;
  }
  /* Mind icon: dark core with grey halo, mirrors the Phase 2 sphere. */
  .m-thoughts-legend .lg-mind::before{
    width:18px;height:13px;background:transparent;border:0;border-radius:0;clip-path:none;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 26"><ellipse cx="18" cy="13" rx="16" ry="11" fill="%23c1c1c6" fill-opacity="0.55"/><ellipse cx="18" cy="13" rx="11" ry="7.5" fill="%23202020" stroke="%236e6e73" stroke-width="1.1"/></svg>');
    background-repeat:no-repeat;background-size:contain;background-position:center;
  }
  /* The Mind chip only applies to the Phase 2 circuit — hide it while the
     slider is on Phase 1 (Sequence). */
  .m-phase-slider[data-active="1"] ~ .m-thoughts-legend .lg-mind{display:none}
  .m-thoughts{
    display:flex;flex-direction:column;justify-content:center;gap:34px;
    height:100%;
  }
  .m-phase-1{display:flex;flex-direction:column}
  .m-thought-row{
    display:grid;grid-template-columns:120px auto 1fr;gap:12px;align-items:center;
    position:relative;z-index:1;
  }
  .m-thought-label{
    font-size:13px;font-weight:600;color:var(--txt);letter-spacing:-0.005em;
    line-height:1.25;min-width:0;
  }
  .m-thought-label .topic{display:block;font-size:11px;color:var(--txt-3);font-weight:500;text-transform:uppercase;letter-spacing:0.06em;margin-top:2px}
  .m-thought-label .grav{color:var(--txt-3);font-weight:400;letter-spacing:0;text-transform:none;margin-left:4px}
  .m-thought-label .topic em{font-style:normal}
  .m-thought-row.unnamed .m-thought-label{color:var(--txt-3);font-weight:500}
  .m-thought-label .m-thought-links{
    display:block;font-size:11px;color:var(--blue);font-weight:500;
    margin-top:3px;letter-spacing:-0.005em;line-height:1.35;
  }
  .m-thought-seq{
    display:flex;align-items:center;gap:0;flex-wrap:nowrap;min-height:32px;
  }
  .m-thought-seq > svg + svg{margin-left:-2px}
  /* ---- V4: a Phase 1 row expands in place into its dictionary entry ----
     The dict body is a full-width second grid row, so the glyph columns
     (and the bridge X-math that keys off them) are untouched while collapsed.
     Bridges fade while any row is open, since their %-of-chain-height anchors
     don't hold once a row grows. */
  .m-thought-row .m-thought-label,.m-thought-row .m-thought-seq{cursor:pointer}
  /* expand affordance: a white chevron after the story name, rotates down when open */
  .m-dict-chev{display:inline-block;margin-left:7px;color:#f5f5f7;opacity:.65;vertical-align:1px;transition:transform .25s ease,opacity .2s ease}
  .m-thought-row.dict-open .m-dict-chev{transform:rotate(90deg);opacity:1}
  /* emotions are surfaced inside the dictionary definition now — drop the
     duplicate on-row label for a cleaner sequence */
  .m-thought-row .m-thought-meta{display:none}
  /* opaque card bg + above the bridge layer so the open entry paints over the
     interrelation line — the dashed line then shows only in the gap below */
  .m-thought-dict{grid-column:1 / -1;max-height:0;overflow:hidden;transition:max-height .35s ease;position:relative;z-index:2;background:#111}
  .m-thought-row.dict-open .m-thought-dict{max-height:260px}
  .m-thought-dict-in{padding:10px 0 14px;border-top:1px solid var(--rule-soft);margin-top:8px}
  .m-dict-def{font-size:13px;line-height:1.55;color:var(--txt-2);margin:0 0 10px;max-width:66%}
  @media (max-width:560px){ #calc .m-dict-def{max-width:none} }
  .m-dict-reveal{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--txt-2);margin:6px 0}
  .m-dict-lbl{color:var(--txt-3);font-size:11.5px}
  .m-dict-need{position:relative;color:#f5f5f7;font-weight:600}
  .m-dict-need::after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1.5px;background:#f5f5f7}
  /* reveal animation plays only the FIRST time each card opens — JS adds
     .dict-animate once per row; after it's removed the need just shows. */
  @keyframes mNeedReveal{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
  @keyframes mNeedSweep{from{right:100%}to{right:0}}
  .m-thought-row.dict-animate .m-dict-need{animation:mNeedReveal .45s ease both}
  .m-thought-row.dict-animate .m-dict-need::after{animation:mNeedSweep .5s ease .35s both}
  .m-dict-meta{display:flex;flex-wrap:wrap;gap:5px 16px;font-size:11.5px;color:var(--txt-3);margin-top:8px}
  .m-dict-meta b{color:var(--txt-2);font-weight:500}
  /* Interruptors — clustered outline glyphs with sub-labels */
  .m-thought-interruptors .m-int-seq{display:flex;align-items:center;gap:0;flex-wrap:wrap}
  /* beat the mobile #calc .m-thought-seq{flex-wrap:nowrap} so the DE cluster
     labels can break onto a second line instead of clipping right */
  #calc .m-thought-interruptors .m-int-seq{flex-wrap:wrap;row-gap:8px}
  .m-int-cluster{display:inline-flex;flex-direction:column;align-items:center;gap:5px}
  .m-int-glyphs{display:flex;align-items:center;gap:0}
  .m-int-glyphs > svg + svg{margin-left:-2px}
  .m-int-lbl{font-size:9.5px;text-transform:uppercase;letter-spacing:0.05em;color:#86868b;white-space:nowrap}
  .m-int-gap{width:26px;flex:0 0 26px}
  /* V4 reflow: bridge top/height are recomputed in JS from measured row
     positions on expand, so the inferred lines track the rows instead of
     fading. (No dict-active fade needed.) */
  /* Glyph ignition: when .m-thoughts-wrap has .run, fade each glyph's emotion
     fill in left-to-right. Frame (stroke) stays visible the whole time — the
     band is always there waiting for the charge to arrive. Per-glyph delay set
     inline. Outside .run, no animation applies and glyphs render statically. */
  @keyframes mGlyphIgnite{from{fill-opacity:0}to{fill-opacity:0.5}}
  @keyframes mGlyphDotIgnite{from{opacity:0}to{opacity:1}}
  /* Only animate glyphs inside actual story rows. Bridge-overlay glyphs are
     metadata about the rows above/below — they shouldn't ignite as if they
     were their own loop, and their inline fill-opacity (50% / 20% etc.) must
     not be overridden by the keyframe's terminal fill-opacity:1. */
  .m-thoughts-wrap.run .m-thought-row .m-glyph-fill{
    fill-opacity:0;
    animation:mGlyphIgnite 1.68s ease-out both;
  }
  .m-thoughts-wrap.run .m-thought-row .m-glyph-dot{
    opacity:0;
    animation:mGlyphDotIgnite 1.68s ease-out both;
  }
  /* Bridge visibility states:
       Default (no .run, no .revealed)    → invisible. Prevents the pop-up
                                            flash during render or re-render
                                            before the animation kicks in.
       wrap.run (animation in progress)   → invisible UNTIL the per-bridge
                                            .lit class is added wave-by-wave.
       wrap.revealed (animation finished) → all bridges visible. Survives
                                            re-renders triggered by edits.

     This means at all times: bridges are visible only when allowed,
     never accidentally visible mid-stage. */
  .m-thought-bridge-overlay{
    position:absolute;left:0;right:0;
    pointer-events:none;z-index:0;
    display:flex;align-items:flex-start;
    opacity:0;
    transition:opacity 1s ease-out;
    /* top + height set inline per-bridge to span row centers */
  }
  .m-thought-bridge-overlay.lit{opacity:1}
  .m-thoughts-wrap.revealed .m-thought-bridge-overlay{opacity:1}
  .m-thought-chain{
    display:flex;flex-direction:column;gap:34px;
    position:relative;
  }
  .m-bridge-svg{
    display:block;flex-shrink:0;height:100%;overflow:visible;
  }
  /* Bridge line + anchor node — a thin tied connection between two loops.
     Solid for user-declared links, dashed (via inline stroke-dasharray on
     the <line> element) for inferred ones. */
  .m-bridge-line{vector-effect:non-scaling-stroke}
.m-bridge-backdrop{display:none}
  .m-bridge-note{
    margin-left:10px;font-size:10.5px;color:var(--txt-3);letter-spacing:-0.005em;
    font-style:italic;white-space:nowrap;overflow:visible;
    max-width:none;align-self:center;
  }
  .m-bridge-note em{
    font-style:normal;font-weight:600;letter-spacing:0.02em;
    text-transform:uppercase;font-size:9.5px;
  }
  .m-emo-dd{position:relative;width:100%}
  .m-emo-dd > summary{
    list-style:none;cursor:pointer;
    display:flex;align-items:center;gap:8px;justify-content:space-between;
    width:100%;border:none;background:transparent;
    font-family:inherit;font-size:14px;color:var(--txt);font-weight:500;
    padding:6px 18px 6px 0;border-bottom:1px solid var(--rule-soft);
    outline:none;letter-spacing:-0.005em;
    transition:border-color .15s;
  }
  .m-emo-dd > summary::-webkit-details-marker{display:none}
  .m-emo-dd > summary .sum{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .m-emo-dd > summary .chev{
    position:absolute;right:4px;top:50%;transform:translateY(-50%);
    width:10px;height:6px;color:#86868b;transition:transform .15s;
  }
  .m-emo-dd[open] > summary .chev{transform:translateY(-50%) rotate(180deg)}
  .m-emo-dd[open] > summary{border-bottom-color:var(--blue)}
  .m-emo-list{
    position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;
    background:#fff;border:1px solid var(--rule-soft);border-radius:12px;
    box-shadow:0 6px 24px rgba(0,0,0,0.08);
    padding:6px;max-height:240px;overflow:auto;
  }
  .m-emo-opt{
    display:flex;align-items:center;gap:10px;
    padding:7px 10px;border-radius:8px;cursor:pointer;
    font-size:13px;color:var(--txt-1);
  }
  .m-emo-opt:hover{background:rgba(0,0,0,0.04)}
  .m-emo-opt input{accent-color:#1a1a1a}
  .m-thought-meta{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:var(--txt-3);letter-spacing:0.04em;text-transform:uppercase;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;
  }
  .m-thoughts-empty{
    font-size:13px;color:var(--txt-3);text-align:center;padding:24px;
  }
  .m-summary.appearing > .m-stat{
    animation: statAppear 1s ease-out both;
  }
  .m-summary.appearing > .m-stat:nth-child(1){animation-delay:0s}
  .m-summary.appearing > .m-stat:nth-child(2){animation-delay:.20s}
  .m-summary.appearing > .m-stat:nth-child(3){animation-delay:.44s}
  .m-stat-freq .v{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%}
  .m-freq-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .m-freq-num{
    font-family:inherit;font-weight:600;font-size:22px;color:var(--txt);
    letter-spacing:-0.014em;line-height:1.2;font-variant-numeric:tabular-nums;
  }
  .m-freq-num.contracting{color:#b3261e}
  .m-freq-num.mixed{color:#555}
  .m-freq-num.expanding{color:#1f7a3a}
  /* Nearest-emotion label that animates between the 16 emotion names as the
     running value sweeps past their frequency stops. Color is set inline
     during the tick to match the current bar tip. */
  .m-emo-label{
    display:none; /* emotion word hidden — number + tag + bar carry the meaning */
    font-weight:600;font-size:14px;letter-spacing:-0.005em;
    color:#280506; /* fallback: Shame (start state) */
  }
  .m-freq-bar{
    position:relative;height:6px;background:rgba(0,0,0,0.06);
    border-radius:980px;overflow:hidden;width:100%;
  }
  /* The fill's background gradient is painted to span the FULL 0-600 frequency
     scale, not just the fill's own width. We achieve that with
       background-size: calc(100% / fill-fraction)
     so that as the fill grows, the gradient stays anchored at the bar's
     leftmost edge in value-space. The fill's right edge moves through the
     gradient, picking up the matching tone at each value crossing.
     --grad-scale is the multiplier set inline as `100 / pct` at render time.

     The 16 colour stops are anchored at each emotion's exact frequency
     position (Shame 20, Guilt 30, ... Peace 600), as a percentage of the
     0-600 scale. Between stops the gradient interpolates smoothly, so a
     value between two emotions reads as a true blend (e.g. value 460 ≈
     midway between Reason blue and Love violet). */
  .m-freq-bar .fill{
    position:absolute;inset:0 auto 0 0;width:0;
    background-image:linear-gradient(to right,
      #280506 0%,
      #280506 3.33%,
      #46090b 5.00%,
      #640d10 8.33%,
      #821215 12.50%,
      #9f171b 16.67%,
      #bc1c21 20.83%,
      #d92228 25.00%,
      #df3e43 29.17%,
      #5347b8 33.33%,
      #6356c8 41.67%,
      #7365d4 51.67%,
      #8374dc 58.33%,
      #9082e4 66.67%,
      #a092e9 83.33%,
      #b3a6ee 90.00%,
      #cabcf3 100%
    );
    background-repeat:no-repeat;
    background-size:calc(100% * var(--grad-scale, 1)) 100%;
    background-position:left center;
    background-color:transparent;
    border-radius:inherit;
    transition: width 13.2s cubic-bezier(.22,1,.36,1) 5.04s,
                background-color 1.2s ease-out;
  }
  .m-freq-bar.run .fill{width:var(--w, 0%)}
  /* End-state handoff: once the counter has finished, replace the multi-stop
     gradient with a solid fill matching the FINAL emotion's exact hex. The
     final hex is set inline as --emo-color at calc time. */
  .m-freq-bar.settled .fill{
    background-image:none;
    background-color:var(--emo-color, #555);
  }
  .m-summary{
    display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
    background:var(--rule-soft);
    border-radius:14px;overflow:hidden;
    margin-top:24px;padding:1px;
  }
  @media(max-width:720px){
    .m-summary{grid-template-columns:repeat(2,1fr)}
  }
  /* Emotional range — horizontal spectrum card sitting between the
     summary stats and the // Patterns / // Frequency reading /
     // How to disengage collapsibles. Shows all 16 emotion levels at
     muted opacity; picked emotions render at full opacity with a count
     badge above and a label below. A baseline scale shows the
     20 → 600 frequency range with the 200 threshold marked. */
  .m-spectrum{
    margin-top:14px;background:#fff;border:1px solid var(--rule-soft);
    border-radius:14px;padding:22px 26px;
  }
  .m-spectrum:empty{display:none}
  .m-spectrum-lbl{
    font-size:11px;color:var(--txt-3);font-weight:600;
    letter-spacing:0.06em;text-transform:uppercase;
    display:block;margin-bottom:22px;
  }
  .m-spectrum-frame{position:relative;height:118px}
  .m-spectrum-bar{
    position:absolute;top:0;left:0;right:0;height:42px;
    display:grid;grid-template-columns:repeat(16,1fr);gap:2px;
  }
  .m-spectrum-cell{border-radius:2px;position:relative}
  .m-spectrum-cell.empty{opacity:0.18}
  /* Hover tooltip for every emotion in the strip — picked or background.
     Surfaces the label + frequency above the cell so users can map color
     to emotion without having to read the abbreviated 4-char label below. */
  .m-spectrum-cell::after{
    content:attr(data-label) " \00B7 " attr(data-freq);
    position:absolute;left:50%;bottom:calc(100% + 6px);
    transform:translateX(-50%);
    white-space:nowrap;
    background:rgba(20,20,22,0.96);color:#f5f5f7;
    padding:4px 8px;border-radius:6px;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10px;font-weight:500;letter-spacing:0.03em;
    opacity:0;pointer-events:none;transition:opacity .12s;
    z-index:6;
  }
  /* Picked cells already render their label directly underneath, so the
     hover tooltip only needs to surface the frequency number. */
  .m-spectrum-cell.picked::after{content:attr(data-freq)}
  .m-spectrum-cell:hover::after{opacity:1}
  .m-spectrum-cell.empty:hover{opacity:0.55}
  /* Picked cells start dim during the count-up animation and ignite
     (full opacity + count badge fades in) as the running freq value
     crosses each cell's data-emo-freq threshold. */
  .m-spectrum-cell.picked{
    opacity:0.18;transition:opacity .4s ease-out;
  }
  .m-spectrum-cell.picked.lit{opacity:1}
  .m-spectrum-count{
    position:absolute;top:-20px;left:50%;transform:translateX(-50%);
    color:#fff;font-size:10px;font-weight:600;border-radius:9px;
    padding:1px 6px;font-variant-numeric:tabular-nums;
    opacity:0;transform:translate(-50%,4px);
    transition:opacity .4s ease-out, transform .4s ease-out;
  }
  .m-spectrum-cell.picked.lit .m-spectrum-count{
    opacity:1;transform:translate(-50%,0);
  }
  .m-spectrum-labels{
    position:absolute;top:50px;left:0;right:0;
    display:grid;grid-template-columns:repeat(16,1fr);gap:2px;
    font-size:10.5px;text-align:center;color:transparent;
  }
  .m-spectrum-labels span.shown{
    color:transparent;font-weight:500;
    transition:color .4s ease-out;
  }
  .m-spectrum-labels span.shown.lit{color:var(--txt)}
  .m-spectrum-rule{
    position:absolute;top:86px;left:0;right:0;
    height:1px;background:var(--rule-soft);
  }
  .m-spectrum-scale{
    position:absolute;top:96px;left:0;right:0;
    display:flex;justify-content:space-between;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10px;color:var(--txt-3);letter-spacing:0.04em;
  }
  .m-spectrum-scale .threshold{color:var(--txt-2)}
  .m-spectrum-foot{
    display:flex;gap:24px;flex-wrap:wrap;
    padding-top:22px;margin-top:18px;
    border-top:1px solid var(--rule-soft);
    font-size:13px;color:var(--txt-3);
  }
  .m-spectrum-foot strong{
    color:var(--txt);font-weight:500;font-variant-numeric:tabular-nums;
  }
  .m-stat{background:#fff;padding:18px 20px;display:flex;flex-direction:column;gap:6px}
  .m-stat .lbl{font-size:11px;color:var(--txt-3);font-weight:600;letter-spacing:0.06em;text-transform:uppercase}
  .m-stat .v{font-family:inherit;font-weight:600;font-size:22px;color:var(--txt);letter-spacing:-0.014em;line-height:1.2;font-variant-numeric:tabular-nums}
  .m-stat .v.muted{color:var(--txt-3);font-weight:500;font-size:18px}
  .m-stat-sub{color:var(--txt-3);font-weight:500;font-size:14px;margin-left:2px}
  .m-stat-sub-orient{
    color:var(--txt-3);font-weight:500;font-size:12px;
    text-transform:uppercase;letter-spacing:0.04em;margin-top:4px;
  }
  /* light hint under the Audits stat: history persists, come back anytime */
  .m-stat-sub-note{color:var(--txt-3);font-weight:400;font-size:10.5px;margin-top:4px;line-height:1.4}
  /* Print-only mini emotional range tile inside #mSummary — hidden on
     screen because the full m-spectrum card already lives below. */
  .m-stat-emo-print{display:none}
  .m-tone-tag{
    display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;
    padding:2px 8px;border-radius:980px;letter-spacing:-0.005em;margin-left:8px;
  }
  .m-tone-tag::before{content:"";width:6px;height:6px;border-radius:50%}
  .m-tone-tag.contracting{
    --tone-bg:rgba(255,59,48,0.12);
    --tone-color:#b3261e;
    --tone-dot:#ff3b30;
    --tone-shadow:rgba(255,59,48,0.35);
    background:var(--tone-bg);color:var(--tone-color);
  }
  .m-tone-tag.contracting::before{background:var(--tone-dot)}
  .m-tone-tag.expanding{
    --tone-bg:rgba(52,199,89,0.14);
    --tone-color:#1f7a3a;
    --tone-dot:#34c759;
    --tone-shadow:rgba(52,199,89,0.35);
    background:var(--tone-bg);color:var(--tone-color);
  }
  .m-tone-tag.expanding::before{background:var(--tone-dot)}
  .m-tone-tag.mixed{
    --tone-bg:rgba(0,0,0,0.06);
    --tone-color:#555;
    --tone-dot:#999;
    --tone-shadow:rgba(0,0,0,0.18);
    background:var(--tone-bg);color:var(--tone-color);border:1px solid var(--rule-soft);
  }
  .m-tone-tag.mixed::before{background:var(--tone-dot)}
  .m-note{font-size:12px;color:var(--txt-3);margin-top:14px;text-align:center}
  .m-note a{color:var(--blue);text-decoration:underline;text-underline-offset:2px}
  .m-note a:hover{opacity:0.75}
  /* ----- Engagement bar (replaces the standalone PDF note line) ----- */
  .m-engage{
    margin-top:18px;padding-top:14px;
    border-top:1px solid var(--rule-soft);
    display:flex;align-items:center;justify-content:space-between;gap:14px;
  }
  .m-engage-note{margin:0;text-align:right;flex:1;min-width:0}
  .m-engage-actions{display:inline-flex;align-items:center;gap:4px}
  .m-engage-btn{
    width:34px;height:34px;border-radius:50%;
    display:inline-flex;align-items:center;justify-content:center;
    background:transparent;border:0;cursor:pointer;
    color:var(--txt-3);transition:color .15s, background .15s;
    padding:0;line-height:0;text-decoration:none;
  }
  .m-engage-btn svg{width:18px;height:18px;display:block}
  .m-engage-btn:hover{color:#94b8af;background:rgba(127,163,154,0.10)}
  .m-engage-btn:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
  /* Pressed heart — dim grey fill that echoes the inactive Phase 1/2
     slider thumb (rgba(245,245,247,0.08) bg + 0.22 border, label
     color #86868b). Looks "filled" without screaming red. */
  .m-engage-btn[aria-pressed="true"]{color:#86868b}
  .m-engage-btn[aria-pressed="true"] svg{
    fill:rgba(245,245,247,0.22);
    stroke:#86868b;
  }
  /* Heart button widens to fit an inline counter pill — quietly tells the
     visitor how many others have also liked the audit. */
  .m-engage-btn-with-count{
    width:auto;min-width:34px;height:34px;border-radius:18px;
    gap:5px;padding:0 10px 0 9px;
  }
  .m-engage-count{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;font-weight:500;letter-spacing:0.02em;
    color:inherit;line-height:1;font-variant-numeric:tabular-nums;
  }
  /* Small toast for the share-link-copied confirmation. */
  .m-engage-toast{
    position:absolute;right:0;bottom:calc(100% + 8px);
    background:rgba(20,20,22,0.96);color:#f5f5f7;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;letter-spacing:0.03em;
    padding:6px 10px;border-radius:6px;
    opacity:0;pointer-events:none;transition:opacity .15s;
    white-space:nowrap;z-index:6;
  }
  .m-engage-toast.show{opacity:1}
  .m-engage-actions{position:relative}
  /* Share menu — popover anchored under the share button. Dark, minimal,
     matches the audit aesthetic. Only shown on desktop; on touch devices
     we hand off to navigator.share() which surfaces the native sheet
     (WhatsApp, Telegram, etc. as installed apps). */
  .m-share-menu{
    position:absolute;top:calc(100% + 8px);right:0;
    background:rgba(20,20,22,0.98);
    border:1px solid rgba(245,245,247,0.12);
    border-radius:10px;
    padding:6px;
    min-width:180px;
    box-shadow:0 12px 32px rgba(0,0,0,0.5);
    z-index:10;
    backdrop-filter:blur(8px);
    -webkit-backdrop-filter:blur(8px);
    display:flex;flex-direction:column;gap:2px;
  }
  .m-share-menu[hidden]{display:none}
  .m-share-opt{
    display:flex;align-items:center;gap:10px;
    padding:8px 10px;border-radius:6px;
    color:#f5f5f7;font-size:13px;letter-spacing:-0.005em;
    text-decoration:none;cursor:pointer;
    background:transparent;border:0;width:100%;text-align:left;
    font-family:inherit;
    transition:background .12s;
  }
  .m-share-opt:hover,.m-share-opt:focus-visible{
    background:rgba(245,245,247,0.08);outline:none;
  }
  .m-share-ico{
    width:20px;height:20px;flex:0 0 20px;display:block;border-radius:4px;
  }
  .m-share-lbl{flex:1 1 auto;font-weight:500}
  /* Copy-link option lives on the same row but reads as utility. */
  .m-share-copy{border-top:1px solid rgba(245,245,247,0.08);margin-top:4px;padding-top:10px}
  /* Comments panel — collapsed under the engagement bar until the bubble
     icon is tapped. Visually quiet; the dark theme matches the audit. */
  .m-engage-comments{
    margin-top:16px;padding:18px 20px;
    background:#0a0a0a;border:1px solid var(--rule-soft);border-radius:12px;
  }
  .m-engage-comments[hidden]{display:none}
  .m-engage-comments-head{
    display:flex;align-items:baseline;justify-content:space-between;
    gap:14px;margin-bottom:14px;
  }
  .m-engage-comments-lbl{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:#7fa39a;font-weight:500;letter-spacing:0.04em;
    text-transform:uppercase;
  }
  .m-engage-comments-note{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:#6e6e73;letter-spacing:0.02em;
  }
  .m-engage-comments-placeholder{
    font-size:13px;color:#6e6e73;letter-spacing:-0.005em;line-height:1.5;
    text-align:center;padding:18px 0 6px;margin:0;
  }
  /* Once Cusdis is configured and the iframe injects, the placeholder is
     hidden by the JS that loads the script. */
  .m-engage-comments.configured .m-engage-comments-placeholder{display:none}
  /* Cusdis renders its widget into an <iframe>. With no comments yet it
     ships a default 150px iframe, which clips the Nickname + Email + Reply
     + Submit form. Give it room. The iframe still grows further if the
     thread fills with comments. */
  #cusdis_thread iframe{
    width:100% !important;
    min-height:520px !important;
    border:0;display:block;
  }
  .m-reading{
    margin-top:24px;background:#fff;
    border:1px solid var(--rule-soft);border-radius:14px;overflow:hidden;
  }
  .m-reading:empty{display:none}
  .m-reading-section{padding:24px 26px;border-bottom:1px solid var(--rule-soft)}
  .m-reading-section:last-child{border-bottom:none}
  .m-reading-section > .lbl{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:var(--blue);font-weight:500;letter-spacing:0.04em;
    text-transform:uppercase;display:block;margin-bottom:10px;
  }
  .m-reading-section h4{
    font-family:var(--serif);font-weight:400;font-size:22px;
    letter-spacing:-0.014em;line-height:1.2;color:var(--txt);margin-bottom:14px;
  }
  .m-reading-section h4 .meta{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:12px;color:var(--txt-3);font-weight:500;letter-spacing:0.04em;
    text-transform:uppercase;margin-left:8px;vertical-align:2px;
  }
  .m-reading-section p{
    font-size:14px;color:var(--txt-2);line-height:1.6;letter-spacing:-0.005em;
    margin-bottom:10px;
  }
  .m-reading-section p:last-child{margin-bottom:0}
  .m-reading-section p em{font-style:italic;color:var(--txt);font-weight:500}
  .m-reading-section p strong{font-weight:600;color:var(--txt)}
  .m-reading-section ol{
    padding:0;margin:0;list-style:none;counter-reset:rd;
    display:flex;flex-direction:column;gap:14px;
  }
  .m-reading-section ol li{
    counter-increment:rd;
    position:relative;padding-left:38px;
    font-size:14px;color:var(--txt-2);line-height:1.55;letter-spacing:-0.005em;
  }
  .m-reading-section ol li::before{
    content:counter(rd, decimal-leading-zero);
    position:absolute;left:0;top:3px;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:var(--txt-3);font-weight:500;letter-spacing:0.04em;
  }
  .m-reading-section ol li strong{font-weight:600;color:var(--txt)}
  .m-reading-section ol li em{font-style:italic;color:var(--txt)}
  .m-reading-cite{
    display:block;margin-top:14px;padding-top:12px;
    border-top:1px solid var(--rule-soft);
    font-size:12px;color:var(--txt-3);font-style:italic;letter-spacing:-0.005em;line-height:1.5;
  }
  /* Collapsible reading sections — Patterns / Frequency reading /
     How to disengage start closed behind a sage + chip that matches
     the // label color. Click to expand. */
  details.m-reading-section > summary{
    list-style:none;cursor:pointer;user-select:none;
    display:flex;align-items:center;justify-content:space-between;gap:14px;
    outline:none;
  }
  details.m-reading-section > summary::-webkit-details-marker{display:none}
  details.m-reading-section > summary::marker{content:''}
  .m-reading-summary-text{flex:1 1 auto;min-width:0}
  .m-reading-summary-text > .lbl{margin-bottom:0}
  .m-reading-toggle{
    flex:0 0 auto;
    display:inline-flex;align-items:center;justify-content:center;
    width:28px;height:28px;border-radius:50%;
    border:1px solid #1c1c1e;background:transparent;
    color:#7fa39a;font-size:18px;line-height:1;font-weight:400;
    transition:background-color .15s,color .15s,border-color .15s;
  }
  details.m-reading-section:not([open]) .m-reading-toggle::before{content:'+'}
  details.m-reading-section[open] .m-reading-toggle::before{content:'\2212'}
  details.m-reading-section > summary:hover .m-reading-toggle{
    background:rgba(127,163,154,0.12);color:#7fa39a;border-color:#7fa39a;
  }
  .m-reading-body{margin-top:14px}
  .m-reading-body > *:first-child{margin-top:0}
  .glossary{padding:56px 0;background:var(--bg);border-top:1px solid var(--rule-soft)}
  .glossary-head{max-width:760px;margin:0 auto 20px}
  .glossary-head .num{display:block;font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;font-size:11px;color:var(--txt-3);font-weight:500;margin-bottom:6px;letter-spacing:0.04em;text-transform:uppercase}
  .glossary-head h2{font-family:inherit;font-weight:600;color:var(--txt);font-size:18px;letter-spacing:-0.01em;line-height:1.3}
  .glossary-grid{
    max-width:760px;margin:0 auto;
    display:grid;grid-template-columns:1fr 1fr;column-gap:40px;
  }
  .gloss{border-bottom:1px solid var(--rule-soft)}
  .gloss > summary{
    list-style:none;cursor:pointer;
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:14px 4px;
  }
  .gloss > summary::-webkit-details-marker{display:none}
  .gloss .id{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:12px;color:var(--txt);font-weight:500;letter-spacing:0.06em;
  }
  .gloss .chev{
    width:14px;height:14px;color:var(--txt-3);transition:transform .2s ease;
    flex-shrink:0;
  }
  .gloss[open] .chev{transform:rotate(180deg);color:var(--txt)}
  .gloss > summary:hover .id{color:var(--blue)}
  .gloss > summary:hover .chev{color:var(--blue)}
  .gloss .body{padding:0 4px 16px 4px}
  .gloss .body h4{
    font-family:inherit;font-weight:600;font-size:14px;color:var(--txt);
    letter-spacing:-0.005em;line-height:1.35;margin:0 0 4px;
  }
  .gloss .body p{font-size:13px;color:var(--txt-2);line-height:1.55}
  .next-card{
    background:#1d1d1f;color:#f5f5f7;border-radius:24px;
    padding:56px 48px;text-align:center;max-width:880px;margin:0 auto;
  }
  .next-card h3{font-family:inherit;font-weight:600;font-size:clamp(24px,3.4vw,34px);letter-spacing:-0.02em;line-height:1.12;color:#fff;margin-bottom:14px}
  .next-card p{font-size:16px;color:#a1a1a6;max-width:48ch;margin:0 auto 24px;line-height:1.5}
  .next-card .ctas{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
  .next-card .btn{background:#fff;color:#1d1d1f}
  .next-card .btn:hover{background:#f5f5f7;color:#1d1d1f}
  .next-card .btn.ghost{background:transparent;color:#fff;border:1px solid #424245}
  .next-card .btn.ghost:hover{background:rgba(255,255,255,0.06);color:#fff}

  /* ---------- excerpt / The Manual ---------- */
  /* Outer card wraps the cover + excerpt block. Light surface, subtle border.
     Cover anchors the left; body fills the right with meta, prose, pills,
     and CTAs. TOC sits below the card as a separate, compact row. */
  /* The card used to have a soft background + border, framing the cover and
     excerpt as a distinct object. It now sits flush on the section bg so the
     section reads as one continuous surface. Layout is preserved. */
  .manual-card{
    display:grid;grid-template-columns:auto 1fr;column-gap:48px;row-gap:16px;align-items:center;
    max-width:1040px;margin:0 auto;
    padding:0;
  }
  @media(max-width:820px){
    .manual-card{grid-template-columns:1fr;row-gap:24px;padding:0}
  }

  /* The book cover in section 03 is now a layered stack: a rotated "page"
     element peeks out from behind a smaller cover front. The page shows the
     1.3.1 Thought Stream diagram from the manuscript, so the section visually
     promises "the book has actual visual frameworks inside" not just prose.
     The audit's parallelogram glyphs come straight from this diagram — seeing
     it here pre-installs the visual language. */
  .book-cover{
    position:relative;
    width:400px;height:340px;
    flex-shrink:0;
  }
  /* v4 cover (shipped): single rendered PNG of the lanes design with
     deep-indigo present-moment baseline. Only the cover-front slab is
     hidden — the peeking .cover-page (the 1.3.4 Senses-Needs-Correlation
     diagram leaf) stays visible behind, so the layered "book with a page
     peeking out" affordance survives. The new img sits in the FRONT z
     position where cover-front used to be. */
  .book-cover-img{
    position:absolute;left:0;top:0;
    width:240px;height:320px;
    z-index:1;
    display:block;object-fit:cover;
    border-radius:4px;box-shadow:4px 6px 16px rgba(0,0,0,0.18);
  }
  @media(max-width:820px){
    .book-cover-img{width:192px;height:256px}
  }
  .cover-front{display:none !important}
  @media(max-width:820px){
    /* keep the cover + peeking page overlapping (like desktop), just smaller */
    .book-cover{position:relative;width:300px;height:272px;margin:0 auto;display:block}
  }

  /* The peeking page: rotated, sized to MATCH cover-front (so if you slid
     them together they'd line up exactly), sits BEHIND the cover via
     z-index. The page renders a faux chapter opener: section label,
     "1.3.1 Thoughtlanes" heading, an underscore rule, a few faint gray
     body-text lines (drawn in CSS, never actually readable), then the
     diagram itself. The whole stack reads as "a page from inside the book." */
  .cover-page{
    position:absolute;left:120px;top:0;
    width:240px;height:320px;
    background:#fff;border:1px solid var(--rule-soft);border-radius:3px;
    box-shadow:2px 4px 14px rgba(0,0,0,0.10);
    padding:14px;
    transform:rotate(6deg);
    transform-origin:left top;
    z-index:0;
    box-sizing:border-box;
    display:flex;flex-direction:column;
  }
  @media(max-width:820px){
    .cover-page{position:absolute;left:96px;top:0;transform:rotate(6deg);transform-origin:left top;width:192px;height:256px;aspect-ratio:auto}
  }
  /* Section label sitting above the chapter title, like a folio crumb. */
  .cp-label{
    font-family:ui-sans-serif,system-ui,sans-serif;
    font-size:10px;font-weight:600;color:var(--txt-soft);letter-spacing:0.05em;
    margin-bottom:3px;text-align:center;
  }
  /* Chapter title. Tight, serif, looks like a book heading. */
  .cp-heading{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;
    font-size:7px;font-weight:400;color:var(--txt);
    margin-bottom:3px;line-height:1.1;text-align:center;
  }
  /* Underscore rule, like a manuscript section break. */
  .cp-rule{
    width:24px;height:0.8px;background:var(--txt);margin-bottom:6px;margin-left:auto;margin-right:auto;
  }
  /* Faux body-text lines: gray bars at body-text height that read as text
     without ever being misread. The last line is shorter, like prose. */
  .cp-faux{
    display:flex;flex-direction:column;gap:2px;margin-bottom:8px;
  }
  .cp-faux .line{
    height:2px;background:var(--rule-soft);border-radius:1px;
  }
  .cp-faux .line.short{
    width:65%;
  }
  /* The diagram fills whatever room is left in the page below the faux text. */
  .cover-page img{
    display:block;width:100%;height:auto;
    flex:1;object-fit:contain;min-height:0;
  }

  /* The cover front: sits in FOREGROUND via z-index. Same size as
     cover-page (240x320) so the two layered elements are exact matches —
     slide one over the other and they line up edge to edge. Carries the
     same dark slab + serif title + italic subtitle + amber rule + author
     as before. */
  .cover-front{
    position:absolute;left:0;top:0;
    width:240px;height:320px;
    z-index:1;
  }
  @media(max-width:820px){
    .cover-front{position:absolute;left:0;top:0;width:192px;height:256px;aspect-ratio:auto}
  }
  .bc-body{
    position:relative;
    width:100%;height:100%;
    background:#1c1c1e;color:#f5f5f7;
    border-radius:4px;
    padding:32px 28px;
    display:flex;flex-direction:column;
    box-shadow:inset 3px 0 0 #0a0a0a, 4px 6px 16px rgba(0,0,0,0.18);
    box-sizing:border-box;
  }
  .bc-title{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;
    font-size:26px;font-weight:500;line-height:1.05;letter-spacing:-0.01em;
    display:flex;flex-direction:column;gap:2px;
  }
  .bc-sub{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;
    font-style:italic;font-size:11px;line-height:1.4;color:#a1a1a6;
    margin-top:14px;
  }
  .bc-rule{
    width:38px;height:2px;background:#ff9500;margin-top:12px;
  }
  .bc-author{
    margin-top:auto;font-size:10px;letter-spacing:0.14em;
    color:#86868b;font-weight:500;
  }

  /* Body next to the cover — eyebrow + chapter title, then meta, prose,
     and pills row. */
  .manual-body{min-width:0}
  .excerpt-head{margin-bottom:8px}
  .excerpt-eyebrow{
    font-size:11px;color:var(--txt-3);font-weight:600;
    letter-spacing:0.08em;text-transform:uppercase;
    margin-bottom:4px;
  }
  .excerpt-title{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;
    font-size:22px;font-weight:500;line-height:1.2;letter-spacing:-0.012em;
    color:var(--txt);margin:0;
  }
  .manual-body .excerpt-meta{
    font-size:13px;color:var(--txt-3);font-weight:500;
    margin-bottom:16px;letter-spacing:-0.005em;
  }
  .manual-body .excerpt{
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;
    font-weight:400;color:var(--txt);
    font-size:18px;line-height:1.55;letter-spacing:-0.008em;
    margin-bottom:24px;
  }
  .manual-body .excerpt p{margin-bottom:14px}
.manual-body .excerpt p.excerpt-eq{margin:4px 0}
.manual-body .excerpt p.excerpt-tight{margin-bottom:0}
.manual-body .excerpt p.excerpt-tight + p.excerpt-eq{margin-top:0}
  .manual-body .excerpt em{font-style:italic;color:var(--txt)}

  /* Meta pills — now used to display chapter titles from the TOC. Each pill
     carries a small leading number for the chapter index. */
  .manual-pills{
    display:flex;flex-wrap:wrap;gap:8px;
  }
  .pill{
    display:inline-flex;align-items:center;gap:8px;
    font-size:13px;color:var(--txt-2);
    background:var(--bg);
    border:1px solid var(--rule);
    padding:8px 14px;border-radius:980px;
    font-weight:500;letter-spacing:-0.005em;white-space:nowrap;
  }
  .pill-n{
    font-size:11px;color:var(--txt-3);font-weight:600;
    font-variant-numeric:tabular-nums;letter-spacing:0;
  }

  /* ---------- author ---------- */
  /* Two-column on desktop: copy left, portrait right. Mobile stacks the
     portrait above the copy and re-centers everything to match the prior
     single-column read. */
  .about{
    display:grid;
    grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);
    gap:56px;align-items:start;
    max-width:980px;margin:0 auto;
  }
  .portrait{
    aspect-ratio:600/660;border-radius:14px;overflow:hidden;
    border:1px solid var(--rule-soft);background:var(--bg-soft);margin:0;
  }
  .portrait img{width:100%;height:100%;object-fit:cover;object-position:center 28%;display:block}
  .id-card{border:1px solid var(--rule-soft);border-radius:14px;padding:22px;background:#fff}
  .id-card .row{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--rule-soft);font-size:13px}
  .id-card .row:last-child{border-bottom:none}
  .id-card .row .k{color:var(--txt-3);font-weight:500}
  .id-card .row .v{color:var(--txt);font-weight:500}
  .about .copy h3{font-family:'Fraunces',ui-serif,Georgia,serif;color:var(--txt);font-weight:500;font-size:30px;line-height:1.15;margin-bottom:18px;letter-spacing:-0.018em;text-align:left}
  .about .copy p{font-size:16px;color:var(--txt-2);margin:0 0 14px;max-width:none;line-height:1.55;text-align:left}
  .about .copy .principle{
    border-left:2px solid var(--txt);border-top:none;padding:6px 0 6px 16px;margin:28px 0 0;max-width:34ch;
    font-family:'Fraunces','New York',ui-serif,Georgia,serif;font-style:italic;
    color:var(--txt);font-size:20px;line-height:1.4;text-align:left;
  }
  @media(max-width:820px){
    .about{grid-template-columns:1fr;gap:28px;max-width:760px}
    .about .copy{max-width:680px;margin:0 auto;text-align:center}
    .about .copy h3{text-align:center}
    .about .copy p{text-align:center;max-width:none}
    .about .copy .principle{
      border-left:none;border-top:2px solid var(--txt);
      padding:18px 0 0;margin:28px auto 0;text-align:center;
    }
    .portrait{max-width:320px;margin:0 auto;border-radius:12px}
    #author .sec-head{text-align:center}
  }

  /* ---------- reserve a copy ---------- */
  /* Single horizontal row: email input + button, centered. Sits as the
     bottom row of .manual-card spanning both columns. The dashed top rule
     visually separates it from the chapter pills above. */
  .reserve-offer{
    grid-column:1 / -1;
    text-align:center;color:var(--txt-2);font-size:15px;line-height:1.5;
    margin:0 auto;padding-top:6px;white-space:nowrap;
  }
  @media(max-width:720px){.reserve-offer{white-space:normal;max-width:42ch}}
  .manual-reserve{
    grid-column:1 / -1;
    display:flex;justify-content:center;align-items:center;gap:10px;
    flex-wrap:wrap;
    padding-top:8px;
  }
  .manual-reserve input[type=email]{
    background:#fff;border:1px solid var(--rule);color:var(--txt);
    font-family:inherit;font-size:15px;padding:12px 18px;outline:none;border-radius:8px;
    min-width:280px;transition:border-color .15s,box-shadow .15s;
  }
  .manual-reserve input[type=email]:focus{
    border-color:var(--txt);box-shadow:0 0 0 4px rgba(29,29,31,0.08);
  }
  /* "Send me the PDF" — light-mode counterpart of the Section 5 "Notify me"
     button. Quietened from the solid-black pill: subtle dark tint, visible
     border, weight-600 text, 8px radius matching the input. */
  .manual-reserve .btn{
    background:rgba(0,0,0,0.06);
    border:1px solid rgba(0,0,0,0.22);
    color:var(--txt);
    border-radius:8px;
    font-weight:600;
    letter-spacing:-0.005em;
    transition:background .15s,border-color .15s,color .15s;
  }
  .manual-reserve .btn:hover{
    background:rgba(0,0,0,0.10);
    border-color:rgba(0,0,0,0.38);
    color:var(--txt);
    text-decoration:none;
  }
  /* Nav "Read the first chapter" CTA — picks up the same Direct scheme
     as Send-me-the-PDF but without the visible border so the nav stays
     uncluttered. Nav button keeps its own padding/font. */
  .nav .btn{
    background:rgba(0,0,0,0.06);
    border:0;
    color:var(--txt);
    border-radius:8px;
    font-weight:600;
    letter-spacing:-0.005em;
    transition:background .15s,color .15s;
  }
  .nav .btn:hover{
    background:rgba(0,0,0,0.10);
    color:var(--txt);
    text-decoration:none;
  }
  @media(max-width:560px){
    .manual-reserve{flex-direction:column;align-items:stretch}
    .manual-reserve input[type=email]{min-width:0;width:100%}
    .manual-reserve .btn{width:100%}
  }

  /* ---------- footer ---------- */
  footer{padding:44px 0;border-top:1px solid var(--rule-soft);font-size:13px;color:var(--txt-3)}
  footer .row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px;align-items:center}

  /* hide nav on small screens */
  /* Mobile: hide the inline nav links but keep the language switch
     pill visible so visitors can always cross between EN and DE. */
  @media(max-width:740px){
    .nav ul{display:flex;gap:14px}
    .nav ul li{display:none}
    .nav ul li:has(.lang-switch){display:list-item}
  }

  /* =========================================================
     SECTION 02 / Self-Enquiry Audit — dark theme
     Inverts the audit so it visually breaks from the rest of
     the page. Pure black surround, near-black inner surfaces,
     buttons flipped from black/white to white/black.
     Scoped strictly to #calc so nothing else is affected.
     ========================================================= */
  #calc{
    background:#000;
    color:#f5f5f7;
    --bg:        #000;
    --bg-soft:   #0a0a0a;
    --txt:       #f5f5f7;
    --txt-1:     #f5f5f7;
    --txt-2:     #a1a1a6;
    --txt-3:     #6e6e73;
    --rule:      #2a2a2c;
    --rule-soft: #1c1c1e;
  }
  /* section header copy */
  #calc .sec-head h2{color:#f5f5f7}
  #calc .sec-head .num{color:#6e6e73}
  #calc .sec-head p{color:#a1a1a6}

  /* Example Mental Output preview card — dark theme override */
  #calc .m-example-output{
    background:rgba(255,255,255,0.025);
    border-color:rgba(255,255,255,0.07);
  }
  #calc .m-example-foot{border-top-color:rgba(255,255,255,0.07)}
  #calc .m-start-skip{
    background:transparent;border-color:rgba(255,255,255,0.14);color:#86868b;
  }
  #calc .m-start-skip:hover{border-color:#a1a1a6;color:#a1a1a6}

  /* Hide the audit subcopy on all screens past the Start screen.
     mStart carries the hidden attribute once the user clicks Get started,
     so this :has() selector flips the subcopy off for Intake / Edit
     stories / Result, and back on if they return to Start via Back. */
  #calc:has(#mStart[hidden]) .sec-head p{display:none}
  /* Source-disciplines strip belongs to the Start screen only — hide it once
     the audit begins (mStart hidden), back on if they return to Start. */
  #calc:has(#mStart[hidden]) .sources-strip{display:none}

  /* matrix container — the audit's outer card */
  #calc .matrix{
    background:#0a0a0a;
    border-color:#1c1c1e;
    box-shadow:0 1px 0 rgba(255,255,255,0.04);
  }

  /* intake screen */
  #calc .m-intake h3{color:#f5f5f7}
  #calc .m-intake-lede{color:#a1a1a6}
  #calc .m-intake-field{
    background:#111;border-color:#1c1c1e;
  }
  #calc .m-intake-lbl{color:#86868b}
  #calc .m-intake-input,
  #calc .m-intake-select{
    color:#f5f5f7;border-bottom-color:#2a2a2c;
    background:transparent;
  }
  #calc .m-intake-input::placeholder{color:#6e6e73}
  #calc .m-intake-input:focus,
  #calc .m-intake-select:focus{border-bottom-color:#f5f5f7;outline:none}
  /* Force every background longhand explicitly so no UA chrome leaks. */
  #calc .m-intake-select{
    background-color:transparent !important;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6"><path d="M0 0l5 6 5-6z" fill="%23a1a1a6"/></svg>');
    background-repeat:no-repeat;
    background-position:right 2px center;
    background-size:10px 6px;
  }
  #calc .m-intake-select option{background-color:#111;color:#f5f5f7}
  #calc .m-intake-select option:checked{background-color:#1c1c1e}
  /* invalid/placeholder state — Chrome can render this with a faint tint */
  #calc .m-intake-select:invalid{color:#6e6e73}
  #calc .m-intake-rm{color:#6e6e73}
  #calc .m-intake-rm:hover{background:#1c1c1e;color:#f5f5f7}
  #calc .m-intake-add{
    border-color:#2a2a2c;color:#a1a1a6;background:transparent;
  }
  #calc .m-intake-add:hover{border-color:#f5f5f7;color:#f5f5f7}
  /* primary "Get started" — flipped from black-on-white to white-on-black */
  #calc .m-intake-go{
    background:#f5f5f7;color:#0a0a0a;
  }
  #calc .m-intake-go:hover{background:#fff;color:#000}
  #calc .m-intake-example{color:#6e6e73}
  #calc .m-intake-example:hover{color:#f5f5f7}
  #calc .m-howto{background:#111;border-color:#1c1c1e}
  #calc .m-howto-step h4{color:#f5f5f7}
  #calc .m-howto-step p{color:#a1a1a6}
  #calc .m-howto-step p em{color:#f5f5f7}

  /* matrix head — title row + reset/back pills */
  #calc .matrix-head{border-bottom-color:#1c1c1e}
  #calc .matrix-head h3{color:#f5f5f7}
  #calc .m-reset{
    background:transparent;border-color:#2a2a2c;color:#a1a1a6;
  }
  #calc .m-reset:hover{background:#1c1c1e;color:#f5f5f7}

  /* tell the browser to render native controls in dark mode —
     fixes the off-white select chrome and the light range track */
  #calc{color-scheme:dark}

  /* story cards */
  #calc .m-card{
    background:#111;border-color:#1c1c1e;
  }
  #calc .m-card .f .lbl{color:#86868b}
  #calc .m-card .f .lbl em{color:#6e6e73}
  #calc .m-card input[type=text]{
    color:#f5f5f7;border-bottom-color:#2a2a2c;background:transparent;
  }
  #calc .m-card input[type=text]::placeholder{color:#6e6e73}
  /* selects: explicit background-color so no UA chrome bleeds through;
     transparent so the parent card color shows. */
  #calc .m-card select{
    color:#f5f5f7;border-bottom-color:#2a2a2c;
    background-color:transparent;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6"><path d="M1 1l4 4 4-4" stroke="%23a1a1a6" stroke-width="1.5" fill="none"/></svg>');
    background-repeat:no-repeat;
    background-position:right 4px center;
  }
  /* the option list itself (rendered by the OS) */
  #calc .m-card select option{background-color:#111;color:#f5f5f7}
  #calc .m-card select option:checked{background-color:#1c1c1e}

  /* importance slider — dark track + light thumb */
  #calc .m-card .grav-row input[type=range]{
    accent-color:#f5f5f7;
    -webkit-appearance:none;appearance:none;
    height:4px;background:transparent;cursor:pointer;
  }
  #calc .m-card .grav-row input[type=range]::-webkit-slider-runnable-track{
    height:4px;background:#2a2a2c;border-radius:980px;
  }
  #calc .m-card .grav-row input[type=range]::-moz-range-track{
    height:4px;background:#2a2a2c;border-radius:980px;border:0;
  }
  #calc .m-card .grav-row input[type=range]::-webkit-slider-thumb{
    -webkit-appearance:none;appearance:none;
    width:16px;height:16px;border-radius:50%;
    background:#f5f5f7;border:0;cursor:pointer;
    margin-top:-6px;
    box-shadow:0 0 0 1px rgba(0,0,0,0.4);
  }
  #calc .m-card .grav-row input[type=range]::-moz-range-thumb{
    width:16px;height:16px;border-radius:50%;
    background:#f5f5f7;border:0;cursor:pointer;
    box-shadow:0 0 0 1px rgba(0,0,0,0.4);
  }
  #calc .m-card .grav-row input[type=range]:focus{outline:none}
  #calc .m-card .grav-row input[type=range]:focus::-webkit-slider-thumb{
    box-shadow:0 0 0 1px rgba(0,0,0,0.4),0 0 0 4px rgba(245,245,247,0.18);
  }
  #calc .m-card .grav-row input[type=range]:focus::-moz-range-thumb{
    box-shadow:0 0 0 1px rgba(0,0,0,0.4),0 0 0 4px rgba(245,245,247,0.18);
  }
  /* "3/5 · Moderate" label — the highlighted number was blue (light theme),
     swap to white on dark so it fits the rest of the inverted palette */
  #calc .m-card .grav-label .n{color:#f5f5f7}
  #calc .m-card-head .idx{color:#6e6e73}
  #calc .m-card-head .title{color:#f5f5f7}
  #calc .m-card-head .status{
    color:#a1a1a6;border-color:#2a2a2c;background:#0a0a0a;
  }
  #calc .m-card-head .status.done{
    color:#5ad28c;border-color:#1f4d2f;background:#0f1f15;
  }
  #calc .m-card .grav-label{color:#f5f5f7}
  #calc .m-card .f-grav{border-top-color:#1c1c1e}
  #calc .m-card:not(.collapsed) .m-card-head{border-bottom-color:#1c1c1e}

  /* multi-selects (emotion dropdown + inter-relation menu) */
  #calc .m-emo-dd > summary{
    color:#f5f5f7;border-bottom-color:#2a2a2c;
  }
  #calc .m-emo-dd[open] > summary{border-bottom-color:#f5f5f7}
  #calc .m-emo-list{
    background:#0a0a0a;border-color:#1c1c1e;
    box-shadow:0 6px 24px rgba(0,0,0,0.5);
  }
  #calc .m-emo-opt{color:#f5f5f7}
  #calc .m-emo-opt:hover{background:rgba(255,255,255,0.06)}
  #calc .m-chips{border-bottom-color:#2a2a2c}
  #calc .m-chip{
    background:#0a0a0a;border-color:#2a2a2c;color:#f5f5f7;
  }
  #calc .m-chip .x{color:#6e6e73}
  #calc .m-chip-empty{color:#6e6e73}
  #calc .m-multi-trigger{
    background:transparent;border-color:#2a2a2c;color:#a1a1a6;
  }
  #calc .m-multi-trigger:hover{border-color:#f5f5f7;color:#f5f5f7}
  #calc .m-multi-menu{
    background:#0a0a0a;border-color:#1c1c1e;
    box-shadow:0 8px 24px -8px rgba(0,0,0,0.6),0 2px 6px rgba(0,0,0,0.3);
  }
  #calc .m-multi-opt{color:#f5f5f7}
  #calc .m-multi-opt:hover{background:rgba(255,255,255,0.06)}
  #calc .m-multi-empty{color:#6e6e73}

  /* add story (dashed) + primary calculate button (flipped) */
  #calc .m-add{
    background:transparent;border-color:#2a2a2c;color:#a1a1a6;
  }
  #calc .m-add:hover{
    border-color:#f5f5f7;color:#f5f5f7;background:rgba(255,255,255,0.03);
  }
  #calc .m-calc{
    background:#f5f5f7;color:#0a0a0a;
  }
  #calc .m-calc:hover{background:#fff;color:#000}

  /* result screen */
  #calc .m-result-head{border-bottom-color:#1c1c1e}
  #calc .m-result-head h3{color:#f5f5f7}
  #calc .m-back{
    background:transparent;border-color:#2a2a2c;color:#a1a1a6;
  }
  #calc .m-back:hover{border-color:#f5f5f7;color:#f5f5f7}
  #calc .m-recalc{
    background:transparent;border-color:#2a2a2c;color:#a1a1a6;
  }
  #calc .m-phase-slider{background:rgba(255,255,255,0.03);border-color:#2a2a2c}
  #calc .m-phase-slider-thumb{
    background:rgba(245,245,247,0.08);
    border:1px solid rgba(245,245,247,0.22);
  }
  #calc .m-phase-slider-opt{color:#86868b}
  #calc .m-phase-slider-opt.active{color:#f5f5f7;font-weight:600}
  #calc .m-phase-slider-opt:not(.active):hover{color:#f5f5f7}
  #calc .m-recalc:hover{border-color:#f5f5f7;color:#f5f5f7}

  /* thought sequence */
  #calc .m-thoughts-wrap{
    background:#101D26;border-color:#2C3F4D;
  }
  #calc .m-thoughts-legend .lg{color:#a1a1a6}
  /* Legend swatches in dark mode — parallelogram outlines for contracting/
     expanding (matching the live glyph silhouette), hollow blue circle for
     communion-centric, filled gray dot for ego-centric. */
  #calc .m-thoughts-legend .lg::before{
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%236e6e73" stroke-width="1.6" stroke-linejoin="round"/></svg>');
  }
  #calc .m-thoughts-legend .lg-e::before{
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%23f5f5f7" stroke-width="1.6" stroke-linejoin="round"/></svg>');
  }
  #calc .m-thoughts-legend .lg-pc::before{background:#6e6e73;background-image:none}
  #calc .m-thoughts-legend .lg-pe::before{background:transparent;border:1.5px solid #f5f5f7;background-image:none}
  /* Emotionally-charged glyph — diagonal split Anger/Love, light contracting frame */
  #calc .m-thoughts-legend .lg-ec::before{
    background-color:transparent;border:0;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L24.16 24.55 L1 24.55 Z" fill="%23d65a1c"/><path d="M7.63 1 L30.79 1 L24.16 24.55 Z" fill="%234f3aa8"/><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%236e6e73" stroke-width="1.6" stroke-linejoin="round"/></svg>');
  }
  /* Mind icon — dark mode: matches the Phase 2 sphere palette */
  #calc .m-thoughts-legend .lg-mind::before{
    background-color:transparent;border:0;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 26"><ellipse cx="18" cy="13" rx="16" ry="11" fill="%233a3a40" fill-opacity="0.7"/><ellipse cx="18" cy="13" rx="11" ry="7.5" fill="%230a0a0d" stroke="%237a7a82" stroke-width="1.1"/></svg>');
  }
  #calc .m-thought-label{color:#f5f5f7}
  #calc .m-thought-label .topic{color:#6e6e73}
  #calc .m-thought-row.unnamed .m-thought-label{color:#6e6e73}
  #calc .m-thought-meta{color:#6e6e73}
  #calc .m-thoughts-empty{color:#6e6e73}

  /* summary stats */
  #calc .m-summary{background:#1c1c1e}
  #calc .m-stat{background:#0a0a0a}
  #calc .m-stat .lbl{color:#86868b}
  #calc .m-stat .v{color:#f5f5f7}
  #calc .m-stat .v.muted{color:#6e6e73}
  #calc .m-stat-sub{color:#6e6e73}
  #calc .m-stat-sub-orient{color:#a1a1a6}
  #calc .m-stat-sub-note{color:#6e6e73}
  /* Emotional range card — dark theme */
  #calc .m-spectrum{background:#0a0a0a;border-color:#1c1c1e}
  #calc .m-spectrum-lbl{color:#86868b}
  #calc .m-spectrum-rule{background:#1c1c1e}
  #calc .m-spectrum-scale{color:#6e6e73}
  #calc .m-spectrum-scale .threshold{color:#86868b}
  #calc .m-spectrum-labels span.shown{color:#f5f5f7}
  #calc .m-spectrum-foot{color:#86868b;border-top-color:#1c1c1e}
  #calc .m-spectrum-foot strong{color:#f5f5f7}
  /* Frequency number takes its tone colour. On the near-black audit section
     the standard tone hexes read dim, so use the brighter Apple-system
     red/green that already exist as the tone-tag dot colours. */
  #calc .m-freq-num.contracting{color:#ff453a}
  #calc .m-freq-num.expanding{color:#30d158}
  #calc .m-freq-num.mixed{color:#a1a1a6}
  #calc .m-freq-bar{background:rgba(255,255,255,0.08)}
  /* Dark-mode end state — emotion-coloured fill overrides the bar's
     transparent background. --emo-color is set inline at calc time to the
     final emotion's exact hex. Light-mode shares the same rule (no
     dark-mode-specific override needed) since each emotion has one hex. */
  #calc .m-freq-bar.settled .fill{background-image:none}
  #calc .m-tone-tag.mixed{
    background:rgba(255,255,255,0.08);color:#c7c7cc;border-color:#2a2a2c;
  }

  /* reading panels */
  #calc .m-reading{background:#0a0a0a;border-color:#1c1c1e}
  #calc .m-reading-section{border-bottom-color:#1c1c1e}
  #calc .m-reading-section h4{color:#f5f5f7}
  #calc .m-reading-section p{color:#a1a1a6}
  #calc .m-reading-section p em,
  #calc .m-reading-section p strong{color:#f5f5f7}
  #calc .m-reading-section ol li{color:#a1a1a6}
  #calc .m-reading-section ol li::before{color:#6e6e73}
  #calc .m-reading-section ol li strong,
  #calc .m-reading-section ol li em{color:#f5f5f7}
  /* In-prose visuals (interrelation graph + frequency band meter) */
  #calc .m-read-vis{background:#101D26;border:1px solid #2C3F4D;border-radius:10px;padding:13px 15px;margin:4px 0 14px}
  #calc .m-read-graph{display:flex;justify-content:center}
  #calc .m-read-cap{font-size:11px;color:#86868b;margin-top:9px;line-height:1.5}
  #calc .m-read-cap b{color:#a1a1a6;font-weight:500}
  #calc .m-read-meter{position:relative;padding-top:20px}
  #calc .m-rm-track{position:relative;height:34px;display:flex;border-radius:7px;overflow:hidden}
  #calc .m-rm-seg{display:flex;align-items:center;justify-content:center;font-size:10px;letter-spacing:0.03em;color:#8e8e93;font-weight:600}
  #calc .m-rm-int{position:absolute;top:14px;bottom:18px;width:0;border-left:1.5px dashed #6e6e73;z-index:2}
  #calc .m-rm-int span{position:absolute;bottom:-16px;left:50%;transform:translateX(-50%);font-size:9px;color:#86868b;white-space:nowrap}
  #calc .m-rm-needle{position:absolute;top:14px;bottom:18px;width:0;border-left:2px solid #c7c7cc;z-index:3}
  #calc .m-rm-bub{position:absolute;top:-19px;left:50%;transform:translateX(-50%);background:#2c2c2e;color:#f5f5f7;font-size:11px;font-weight:600;border-radius:5px;padding:1px 7px;white-space:nowrap}
  #calc .m-rm-scale{display:flex;justify-content:space-between;font-size:9px;color:#86868b;margin-top:18px}
  #calc .m-reading-cite{
    color:#6e6e73;border-top-color:#1c1c1e;
  }

  /* small footer note + print link */
  #calc .m-note{color:#6e6e73}
  /* engagement bar — dark theme */
  #calc .m-engage{border-top-color:#1c1c1e}
  #calc .m-engage-btn{color:#86868b}
  #calc .m-engage-btn:hover{color:#94b8af;background:rgba(148,184,175,0.12)}

  /* =========================================================
     Coaching sprint CTA — sits below the reading on the result
     screen. Quiet teal/sage accent so it reads as continuation
     of the diagnosis rather than as a banner / funnel.
     ========================================================= */
  #calc .m-coach{
    margin-top:32px;
    border:1px solid #1c1c1e;
    border-top:1px solid rgba(127,163,154,0.35);
    background:linear-gradient(180deg,#0d1311 0%,#0a0a0a 100%);
    border-radius:14px;
    padding:30px 32px 26px;
    display:flex;flex-direction:column;gap:18px;
  }
  #calc .m-coach[hidden]{display:none}
  #calc .m-coach-head{display:flex;align-items:center;gap:10px}
  #calc .m-coach-eyebrow{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:11px;color:#7fa39a;font-weight:500;letter-spacing:0.04em;
    text-transform:uppercase;
  }
  #calc .m-coach-tag{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10px;font-weight:500;letter-spacing:0.04em;text-transform:uppercase;
    color:#7fa39a;
    border:1px solid rgba(127,163,154,0.35);
    background:rgba(127,163,154,0.08);
    padding:3px 8px;border-radius:980px;
  }
  #calc .m-coach h4{
    font-family:'Fraunces','Iowan Old Style','Georgia',serif;
    font-weight:400;font-size:22px;letter-spacing:-0.014em;line-height:1.25;
    color:#f5f5f7;margin:0;
  }
  #calc .m-coach h4 em{font-style:italic;color:#f5f5f7}
  #calc .m-coach p{
    font-size:15.5px;line-height:1.6;color:#a1a1a6;margin:0;
  }
  #calc .m-coach p strong{font-weight:600;color:#f5f5f7}
  #calc .m-coach p em{font-style:italic;color:#f5f5f7;font-weight:500}
  #calc .m-coach-row{
    display:flex;align-items:center;gap:18px;flex-wrap:wrap;
    margin-top:4px;
  }
  #calc .m-coach-cta{
    appearance:none;-webkit-appearance:none;border:0;cursor:pointer;
    font:inherit;font-weight:500;font-size:14px;letter-spacing:-0.005em;
    padding:12px 22px;border-radius:980px;
    background:#7fa39a;color:#0a0a0a;
    transition:background 120ms ease,transform 120ms ease;
    text-decoration:none;display:inline-flex;align-items:center;gap:8px;
  }
  #calc .m-coach-cta:hover{background:#94b8af;transform:translateY(-1px)}
  #calc .m-coach-cta:active{transform:translateY(0)}
#mPrintLink{color:#7fa39a;text-decoration:underline;text-underline-offset:2px}
#mPrintLink:hover{color:#94b8af}
  #calc .m-coach-cta .arrow{
    display:inline-block;transition:transform 120ms ease;
  }
  #calc .m-coach-cta:hover .arrow{transform:translateX(3px)}

  /* Inline application form — replaces the old mailto so we capture name,
     motivation, and the applicant's audit results before the email lands in
     Niels' inbox. Sits hidden until the user clicks "Apply for a spot".
     The [hidden] override is required because explicit display:flex below
     would otherwise win over the hidden attribute's default display:none. */
  #calc .m-apply-form[hidden]{display:none !important}
  #calc .m-apply-form{
    margin-top:16px;padding:18px 20px;
    background:#0a0a0a;border:1px solid #1c1c1e;border-radius:14px;
    display:flex;flex-direction:column;gap:14px;
  }
  #calc .m-apply-field{display:flex;flex-direction:column;gap:6px;position:relative}
  #calc .m-apply-lbl{
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10.5px;color:#6e6e73;letter-spacing:0.06em;text-transform:uppercase;
  }
  #calc .m-apply-input{
    appearance:none;-webkit-appearance:none;
    font:inherit;font-size:14.5px;color:#f5f5f7;
    background:#111;border:1px solid #2a2a2c;border-radius:8px;
    padding:10px 12px;outline:none;
    transition:border-color 120ms ease,background-color 120ms ease;
  }
  #calc .m-apply-input::placeholder{color:#6e6e73}
  #calc .m-apply-input:focus{border-color:#7fa39a;background:#141414}
  #calc .m-apply-textarea{resize:vertical;min-height:80px;line-height:1.5;font-family:inherit}
  #calc .m-apply-counter{
    position:absolute;right:8px;bottom:6px;
    font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
    font-size:10.5px;color:#6e6e73;pointer-events:none;
  }
  #calc .m-apply-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  #calc .m-apply-submit{
    appearance:none;-webkit-appearance:none;border:0;cursor:pointer;
    font:inherit;font-weight:500;font-size:14px;letter-spacing:-0.005em;
    padding:11px 22px;border-radius:980px;
    background:#7fa39a;color:#0a0a0a;
    transition:background 120ms ease,opacity 120ms ease;
  }
  #calc .m-apply-submit:hover:not([disabled]){background:#94b8af}
  #calc .m-apply-submit[disabled]{opacity:0.55;cursor:not-allowed}
  #calc .m-apply-cancel{
    appearance:none;-webkit-appearance:none;border:0;background:transparent;
    cursor:pointer;font:inherit;font-size:13px;color:#86868b;
    padding:6px 8px;transition:color 120ms ease;
  }
  #calc .m-apply-cancel:hover{color:#f5f5f7}
  #calc .m-apply-msg{
    font-size:13px;line-height:1.5;letter-spacing:-0.005em;
    padding:10px 12px;border-radius:8px;
  }
  #calc .m-apply-msg.success{
    background:rgba(127,163,154,0.10);color:#94b8af;border:1px solid rgba(127,163,154,0.30);
  }
  #calc .m-apply-msg.error{
    background:rgba(255,69,58,0.08);color:#ff453a;border:1px solid rgba(255,69,58,0.30);
  }
  #calc .m-coach-meta{
    font-size:12.5px;color:#6e6e73;line-height:1.5;
    flex:1;min-width:220px;
  }
  #calc .m-coach-meta strong{color:#a1a1a6;font-weight:500}
  #calc .m-coach-fine{
    font-size:11.5px;color:#6e6e73;line-height:1.55;
    padding-top:14px;border-top:1px solid #1c1c1e;margin-top:4px;
  }
  #calc .m-coach-fine em{font-style:italic;color:#a1a1a6}

  /* eyebrow + reading-section label tokens — swap the bright Apple blue
     for a muted teal/sage so the mono tokens feel editorial against the
     dark surround instead of like UI primaries */
  #calc .m-eyebrow,
  #calc .m-reading-section > .lbl{color:#7fa39a}

  /* shake/flash effects need to stay readable on black */
  @keyframes mCardFlashDark{
    0%{box-shadow:0 0 0 0 rgba(255,99,99,0.0)}
    20%{box-shadow:0 0 0 4px rgba(255,99,99,0.28)}
    100%{box-shadow:0 0 0 0 rgba(255,99,99,0.0)}
  }
  #calc .m-card.flash{animation:mCardFlashDark 0.9s ease}

  /* =========================================================
     MOBILE — narrow-viewport adjustments for the audit widget
     (#calc) and the broader landing page chrome. Desktop layout
     stays intact above 560px; below it we stack tight headers,
     allow the diamond chain to scroll horizontally inside its
     row, give the spectrum scale explicit gaps so its tokens
     don't kiss, and demote the secondary "saved locally" note.
     ========================================================= */
  @media (max-width: 560px){
    /* Audit widget container — claw back side padding for content room */
    #calc .matrix{padding:24px 14px;border-radius:18px}
    #calc .m-intake{padding:0}
    #calc .m-stage{padding:0}

    /* Result-card header: title gets full width, actions sit below */
    #calc .m-result-head{
      grid-template-columns:1fr;gap:14px;
      padding-bottom:18px;margin-bottom:18px;
    }
    #calc .m-result-actions{justify-content:flex-start}
    #calc .m-result-head h3{font-size:22px}

    /* Thought sequence rows: stack label above the diamond chain.
       Glyph chain becomes horizontally scrollable inside the card
       instead of clipping off the right edge. Bridge overlays rely
       on the desktop row geometry, so we hide them on mobile and
       keep the per-row visual story. */
    #calc .m-thoughts-wrap{padding:18px 16px}
    #calc .m-thought-row{
      grid-template-columns:1fr;gap:6px;align-items:flex-start;
    }
    #calc .m-thought-seq{
      flex-wrap:nowrap;overflow-x:auto;
      -webkit-overflow-scrolling:touch;
      padding:2px 0 4px;
      scrollbar-width:none;
    }
    #calc .m-thought-seq::-webkit-scrollbar{display:none}
    #calc .m-thought-meta{
      font-size:11px;color:var(--txt-3);
      text-transform:uppercase;letter-spacing:0.06em;
    }
    #calc .m-thought-bridge-overlay{display:none}
    #calc .m-thought-chain{gap:22px}

    /* Spectrum: explicit gap so "20 Contracting 200 Expanding 600"
       doesn't collapse into one glued string */
    #calc .m-spectrum{padding:18px 16px}
    #calc .m-spectrum-scale{gap:6px}
    #calc .m-spectrum-foot{gap:14px}

    /* Engagement bar: kill the verbose "Saved locally…" note on
       mobile, center the icons row. The note is reassurance copy
       — fine to demote when the row would otherwise wrap into a
       six-line text column next to four icons. */
    #calc .m-engage{justify-content:center;gap:6px}
    #calc .m-engage-note{display:none}

    /* Next-step / Beta cohort card — let the eyebrow + pill share
       a wrapping line, keep the CTA on one line, and tighten
       padding so the green block doesn't dominate the viewport. */
    #calc .m-coach{padding:24px 20px;gap:14px}
    #calc .m-coach-head{flex-wrap:wrap;gap:8px}
    #calc .m-coach-tag{white-space:nowrap}
    #calc .m-coach-cta{white-space:nowrap;padding:12px 20px}
    #calc .m-coach-row{gap:12px}

    /* Apply form (revealed under the CTA) — full-width fields */
    #calc .m-apply-form{padding:0;margin-top:14px}

    /* Phase 2 (Circuit) — on mobile, break the dual-phase grid lock so
       Phase 2 only takes its own height (otherwise it inherits Phase 1's
       ~561px and leaves a huge black void under the orbit). Hint sits
       inline between the legend and the SVG with breathing room. */
    #calc .m-phases-stack{display:block}
    #calc .m-phase{
      grid-area:auto;visibility:visible;pointer-events:auto;
    }
    #calc .m-phase:not(.active){display:none}
    #calc .m-circuit-hint{
      position:static;display:block;
      margin:14px 0 10px;text-align:center;right:auto;
    }
    /* Portrait-only nudge: invite the rotate, since landscape gives the
       3.6:1 orbit room to breathe. Hidden once the device is wide enough. */
    #calc .m-phase-2::after{
      content:"Rotate device for the full orbit";
      display:block;text-align:center;
      margin-top:10px;padding-top:10px;
      border-top:1px solid rgba(127,163,154,0.14);
      font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
      font-size:9px;color:#7fa39a;font-weight:500;
      letter-spacing:0.05em;text-transform:uppercase;
      pointer-events:none;opacity:0.75;
    }
    #calc .m-circuit-caption{margin-top:10px;font-size:12.5px}
  }
  @media (max-width: 560px) and (orientation: landscape){
    /* In landscape on a short viewport, the rotate hint is moot */
    #calc .m-phase-2::after{display:none}
  }

  /* =========================================================
     PRINT STYLES — when the user hits "Download as a PDF",
     only the audit result section is printed, and the dark
     theme is flipped to a paper-friendly light theme so it
     doesn't waste ink / look terrible on white paper.
     ========================================================= */
  @media print {
    /* page setup — generous margins, no headers/footers (browser-dependent) */
    @page {
      size: A4;
      margin: 14mm 14mm 18mm 14mm;
    }
    /* hide everything by default */
    body > *:not(#calc),
    .nav,
    .marq,
    .hero,
    #why,
    #excerpt,
    #author,
    .footer {
      display: none !important;
    }
    /* but show the audit section, flat, no background, no padding */
    #calc {
      display: block !important;
      background: #fff !important;
      color: #111 !important;
      padding: 0 !important;
      color-scheme: light !important;
    }
    #calc .container { padding: 0 !important; max-width: none !important; }

    /* hide the section header — feels redundant on a printed page */
    #calc .sec-head { display: none !important; }

    /* hide non-result screens entirely */
    #calc #mIntake,
    #calc #mStoriesScreen { display: none !important; }

    /* hide all the interactive chrome on the result screen */
    #calc .matrix-head,
    #calc .m-result-head .m-back,
    #calc .m-result-head .m-recalc,
    #calc .m-coach,
    #calc .m-note,
    #calc .m-engage,
    #calc .m-engage-comments,
    #calc .m-share-menu { display: none !important; }

    /* the matrix container becomes a plain content surface */
    #calc .matrix {
      background: #fff !important;
      border: 0 !important;
      box-shadow: none !important;
      padding: 0 !important;
    }

    /* result header — center title only */
    #calc .m-result-head {
      display: block !important;
      border-bottom: 1px solid #111 !important;
      padding: 0 0 12px !important;
      margin: 0 0 18px !important;
    }
    #calc .m-result-head .m-result-title { text-align: left !important; }
    #calc .m-result-head .m-eyebrow {
      color: #555 !important; font-size: 10px !important; display: block;
      margin: 0 0 4px !important;
    }
    #calc .m-result-head h3 {
      color: #111 !important; font-size: 24px !important;
      letter-spacing: -0.02em; margin: 0;
    }

    /* thought sequence — light cards on white */
    #calc .m-thoughts-wrap {
      background: #fafafa !important;
      border: 1px solid #e5e5e7 !important;
      box-shadow: none !important;
    }
    /* hide the slider toggle, hover hint, and tooltip on paper */
    #calc .m-phase-slider,
    #calc .m-circuit-hint,
    #calc .m-tooltip { display: none !important; }
    /* stack both phases vertically with their button copy as headlines */
    #calc .m-phases-stack {
      display: block !important;
      grid-template-areas: none !important;
    }
    #calc .m-phase {
      visibility: visible !important;
      pointer-events: auto !important;
      grid-area: auto !important;
      display: block !important;
      page-break-inside: avoid;
      break-inside: avoid;
    }
    #calc .m-phase + .m-phase { margin-top: 20px; }
    #calc .m-phase-print-title {
      display: block !important;
      font-size: 13px !important;
      font-weight: 600 !important;
      letter-spacing: -0.01em;
      color: #111 !important;
      margin: 0 0 10px !important;
    }
    /* Phase 2 — match Phase 1's light grey background on paper and flip
       label text + white strokes to dark so they read against the new bg */
    #calc .m-phase-2 {
      cursor: default !important;
      background: #fafafa !important;
      border: 1px solid #e5e5e7 !important;
      page-break-before: auto;
    }
    #calc .m-phase-2 .m-formation text { fill: #111 !important; }
    #calc .m-phase-2 .m-formation use[stroke="#f5f5f7"] { stroke: #111 !important; }
    /* In print, every formation in the circuit needs its name visible —
       not just the 5 named ones. The empty Impressions/Needs/Tasks labels
       are normally hidden (opacity 0) and only animate to 1 when at the top.
       For paper, force them all to opacity 1 and disable the animation. */
    #calc .m-phase-2 .m-formation text { opacity: 1 !important; }
    #calc .m-phase-2 .m-formation text animate { display: none !important; }
    #calc .m-thoughts-legend .lg { color: #444 !important; }
    #calc .m-thoughts-legend .lg::before {
      background-color: transparent !important; border: 0 !important;
      background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%23111" stroke-width="1.6" stroke-linejoin="round"/></svg>') !important;
    }
    #calc .m-thoughts-legend .lg-e::before {
      background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%23111" stroke-width="1.6" stroke-linejoin="round"/></svg>') !important;
    }
    #calc .m-thoughts-legend .lg-pc::before { background: #111 !important; background-image: none !important; border-color: #111 !important; }
    #calc .m-thoughts-legend .lg-pe::before { background: transparent !important; background-image: none !important; border: 1.5px solid #111 !important; }
    #calc .m-thoughts-legend .lg-ec::before {
      background-color: transparent !important; border: 0 !important;
      background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 26"><path d="M7.63 1 L24.16 24.55 L1 24.55 Z" fill="%23d65a1c"/><path d="M7.63 1 L30.79 1 L24.16 24.55 Z" fill="%234f3aa8"/><path d="M7.63 1 L30.79 1 L24.16 24.55 L1 24.55 Z" fill="none" stroke="%23111" stroke-width="1.6" stroke-linejoin="round"/></svg>') !important;
    }
    /* Mind icon — print/paper mode */
    #calc .m-thoughts-legend .lg-mind::before {
      background-color: transparent !important; border: 0 !important;
      background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 26"><ellipse cx="18" cy="13" rx="16" ry="11" fill="%23999" fill-opacity="0.5"/><ellipse cx="18" cy="13" rx="11" ry="7.5" fill="%23111" stroke="%23555" stroke-width="1.1"/></svg>') !important;
    }
    #calc .m-thought-label { color: #111 !important; }
    #calc .m-thought-label .topic { color: #666 !important; }
    #calc .m-thought-meta { color: #666 !important; }

    /* summary stats — paper-friendly */
    #calc .m-summary {
      background: #f0f0f2 !important;
      page-break-inside: avoid;
      break-inside: avoid;
    }
    #calc .m-stat { background: #fff !important; }
    #calc .m-stat .lbl { color: #666 !important; }
    #calc .m-stat .v   { color: #111 !important; }
    #calc .m-stat .v.muted { color: #999 !important; }
    /* EGO-CENTRIC / OTHER-CENTRIC orient tag under dominant role — on
       paper it would otherwise inherit the dark-theme grey and almost
       disappear against white. Force it dark so it reads on PDF page 1. */
    #calc .m-stat-sub-orient { color: #555 !important; }
    /* Hide the print-only text tile + the spectrum foot's redundant
       "X picked / X uses" line. The on-screen spectrum keeps them; in
       print Niels wants page 1 to read clean: thoughts → summary → spectrum
       visualization (no duplicate text totals, no orient subtag). */
    #calc .m-stat-emo-print   { display: none !important; }
    #calc .m-stat-sub-orient  { display: none !important; }
    #calc .m-stat-sub-note    { display: none !important; }
    #calc .m-spectrum-foot    { display: none !important; }

    /* Page 1 = thought sequence → summary → emotional range spectrum.
       Page 2 = all reading prose, compact so it doesn't bleed to page 3.
       Force a page break BEFORE the reading panels and keep the page-1
       trio glued together. */
    #calc .m-thoughts-wrap { break-after: avoid !important; page-break-after: avoid !important; }
    #calc .m-summary       { break-before: avoid !important; break-after: avoid !important;
                             page-break-before: avoid !important; page-break-after: avoid !important; }
    #calc .m-spectrum      { break-before: avoid !important; break-after: page !important;
                             page-break-before: avoid !important; page-break-after: always !important; }
    #calc .m-reading       { break-before: page !important; page-break-before: always !important; }

    /* --- Page-2 compaction so reading prose fits on a single page
       instead of bleeding to a 3rd. Page 1 (head + thought sequence +
       summary + spectrum) is left at its natural size — earlier scale
       trick crammed the circuit AND left a third of the page blank. --- */
    /* Thought sequence: light padding shave only, no transform scaling. */
    #calc .m-thoughts-wrap    { padding: 14px 16px !important; margin-bottom: 12px !important; }
    #calc .m-thoughts-head    { margin-bottom: 8px !important; }
    #calc .m-phases-stack     { gap: 0 !important; }
    #calc .m-phase-print-title{ font-size: 12px !important; margin: 0 0 8px !important; }

    /* --- Print-only: hide the Phase 2 Circuit card entirely ---
       The Circuit is a screen-only mood piece (orbital animation around
       the mind). It does not translate to a frozen static frame on paper,
       and including it forces the audit PDF to 3 pages whenever the
       Sequence has 4+ stories. The Phase 1 Sequence card already carries
       the audit's substance — recurring thoughts, roles, emotions,
       frequencies. Page 1 lands at Sequence + Summary + Spectrum, page 2
       holds the reading prose. Two pages total, regardless of story count. */
    #calc .m-phase-2,
    #calc #mPhase2,
    #calc .m-circuit-hint,
    #calc .m-tooltip { display: none !important; }
    /* Drop the redundant "Sequence" print-title above Phase 1 since it's
       the only phase shown on paper now — the "// THOUGHT SEQUENCE" head
       already labels it. */
    #calc .m-phase-1 .m-phase-print-title { display: none !important; }
    /* Summary + spectrum: very mild tightening only. */
    #calc .m-summary         { margin: 10px 0 12px !important; }
    #calc .m-stat            { padding: 12px 14px !important; }
    #calc .m-stat .lbl       { font-size: 11px !important; }
    #calc .m-spectrum        { padding: 14px 16px !important; margin: 0 !important; }
    /* Reading prose: tighten so all three collapsibles fit on page 2. */
    #calc .m-reading                 { margin-top: 0 !important; }
    #calc .m-reading-section         { padding: 14px 18px !important; }
    #calc .m-reading-section h4      { font-size: 17px !important; margin-bottom: 8px !important; line-height: 1.18 !important; }
    #calc .m-reading-section > .lbl  { margin-bottom: 6px !important; }
    #calc .m-reading-section p       { font-size: 12px !important; line-height: 1.45 !important; margin-bottom: 6px !important; }
    #calc .m-reading-section ol      { gap: 8px !important; }
    #calc .m-reading-section ol li   { font-size: 12px !important; line-height: 1.4 !important; padding-left: 30px !important; }
    #calc .m-reading-section ol li::before { font-size: 10px !important; top: 2px !important; }
    #calc .m-reading-cite            { font-size: 11px !important; margin-top: 8px !important; padding-top: 8px !important; }
    /* Frequency number tone-coded on paper as well, using the original
       tone hexes which read clearly against white. */
    #calc .m-freq-num.contracting { color: #b3261e !important; }
    #calc .m-freq-num.expanding { color: #1f7a3a !important; }
    #calc .m-freq-num.mixed { color: #555 !important; }
    #calc .m-freq-bar { background: #e5e5e7 !important; }
    #calc .m-tone-tag.mixed { color: #555 !important; border-color: #ccc !important; background: #fff !important; }

    /* emotional range card — light on paper */
    #calc .m-spectrum{
      background:#fff !important;border:1px solid #e5e5e7 !important;
      page-break-inside: avoid; break-inside: avoid;
    }
    #calc .m-spectrum-lbl{color:#555 !important}
    #calc .m-spectrum-rule{background:#e5e5e7 !important}
    #calc .m-spectrum-scale{color:#777 !important}
    #calc .m-spectrum-scale .threshold{color:#333 !important}
    #calc .m-spectrum-labels span.shown{color:#111 !important}
    #calc .m-spectrum-foot{color:#555 !important;border-top-color:#e5e5e7 !important}
    #calc .m-spectrum-foot strong{color:#111 !important}
    /* hover tooltip on cells — meaningless on paper */
    #calc .m-spectrum-cell::after{display:none !important}

    /* reading panels */
    #calc .m-reading {
      background: #fff !important;
      border: 1px solid #e5e5e7 !important;
    }
    #calc .m-reading-section {
      border-bottom-color: #e5e5e7 !important;
      page-break-inside: avoid;
      break-inside: avoid;
    }
    /* On paper, force the collapsible reading sections fully open and
       hide the + chip — toggles don't make sense in print, and the
       prose has to be visible regardless of the on-screen open state. */
    #calc details.m-reading-section > .m-reading-body {
      display: block !important;
    }
    #calc details.m-reading-section > summary {
      display: block !important;
      cursor: default !important;
    }
    #calc .m-reading-toggle { display: none !important; }
    #calc .m-reading-section h4,
    #calc .m-reading-section p em,
    #calc .m-reading-section p strong,
    #calc .m-reading-section ol li strong,
    #calc .m-reading-section ol li em { color: #111 !important; }
    #calc .m-reading-section p,
    #calc .m-reading-section ol li { color: #333 !important; }
    #calc .m-reading-section ol li::before { color: #777 !important; }
    /* eyebrow tokens — keep the teal/sage so the audit voice is preserved */
    #calc .m-reading-section > .lbl,
    #calc .m-eyebrow { color: #5a7d76 !important; }
    #calc .m-reading-cite { color: #666 !important; border-top-color: #e5e5e7 !important; }

    /* keep first-section + title together on first page */
    #calc .m-result-head { page-break-after: avoid; break-after: avoid; }

    /* avoid orphan headings */
    #calc h3, #calc h4 { page-break-after: avoid; break-after: avoid; }

    /* tell browsers to render colors faithfully (don't strip backgrounds) */
    * {
      -webkit-print-color-adjust: exact !important;
      print-color-adjust: exact !important;
    }
  }

  /* ---------- legend icons: filled parallelograms ---------- */
  /* The slanted-rectangle "slide" shape, drawn as a solid color via clip-path
     instead of the older outlined SVG. Same coords as the previous data-URI
     path so the shape matches everywhere. */
  .m-thoughts-legend .lg-c::before,
  .m-thoughts-legend .lg-e::before {
    background-image: none;
    background-color: transparent;
    border: 0;
    width: 16px; height: 13px;
    clip-path: polygon(23.8% 3.8%, 96.2% 3.8%, 75.5% 94.4%, 3.1% 94.4%);
  }
  .m-thoughts-legend .lg-c::before { background-color: #d92228; }
  .m-thoughts-legend .lg-e::before { background-color: #4e31c3; }

  /* ===================================================================
     Section-01 weighing → phases card. Ported from
     section01_results_weighing_MERGE_WIP.html. Every selector is scoped
     under #calc and every class/id is namespaced "mw-"/"mw" so it cannot
     bleed into the shared live .card/.row/.grid/.track/.legend/.bridge/
     .circuit/.foot/.bubble/.meter/.glyph rules (those exist elsewhere on
     the page). The WIP dark palette maps onto the #calc result theme
     (matrix #0E1920 / wrap #111).
     =================================================================== */
  #calc #mwScene{
    --mw-bg:#0E1920; --mw-card:#15222B; --mw-rule:#22313C; --mw-rule2:#2C3F4D;
    --mw-ink:#f5f5f7; --mw-dim:#a1a1a6; --mw-mut:#86868b;
    --mw-steel:109,151,185; --mw-story:255,59,48; --mw-iter:144,130,228; --mw-neutral:134,134,139;
    position:relative;line-height:1.5;
    zoom:.9;   /* shrink the popup + settled grid card by 10% (reflows; no leftover gap) */
  }
  #calc #mwScene *{box-sizing:border-box}
  /* backdrop dims the card's own frame during the weigh, dissolving on settle */
  #calc .mw-backdrop{position:absolute;inset:-24px;background:rgba(0,0,0,.45);
    backdrop-filter:blur(3px);transition:opacity 4s;z-index:2;border-radius:18px;pointer-events:none}
  #calc #mwScene.settled .mw-backdrop{opacity:0}
  /* card padding is CONSTANT across popup/phase1 so lanes never resize;
     only shadow/border soften on settle (no layout change). */
  #calc .mw-card{position:relative;z-index:3;background:transparent;
    border:1px solid transparent;border-radius:14px;padding:18px 20px;
    box-shadow:none;transition:box-shadow 4s,border-color 4s}
  #calc #mwScene.settled .mw-card{box-shadow:none;border-color:transparent;padding:18px 20px}
  #calc .mw-cardhead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:6px}
  #calc .mw-ctitle{font-size:13px;color:var(--mw-mut);margin:0}
  #calc .mw-phase2{display:flex;border:1px solid var(--mw-rule2);border-radius:999px;padding:3px;
    opacity:0;transform:translateY(-2px);transition:opacity 4s,transform 4s;pointer-events:none}
  #calc #mwScene.settled .mw-phase2{opacity:1;transform:none;pointer-events:auto}
  #calc .mw-phase2 button{font-family:inherit;font-size:12px;border:0;background:transparent;color:var(--mw-mut);border-radius:999px;padding:5px 13px;cursor:pointer}
  #calc .mw-phase2 button.on{background:#33485A;color:#fff}
  /* educational subtext — shown in popup, collapses (vertical only) on settle */
  #calc .mw-psub{font-size:14px;color:var(--mw-dim);line-height:1.5;margin:2px 0 16px;
    overflow:hidden}   /* sits directly under the legend, above story 1; stays in the settled result too so the card height stays constant on the popup→result transition */

  /* legend — 2 rows (Story / Iteration) × 5 weights = 12 children total */
  #calc .mw-legend{display:grid;grid-template-columns:auto repeat(5,max-content);justify-content:start;
    column-gap:26px;row-gap:7px;align-items:center;margin:2px 0 18px}
  #calc .mw-leg-rowlbl{font-size:12.5px;font-weight:700;color:var(--mw-mut);padding-right:18px;white-space:nowrap}
  #calc .mw-wkey{font-size:12.5px;font-weight:400;color:rgba(141,146,152,.75);transition:color .18s}
  #calc .mw-wkey.hot,#calc .mw-wkey.hit,#calc .mw-wkey.lit{color:#f5f5f7}
  #calc .mw-wclr{font-size:12.5px;font-weight:400;line-height:1.3;color:rgba(141,146,152,.75);transition:color .18s}
  #calc .mw-wclr.clear,#calc .mw-wclr.lit{color:#f5f5f7}
  #calc .mw-wkey.dim,#calc .mw-wclr.dim{color:rgba(141,146,152,.3)}

  #calc .mw-viewport{position:relative}
  #calc .mw-grid{display:flex;flex-direction:column;gap:8px;position:relative}
  #calc .mw-bridge{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none;overflow:visible}
  #calc .mw-bridge path{fill:none;stroke:#7a6fce;stroke-width:1.4;stroke-dasharray:2 4;stroke-linecap:round;stroke-linejoin:miter;opacity:0;transition:opacity 4s}
  #calc .mw-bridge text{fill:#a99dee;font-size:10px;opacity:0;transition:opacity 4s;
    font-family:"SF Mono",ui-monospace,Menlo,monospace}

  /* 6th row: interruptors — slot reserved from the start, content fades in
     only after a Circuit round-trip. */
  #calc .mw-introw .mw-rname,#calc .mw-introw .mw-int-seq{opacity:0;transition:opacity 4s}
  #calc .mw-introw .mw-rname strong{color:var(--mw-ink)}
  #calc .mw-introw.introduced .mw-rname,#calc .mw-introw.introduced .mw-int-seq{opacity:1}
  /* collapse the interruptor slot until it's introduced (after a Circuit round-trip), so
     the settled grid is no taller than the weighing popup; full opacity once shown so the
     "Interruptors" title reads as bright as the other story names. */
  #calc .mw-introw:not(.introduced){max-height:0;overflow:hidden;opacity:0;transition:max-height .45s ease,opacity .4s ease}
  #calc .mw-introw.introduced{max-height:100px;opacity:1;transition:max-height .45s ease,opacity 1.2s ease}
  #calc .mw-int-seq{display:flex;align-items:center;flex-wrap:wrap;height:100%;padding-left:4px}
  #calc .mw-int-cluster{display:flex;flex-direction:column;align-items:flex-start;gap:3px;justify-content:center}
  #calc .mw-int-glyphs{display:flex;align-items:center}
  #calc .mw-int-glyphs .mw-glyph+.mw-glyph{margin-left:-2px}
  #calc .mw-int-lbl{font-size:10px;color:#6e6e73;text-transform:uppercase;letter-spacing:.04em}
  #calc .mw-int-gap{width:16px;flex:none}

  #calc .mw-row{display:flex;align-items:center;gap:14px;opacity:.4;transition:opacity .3s;position:relative;z-index:1}
  #calc .mw-row.live,#calc .mw-row.done{opacity:1}
  #calc .mw-rname{width:172px;flex:none;line-height:1.25;cursor:default}
  #calc #mwScene.settled .mw-rname{cursor:pointer}
  #calc .mw-rname strong{font-size:15px;font-weight:600;color:var(--mw-ink)}
  #calc .mw-dict-chev{display:inline-block;margin-left:7px;color:#f5f5f7;opacity:0;vertical-align:1px;transition:transform .25s ease,opacity .25s ease}
  #calc #mwScene.settled .mw-dict-chev{opacity:.65}
  #calc .mw-row.dict-open .mw-dict-chev{transform:rotate(90deg);opacity:1}
  #calc .mw-rsub{display:block;font-size:12.5px;color:var(--mw-mut);margin-top:2px}
  #calc .mw-rsub .mw-vd{font-weight:600;letter-spacing:.01em;opacity:0;transition:opacity .35s}
  #calc .mw-rsub .mw-vd.show{opacity:1}
  #calc .mw-vd.v-story,#calc .mw-vd.v-iter,#calc .mw-vd.v-neutral{color:var(--mw-mut)}

  /* lanes: open track, faint baseline (no box) */
  #calc .mw-track{position:relative;flex:1;height:52px;overflow:hidden}
  #calc .mw-track::after{content:"";position:absolute;left:2px;right:2px;top:58%;height:1px;background:var(--mw-rule2);opacity:.6}
  #calc .mw-introw:not(.introduced) .mw-track::after{opacity:0}
  #calc .mw-mover{position:absolute;top:58%;left:6px;display:flex;align-items:center;transform:translateY(-50%);z-index:2}
  #calc .mw-glyph{display:block;flex:none}
  #calc .mw-glyph.gh{display:none}
  #calc .mw-glyph+.mw-glyph{margin-left:-2px}
  #calc .mw-glyph polygon{transition:fill .35s,stroke .35s;stroke-linejoin:round}
  #calc .mw-aura{position:absolute;left:50%;top:50%;z-index:-1;transform:translate(-50%,-50%);border-radius:50%;
    pointer-events:none;filter:blur(6px);opacity:0;transition:width .4s,height .4s,opacity .4s;animation:mwAuraB 1s ease-in-out infinite alternate}
  @keyframes mwAuraB{from{transform:translate(-50%,-50%) scale(1)}to{transform:translate(-50%,-50%) scale(1.1)}}
  #calc .mw-ripple{position:absolute;left:50%;top:50%;width:28px;height:18px;border-radius:50%;border:1.5px solid;transform:translate(-50%,-50%);pointer-events:none}
  #calc .mw-particle{position:absolute;width:4px;height:4px;border-radius:50%;pointer-events:none;z-index:3}
  #calc .mw-bubble{position:absolute;top:2px;z-index:4;font-size:13px;font-weight:600;white-space:nowrap;padding:3px 9px;border-radius:6px;pointer-events:none}
  #calc .mw-bubble.hit{color:#ff8c85;background:rgba(255,59,48,.14)}
  #calc .mw-bubble.clear{color:#a99dee;background:rgba(115,101,212,.16)}

  /* accordion reveal — mirrors the live m-dict styling */
  #calc .mw-dict{margin:0;max-height:0;overflow:hidden;opacity:0;position:relative;z-index:5;background:var(--mw-bg);transition:max-height .3s,opacity .3s,margin .3s}
  #calc .mw-dict.open{max-height:300px;opacity:1;margin-bottom:8px}
  #calc .mw-dict-def{font-size:13px;line-height:1.55;color:var(--mw-dim);margin:0 0 8px}
  #calc .mw-dict-reveal{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--mw-dim);margin:6px 0}
  #calc .mw-dict-lbl{color:var(--mw-mut);font-size:11.5px}
  #calc .mw-dict-need{position:relative;color:#f5f5f7;font-weight:600}
  #calc .mw-dict-need::after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1.5px;background:#f5f5f7}
  @keyframes mwNeedReveal{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
  @keyframes mwNeedSweep{from{right:100%}to{right:0}}
  #calc .mw-dict.open .mw-dict-need{animation:mwNeedReveal .45s ease both}
  #calc .mw-dict.open .mw-dict-need::after{animation:mwNeedSweep .5s ease .35s both}
  #calc .mw-dict-meta{display:flex;flex-wrap:wrap;gap:5px 16px;font-size:11.5px;color:var(--mw-mut);margin-top:10px}
  #calc .mw-dict-meta b{color:var(--mw-dim);font-weight:500}

  /* legend hover tooltip — educational copy at the cursor */

  /* popup → result handoff. During the weigh, the result screen overlays the
     dimmed (real) stories screen; the result head + reports stay hidden until
     the card settles. One continuous transition, no centered modal. */
  #calc .m-audit-body.mw-weighing{position:relative}
  #calc .m-audit-body.mw-weighing #mStoriesScreen{
    opacity:.5;filter:blur(.5px);pointer-events:none;transition:opacity 4s,filter 4s}
  #calc .m-audit-body.mw-weighing #mResultScreen{
    position:absolute;left:0;top:0;width:100%;z-index:5}
  #calc #mResultScreen.mw-pending .m-result-head,
  #calc #mResultScreen.mw-pending #mSummary,
  #calc #mResultScreen.mw-pending #mSpectrum,
  #calc #mResultScreen.mw-pending #mNeedSpectrum,
  #calc #mResultScreen.mw-pending #mMentalLoad,
  #calc #mResultScreen.mw-pending #mReading,
  #calc #mResultScreen.mw-pending #mEngage,
  #calc #mResultScreen.mw-pending #mCoach{
    opacity:0;transition:opacity 4s;pointer-events:none}
  #calc #mResultScreen .m-result-head,
  #calc #mResultScreen #mSummary{transition:opacity 4s}

  @media(max-width:620px){
    #calc .mw-card{padding:14px 12px}
    #calc #mwScene.settled .mw-card{padding:14px 12px}
    #calc .mw-legend{column-gap:8px;row-gap:5px;overflow-x:auto;-webkit-overflow-scrolling:touch}
    #calc .mw-leg-rowlbl{font-size:10px;padding-right:8px}
    #calc .mw-wkey,#calc .mw-wclr{font-size:9.5px}
    #calc .mw-wclr{line-height:1.25}
    #calc .mw-row{flex-wrap:wrap;gap:4px 10px;align-items:center}
    #calc .mw-rname{width:auto;flex:1 1 auto;order:1;min-width:0}
    #calc .mw-track{flex:1 1 100%;order:3;height:50px}
    #calc .mw-dict.open{max-height:340px}
    #calc .mw-bridge{display:none}
  }
/* SLATE & CREAM REDESIGN — appended override layer; original CSS untouched.
   Cream rooms, slate instruments (#2E4150), audit descent via :has().
   Delete this block to restore the previous dark design exactly. */
:root{
  --bg:#FAF6EF; --bg-soft:#F5EDE0;
  --txt:#3D3A34; --txt-2:#6B6358; --txt-3:#8A8276;
  --rule:#D9CFC0; --rule-soft:#E8E0D2;
  --blue:#6F8F6B;
}
.hero{background:#F5EDE0}
#calc{transition:background-color .9s ease}
/* DESCENT STAGING — the deeper into the audit, the darker the room.
   Intro: light sky. After "Get started": original dark instrument theme
   returns (so every dark-keyed widget/SVG works untouched), in blue-blacks
   instead of pure #000, deepening per screen. Pure CSS via :has(). */
#calc:has(#mStart:not([hidden])){background:#2E4150} /* intro starts dark slate; descent continues deeper */
#calc:has(#mStart[hidden]):has(#mIntake:not([hidden])){background:#2E4150}
#calc:has(#mStart[hidden]):has(#mIntake[hidden]):has(#mStoriesScreen:not([hidden])){background:#1B2B37}
#calc:has(#mStart[hidden]):has(#mIntake[hidden]):has(#mResultScreen:not([hidden])){background:#1B2B37} /* match the story-intake page so the bg doesn't shift when the popup arrives */
#why{background:#F5EDE0}
.strip{background:#F5EDE0;border-bottom:none} /* concept marquee continues section 02, no seam into 03 */
#excerpt{background:#2E4150}
/* section 03 dark re-theme: var-driven text flipped for slate bg;
   light cover PNG + peeking page provide the contrast anchor */
#excerpt .sec-head h2{color:#F0F4F8}
#excerpt .sec-head .num{color:#9FB0BE}
#calc .sec-head .num{color:#9FB0BE} /* 01 label matches 03 */
#excerpt .excerpt-eyebrow{color:#9FB0BE}
#excerpt .excerpt-title{color:#F0F4F8}
#excerpt .manual-body .excerpt{color:#D6DFE7}
#excerpt .manual-body .excerpt em{color:#F0F4F8}
#excerpt .manual-body .excerpt-meta{color:#9FB0BE}
#excerpt .reserve-offer{color:#D6DFE7}
#excerpt .reserve-offer em{color:#F0F4F8}
#excerpt .manual-reserve input[type=email]{border-color:#46596A}
#excerpt .manual-reserve input[type=email]:focus{border-color:#F0F4F8;box-shadow:0 0 0 4px rgba(240,244,248,0.12)}
/* "Send me the PDF" was black-glass + ink text (light-section design) — flip to white-keyed for slate */
#excerpt .manual-reserve .btn{color:#fff;background:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.35)}
#excerpt .manual-reserve .btn:hover{color:#fff;background:rgba(255,255,255,0.14);border-color:rgba(255,255,255,0.6)}
/* rule above "game theory · neuroscience · dharma" -> white (was #1c1c1e, invisible on slate) */
#calc .sources-strip{border-top-color:#86868b} /* matches the strip text color */
/* example output glass nudged for slate (was 2.5%, tuned for pure black) */
#calc .m-example-output{background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.12)}

#author{background:#FAF6EF} /* swapped with #signup (Niels, 2026-07-10) */
footer{background:#FAF6EF;border-top:1px solid #E8E0D2} /* same paper tone as the nav */

/* #calc ships dark-themed — re-scope to light so copy reads on the tinted room */
/* intro keeps the original dark #calc theme (white headings) */






header{background:rgba(250,246,239,0.82);border-bottom:1px solid #E8E0D2}
.brand .mark{background:#C96A4A}
.btn,.hero-cta .btn-primary,.m-intake-go{background:#C96A4A}
.btn:hover,.hero-cta .btn-primary:hover,.m-intake-go:hover{background:#B9543A}
.hero h1 em{color:#3D6A8F} /* steel blue — slate family but clearly differentiated from ink text */

.panel{background:#FFFDF8} /* audit-internal cards (.m-intake etc.) follow stage theme */
.panel{border-radius:22px}
/* Principle 01.OBJ: swap — phone stage white, thought bubbles cream */
.obj-stage{background:#FFFDF8;border-radius:0} /* identical to the outer panel, no corner seam */
/* pulse rings grow to the full stage instead of uniform-scaling the tall
   phone shape (which exited the stage vertically, leaving vertical bars) */
.obj-pulse{transform:translate(-50%,-50%)}
@keyframes objPulse{
  0%{opacity:0.5;width:60px;height:112px;border-radius:10px}
  100%{opacity:0;width:96%;height:94%;border-radius:16px}
}
.obj-bubble{background:#F5EDE0}
.principle-toggle{background:#FFFDF8}
.principle-toggle:hover{background:#F5EDE0;color:var(--txt)}
#why .panel-mobile-btn{background:#FFFDF8}
#why .panel-mobile-btn:hover{background:#F5EDE0;color:var(--txt)}
/* .m-intake-field stays stage-themed */


/* DESCENT: black instrument chrome -> dark blue on intake & stories.
   Result-screen visualizations keep their original grey overlays. */
#calc:has(#mStart[hidden]) .matrix{background:#15222B;border-color:#283A47}
#calc:has(#mResultScreen:not([hidden])) .matrix{background:#15222B;border-color:#283A47} /* same as the intake matrix — the container stays put when the popup arrives */
#calc .m-intake-field{background:#1C2C38;border-color:#2C3F4D}
#calc .m-intake-input,#calc .m-intake-select{border-bottom-color:#35495A}
#calc .m-intake-select option{background-color:#1C2C38}
#calc .m-intake-select option:checked{background-color:#24343F}
#calc .m-intake-rm:hover{background:#24343F;color:#f5f5f7}
#calc .cg-card{background:#1C2C38;border:1px solid #2C3F4D}
#calc .cg-chip{background:#15222B;border-color:#2C3F4D}
#calc .cg-chip.on{background:#33485A;border-color:#5B768C}
#calc .m-chip.on{background:#33485A;border-color:#5B768C}
#calc .cg-grav{background:#2C3F4D}
/* result screen: all cards unified on the sequence surface (#0E1920) —
   stats, emotional range, needs, mental load + the three reading
   collapsibles (Patterns / Frequency reading / How to disengage) */
#calc .m-summary{background:#1B2C38;margin:10px 0} /* page-colour gutters so the stat tiles read as cards; bottom gap = top gap (10px) */
#calc .m-stat{background:#101D26} /* card tone — matches the main weighing card */
#calc .m-spectrum{background:#101D26;border-color:#0B141B} /* bg aligned with the summary-report tiles */
#calc .m-needspectrum{background:#1B2C38;border-color:#0B141B}
#calc .m-mentalload{background:#1B2C38;border-color:#0B141B;margin:10px 0 24px} /* same fill as the emotional-range + needs panels */
#calc .m-reading{background:#101D26;border-color:#2C3F4D;margin-top:10px} /* card tone — matches the main weighing card */
/* audit history: clickable stat + overlay */
#calc .m-stat-audits{cursor:pointer}
#calc .m-stat-audits:hover .lbl{color:#f5f5f7}
#calc .m-stat-chevron{color:#6e6e73;margin-left:6px;font-size:18px}
#calc .m-stat-audits:hover .m-stat-chevron{color:#f5f5f7}
#mHistOverlay{position:fixed;inset:0;z-index:200;background:rgba(8,14,19,0.66);display:flex;align-items:center;justify-content:center;padding:24px}
#mHistOverlay .m-hist-card{background:#1B2C38;border:1px solid #22313C;border-radius:14px;max-width:520px;width:100%;max-height:70vh;overflow-y:auto;padding:20px 22px;color:#f5f5f7}
#mHistOverlay .m-hist-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:#86868b}
#mHistOverlay .m-hist-close{background:transparent;border:1px solid #22313C;color:#86868b;border-radius:50%;width:28px;height:28px;font-size:16px;cursor:pointer;line-height:1}
#mHistOverlay .m-hist-close:hover{color:#f5f5f7;border-color:#f5f5f7}
#mHistOverlay .m-hist-row{padding:12px 0;border-top:1px solid #1A2832}
#mHistOverlay .m-hist-row:first-of-type{border-top:none}
#mHistOverlay .m-hist-date{font-size:12px;color:#86868b;margin-bottom:3px}
#mHistOverlay .m-hist-names{font-size:14.5px;font-weight:500;line-height:1.45}
#mHistOverlay .m-hist-meta{font-size:12px;color:#6e6e73;margin-top:3px}
#mHistOverlay .m-hist-empty{color:#a1a1a6;font-size:14px;padding:8px 0 4px}
/* emotional range as square chips (mirrors needs spectrum) */
#calc .m-spectrum .m-need-bar{margin-top:10px}
#calc .m-spectrum .m-emo-sq .m-need-ab{letter-spacing:0.02em}
/* emotional-range count badges: ~1.5× the base circle + number (scoped here
   so the needs spectrum keeps the small badge). Base is 9px/13px/13px. */
#calc .m-spectrum .m-emo-sq .m-need-ct{top:-10px;font-size:14px;border-radius:11px;
  padding:0 6px;line-height:20px;min-width:20px}
/* tighter vertical rhythm — same chip-to-copy spacing as the needs card:
   kill the fixed 118px frame + absolute pinning from the old tall-bar layout */
#calc .m-spectrum{padding:14px 18px 12px;margin-top:0} /* gap to summary comes from summary's 10px bottom margin */
#calc .m-spectrum-frame{height:auto}
#calc .m-spectrum-rule{position:static;margin-top:12px}
#calc .m-spectrum-scale{position:static;margin-top:6px}
/* inactive cells in both spectrums: frame was #2a2a2c on #0E1920 and
   further dimmed by the .off opacity — effectively invisible. Brighter
   slate border so the full 16/10 grid reads as a scale, not floating chips */
#calc .m-need-cell.off{border-color:#506470 !important} /* !important: needs cells set border inline in JS */
/* intake validation: missing name/category go red until edited —
   2px underline + red placeholder + tinted card border so it cannot be missed */
#calc .m-intake-input.m-intake-err,
#calc .m-intake-select.m-intake-err{border-bottom:2px solid #ff3b30 !important}
#calc .m-intake-input.m-intake-err::placeholder{color:#ff6b61}
#calc .m-intake-select.m-intake-err{color:#ff6b61 !important}
#calc .m-intake-field:has(.m-intake-err){border-color:rgba(255,59,48,0.55)}

/* ===== Section 02 — gravity-accordion-steel (scoped to #why) ===== */
#why{--card:#FFFDF8;--steel:#3D6A8F;--rule-soft:#E8E0D2}

#why .gravity-box{background:var(--card);border:1px solid var(--rule-soft);border-radius:20px;padding:30px}
#why .gbox-lead{font-size:16px;color:var(--txt-2);line-height:1.55;max-width:82ch;margin:0 0 22px}
#why .gbox-lead strong{color:var(--txt);font-weight:600}
#why .gbox-lead em{font-style:italic;color:var(--txt);font-weight:500}

#why .panels{display:grid;grid-template-columns:repeat(12,1fr);gap:16px}
#why .panel{background:var(--card);border:1px solid #DCD6C8;border-radius:18px;padding:32px 30px;display:flex;flex-direction:column;gap:18px}
#why .panel.col-4{grid-column:span 4}
@media(max-width:900px){#why .panel.col-4{grid-column:span 12}}
#why .panel .label{font-size:13px;font-weight:500;color:var(--txt-3)}
#why .panel .label strong{color:var(--txt);font-weight:600;font-size:14px;letter-spacing:-0.005em}
#why .panel h3{font-weight:600;font-size:22px;line-height:1.2;letter-spacing:-0.014em;margin:10px 0 10px}
#why .panel p.cap{font-size:13.5px;color:var(--txt-3);font-style:italic;margin:10px 0 0;line-height:1.4}
#why details.pd > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  width:28px;height:28px;border-radius:50%;border:1px solid var(--rule-soft);background:var(--card);color:var(--txt-3);font-size:18px;margin-top:6px}
#why details.pd > summary::-webkit-details-marker{display:none}
#why details.pd:not([open]) > summary::before{content:'+'}
#why details.pd[open] > summary::before{content:'\2212'}
#why details.pd > p{margin-top:14px;font-size:15px;color:var(--txt-2);line-height:1.55}
#why details.pd > p em{font-style:italic;color:var(--txt);font-weight:500}

#why .stage{position:relative;height:200px;background:var(--card);border-radius:10px;overflow:hidden;margin-top:8px}
#why .mono{font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace}
@media (prefers-reduced-motion: reduce){#why .stage *{animation:none !important}}

/* mobile: collapse the two non-phone cards behind a + chip */
#why .panel-mobile-btn{display:none}
@media(max-width:760px){
  #why .panel.collapsible{position:relative}
  #why .panel.collapsible > div:first-of-type{padding-right:42px;cursor:pointer}
  #why .panel-mobile-btn{display:inline-flex;align-items:center;justify-content:center;position:absolute;top:26px;right:24px;
    width:30px;height:30px;border-radius:50%;border:1px solid var(--rule-soft);background:var(--card);color:var(--steel);
    font-size:18px;line-height:1;cursor:pointer;z-index:5;padding:0}
  #why .panel.collapsible[aria-collapsed="true"] .panel-mobile-btn::before{content:'+'}
  #why .panel.collapsible[aria-collapsed="false"] .panel-mobile-btn::before{content:'\2212'}
  #why .panel.collapsible[aria-collapsed="true"] .stage,
  #why .panel.collapsible[aria-collapsed="true"] .cap,
  #why .panel.collapsible[aria-collapsed="true"] details.pd{display:none}
}

/* ===== demoted strip ===== */
#why .folded{margin-top:8px;border:1px solid var(--rule-soft);border-radius:20px;overflow:hidden;background:var(--card)}
#why .folded > .folded-head{padding:18px 30px;font-size:13px;color:var(--txt-3);border-bottom:1px solid var(--rule-soft)}
#why details.fold{border-bottom:1px solid var(--rule-soft)}
#why details.fold:last-child{border-bottom:none}
#why details.fold > summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;gap:14px;padding:20px 30px}
#why details.fold > summary::-webkit-details-marker{display:none}
#why details.fold > summary .fttl{font-size:17px;font-weight:600;color:var(--txt);flex:1;letter-spacing:-0.012em}
#why details.fold > summary .fchip{margin-left:auto;color:var(--steel);font-size:20px;line-height:1}
#why details.fold > summary:hover .fttl{color:var(--steel)}
#why details.fold[open] > summary .fttl{color:var(--steel)}
#why details.fold[open] > summary .fchip::before{content:'\2212'}
#why details.fold:not([open]) > summary .fchip::before{content:'+'}
#why details.fold > .fbody{padding:0 30px 26px 30px}
#why .fold-2col{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}
@media(max-width:900px){#why .fold-2col{grid-template-columns:1fr;gap:24px}}
#why .fold-p{font-size:16px;color:var(--txt-2);line-height:1.55}
#why .fold-p em{font-style:italic;color:var(--txt);font-weight:500}
#why .solo-vis{min-width:0}

/* F-EV inner grid */
#why .fev-head{margin:0 0 16px}
#why .fev-head p{font-size:16px;color:var(--txt-2);line-height:1.55;max-width:80ch;margin:0}
#why .fev-head p em{font-style:italic;color:var(--txt);font-weight:500}
#why .fev-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:900px){#why .fev-grid{grid-template-columns:1fr}}
#why .fev-card{background:var(--card);border:1px solid #DCD6C8;border-radius:18px;padding:24px}
#why .fev-cap{font-size:13px;color:var(--txt-2);margin-bottom:6px;min-height:42px}
#why .fev-cap strong{display:block;color:var(--txt);font-weight:600;font-size:13.5px;margin-bottom:2px}

/* ===== LOCATIONS · house map ===== */
#why .hz-plan{position:absolute;left:30px;right:30px;top:18px;bottom:18px;border:2px solid #2c2c2e;border-radius:9px;overflow:hidden}
#why .hz-wall{position:absolute;background:#2c2c2e}
#why .hz-wall.v{left:50%;top:0;bottom:0;width:1.5px;transform:translateX(-50%)}
#why .hz-wall.h{top:50%;left:0;right:0;height:1.5px;transform:translateY(-50%)}
#why .hzq{position:absolute;width:50%;height:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px}
#why .hzq.tl{left:0;top:0}#why .hzq.tr{right:0;top:0}#why .hzq.bl{left:0;bottom:0}#why .hzq.br{right:0;bottom:0}
#why .hzq.bed{background:rgba(150,96,88,.06)}
#why .hzq.desk{background:rgba(96,118,148,.06)}
#why .hzq.sofa{background:rgba(150,128,92,.06)}
#why .hzq.kit{background:rgba(96,142,114,.06)}
#why .hzq::after{content:"";position:absolute;inset:0;opacity:0}
#why .hzq.bed::after{background:rgba(150,96,88,.13);animation:hzBed 18s ease-in-out infinite;animation-play-state:paused}
#why .hzq.desk::after{background:rgba(96,118,148,.13);animation:hzDesk 18s ease-in-out infinite;animation-play-state:paused}
#why .hzq.kit::after{background:rgba(96,142,114,.13);animation:hzKit 18s ease-in-out infinite;animation-play-state:paused}
#why .hzq.sofa::after{background:rgba(150,128,92,.13);animation:hzSofa 18s ease-in-out infinite;animation-play-state:paused}
#why .in-view .hzq::after{animation-play-state:running}
#why .hzq .nm{font-size:10.5px;font-weight:600;z-index:2}
#why .hzq .md{font-size:8.5px;color:var(--txt-3);z-index:2}
#why .hzq.bed .nm{color:#8a5750}#why .hzq.desk .nm{color:#5b7088}#why .hzq.sofa .nm{color:#7d6a48}#why .hzq.kit .nm{color:#548066}
#why .gly{z-index:2}
#why .gbed{width:36px;height:22px;border:2px solid #2c2c2e;border-radius:4px;position:relative;background:var(--card)}
#why .gbed::before{content:"";position:absolute;top:3px;left:3px;width:12px;height:16px;border:1.6px solid #2c2c2e;border-radius:3px}
#why .gdesk{width:24px;height:16px;border:2px solid #2c2c2e;border-radius:3px;position:relative;background:var(--card)}
#why .gdesk::after{content:"";position:absolute;left:50%;bottom:-6px;transform:translateX(-50%);width:9px;height:4px;border:1.6px solid #2c2c2e;border-top:none}
#why .gsofa{width:38px;height:17px;border:2px solid #2c2c2e;border-radius:6px 6px 4px 4px;position:relative;background:var(--card)}
#why .gsofa::before{content:"";position:absolute;left:5px;right:5px;top:4px;height:1.6px;background:#2c2c2e}
#why .gmug{width:21px;height:19px;border:2px solid #2c2c2e;border-radius:4px 4px 6px 6px;position:relative;background:var(--card)}
#why .gmug::after{content:"";position:absolute;right:-9px;top:3px;width:9px;height:11px;border:2px solid #2c2c2e;border-left:none;border-radius:0 7px 7px 0}
@keyframes hzBed{0%,14%{opacity:1}20%,100%{opacity:0}}
@keyframes hzDesk{0%,22%{opacity:0}28%,42%{opacity:1}48%,100%{opacity:0}}
@keyframes hzKit{0%,50%{opacity:0}56%,70%{opacity:1}76%,100%{opacity:0}}
@keyframes hzSofa{0%,78%{opacity:0}84%,96%{opacity:1}100%{opacity:0}}

/* ===== PEOPLE ===== */
#why .soc-map{position:absolute;inset:0;width:100%;height:100%}
#why .soc-lbl{font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;font-size:13px;fill:var(--txt)}
#why .soc-lbl.you{fill:var(--txt-3)}
#why .soc-line{fill:none;stroke-width:2;stroke-linecap:round;stroke-dasharray:1 9;animation:socDash 1.1s linear infinite;animation-play-state:paused}
#why .stage.in-view .soc-line{animation-play-state:running}
@keyframes socDash{to{stroke-dashoffset:-10}}

/* ===== OBJECTS ===== */
#why .obj-phone{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:60px;height:112px;background:#0a0a0a;border-radius:10px;border:1.5px solid #1d1d1f;z-index:2}
#why .obj-phone::after{content:"";position:absolute;top:8px;left:50%;transform:translateX(-50%);width:28px;height:3px;background:#222;border-radius:2px}
#why .obj-pulse{position:absolute;left:50%;top:50%;width:60px;height:112px;border-radius:10px;border:2px solid #ff3b30;opacity:0;
  transform:translate(-50%,-50%);animation:objPulse 12s ease-out 1 forwards;animation-play-state:paused;z-index:1}
#why .obj-pulse.d2{animation-delay:4s}#why .obj-pulse.d3{animation-delay:8s}
@keyframes objPulse{0%{opacity:.55;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-50%) scale(3.8)}}
#why .obj-bubble{position:absolute;font-size:10.5px;color:var(--txt-2);font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace;
  background:var(--bg-soft);padding:5px 11px;border-radius:980px;border:1px solid var(--rule-soft);white-space:nowrap;
  animation:objFloat 7.2s ease-in-out infinite;animation-play-state:paused;z-index:3}
#why .obj-bubble.b1{top:14px;left:4%;animation-delay:0s}#why .obj-bubble.b2{top:34px;right:4%;animation-delay:1.8s}
#why .obj-bubble.b3{bottom:44px;left:4%;animation-delay:3.6s}#why .obj-bubble.b4{bottom:18px;right:4%;animation-delay:5.4s}
@keyframes objFloat{0%,100%{opacity:.18;transform:translateY(0)}35%,65%{opacity:1;transform:translateY(-4px)}}
#why .stage.in-view .obj-pulse,#why .stage.in-view .obj-bubble{animation-play-state:running}

/* breath */
#why .breath-wrap{margin-top:8px}
#why svg.breath{width:100%;height:120px;display:block}
#why .breath-labels{display:grid;grid-template-columns:repeat(4,1fr);font-size:11px;color:var(--txt-3);font-weight:500;margin-top:4px}
#why .breath-labels span{text-align:center}
#why .breath-labels span:first-child{text-align:left}
#why .breath-labels span:last-child{text-align:right}

/* EV chart */
#why .ev-wrap{margin-top:8px}
#why .ev-plot{display:flex;align-items:stretch;gap:2px}
#why .ev-y-label{writing-mode:vertical-rl;transform:rotate(180deg);font-size:13px;color:#6e6e73;font-weight:500;letter-spacing:-0.005em;font-family:ui-sans-serif,system-ui,sans-serif;display:flex;align-items:center;justify-content:center;padding-bottom:24px;flex-shrink:0}
#why svg.ev-chart{width:100%;height:180px;display:block;flex:1;min-width:0}
#why .ev-axis-label{font-size:13px;color:#6e6e73;font-weight:500;text-align:center;margin-top:0;letter-spacing:-0.005em;font-family:ui-sans-serif,system-ui,sans-serif}
#why .ev-legend{display:flex;gap:18px;flex-wrap:nowrap;font-size:12px;color:var(--txt-2);font-weight:500;margin-top:10px;align-items:center;white-space:nowrap}
#why .ev-legend .dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:6px;flex-shrink:0}
#why .ev-legend .dot.teal{background:#1f7f8a}
#why .ev-legend .dot.coral{background:#d65a1c}

/* one lane held */
#why .ln{position:absolute;inset:0}
#why .ln-carrier{position:absolute;left:14px;top:92px;font-size:10.5px;color:var(--txt-3);transform:rotate(-90deg);transform-origin:left top;white-space:nowrap;font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace}
#why .ln-lane{position:absolute;left:70px;right:18px;height:2px;background:var(--rule-soft)}
#why .ln-lane.l1{top:64px}#why .ln-lane.l2{top:104px}#why .ln-lane.l3{top:140px}
#why .ln-fill{position:absolute;left:70px;top:63px;height:4px;width:0;background:var(--green);border-radius:2px;animation:lnFill 7s ease-out infinite;animation-play-state:paused}
#why .ln-tag{position:absolute;font-size:10px;font-family:'JetBrains Mono','SF Mono',ui-monospace,monospace}
#why .ln-tag.t1{top:44px;left:74px;color:#1d1d1f}
#why .ln-tag.t2{top:90px;left:74px;color:var(--txt-3)}
#why .ln-tag.t3{top:126px;left:74px;color:var(--txt-3)}
#why .ln-park{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--rule)}
#why .ln-park.p2{top:101px;left:150px}#why .ln-park.p3{top:137px;left:120px}
#why .stage.in-view .ln-fill{animation-play-state:running}
@keyframes lnFill{0%{width:0}100%{width:calc(100% - 88px)}}
/* ===== end Section 02 ===== */
