:root{--bg:#0d1117;--panel:#161b22;--border:#30363d;--text:#e6edf3;--muted:#8b949e;--accent:#58a6ff;--danger:#f85149;--warn:#d29922;--ok:#3fb950;--ran:#a371f7;--cp:#58a6ff;--up:#39d353;--data:#f0883e;--mgmt:#db61a2;--ext:#f85149;--font:ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace}*{box-sizing:border-box}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font);margin:0;overflow:hidden auto}.muted{color:var(--muted);margin:.25rem 0 0;font-size:.85rem}.topbar{border-bottom:1px solid var(--border);background:var(--panel);z-index:20;justify-content:space-between;align-items:flex-start;gap:1rem;padding:.6rem 1rem;display:flex;position:sticky;top:0}.topbar h1{margin:0;font-size:1.05rem;font-weight:600}.topbar__status{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.pill{border:1px solid var(--border);background:#21262d;border-radius:999px;padding:.2rem .55rem;font-size:.75rem}.pill--ok{border-color:var(--ok);color:var(--ok)}.pill--warn{border-color:var(--warn);color:var(--warn)}.pill--unknown{color:var(--muted)}.link{color:var(--accent);font-size:.85rem;text-decoration:none}.link:hover{text-decoration:underline}.layout{grid-template-columns:1fr min(320px,28vw);align-items:start;gap:0;display:grid}.topology-main{border-right:1px solid var(--border);flex-direction:column;min-width:0;display:flex}.rat-tabs{border-bottom:1px solid var(--border);background:#1c2128;flex-shrink:0;gap:0;display:flex}.rat-tab{border:none;border-right:1px solid var(--border);color:var(--muted);cursor:pointer;text-align:left;background:0 0;border-bottom:2px solid #0000;flex-direction:column;flex:1;align-items:flex-start;gap:.15rem;padding:.55rem .75rem;font-family:inherit;transition:background .15s,color .15s,border-color .15s;display:flex}.rat-tab:last-child{border-right:none}.rat-tab:hover{color:var(--text);background:#21262d}.rat-tab.active{color:var(--text);background:var(--bg);border-bottom-color:var(--accent)}.rat-tab.relevant{color:var(--text)}.rat-tab.dimmed{opacity:.45}.rat-tab__label{font-size:.88rem;font-weight:600}.rat-tab__meta{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.rat-tab__subtitle{color:var(--muted);font-size:.68rem;line-height:1.2}.topology-toolbar{border-bottom:1px solid var(--border);background:#151a21;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:.45rem;padding:.35rem .75rem;display:flex}.topology-legend{flex:100%;margin:0;font-size:.68rem;line-height:1.4}.topology-toolbar__label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem}.topology-toolbar__sep{background:var(--border);width:1px;height:1.25rem;margin:0 .15rem}.seg-control{border:1px solid var(--border);border-radius:6px;display:inline-flex;overflow:hidden}.seg-btn{border:none;border-right:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;white-space:nowrap;padding:.28rem .55rem;font-family:inherit;font-size:.72rem}.seg-btn:last-child{border-right:none}.seg-btn:hover{color:var(--text);background:#21262d}.seg-btn.active{color:var(--text);box-shadow:inset 0 0 0 1px var(--accent);background:#1f6feb33}.toolbar-select{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:.28rem .45rem;font-family:inherit;font-size:.72rem}.topology-stage{flex-direction:column;display:flex}.rat-pane{flex-direction:column;display:none}.rat-pane.active{display:flex}.rat-pane__head{border-bottom:1px solid var(--border);background:#151a21;flex-shrink:0;padding:.45rem .85rem}.rat-pane__head h3{margin:0;font-size:.95rem}.rat-pane__head p{color:var(--muted);margin:.15rem 0 0;font-size:.78rem}.rat-pane__head-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.attach-pill{border:1px solid var(--border);white-space:nowrap;border-radius:999px;flex-shrink:0;padding:.15rem .5rem;font-size:.72rem}.attach-pill--offline{color:var(--muted)}.attach-pill--ran{border-color:var(--warn);color:var(--warn)}.attach-pill--attached{border-color:var(--ok);color:var(--ok);animation:2s ease-in-out infinite attach-glow}@keyframes attach-glow{0%,to{box-shadow:0 0 #3fb95000}50%{box-shadow:0 0 8px 1px #3fb95059}}.node.attached circle{stroke:var(--ok);stroke-width:2.5px;animation:1.6s ease-in-out infinite ue-pulse}@keyframes ue-pulse{0%,to{filter:drop-shadow(0 0 3px var(--ok))}50%{filter:drop-shadow(0 0 9px var(--ok))}}.rat-pane__svg-wrap{background:radial-gradient(ellipse at center, #12161c 0%, var(--bg) 70%);padding:.5rem;position:relative;overflow:auto}.rat-pane__svg-wrap svg{width:100%;max-width:100%;height:auto;min-height:280px;display:block}.edge{stroke:#484f58;fill:none;vector-effect:non-scaling-stroke}.edge-label{fill:var(--muted);pointer-events:none}.node circle{vector-effect:non-scaling-stroke;cursor:pointer;transition:filter .15s,stroke-width .15s,opacity .15s}.node:hover circle{filter:drop-shadow(0 0 3px #7aa2f78c)}.node-tooltip{z-index:10000;border:1px solid var(--accent,#7aa2f7);pointer-events:none;background:#1a2030;border-radius:8px;max-width:min(22rem,100vw - 2rem);padding:.55rem .7rem;font-size:.78rem;line-height:1.4;position:fixed;box-shadow:0 8px 24px #0000008c}.node-tooltip[hidden]{display:none!important}.node-tooltip__title{color:var(--text);margin-bottom:.25rem;font-weight:600}.node-tooltip__body{color:var(--muted)}.node-tooltip__hint{color:var(--accent);margin-top:.35rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem}.node text,.node-label{fill:var(--text);text-anchor:middle;pointer-events:none}.node.dim circle{opacity:.28}.node.dim text,.node.dim .node-label{opacity:.35}.node--ran circle{fill:#2d2640;stroke:var(--ran)}.node--cp circle{fill:#1a2a3a;stroke:var(--cp)}.node--up circle{fill:#1a2f22;stroke:var(--up)}.node--data circle{fill:#3a2a1a;stroke:var(--data)}.node--mgmt circle{fill:#3a1a2a;stroke:var(--mgmt)}.node--ext circle{fill:#3a1a1a;stroke:var(--ext)}.node.down circle{stroke:var(--muted);opacity:.5}.node.up circle{stroke-width:2.2px}.node.highlight circle{stroke:var(--danger);stroke-width:2px;filter:drop-shadow(0 0 4px var(--danger))}.node.entry circle{stroke:var(--warn);animation:1.2s ease-in-out infinite pulse}@keyframes pulse{0%,to{filter:drop-shadow(0 0 4px var(--warn))}50%{filter:drop-shadow(0 0 10px var(--warn))}}.edge.attack{stroke:var(--danger);stroke-width:1.6px;animation:.8s linear infinite dash}.edge.attack--documented{stroke-dasharray:none}.edge.attack--analogue{stroke-dasharray:6 3}.edge.attack--architectural{stroke-dasharray:2 3}.edge.attack--tabletop{stroke-dasharray:8 3 2 3}.edge.attack-only{opacity:.95}.edge.attack-only.edge.attack--documented{stroke-dasharray:none}.edge.attack-only.edge.attack--analogue{stroke-dasharray:6 3}.edge.attack-only.edge.attack--architectural{stroke-dasharray:2 3}.edge.attack-only.edge.attack--tabletop{stroke-dasharray:8 3 2 3}@keyframes dash{to{stroke-dashoffset:-20px}}.attack-panel{background:var(--panel);flex-direction:column;max-height:calc(100vh - 3.25rem);display:flex;position:sticky;top:3.25rem;overflow:hidden}.attack-panel h2{flex-shrink:0;margin:0;padding:.65rem .75rem .25rem;font-size:.9rem}.attack-panel__hint{flex-shrink:0;margin:0;padding:0 .75rem .4rem;font-size:.72rem;line-height:1.35}.attack-filters{flex-direction:column;flex-shrink:0;gap:.35rem;margin:0 .75rem .5rem;display:flex}.btn-clear-filters{border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;border-radius:6px;padding:.35rem .55rem;font-size:.8rem}.btn-clear-filters:hover{color:var(--text);border-color:var(--accent)}#actor-filter,#attack-filter{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:.4rem .55rem;font-size:.85rem}#attack-filter{margin:0}.attack-list{flex:1;min-height:0;padding:0 .5rem .5rem;overflow-y:auto}.attack-list-error{color:#ffb4ae;background:#f851491f;border:1px solid #f8514959;border-radius:8px;margin:.5rem;padding:.65rem .75rem;font-size:.82rem;line-height:1.4}.attack-card{text-align:left;border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);cursor:pointer;border-radius:8px;margin-bottom:.45rem;padding:.55rem .6rem;font-family:inherit}.attack-card:hover{border-color:var(--accent)}.attack-card.selected{border-color:var(--danger);background:#1c1418}.attack-card__head{justify-content:space-between;align-items:flex-start;gap:.35rem;display:flex}.attack-card__badges{flex-direction:column;flex-shrink:0;align-items:flex-end;gap:.2rem;display:flex}.actor-badge{text-transform:uppercase;letter-spacing:.03em;border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:.1rem .32rem;font-size:.56rem;font-weight:600}.actor-badge--apt{color:#f85149;background:#f851491f;border-color:#f8514959}.actor-badge--cyber_criminal{color:#ff7b72;background:#ff7b721f;border-color:#ff7b7259}.actor-badge--researcher{color:#58a6ff;background:#58a6ff1f;border-color:#58a6ff59}.actor-badge--both{color:#e3b341;background:#e3b3411f;border-color:#e3b34159}.verify-entry{border:1px solid var(--border);background:#58a6ff0f;border-radius:6px;margin:.5rem 0;padding:.55rem .65rem}.verify-entry h4{color:var(--accent);text-transform:uppercase;letter-spacing:.04em;margin:0 0 .35rem;font-size:.78rem}.verify-entry p{margin:.25rem 0;font-size:.88rem;line-height:1.45}.verify-entry__actor{font-size:.78rem!important}.attack-card__campaign{color:var(--warn);text-transform:uppercase;letter-spacing:.03em;flex:1;font-size:.68rem}.evidence-badge{text-transform:uppercase;letter-spacing:.03em;border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:.12rem .35rem;font-size:.58rem;font-weight:600}.evidence-badge--documented{color:#3fb950;background:#3fb9501f;border-color:#3fb95059}.evidence-badge--analogue{color:#d29922;background:#d299221f;border-color:#d2992259}.evidence-badge--architectural{color:#8b949e;background:#8b949e1f;border-color:#8b949e40}.evidence-badge--tabletop{color:#a371f7;background:#a371f71f;border-color:#a371f759}.evidence-note{color:var(--muted);border-left:3px solid var(--accent);margin:.35rem 0;padding-left:.6rem;font-size:.82rem}.verify-meta__head{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.attack-card__title{margin:.15rem 0;font-size:.82rem;font-weight:600}.attack-card__rats{color:var(--muted);font-size:.68rem}.attack-card__profile{background:#21262d;border-radius:4px;margin-top:.25rem;padding:.1rem .35rem;font-size:.65rem;display:inline-block}.verify-panel{border-top:1px solid var(--border);background:#12161c}.observe-panel{border-bottom:1px solid var(--border);background:#151a22;padding:.55rem 1rem .75rem}.observe-panel__head{justify-content:space-between;align-items:baseline;gap:.5rem;margin-bottom:.45rem;display:flex}.observe-panel h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:0;font-size:.82rem}.observe-panel__meta{font-size:.72rem}.observe-table-wrap{overflow-x:auto}.observe-table{border-collapse:collapse;width:100%;font-size:.75rem}.observe-table th,.observe-table td{border:1px solid var(--border);text-align:left;padding:.3rem .45rem}.observe-table th{color:var(--muted);font-weight:600}.observe-table tr.selected-row td{background:#1c1418}.observe-table td.observe-mismatch{color:var(--danger);background:#f851491f}.observe-table td.observe-match-ok{color:var(--ok)}.source-links{flex-wrap:wrap;gap:.35rem;margin:.35rem 0 0;padding:0;list-style:none;display:flex}.source-links a{color:var(--accent);border:1px solid var(--border);border-radius:4px;padding:.1rem .35rem;font-size:.72rem;text-decoration:none}.source-links a:hover{border-color:var(--accent)}.excluded-panel{border-top:1px dashed var(--border);margin-top:.75rem;padding-top:.55rem}.excluded-panel h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:0 0 .35rem;font-size:.68rem}.excluded-list{color:var(--muted);margin:0;padding-left:1rem;font-size:.72rem;line-height:1.45}.excluded-list li{margin-bottom:.35rem}.status-pass{color:var(--ok)}.status-fail{color:var(--danger)}.status-xfail{color:var(--warn)}.status-skip,.status-empty{color:var(--muted)}.observe-panel__hint{margin:.4rem 0 0;font-size:.72rem}.verify-panel__header{border-bottom:1px solid var(--border);padding:.55rem 1rem .3rem}.verify-panel h2{margin:0;font-size:.92rem}.verify-panel h3{color:var(--muted);margin:0 0 .4rem;font-size:.8rem}.verify-panel__body{padding:.55rem 1rem .85rem}.verify-meta{margin-bottom:.65rem;font-size:.8rem;line-height:1.45}.verify-meta strong{color:var(--accent)}.verify-context{border:1px solid var(--border);background:#161b22;border-radius:6px;margin-bottom:.75rem;padding:.55rem .65rem;font-size:.78rem;line-height:1.5}.verify-context h4{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 .35rem;font-size:.72rem}.verify-context h4:not(:first-child){margin-top:.65rem}.verify-context p{margin:0 0 .35rem}.verify-context ul{margin:.25rem 0 0;padding-left:1.1rem}.verify-context li{margin-bottom:.2rem}.verify-col__hint{margin:-.2rem 0 .45rem;font-size:.68rem}.verify-columns--three{grid-template-columns:1.2fr 1fr .85fr}.docker-access{flex-direction:column;gap:.65rem;display:flex}.docker-card{border:1px solid var(--border);background:#0d1117;border-radius:6px;padding:.45rem .55rem}.docker-card--host{background:#161b22;border-color:#30363d}.docker-card__head{align-items:baseline;gap:.4rem;margin-bottom:.35rem;display:flex}.docker-card__head code{color:var(--accent);font-size:.72rem}.docker-card__label{color:var(--muted);font-size:.68rem}.docker-cmd-list{margin:0;padding:0;list-style:none}.docker-cmd-list li{font-family:var(--mono);margin-bottom:.3rem;font-size:.7rem;line-height:1.4}.docker-cmd-list .cmd-label{font-family:var(--font);color:var(--muted);margin-bottom:.1rem;font-size:.65rem;display:block}.docker-cmd-list .cmd-text{cursor:pointer;word-break:break-all;border-radius:4px;padding:.15rem .25rem;display:block}.docker-cmd-list .cmd-text:hover{background:#21262d}.docker-cmd-list .cmd-text.copied:after{content:" ✓ copied";color:var(--ok);font-family:var(--font)}.verify-columns{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.cmd-list,.file-list{font-family:var(--mono);margin:0;padding-left:1.2rem;font-size:.74rem;line-height:1.5}.cmd-list li,.file-list li{margin-bottom:.35rem}.cmd-list li{cursor:pointer;border-radius:4px;padding:.15rem .25rem}.cmd-list li:hover{background:#21262d}.cmd-list li.copied:after{content:" ✓ copied";color:var(--ok);font-family:var(--font)}@media (width<=900px){.layout{grid-template-columns:1fr}.topology-main{border-right:none;border-bottom:1px solid var(--border)}.attack-panel{max-height:none;position:static;overflow:visible}.attack-list{max-height:none;overflow:visible}.verify-columns,.verify-columns--three{grid-template-columns:1fr}}
