@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";:root{color:#eaf2ed;font-synthesis:none;text-rendering:optimizelegibility;background:#071311;font-family:Manrope,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input,select{font:inherit}.app-shell{background:radial-gradient(circle at 81% 8%,#2c795c29,#0000 27rem),linear-gradient(120deg,#071311 0%,#0a1b17 52%,#071311 100%);min-height:100vh;padding:0 4vw 4rem}.topbar{border-bottom:1px solid #cfedda1f;justify-content:space-between;align-items:center;height:78px;display:flex}.brand{color:inherit;letter-spacing:0;align-items:center;gap:.7rem;font-weight:800;text-decoration:none;display:inline-flex}.brand-mark{color:#071311;background:#b6f36b;place-items:center;width:30px;height:30px;display:grid}.source-status{color:#a4c2b0;text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:.5rem;font:500 .7rem/1 DM Mono,monospace;display:flex}.source-status svg{color:#b6f36b}.status-divider{background:#cfedda40;width:1px;height:13px;margin:0 .2rem}.intro{justify-content:space-between;align-items:end;gap:2rem;max-width:1180px;margin:4.5rem auto 2rem;display:flex}.eyebrow{color:#b6f36b;letter-spacing:.12em;text-transform:uppercase;margin:0 0 .6rem;font:500 .69rem/1 DM Mono,monospace}h1{letter-spacing:0;margin:0;font-size:clamp(2rem,4vw,4rem);line-height:1.08}.intro-note{color:#aac3b4;align-items:flex-start;gap:.5rem;max-width:390px;margin:0;font-size:.82rem;line-height:1.6;display:flex}.intro-note svg{color:#f4c66b;flex:none;margin-top:.2rem}.metric-grid{background:#cfedda21;grid-template-columns:repeat(3,1fr);gap:1px;max-width:1180px;margin:0 auto 1px;display:grid}.metric{background:#091c16d6;min-width:0;padding:1.4rem 1.5rem}.metric p,.metric span{color:#9bb5a5;letter-spacing:.07em;text-transform:uppercase;margin:0;font:500 .68rem/1.4 DM Mono,monospace}.metric strong{letter-spacing:0;margin:.45rem 0;font-size:1.8rem;display:block}.metric span{color:#718c7b;text-transform:none;letter-spacing:0}.controls{flex-wrap:wrap;gap:.8rem;max-width:1180px;margin:2rem auto 0;display:flex}.controls label{color:#8ea899;letter-spacing:.08em;text-transform:uppercase;gap:.35rem;font:500 .64rem/1 DM Mono,monospace;display:grid}.controls select{color:#eaf2ed;background:#0d251d;border:1px solid #cfedda33;border-radius:0;outline:none;min-width:155px;height:38px;padding:0 2rem 0 .75rem}.controls select:focus{border-color:#b6f36b}.simulation-toggle{color:#a9c0b1;letter-spacing:.04em;align-items:center;gap:.55rem;max-width:1180px;margin:1rem calc(50% - min(1180px,100%)/2) 0;font:500 .68rem/1 DM Mono,monospace;display:inline-flex}.simulation-toggle input{accent-color:#b6f36b;width:15px;height:15px}.map-panel{background:#091c16db;border:1px solid #cfedda21;max-width:1420px;margin:1rem auto 0}.event-table-panel,.indicator-panel,.community-panel{background:#091c16db;border:1px solid #cfedda21;max-width:1180px;margin:1rem auto 0}.panel-heading{border-bottom:1px solid #cfedda21;justify-content:space-between;align-items:flex-end;gap:1rem;padding:1.25rem 1.4rem;display:flex}.panel-heading .eyebrow{margin-bottom:.35rem;font-size:.6rem}h2{letter-spacing:0;margin:0;font-size:1.1rem}.map-key,.event-count{color:#8ea899;letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:.45rem;margin:0;font:.66rem/1 DM Mono,monospace;display:flex}.map-key span{background:#ff7474;border-radius:50%;width:7px;height:7px;box-shadow:0 0 10px #ff7474}.map-wrap{background:radial-gradient(#20583f61,#0000 68%);min-height:620px;position:relative;overflow:hidden}.map-wrap svg{width:100%;height:620px;display:block}.attack-route{cursor:pointer;outline:none;transition:stroke-width .16s,stroke-opacity .16s}.attack-route:focus{filter:drop-shadow(0 0 4px)}.attack-vector-flow{pointer-events:none;filter:drop-shadow(0 0 3px);animation:.9s linear infinite vector-flow}.map-location-label{fill:#edf7f0;paint-order:stroke;stroke:#091c16;stroke-width:2px;stroke-linejoin:round;font:600 7px/1 DM Mono,monospace}.route-detail{z-index:1;pointer-events:none;background:#071311e6;border-left:2px solid #b6f36b;gap:.38rem;max-width:340px;padding:.9rem 1rem;display:grid;position:absolute;top:1.2rem;left:1.2rem}.route-detail-label{color:#b6f36b;letter-spacing:.1em;text-transform:uppercase;margin:0;font:500 .59rem/1 DM Mono,monospace}.route-detail strong{font-size:.9rem}.route-detail span,.route-detail small{color:#b8cabe;font:.69rem/1.45 DM Mono,monospace}.route-detail b{color:#b6f36b}.indicator-detail{z-index:1;pointer-events:none;background:#071311e6;border-left:2px solid #68b6f3;gap:.38rem;max-width:330px;padding:.9rem 1rem;display:grid;position:absolute;top:1.2rem;right:1.2rem}.indicator-detail strong{font:500 .78rem/1.4 DM Mono,monospace}.indicator-detail span,.indicator-detail small{color:#b8cabe;font:.69rem/1.45 DM Mono,monospace}.indicator-marker{cursor:pointer}.indicator-marker:focus{filter:drop-shadow(0 0 4px #68b6f3);outline:none}.map-empty{color:#91ad9b;place-content:center;margin:0;font:.75rem DM Mono,monospace;display:grid;position:absolute;inset:0}.event-table-panel{margin-top:1rem}.table-scroll{overflow-x:auto}table{border-collapse:collapse;text-align:left;width:100%}th{color:#789584;letter-spacing:.08em;text-transform:uppercase;padding:.85rem 1.4rem;font:500 .61rem/1 DM Mono,monospace}td{color:#bfd0c6;white-space:nowrap;border-top:1px solid #cfedda17;padding:1rem 1.4rem;font-size:.79rem}td strong{color:#edf7f0;font:500 .73rem/1 DM Mono,monospace}td small{color:#759181;margin-top:.3rem;font-size:.68rem;display:block}.severity{text-align:center;text-transform:uppercase;border:1px solid;min-width:58px;padding:.32rem .45rem;font:500 .61rem/1 DM Mono,monospace;display:inline-block}.severity-critical{color:#ff8b8b}.severity-high{color:#ffc281}.severity-medium{color:#b6f36b}.severity-low{color:#7fc6ad}.no-results{text-align:center;color:#8ea899;padding:2rem}.indicator-note,.indicator-empty{color:#9ab4a4;margin:0;padding:1rem 1.4rem;font:.71rem/1.55 DM Mono,monospace}.indicator-note{border-bottom:1px solid #cfedda17}.indicator-list{background:#cfedda17;grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.indicator{background:#0b2119;min-width:0;padding:1rem 1.2rem}.indicator strong,.indicator span,.indicator small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.indicator strong{color:#eaf2ed;font:500 .73rem/1.4 DM Mono,monospace}.indicator span{color:#b6f36b;text-transform:capitalize;margin-top:.45rem;font:.64rem/1.4 DM Mono,monospace}.indicator small{color:#789584;margin-top:.28rem;font:.62rem/1.4 DM Mono,monospace}.community-grid{background:#cfedda17;grid-template-columns:repeat(2,1fr);gap:1px;display:grid}.community-section{background:#0b2119;min-width:0}.community-section h3{color:#b6f36b;letter-spacing:.07em;text-transform:uppercase;border-bottom:1px solid #cfedda17;margin:0;padding:.85rem 1.2rem;font:500 .64rem/1 DM Mono,monospace}.community-row{border-bottom:1px solid #cfedda17;grid-template-columns:minmax(0,1fr) auto;gap:.35rem 1rem;padding:.72rem 1.2rem;display:grid}.community-row:last-child{border-bottom:0}.community-row strong{color:#eaf2ed;text-overflow:ellipsis;white-space:nowrap;min-width:0;font:500 .71rem/1.4 DM Mono,monospace;overflow:hidden}.community-row span{color:#c3d6ca;text-align:right;font:.64rem/1.4 DM Mono,monospace}.community-row small{color:#789584;grid-column:1/-1;font:.61rem/1.3 DM Mono,monospace}@keyframes vector-flow{to{stroke-dashoffset:-14px}}@media (width<=650px){.app-shell{padding:0 1rem 2rem}.topbar{height:64px}.source-status span:last-child,.status-divider{display:none}.intro{margin:3rem 0 1.5rem;display:block}.intro-note{margin-top:1.25rem}.metric-grid{grid-template-columns:1fr}.controls{grid-template-columns:1fr;display:grid}.controls select{width:100%}.simulation-toggle{margin-left:0}.map-wrap,.map-wrap svg{height:440px;min-height:440px}.route-detail{max-width:none;inset:auto .75rem .75rem}.indicator-detail{max-width:none;top:.75rem;left:.75rem;right:.75rem}.indicator-list,.community-grid{grid-template-columns:1fr}th,td{padding-left:1rem;padding-right:1rem}}@media (prefers-reduced-motion:reduce){.attack-vector-flow{animation:none}}
