:root{
    --void:#0B0F14;
    --panel:#121922;
    --panel-2:#1A2330;
    --grid:#1E2A38;
    --hairline:#26313f;
    --text:#E7EDF3;
    --muted:#8496A8;
    --muted-2:#5C6E80;
    --amber:#E8A33D;
    --cyan:#4FC1E8;
    --red:#E8573F;
    --sev-low:#4FA97A;
    --sev-medium:#E8A33D;
    --sev-high:#E8813D;
    --sev-critical:#E8573F;
    --b-goal:#E8A33D;
    --b-mission:#4FC1E8;
    --b-trust:#E8573F;
    --b-identity:#A672E8;
    --b-context:#7AD6A4;
    --b-supply:#D084F5;
    --b-egress:#6AA9FF;
    --font-display:'Space Grotesk', system-ui, sans-serif;
    --font-mono:'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;
    --font-body: system-ui, -apple-system, 'Segoe UI', sans-serif;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--void);
    color:var(--text);
    font-family:var(--font-body);
    min-height:100vh;
    overflow-x:hidden;
  }
  @media (prefers-reduced-motion: reduce){
    *{animation-duration:0.001ms !important; transition-duration:0.001ms !important;}
  }

  /* ---------- layout shell ---------- */
  .app{
    display:flex;
    flex-direction:column;
    min-height:100vh;
  }

  /* ---------- header ---------- */
  header.topbar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:16px;
    padding:16px 24px;
    border-bottom:1px solid var(--hairline);
    background:linear-gradient(180deg, rgba(18,25,34,0.9), rgba(18,25,34,0.6));
    backdrop-filter:blur(6px);
    position:sticky;
    top:0;
    z-index:30;
    flex-wrap:wrap;
  }
  .brand{
    display:flex;
    flex-direction:column;
    gap:2px;
  }
  .brand .eyebrow{
    font-family:var(--font-mono);
    font-size:11px;
    letter-spacing:0.12em;
    text-transform:uppercase;
    color:var(--amber);
  }
  .brand h1{
    font-family:var(--font-display);
    font-size:20px;
    margin:0;
    font-weight:600;
    letter-spacing:-0.01em;
  }
  .mode-toggle{
    display:flex;
    border:1px solid var(--hairline);
    border-radius:7px;
    overflow:hidden;
  }
  .mode-btn{
    background:transparent;
    border:none;
    color:var(--muted);
    font-family:var(--font-mono);
    font-size:10.5px;
    text-transform:uppercase;
    letter-spacing:0.05em;
    padding:8px 12px;
    cursor:pointer;
  }
  .mode-btn.active{ background:var(--amber); color:#1a1005; }
  .mode-btn:not(.active):hover{ color:var(--text); }

  .stats{
    display:flex;
    align-items:center;
    gap:20px;
    flex-wrap:wrap;
  }
  .stat{
    display:flex;
    flex-direction:column;
    align-items:flex-end;
    line-height:1.1;
  }
  .stat .num{
    font-family:var(--font-mono);
    font-size:18px;
    color:var(--cyan);
  }
  .stat .lbl{
    font-family:var(--font-mono);
    font-size:10px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.08em;
  }
  button.ghost{
    background:transparent;
    border:1px solid var(--hairline);
    color:var(--muted);
    font-family:var(--font-mono);
    font-size:11px;
    letter-spacing:0.05em;
    text-transform:uppercase;
    padding:8px 14px;
    border-radius:6px;
    cursor:pointer;
    transition:border-color .15s ease, color .15s ease;
  }
  button.ghost:hover{ border-color:var(--amber); color:var(--amber); }
  button.ghost:focus-visible, .risk-chip:focus-visible, .node-hit:focus-visible, .basket-chip:focus-visible {
    outline:2px solid var(--cyan); outline-offset:2px;
  }

  /* ---------- tab nav ---------- */
  .tabnav{
    display:flex;
    gap:4px;
    padding:0 24px;
    background:var(--panel);
    border-bottom:1px solid var(--hairline);
  }
  .tab-btn{
    background:none;
    border:none;
    border-bottom:2px solid transparent;
    color:var(--muted);
    font-family:var(--font-mono);
    font-size:11px;
    letter-spacing:0.04em;
    text-transform:uppercase;
    padding:12px 6px;
    margin-right:22px;
    cursor:pointer;
  }
  .tab-btn.active{ color:var(--text); border-bottom-color:var(--amber); }
  .tab-btn:hover{ color:var(--text); }
  .tab-btn .count{ color:var(--muted-2); }
  .tab-btn.active .count{ color:var(--amber); }

  /* ---------- basket tray ---------- */
  .tray{
    display:flex;
    align-items:center;
    gap:10px;
    padding:10px 24px;
    border-bottom:1px solid var(--hairline);
    background:var(--panel);
    flex-wrap:wrap;
    min-height:52px;
  }
  .tray .tray-label{
    font-family:var(--font-mono);
    font-size:11px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.08em;
    white-space:nowrap;
  }
  .tray .tray-empty{
    font-family:var(--font-mono);
    font-size:12px;
    color:var(--muted-2);
    font-style:italic;
  }
  .basket-chip{
    display:flex;
    align-items:center;
    gap:6px;
    background:var(--panel-2);
    border:1px solid var(--hairline);
    border-radius:999px;
    padding:5px 10px 5px 12px;
    font-family:var(--font-mono);
    font-size:11.5px;
    cursor:pointer;
    color:var(--text);
  }
  .basket-chip .dot{width:7px;height:7px;border-radius:50%;flex:none;}
  .basket-chip .x{color:var(--muted-2); font-size:13px; line-height:1;}
  .basket-chip:hover{border-color:var(--red);}
  .tray .clear-basket{margin-left:auto;}

  /* ---------- stage ---------- */
  .stage{
    flex:1;
    display:flex;
    position:relative;
    min-height:0;
  }
  .diagram-wrap{
    flex:1;
    position:relative;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:10px;
    overflow:hidden;
  }
  .diagram-wrap svg{width:100%; height:100%; max-height:82vh;}
  .svg-scroll{ width:100%; height:100%; display:flex; align-items:center; justify-content:center; }
  .scroll-hint{ display:none; }

  .hint-banner{
    position:absolute;
    top:14px;
    left:50%;
    transform:translateX(-50%);
    background:var(--panel-2);
    border:1px solid var(--amber);
    color:var(--amber);
    font-family:var(--font-mono);
    font-size:11.5px;
    padding:8px 14px;
    border-radius:8px;
    z-index:20;
    opacity:0;
    pointer-events:none;
    transition:opacity .25s ease;
    max-width:88%;
    text-align:center;
  }
  .hint-banner.show{opacity:1;}

  /* ---------- SVG node styling ---------- */
  .conn-line{ stroke:var(--hairline); stroke-width:1.5; fill:none; }
  .node-shape{
    fill:var(--panel-2);
    stroke:var(--hairline);
    stroke-width:1.5;
    transition:stroke .15s ease, fill .15s ease;
  }
  .node-hit{ cursor:pointer; }
  .node-hit:hover .node-shape{ stroke:var(--cyan); }
  .node-hit.active .node-shape{ stroke:var(--amber); stroke-width:2.5; fill:#1c2634; }
  .node-hit.pulse .node-shape{ animation:pulseGlow 1.1s ease-in-out infinite; }
  .node-label{
    font-family:var(--font-mono);
    font-size:12px;
    fill:var(--text);
    text-anchor:middle;
    pointer-events:none;
  }
  .node-sub{
    font-family:var(--font-mono);
    font-size:8.5px;
    fill:var(--muted-2);
    text-anchor:middle;
    pointer-events:none;
    text-transform:uppercase;
    letter-spacing:0.06em;
  }
  .node-icon{ stroke:var(--amber); stroke-width:1.6; fill:none; stroke-linecap:round; stroke-linejoin:round; }
  .node-hit.active .node-icon{ stroke:var(--cyan); }
  .badge-count{
    font-family:var(--font-mono);
    font-size:9px;
    fill:var(--void);
  }
  .badge-circle{ fill:var(--amber); }

  @keyframes pulseGlow{
    0%,100%{ filter:drop-shadow(0 0 0px var(--amber)); }
    50%{ filter:drop-shadow(0 0 8px var(--amber)); }
  }

  .chain-arc{
    fill:none;
    stroke-width:2.5;
    stroke-dasharray:6 5;
    opacity:0;
    transition:opacity .4s ease;
  }
  .chain-arc.show{
    opacity:0.95;
    animation:dashMove 1.4s linear infinite;
  }
  @keyframes dashMove{ to{ stroke-dashoffset:-22; } }

  .guide-arc{
    fill:none;
    stroke-width:1.6;
    stroke-dasharray:3 6;
    opacity:0;
    animation:guideBreathe 2.4s ease-in-out infinite;
  }
  @keyframes guideBreathe{ 0%,100%{ opacity:0.18; } 50%{ opacity:0.55; } }

  .node-hit.guide-pulse .node-shape{
    animation:guideGlow 1.6s ease-in-out infinite;
  }
  @keyframes guideGlow{
    0%,100%{ stroke:var(--hairline); filter:none; }
    50%{ stroke:var(--guide-color, var(--cyan)); filter:drop-shadow(0 0 6px var(--guide-color, var(--cyan))); }
  }

  /* ---------- drawer ---------- */
  .drawer{
    width:380px;
    max-width:92vw;
    background:var(--panel);
    border-left:1px solid var(--hairline);
    display:flex;
    flex-direction:column;
    transform:translateX(100%);
    transition:transform .28s ease;
    position:relative;
    z-index:15;
  }
  .drawer.open{ transform:translateX(0); }
  .drawer-head{
    padding:20px 20px 14px;
    border-bottom:1px solid var(--hairline);
  }
  .drawer-head .tag{
    font-family:var(--font-mono);
    font-size:10.5px;
    color:var(--amber);
    text-transform:uppercase;
    letter-spacing:0.1em;
  }
  .drawer-head h2{
    font-family:var(--font-display);
    font-size:22px;
    margin:6px 0 8px;
    font-weight:600;
  }
  .drawer-head p{
    margin:0;
    font-size:13px;
    color:var(--muted);
    line-height:1.5;
  }
  .drawer-close{
    position:absolute;
    top:16px; right:16px;
    background:none;
    border:none;
    color:var(--muted);
    font-size:20px;
    cursor:pointer;
    line-height:1;
  }
  .drawer-close:hover{ color:var(--text); }
  .core-list{
    padding:14px 20px;
    border-bottom:1px solid var(--hairline);
  }
  .core-list ul{ margin:8px 0 0; padding-left:18px; }
  .core-list li{ font-size:13px; color:var(--muted); margin-bottom:6px; line-height:1.45; }
  .core-list .section-label{
    font-family:var(--font-mono);
    font-size:10.5px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.1em;
  }
  .risk-section{
    padding:14px 20px 24px;
    overflow-y:auto;
    flex:1;
    min-height:0;
  }
  .risk-section .section-label{
    font-family:var(--font-mono);
    font-size:10.5px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.1em;
    margin-bottom:10px;
    display:block;
  }
  .risk-chip{
    border:1px solid var(--hairline);
    border-radius:10px;
    margin-bottom:10px;
    background:var(--panel-2);
    overflow:hidden;
    cursor:pointer;
    transition:border-color .15s ease;
  }
  .risk-chip.in-basket{ border-color:var(--amber); }
  .risk-chip-head{
    display:flex;
    align-items:center;
    gap:10px;
    padding:11px 12px;
  }
  .risk-chip .dot{ width:9px; height:9px; border-radius:50%; flex:none; }
  .risk-chip .rname{ font-size:13.5px; font-weight:600; flex:1; }
  .risk-chip .sev-label{
    font-family:var(--font-mono);
    font-size:9.5px;
    text-transform:uppercase;
    letter-spacing:0.06em;
    color:var(--muted-2);
  }
  .quick-add{
    flex:none;
    width:22px;
    height:22px;
    border-radius:50%;
    border:1px solid var(--hairline);
    background:transparent;
    color:var(--cyan);
    font-family:var(--font-mono);
    font-size:13px;
    line-height:1;
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:center;
  }
  .quick-add:hover{ border-color:var(--cyan); }
  .quick-add.added{ background:var(--amber); border-color:var(--amber); color:#1a1005; }
  .risk-chip .caret{ color:var(--muted-2); font-size:11px; transition:transform .15s ease; }
  .risk-chip.expanded .caret{ transform:rotate(180deg); }
  .risk-body{
    max-height:0;
    overflow:hidden;
    transition:max-height .25s ease;
    padding:0 12px;
  }
  .risk-chip.expanded .risk-body{
    max-height:400px;
    padding:0 12px 14px;
  }
  .risk-body .field{ margin-bottom:8px; }
  .risk-body .field-label{
    font-family:var(--font-mono);
    font-size:9.5px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.06em;
    display:block;
    margin-bottom:3px;
  }
  .risk-body .field-value{ font-size:12.5px; color:var(--text); line-height:1.5; }
  .add-btn{
    margin-top:4px;
    width:100%;
    padding:8px;
    border-radius:7px;
    border:1px solid var(--hairline);
    background:transparent;
    color:var(--cyan);
    font-family:var(--font-mono);
    font-size:11px;
    text-transform:uppercase;
    letter-spacing:0.05em;
    cursor:pointer;
  }
  .add-btn.added{ color:var(--amber); border-color:var(--amber); }
  .add-btn:hover{ border-color:var(--cyan); }

  .drawer-empty{
    flex:1;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:30px;
    text-align:center;
    color:var(--muted-2);
    font-family:var(--font-mono);
    font-size:12px;
  }

  /* ---------- incident library ---------- */
  .library-view{
    flex:1;
    overflow-y:auto;
    padding:26px 24px 60px;
    display:none;
  }
  .library-view.active{ display:block; }
  .library-intro{
    max-width:680px;
    margin:0 0 22px;
  }
  .library-intro h2{
    font-family:var(--font-display);
    font-size:22px;
    margin:0 0 8px;
  }
  .library-intro p{
    color:var(--muted);
    font-size:13.5px;
    line-height:1.6;
    margin:0;
  }
  .library-grid{
    display:grid;
    grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));
    gap:16px;
    max-width:1180px;
  }
  .case-card{
    background:var(--panel-2);
    border:1px solid var(--hairline);
    border-radius:12px;
    padding:18px;
    min-height:200px;
    display:flex;
    flex-direction:column;
  }
  .case-card.locked{
    align-items:center;
    justify-content:center;
    text-align:center;
    color:var(--muted-2);
  }
  .case-card.locked .lock-icon{ font-size:22px; margin-bottom:10px; opacity:0.6; }
  .case-card.locked .lock-title{
    font-family:var(--font-mono);
    font-size:12.5px;
    color:var(--muted);
    margin-bottom:6px;
    letter-spacing:0.03em;
  }
  .case-card.locked .lock-hint{
    font-size:11.5px;
    line-height:1.5;
    max-width:220px;
  }
  .boundary-tag{
    display:inline-flex;
    align-items:center;
    gap:6px;
    font-family:var(--font-mono);
    font-size:9.5px;
    text-transform:uppercase;
    letter-spacing:0.07em;
    padding:3px 9px;
    border-radius:999px;
    border:1px solid var(--hairline);
    width:fit-content;
    margin-bottom:10px;
  }
  .boundary-tag .dot{ width:6px; height:6px; border-radius:50%; }
  .case-eyebrow{
    font-family:var(--font-mono);
    font-size:10px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.06em;
    margin-bottom:4px;
  }
  .case-card h3{
    font-family:var(--font-display);
    font-size:16.5px;
    margin:0 0 8px;
    line-height:1.3;
  }
  .case-what{ font-size:12.5px; color:var(--text); line-height:1.55; margin:0 0 14px; }
  .case-card .case-what{ flex:1; margin-bottom:10px; }
  .case-echo{
    font-size:11.5px;
    color:var(--cyan);
    line-height:1.5;
    border-top:1px solid var(--hairline);
    padding-top:10px;
    margin:0 0 14px;
  }
  .case-card .case-echo{ margin-bottom:10px; }
  .case-echo b{ color:var(--cyan); }
  .case-source{
    font-family:var(--font-mono);
    font-size:9.5px;
    color:var(--muted-2);
    margin-bottom:12px;
  }
  .view-map-btn{
    align-self:flex-start;
    background:transparent;
    border:1px solid var(--hairline);
    color:var(--amber);
    font-family:var(--font-mono);
    font-size:10.5px;
    text-transform:uppercase;
    letter-spacing:0.05em;
    padding:7px 12px;
    border-radius:6px;
    cursor:pointer;
  }
  .view-map-btn:hover{ border-color:var(--amber); }

  /* ---------- guide panel ---------- */
  .guide-panel{
    position:absolute;
    bottom:14px;
    right:14px;
    width:280px;
    max-width:70vw;
    background:rgba(18,25,34,0.92);
    border:1px solid var(--hairline);
    border-radius:10px;
    z-index:6;
    font-family:var(--font-mono);
  }
  .guide-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:9px 12px;
    cursor:pointer;
    font-size:11.5px;
    color:var(--text);
    letter-spacing:0.03em;
  }
  .guide-head .guide-caret{ color:var(--muted-2); transition:transform .15s ease; }
  .guide-panel.collapsed .guide-caret{ transform:rotate(-90deg); }
  .guide-panel.collapsed .guide-body{ display:none; }
  .guide-body{
    padding:0 12px 12px;
    border-top:1px solid var(--hairline);
    padding-top:10px;
    max-height:220px;
    overflow-y:auto;
  }
  .guide-tip{
    font-size:11.5px;
    color:var(--muted);
    line-height:1.55;
    margin:0;
    font-family:var(--font-body);
  }
  .guide-chain{ margin-bottom:12px; }
  .guide-chain:last-child{ margin-bottom:0; }
  .guide-chain-head{
    display:flex;
    align-items:center;
    gap:6px;
    font-size:11px;
    color:var(--text);
    margin-bottom:6px;
    text-transform:uppercase;
    letter-spacing:0.03em;
  }
  .guide-chain-head .dot{ width:7px; height:7px; border-radius:50%; flex:none; }
  .guide-missing{ margin:0; padding-left:16px; }
  .guide-missing li{
    font-size:11.5px;
    color:var(--muted);
    font-family:var(--font-body);
    margin-bottom:3px;
    line-height:1.4;
  }
  .guide-missing .guide-comp{ color:var(--muted-2); font-family:var(--font-mono); font-size:10px; }

  /* ---------- legend ---------- */
  .legend{
    position:absolute;
    bottom:14px;
    left:14px;
    display:flex;
    gap:14px;
    flex-wrap:wrap;
    background:rgba(18,25,34,0.85);
    border:1px solid var(--hairline);
    border-radius:8px;
    padding:8px 12px;
    font-family:var(--font-mono);
    font-size:10.5px;
    color:var(--muted);
    z-index:5;
  }
  .legend .item{ display:flex; align-items:center; gap:5px; }
  .legend .dot{ width:8px; height:8px; border-radius:50%; }

  /* ---------- modal ---------- */
  .modal-overlay{
    position:fixed; inset:0;
    background:rgba(6,9,13,0.78);
    display:flex; align-items:center; justify-content:center;
    z-index:100;
    opacity:0; pointer-events:none;
    transition:opacity .2s ease;
    padding:20px;
  }
  .modal-overlay.show{ opacity:1; pointer-events:auto; }
  .modal-card{
    background:var(--panel);
    border:1px solid var(--red);
    border-radius:14px;
    max-width:520px;
    width:100%;
    padding:26px;
    box-shadow:0 0 60px rgba(232,87,63,0.15);
    transform:scale(0.96);
    transition:transform .2s ease;
  }
  .modal-overlay.show .modal-card{ transform:scale(1); }
  .modal-card .eyebrow{
    font-family:var(--font-mono);
    font-size:11px;
    color:var(--red);
    text-transform:uppercase;
    letter-spacing:0.12em;
  }
  .modal-card h3{
    font-family:var(--font-display);
    font-size:24px;
    margin:8px 0 12px;
  }
  .modal-card .sev-pill{
    display:inline-block;
    font-family:var(--font-mono);
    font-size:10px;
    text-transform:uppercase;
    letter-spacing:0.06em;
    padding:3px 9px;
    border-radius:999px;
    margin-bottom:14px;
  }
  .modal-card .field-label{
    font-family:var(--font-mono);
    font-size:10px;
    color:var(--muted-2);
    text-transform:uppercase;
    letter-spacing:0.08em;
    margin-bottom:4px;
    display:block;
  }
  .modal-card .field-value{ font-size:13.5px; line-height:1.55; color:var(--text); margin-bottom:14px; }
  .modal-card .chain-path{
    font-family:var(--font-mono);
    font-size:11.5px;
    color:var(--cyan);
    margin-bottom:14px;
    line-height:1.6;
  }
  .echo-box{
    background:var(--panel-2);
    border:1px solid var(--hairline);
    border-left:3px solid var(--cyan);
    border-radius:8px;
    padding:12px 14px;
    margin-bottom:16px;
  }
  .echo-box .echo-eyebrow{
    font-family:var(--font-mono);
    font-size:10px;
    color:var(--cyan);
    text-transform:uppercase;
    letter-spacing:0.08em;
    margin-bottom:6px;
    display:block;
  }
  .echo-box .echo-title{ font-weight:600; font-size:13.5px; margin-bottom:5px; }
  .echo-box .echo-what{ font-size:12.5px; color:var(--muted); line-height:1.5; margin-bottom:6px; }
  .echo-box .echo-source{ font-family:var(--font-mono); font-size:9.5px; color:var(--muted-2); }
  .modal-close-btn{
    width:100%;
    padding:10px;
    border-radius:8px;
    border:1px solid var(--hairline);
    background:var(--panel-2);
    color:var(--text);
    font-family:var(--font-mono);
    font-size:12px;
    text-transform:uppercase;
    letter-spacing:0.05em;
    cursor:pointer;
    margin-top:4px;
  }
  .modal-close-btn:hover{ border-color:var(--amber); }



  .ring-circle{ fill:none; stroke:rgba(132,150,168,0.22); stroke-width:1.2; stroke-dasharray:5 8; }
  .ring-label{ font-family:var(--font-mono); font-size:11px; fill:var(--muted-2); text-transform:uppercase; letter-spacing:0.12em; pointer-events:none; }
  .node-layer-runtime .node-shape{ stroke:rgba(79,193,232,0.55); }
  .node-layer-trustops .node-shape{ stroke:rgba(166,114,232,0.55); }
  .node-layer-interaction .node-shape{ stroke:rgba(232,163,61,0.55); }
  .node-hit.active .node-shape{ stroke:var(--amber) !important; }


  .ring-band{ fill:none; stroke-linecap:round; pointer-events:none; }
  .ring-band.runtime{ stroke:rgba(79,193,232,0.13); stroke-width:94; }
  .ring-band.trustops{ stroke:rgba(166,114,232,0.13); stroke-width:112; }
  .ring-band.interaction{ stroke:rgba(232,163,61,0.12); stroke-width:124; }
  .ring-circle{ fill:none; stroke-width:2.6; stroke-dasharray:none; pointer-events:none; }
  .ring-circle.runtime{ stroke:rgba(79,193,232,0.68); }
  .ring-circle.trustops{ stroke:rgba(166,114,232,0.62); }
  .ring-circle.interaction{ stroke:rgba(232,163,61,0.58); }
  .ring-label{ font-family:var(--font-mono); font-size:13px; font-weight:700; fill:var(--text); text-transform:uppercase; letter-spacing:0.12em; pointer-events:none; paint-order:stroke; stroke:rgba(11,15,20,0.9); stroke-width:4px; }
  .conn-line.runtime{ stroke:rgba(79,193,232,0.74); stroke-width:2.8; }
  .conn-line.trustops{ stroke:rgba(166,114,232,0.66); stroke-width:2.25; }
  .conn-line.interaction{ stroke:rgba(232,163,61,0.58); stroke-width:1.9; }

  /* ---------- threat catalog ---------- */
  .catalog-toolbar{
    display:flex;
    flex-wrap:wrap;
    gap:10px;
    margin:0 0 18px;
  }
  .catalog-summary{
    display:flex;
    flex-wrap:wrap;
    gap:10px;
    margin:0 0 18px;
    max-width:1180px;
  }
  .catalog-summary .pill{
    border:1px solid var(--hairline);
    background:var(--panel-2);
    border-radius:999px;
    padding:6px 11px;
    font-family:var(--font-mono);
    font-size:10.5px;
    color:var(--muted);
  }
  .catalog-group{max-width:1180px;margin-bottom:26px;}
  .catalog-group h3{font-family:var(--font-display);font-size:18px;margin:0 0 12px;color:var(--text);}
  .catalog-table{width:100%;border-collapse:collapse;background:var(--panel-2);border:1px solid var(--hairline);border-radius:12px;overflow:hidden;font-size:12.5px;}
  .catalog-table th,.catalog-table td{border-bottom:1px solid var(--hairline);padding:10px 12px;text-align:left;vertical-align:top;}
  .catalog-table th{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:0.07em;color:var(--muted-2);background:rgba(11,15,20,0.35);}
  .catalog-table td{color:var(--muted);line-height:1.45;}
  .catalog-table td strong{color:var(--text);}
  .sev-badge{display:inline-block;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:0.06em;padding:3px 8px;border-radius:999px;color:#1a1005;}
  .source-link{color:var(--cyan);text-decoration:none;}
  .source-link:hover{text-decoration:underline;}

  /* ---------- intro overlay ---------- */
  .intro-overlay{
    position:fixed; inset:0;
    background:var(--void);
    display:flex; align-items:center; justify-content:center;
    z-index:200;
    padding:24px;
    transition:opacity .3s ease;
  }
  .intro-overlay.hide{ opacity:0; pointer-events:none; }
  .intro-card{
    max-width:560px;
    text-align:center;
  }
  .intro-card .eyebrow{
    font-family:var(--font-mono);
    font-size:11.5px;
    color:var(--amber);
    text-transform:uppercase;
    letter-spacing:0.14em;
  }
  .intro-card h1{
    font-family:var(--font-display);
    font-size:36px;
    margin:14px 0 16px;
    line-height:1.15;
  }
  .intro-card p{
    color:var(--muted);
    font-size:14.5px;
    line-height:1.65;
    margin-bottom:26px;
  }
  .intro-card .steps{
    text-align:left;
    display:grid;
    gap:10px;
    margin-bottom:28px;
    font-family:var(--font-mono);
    font-size:12.5px;
    color:var(--muted);
  }
  .intro-card .steps .s{ color:var(--cyan); }
  .start-btn{
    background:var(--amber);
    color:#1a1005;
    border:none;
    padding:13px 30px;
    border-radius:8px;
    font-family:var(--font-display);
    font-weight:600;
    font-size:15px;
    cursor:pointer;
  }
  .start-btn:hover{ background:#f0b256; }


  /* ---------- mobile map pan/zoom controls ---------- */
  .map-controls{ display:none; }
  .diagram-wrap svg{ transform-origin:0 0; }
  .chain-arc{
    stroke:var(--sev-critical) !important;
    stroke-width:3.25;
    stroke-dasharray:7 6;
    stroke-linecap:round;
    filter:drop-shadow(0 0 6px rgba(255,91,91,0.72));
  }
  .chain-arc.show{
    opacity:0.98;
    animation:dashMove 1.15s linear infinite, chainPulse 1.55s ease-in-out infinite;
  }
  @keyframes chainPulse{
    0%,100%{ filter:drop-shadow(0 0 4px rgba(255,91,91,0.55)); }
    50%{ filter:drop-shadow(0 0 12px rgba(255,91,91,0.95)); }
  }

  /* ---------- mobile ---------- */
  @media (max-width: 860px){
    .stage{ flex-direction:column; }
    .drawer{
      width:100%;
      max-width:100%;
      height:58vh;
      max-height:58vh;
      overflow:hidden;
      border-left:none;
      border-top:1px solid var(--hairline);
      transform:translateY(100%);
      position:fixed;
      bottom:0; left:0; right:0;
      border-radius:16px 16px 0 0;
    }
    .drawer.open{ transform:translateY(0); }
    .stats{ gap:12px; }
    header.topbar{ padding:12px 16px; }
    .tray{ padding:8px 16px; }

    /* Diagram: let it scroll/pinch-zoom at real size instead of shrinking text unreadably */
    .diagram-wrap{
      flex-direction:column;
      align-items:stretch;
      padding:10px 10px 0;
      overflow:visible;
    }
    .svg-scroll{
      width:100%;
      height:52vh;
      overflow:auto;
      -webkit-overflow-scrolling:touch;
      justify-content:flex-start;
      touch-action:pan-x pan-y pinch-zoom;
    }
    .diagram-wrap svg{
      width:980px;
      min-width:980px;
      height:720px;
      max-height:none;
      flex:none;
    }
    .legend, .guide-panel{
      position:static;
      width:100%;
      max-width:100%;
      margin:8px 0 0;
    }
    .legend{ justify-content:center; }
    .guide-panel{ margin-bottom:8px; }
    .scroll-hint{
      display:block;
      text-align:center;
      font-family:var(--font-mono);
      font-size:10.5px;
      color:var(--muted-2);
      padding:6px 0 2px;
    }

    /* Bigger touch targets */
    .quick-add{ width:30px; height:30px; font-size:16px; }
    .risk-chip-head{ padding:13px 12px; }
    .view-map-btn, .add-btn{ padding:10px 12px; }

    .intro-card h1{ font-size:clamp(24px, 7vw, 32px); }

    .catalog-table,.catalog-table thead,.catalog-table tbody,.catalog-table th,.catalog-table td,.catalog-table tr{display:block;}
    .catalog-table thead{display:none;}
    .catalog-table tr{border-bottom:1px solid var(--hairline);padding:10px 0;}
    .catalog-table td{border-bottom:none;padding:6px 12px;}
    .catalog-table td::before{content:attr(data-label);display:block;font-family:var(--font-mono);font-size:9px;color:var(--muted-2);text-transform:uppercase;letter-spacing:0.06em;margin-bottom:2px;}

  }

  /* v2.1d: mobile controls as visible bar below map */
  .map-controls{
    display:none;
  }
  @media (max-width: 860px){
    .map-controls{
      display:flex !important;
      position:static !important;
      z-index:2;
      justify-content:center;
      align-items:center;
      gap:8px;
      margin:8px 10px 0;
      padding:8px;
      background:rgba(18,25,34,0.94);
      border:1px solid var(--hairline);
      border-radius:10px;
      box-shadow:0 8px 20px rgba(0,0,0,0.18);
    }
    .map-controls button{
      border:1px solid var(--hairline);
      background:rgba(255,255,255,0.04);
      color:var(--text);
      font-family:var(--font-mono);
      font-size:11px;
      border-radius:6px;
      padding:8px 10px;
      cursor:pointer;
      min-width:42px;
    }
    .map-controls button:first-child{ min-width:72px; }
    .map-controls button:hover{ border-color:var(--amber); color:var(--amber); }
    .diagram-wrap{ padding-top:14px !important; }
    .svg-scroll{ margin-top:8px; }
  }
