:root{--bg: #03080a;--grid: #081820;--radar-green: #00ff88;--threat-0: #00e676;--threat-1: #ffea00;--threat-2: #ff9100;--threat-3: #ff1744;--eff-missile: #2979ff;--eff-dew: #d500f9;--eff-jammer: #00e5ff;--eff-ciws: #ff9100;--eff-net: #76ff03;--hitl-pending: #ffab00;--panel-bg: rgba(3, 12, 10, .92);--panel-border: #1a4430;--text-hi: #e0ffe8;--text-lo: #3a6a50;--font-mono: "Share Tech Mono", monospace;--font-ui: "Inter", sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text-hi);font-family:var(--font-ui);overflow:hidden}button{font-family:var(--font-ui);background:#001e1499;border:1px solid var(--panel-border);color:var(--text-hi);padding:6px 10px;cursor:pointer;border-radius:4px;font-size:12px;letter-spacing:.04em;transition:background .12s,border-color .12s,color .12s}button:hover{background:#00503299;border-color:var(--radar-green)}button:disabled{opacity:.4;cursor:not-allowed}button.active{background:var(--radar-green);color:#001a10;border-color:var(--radar-green)}.app-root{display:grid;grid-template-rows:44px 1fr 86px 96px 56px;height:100vh;width:100vw}.header-bar{display:flex;align-items:center;gap:24px;padding:0 16px;background:linear-gradient(90deg,#04120c,#06281c,#04120c);border-bottom:1px solid var(--panel-border);font-family:var(--font-mono);font-size:13px;color:var(--text-hi)}.header-bar .brand{display:inline-flex;align-items:center;gap:10px;color:var(--radar-green);letter-spacing:.15em;font-weight:700}.header-bar .brand-logo{height:24px;width:24px;object-fit:contain;filter:drop-shadow(0 0 4px rgba(0,255,136,.35))}.header-bar .stat{color:var(--text-lo)}.header-bar .stat span{color:var(--text-hi);margin-left:4px}.header-bar .ok{color:var(--radar-green)}.header-bar .bad{color:var(--threat-3)}.main-area{display:grid;grid-template-columns:1fr 320px 360px;gap:8px;padding:8px;min-height:0;position:relative;z-index:1}.map-cell{position:relative;min-height:0;min-width:0}.map-cell canvas{width:100%;height:100%;display:block;border:1px solid var(--panel-border);border-radius:6px;background:var(--bg);touch-action:none}.map-zoom-control{position:absolute;left:12px;top:32px;z-index:3;display:grid;grid-template-columns:36px 74px 36px 70px;align-items:center;gap:4px;padding:4px;background:#030c0ac7;border:1px solid rgba(0,255,136,.28);border-radius:6px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.map-zoom-control button{height:30px;padding:0 8px;font-family:var(--font-mono);font-size:13px}.map-zoom-readout{height:30px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(80,136,106,.55);border-radius:4px;color:var(--text-hi);font-family:var(--font-mono);font-size:12px;background:#001812d1}.map-mode-chip{position:absolute;left:12px;bottom:12px;z-index:2;padding:8px 12px;border:1px solid rgba(0,255,136,.34);border-radius:5px;background:#031611c2;color:var(--text-hi);font-family:var(--font-mono);font-size:13px;letter-spacing:.08em}.right-stack{display:grid;grid-template-rows:1fr 1fr;gap:8px;min-height:0}.mid-stack{display:grid;grid-template-rows:1fr;gap:8px;min-height:0}.panel{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:6px;padding:8px;overflow:hidden;display:flex;flex-direction:column;min-height:0}.panel-title{font-family:var(--font-mono);font-size:11px;letter-spacing:.15em;color:var(--radar-green);padding-bottom:6px;border-bottom:1px solid var(--panel-border);margin-bottom:6px;text-transform:uppercase}.panel-body{flex:1;overflow:auto}.effector-bar-row,.event-log-row,.control-row{border-top:1px solid var(--panel-border);background:linear-gradient(180deg,#04120cf2,#020806f2);padding:8px 12px;overflow:hidden}.effector-bar-row{position:relative;z-index:10;overflow:visible}.control-row{overflow:visible}.threat-queue-list{display:flex;flex-direction:column;gap:3px}.threat-row{display:grid;grid-template-columns:22px 1fr 80px 36px 56px;align-items:center;gap:6px;padding:4px 6px;border-radius:3px;font-family:var(--font-mono);font-size:11px;cursor:pointer;border:1px solid transparent}.threat-row:hover{background:#00281980}.threat-row.selected{border-color:var(--radar-green);background:#003c2880}.threat-row.ghost{opacity:.48}.threat-row .rank{color:var(--text-lo)}.threat-row .id{color:var(--text-hi);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.threat-row .id .icon{display:inline-block;width:12px;text-align:center;margin-right:4px}.threat-row .bar{height:6px;background:#0a1f15;border-radius:3px;overflow:hidden}.threat-row .bar .fill{height:100%;transition:width .2s}.threat-row .score{text-align:right;font-weight:700}.threat-row .status{font-size:9px;padding:2px 4px;border-radius:2px;text-align:center}.status-ACTIVE{background:#0f3322;color:var(--radar-green)}.status-ENGAGED{background:#4d2d05;color:var(--hitl-pending)}.status-JAMMED{background:#073946;color:var(--eff-jammer)}.status-SEARCH{background:#10231c;color:var(--text-lo)}.lnn-inspector .drone-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}.lnn-inspector .big-score{font-family:var(--font-mono);font-size:28px;font-weight:700}.lnn-inspector .features{display:flex;flex-direction:column;gap:4px}.lnn-inspector .feat-row{display:grid;grid-template-columns:110px 1fr 40px;gap:6px;align-items:center;font-family:var(--font-mono);font-size:10px}.lnn-inspector .feat-row .label{color:var(--text-lo);text-transform:uppercase;letter-spacing:.08em}.lnn-inspector .feat-row .bar{background:#0a1f15;height:8px;border-radius:2px;overflow:hidden}.lnn-inspector .feat-row .fill{height:100%;background:var(--radar-green);transition:width .15s}.lnn-inspector .feat-row .num{color:var(--text-hi);text-align:right}.lnn-inspector .spark{height:36px;margin-top:8px}.lnn-inspector .assigned{margin-top:6px;font-family:var(--font-mono);font-size:11px;color:var(--text-lo)}.lnn-inspector .assigned strong{color:var(--text-hi)}.lnn-inspector .why-line{display:flex;justify-content:space-between;gap:8px;margin:2px 0;font-family:var(--font-mono);font-size:10px;color:var(--text-lo);letter-spacing:.05em}.lnn-inspector .why-line .v{color:var(--text-hi)}.lnn-inspector .why-line .delta-pos{color:var(--threat-2)}.lnn-inspector .why-line .delta-neg{color:var(--radar-green)}.lnn-inspector .feat-row.driver .label{color:var(--text-hi)}.lnn-inspector .feat-row .contrib{display:inline-block;margin-left:4px;padding:0 3px;font-size:9px;color:var(--hitl-pending);letter-spacing:.04em}.wta-row{position:relative}.wta-row .alts{position:absolute;left:0;bottom:calc(100% + 4px);min-width:220px;max-width:340px;padding:6px 8px;border:1px solid var(--panel-border);border-radius:3px;background:#030a08fa;color:var(--text-hi);font-family:var(--font-mono);font-size:10px;line-height:1.4;letter-spacing:.03em;opacity:0;pointer-events:none;transition:opacity .1s;box-shadow:0 6px 18px #00000080;z-index:40}.wta-row:hover .alts{opacity:1}.wta-row .alts .alts-head{color:var(--text-lo);margin-bottom:3px}.wta-row .alts .alt-row{display:grid;grid-template-columns:88px 1fr;gap:6px;align-items:baseline}.wta-row .alts .alt-row .why{color:var(--text-lo)}.wta-row .alts .alt-row.ok .why{color:var(--radar-green)}.wta-list{display:flex;flex-direction:column;gap:4px}.wta-row{display:grid;grid-template-columns:1fr auto auto;gap:6px;align-items:center;padding:4px 6px;border:1px solid var(--panel-border);border-radius:3px;font-family:var(--font-mono);font-size:11px;background:#040e0a99}.wta-row.proposed{border-color:var(--hitl-pending)}.wta-row.approved{border-color:var(--radar-green)}.wta-row .left{display:flex;align-items:center;gap:6px;overflow:hidden}.wta-row .arrow{color:var(--text-lo)}.wta-row .pk{color:var(--text-lo);margin-left:6px;font-size:9px}.wta-row .ring{width:16px;height:16px}.wta-row button{padding:3px 6px;font-size:10px}.effector-bar{position:relative;z-index:11;display:grid;grid-template-columns:repeat(8,minmax(108px,1fr));gap:8px;height:100%;align-items:stretch}.eff-chip{position:relative;display:grid;grid-template-rows:auto auto auto 4px;gap:3px;padding:8px 9px 7px;border:1px solid color-mix(in srgb,var(--eff-color) 70%,#103520);border-left:4px solid var(--eff-color);border-radius:5px;background:#040e0ab3;font-family:var(--font-mono);font-size:10px;min-width:0}.eff-chip:hover{z-index:20}.eff-chip:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(90deg,color-mix(in srgb,var(--eff-color) 16%,transparent),transparent 50%);opacity:.45}.eff-chip:after{content:attr(data-tooltip);position:absolute;left:8px;bottom:calc(100% + 8px);width:min(280px,38vw);padding:8px 10px;border:1px solid color-mix(in srgb,var(--eff-color) 72%,#153820);border-radius:4px;background:#030a08fa;color:var(--text-hi);font-family:var(--font-ui);font-size:12px;line-height:1.35;letter-spacing:0;white-space:normal;opacity:0;transform:translateY(4px);pointer-events:none;transition:opacity .1s,transform .1s;box-shadow:0 10px 28px #00000061;z-index:30}.eff-chip:hover:after,.eff-chip:focus-visible:after{opacity:1;transform:translateY(0)}.eff-chip .eff-head,.eff-chip .eff-status,.eff-chip .eff-meta{position:relative;display:flex;justify-content:space-between;gap:6px;min-width:0}.eff-chip .name{color:var(--eff-color);font-size:13px;font-weight:700;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eff-chip .count{color:var(--text-hi);font-size:12px;font-weight:700;white-space:nowrap}.eff-chip .eff-status{color:var(--text-hi);font-size:10px}.eff-chip .eff-meta{color:var(--text-lo);font-size:10px}.eff-chip .reload-bar{position:relative;height:4px;background:#0a1f15;border-radius:2px;overflow:hidden;margin-top:1px}.eff-chip .reload-bar .fill{display:block;height:100%;background:var(--hitl-pending)}.history-panel{display:flex;flex-direction:column;gap:4px;font-family:var(--font-mono);font-size:11px}.history-cap{color:var(--text-lo);font-size:9px;letter-spacing:.1em;margin-bottom:2px}.run-block{display:flex;flex-direction:column}.run-head{display:grid;grid-template-columns:14px 1fr auto auto auto auto;gap:6px;align-items:center;padding:5px 6px;background:#040e0a99;border:1px solid var(--panel-border);border-radius:3px;color:var(--text-hi);font-family:var(--font-mono);font-size:11px;cursor:pointer;text-align:left}.run-head:hover{background:#00281980}.run-head.expanded{border-color:var(--radar-green)}.run-head.live{border-left:3px solid var(--radar-green);padding-left:4px}.run-head .caret{color:var(--text-lo)}.run-head .name{color:var(--text-hi)}.run-head .time,.run-head .dur{color:var(--text-lo);font-size:10px}.run-head .counts{display:flex;gap:4px;font-size:10px}.run-head .counts .ok{color:var(--radar-green)}.run-head .counts .bad{color:var(--threat-3)}.run-head .counts .pending{color:var(--hitl-pending)}.run-head .badge{font-size:8px;letter-spacing:.1em;padding:1px 4px;border:1px solid var(--radar-green);color:var(--radar-green);border-radius:2px}.run-drones{display:flex;flex-direction:column;gap:2px;padding:4px 0 4px 10px}.run-drones .empty{color:var(--text-lo);font-size:10px;padding:2px 4px}.hist-drone-row{display:grid;grid-template-columns:1fr 80px 40px 76px;gap:6px;align-items:center;padding:3px 6px;background:#040e0a66;border:1px solid transparent;border-left:3px solid var(--text-lo);border-radius:2px;color:var(--text-hi);font-family:var(--font-mono);font-size:10px;cursor:pointer;text-align:left}.hist-drone-row:hover{background:#00281980}.hist-drone-row.selected{border-color:var(--radar-green);background:#003c2866}.hist-drone-row.outcome-ok{border-left-color:var(--radar-green)}.hist-drone-row.outcome-bad{border-left-color:var(--threat-3)}.hist-drone-row.outcome-pending{border-left-color:var(--hitl-pending)}.hist-drone-row .id{color:var(--text-hi);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hist-drone-row .cls{color:var(--text-lo);font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hist-drone-row .peak{text-align:right;font-weight:700}.hist-drone-row .outcome{font-size:9px;text-align:right}.hist-drone-row.outcome-ok .outcome{color:var(--radar-green)}.hist-drone-row.outcome-bad .outcome{color:var(--threat-3)}.hist-drone-row.outcome-pending .outcome{color:var(--hitl-pending)}.replay-inspector{display:flex;flex-direction:column;gap:4px}.replay-inspector .drone-head{display:flex;justify-content:space-between;align-items:flex-start}.replay-inspector .big-score{font-family:var(--font-mono);font-size:26px;font-weight:700;text-align:right}.replay-inspector .outcome-pill{display:inline-block;margin-top:4px;padding:2px 6px;font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;border-radius:2px;border:1px solid var(--text-lo)}.replay-inspector .outcome-pill.outcome-ok{color:var(--radar-green);border-color:var(--radar-green)}.replay-inspector .outcome-pill.outcome-bad{color:var(--threat-3);border-color:var(--threat-3)}.replay-inspector .outcome-pill.outcome-pending{color:var(--hitl-pending);border-color:var(--hitl-pending)}.replay-inspector .why-line{display:flex;justify-content:space-between;gap:8px;margin:2px 0;font-family:var(--font-mono);font-size:10px;color:var(--text-lo);letter-spacing:.05em}.replay-inspector .why-line .v{color:var(--text-hi)}.replay-inspector .why-line .delta-pos{color:var(--threat-2)}.replay-inspector .why-line .delta-neg{color:var(--radar-green)}.replay-inspector .features{display:flex;flex-direction:column;gap:3px;max-height:220px;overflow-y:auto;padding-right:2px}.replay-inspector .feat-row{display:grid;grid-template-columns:110px 1fr 60px;gap:6px;align-items:center;font-family:var(--font-mono);font-size:10px}.replay-inspector .feat-row .label{color:var(--text-lo);text-transform:uppercase;letter-spacing:.08em}.replay-inspector .feat-row.driver .label{color:var(--text-hi)}.replay-inspector .feat-row .bar{background:#0a1f15;height:6px;border-radius:2px;overflow:hidden}.replay-inspector .feat-row .fill{height:100%;background:var(--radar-green)}.replay-inspector .feat-row .num{color:var(--text-hi);text-align:right}.replay-inspector .feat-row .contrib{display:inline-block;margin-left:4px;font-size:9px;color:var(--hitl-pending)}.replay-inspector .section-title{margin-top:8px;font-family:var(--font-mono);font-size:9px;letter-spacing:.12em;color:var(--text-lo);border-bottom:1px solid var(--panel-border);padding-bottom:2px}.replay-inspector .legend{display:flex;gap:12px;font-family:var(--font-mono);font-size:9px;color:var(--text-lo);letter-spacing:.08em;margin-top:2px}.replay-inspector .legend .swatch{display:inline-block;width:12px;height:2px;margin-right:4px;vertical-align:middle}.replay-inspector .legend .swatch.dashed{background:repeating-linear-gradient(to right,#3a6a50 0 4px,transparent 4px 6px)}.replay-inspector .replay-spark{height:56px}.assign-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:9px}.assign-table th,.assign-table td{padding:3px 4px;text-align:left;border-bottom:1px dotted var(--panel-border)}.assign-table th{color:var(--text-lo);font-weight:400;letter-spacing:.08em}.assign-table td{color:var(--text-hi)}.assign-table td.oc-ok{color:var(--radar-green)}.assign-table td.oc-bad{color:var(--threat-3)}.assign-table td.oc-pending{color:var(--hitl-pending)}.replay-events{max-height:140px;overflow-y:auto;font-family:var(--font-mono);font-size:10px;line-height:1.4}.replay-events .event-row{padding:1px 0}.replay-inspector .empty{color:var(--text-lo);font-size:10px;padding:4px 0;font-family:var(--font-mono)}.event-log{height:100%;overflow-y:auto;font-family:var(--font-mono);font-size:11px;line-height:1.4}.event-row{padding:2px;white-space:normal;overflow-wrap:anywhere;word-break:break-word}.event-row .time{display:inline-block}.event-INTERCEPTED{color:var(--radar-green)}.event-CAPTURED{color:var(--eff-net)}.event-JAMMED{color:var(--eff-jammer)}.event-MISSED,.event-BREACHED{color:var(--threat-3)}.event-ASSIGNED{color:var(--hitl-pending)}.event-DESTROYED,.event-INFO{color:var(--text-lo)}.event-row .time{color:var(--text-lo);margin-right:6px}.control-row{display:flex;align-items:center;gap:16px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;position:relative}.control-row .group{display:flex;gap:4px;align-items:center}.control-row .group .label{color:var(--text-lo);margin-right:4px;font-size:10px;letter-spacing:.08em}.control-row .sep{width:1px;height:22px;background:var(--panel-border)}.scenario-btn{min-width:110px}.scenario-select{width:190px;height:34px;background:#001e14b8;border:1px solid var(--panel-border);border-radius:4px;color:var(--text-hi);font-family:var(--font-ui);font-size:12px;padding:0 8px}.scenario-select:focus{outline:none;border-color:var(--radar-green)}.spawn-panel{position:absolute;bottom:56px;right:12px;width:280px;background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:6px;padding:10px;z-index:50;display:flex;flex-direction:column;gap:10px;font-family:var(--font-mono);font-size:11px}.spawn-panel h4{margin:0 0 4px;color:var(--radar-green);letter-spacing:.15em;font-size:11px}.spawn-panel .field{display:flex;flex-direction:column;gap:4px}.spawn-panel .field .label{color:var(--text-lo);font-size:10px;letter-spacing:.08em}.spawn-panel .radio-group,.spawn-panel .row-buttons{display:flex;flex-wrap:wrap;gap:4px}.spawn-panel input[type=range]{width:100%}
