:root{--bg: #0f1419;--panel: #1a2029;--border: #2a333f;--text: #e4e9f0;--muted: #8a97a8;--accent: #3b82f6;--danger: #ef4444;--ok: #22c55e;color-scheme:dark}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}.mono{font-family:ui-monospace,JetBrains Mono,Menlo,monospace}.muted{color:var(--muted)}.error{color:var(--danger)}.topbar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.25rem;border-bottom:1px solid var(--border);background:var(--panel)}.nav{display:flex;gap:1.25rem}.nav a{color:var(--text);text-decoration:none;font-weight:500}.nav a.router-link-active{color:var(--accent)}.user{display:flex;align-items:center;gap:.75rem;font-size:.9rem}.roles{color:var(--muted);font-size:.8rem}.app{display:flex;flex-direction:column;min-height:100dvh}.app.fixed{height:100dvh;overflow:hidden}.topbar{flex:none}.content{padding:1.5rem}.content.fills{flex:1 1 auto;min-height:0;display:flex;padding:1rem 1.25rem}.page.fills{flex:1 1 auto;min-width:0;min-height:0;display:flex;flex-direction:column;gap:.5rem}.page.fills>.page-head{flex:none}.page.fills h1{margin:0;font-size:1.4rem}.page h1{margin-top:0}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:1.5rem}.notice{max-width:640px}.login{min-height:100vh;display:grid;place-items:center}.login-card{width:min(360px,90vw);display:flex;flex-direction:column;gap:.9rem}.login-card h1{margin:0}.login-card label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem}input{padding:.6rem .7rem;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:1rem}input:focus{outline:2px solid var(--accent);outline-offset:-1px}.btn,.btn-sm,.btn-ghost{border:none;border-radius:8px;cursor:pointer;font:inherit}.btn{padding:.65rem;background:var(--accent);color:#fff;font-weight:600}.btn:disabled{opacity:.6;cursor:default}.btn.danger{background:var(--danger)}a.btn{display:block;text-align:center;text-decoration:none}.btn-ghost{padding:.4rem .7rem;background:transparent;color:var(--muted);border:1px solid var(--border)}.btn-sm{display:inline-block;padding:.3rem .7rem;background:var(--accent);color:#fff;text-decoration:none;font-size:.85rem}.table{width:100%;border-collapse:collapse;margin-top:1rem}.table th,.table td{text-align:left;padding:.6rem .75rem;border-bottom:1px solid var(--border)}.table th{color:var(--muted);font-weight:500;font-size:.85rem}.badge{padding:.15rem .55rem;border-radius:999px;font-size:.8rem}.badge.active{background:color-mix(in srgb,var(--ok) 20%,transparent);color:var(--ok)}.badge.disabled{background:color-mix(in srgb,var(--muted) 20%,transparent);color:var(--muted)}.badge.pending{background:color-mix(in srgb,#eab308 22%,transparent);color:#eab308}.page-head{display:flex;align-items:center;justify-content:space-between;gap:1rem}.filter{padding:.45rem .6rem;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);font:inherit}.small{font-size:.8rem}.actions-col{width:1%;white-space:nowrap}.tag{font-size:.7rem;padding:.05rem .4rem;border-radius:999px;background:color-mix(in srgb,var(--accent) 25%,transparent);color:var(--accent);vertical-align:middle}.btn-sm.ghost{background:transparent;border:1px solid var(--border);color:var(--text)}.btn-sm.danger{background:color-mix(in srgb,var(--danger) 85%,black)}.btn-sm:disabled{opacity:.5;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:grid;place-items:center;z-index:50}.modal{width:min(440px,92vw);display:flex;flex-direction:column;gap:1rem}.modal h2{margin:0;font-size:1.1rem}.modal-message{margin:0;line-height:1.5;color:var(--text)}.roles-list{display:flex;flex-direction:column;gap:.6rem}.role-check{display:flex;align-items:center;gap:.6rem;cursor:pointer}.role-check input{width:auto}.hint{color:var(--muted);font-size:.85rem;margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:.6rem}.spectrum-head{flex:none;display:flex;align-items:center;flex-wrap:wrap;gap:.5rem 1rem;margin:0}.page.fills>p{flex:none;margin:0}.spectrum.pickable{cursor:crosshair}.spectrum{height:min(62vh,620px);border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#0b0f16}.spectrum canvas{display:block;width:100%;height:100%}.window-panel{flex:1 1 0;min-height:0;display:flex;flex-direction:column;position:relative}.window-panel header{flex:none;display:flex;align-items:center;gap:.75rem;padding:.2rem .1rem;min-height:2.5rem}.window-panel header span:first-child{font-size:.9rem}.settings-anchor{position:relative;display:inline-flex;align-self:center}.gear{display:inline-flex;padding:.15rem;border:none;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer}.gear:hover{color:var(--text)}.gear.open{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.settings-popover{position:absolute;top:calc(100% + .35rem);left:0;z-index:20;width:min(320px,92vw);padding:.85rem;display:flex;flex-direction:column;gap:.5rem;box-shadow:0 10px 30px #00000073}.settings-popover.flip{left:auto;right:0}.settings-noise{margin:0;font-size:.8rem;color:var(--text)}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;font-size:.85rem;color:var(--muted)}.settings-row>span{white-space:nowrap}.settings-row select,.settings-row input{width:8rem;padding:.25rem .4rem;font-size:.85rem;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.settings-row select:disabled{opacity:.5}.settings-actions{display:flex;flex-direction:column;gap:.35rem;margin-top:.15rem}.settings-actions .btn-ghost{font-size:.8rem;text-align:left}.window-panel .spectrum{flex:1 1 auto;min-height:90px;height:auto;position:relative}.spectrum-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.spectrum-cursor{position:absolute;top:0;bottom:0;width:1px;background:#ffffffb3;pointer-events:none}.spectrum-preview{position:absolute;top:0;box-sizing:border-box;border:2px dashed;border-radius:2px;pointer-events:none}.spectrum-intent{position:absolute;top:32px;right:8px;padding:2px 7px;border-radius:5px;background:#0b0f16d1;color:#e6edf6;font-size:.8rem;white-space:nowrap;pointer-events:none}.spectrum-readout{position:absolute;top:0;right:.1rem;padding:3px 9px;border-radius:6px;background:#0b0f16d1;color:#e6edf6;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.64rem;line-height:1.15;white-space:nowrap;pointer-events:none}.spectrum-readout .field{display:inline-block;text-align:right;font-variant-numeric:tabular-nums}.spectrum-readout .freq{min-width:7ch}.spectrum-readout .level,.spectrum-readout .bin{min-width:4ch}.legend{flex:none;display:flex;gap:1.2rem;margin:.5rem 0 .2rem;font-size:.85rem;color:var(--muted)}.legend-item{display:inline-flex;align-items:center;gap:.4rem}.dot{width:10px;height:10px;border-radius:3px;display:inline-block}.spectrum-layout{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) clamp(400px,27vw,440px);gap:1rem;align-items:stretch}.spectrum-panels{min-width:0;min-height:0;display:flex;flex-direction:column;gap:.5rem;overflow-y:auto}.signal-column{min-height:0;display:flex}.signal-panel{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:.75rem .9rem .9rem}.signal-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:auto}.signal-panel h3{flex:none}@media(max-width:1100px){.content.fills{overflow-y:auto}.page.fills{min-height:min-content}.spectrum-layout{grid-template-columns:minmax(0,1fr)}.spectrum-panels{overflow-y:visible}.window-panel{flex:none}.window-panel .spectrum{height:min(38vh,340px)}.signal-column{max-height:80vh}}.signal-panel h3{display:flex;align-items:center;gap:.5rem;margin:0 0 .4rem;font-size:.95rem;font-weight:600}.signal-panel .tally{display:inline-flex;align-items:center;gap:.35rem;margin-left:auto;font-size:.8rem;font-weight:500}.signal-panel .tally-item{padding:.1rem .35rem;border:0;border-radius:4px;background:none;font:inherit;line-height:1.4;cursor:pointer;white-space:nowrap}.signal-panel .tally-item:hover{background:var(--border)}.signal-panel .tally-item:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.signal-panel .tally-item.off{color:var(--muted);opacity:.55}.signal-panel .empty{margin:.6rem 0 0}.link-btn{padding:0;border:0;background:none;font:inherit;color:var(--accent);text-decoration:underline;cursor:pointer}.table.signals{margin-top:0;font-size:.85rem}.signal-scroll thead th{position:sticky;top:0;z-index:1;background:var(--panel)}.table.signals th,.table.signals td{padding:.3rem .35rem}.table.signals thead th,.table.signals tbody tr:not(.basis-row) td{white-space:nowrap}.table.signals .num{font-weight:700;width:1.5rem}.table.signals tbody td{border-bottom:none}.table.signals tbody tr:not(.basis-row):not(:first-child) td{border-top:1px solid var(--border)}.table.signals tbody+tbody>tr:first-child td{border-top:2px solid color-mix(in srgb,var(--border) 45%,var(--muted));padding-top:.8rem}.btn-sm.ok{background:color-mix(in srgb,var(--ok) 80%,black)}.basis-row td{padding-top:0;font-size:.78rem}.basis-text .warn{color:#eab308}.head-tools{display:flex;align-items:center;gap:.6rem}.badge.jamming{background:color-mix(in srgb,#eab308 22%,transparent);color:#eab308}.ok-text{color:var(--ok)}.hint.warn{color:#eab308}.warn-card{border-color:color-mix(in srgb,#eab308 45%,var(--border))}.warn-card p{margin:0 0 .4rem}.warn-card p:last-child{margin-bottom:0}.device{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;margin-bottom:1rem}.device-facts{display:flex;flex-wrap:wrap;gap:.5rem 2rem;margin:0}.device-facts dt{color:var(--muted);font-size:.75rem}.device-facts dd{margin:.1rem 0 0;font-size:.9rem}.engage{display:flex;align-items:flex-end;flex-wrap:wrap;gap:.75rem;padding:1rem 1.25rem;margin-bottom:1rem}.engage-field{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted)}.engage-field input{width:10rem}.engage .btn{padding:.6rem 1.1rem}.engage .hint{flex-basis:100%;margin:0}.form-modal label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted)}.form-modal label input,.form-modal label select{width:100%}.form-modal label .hint,.form-modal label .error{margin:0}td>.actions{display:flex;gap:.4rem;justify-content:flex-end;white-space:nowrap}.jammer-strip{flex:none;display:flex;flex-wrap:wrap;gap:.5rem .75rem;margin:.2rem 0}.jammer-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .6rem;border:1px solid var(--border);border-radius:999px;background:var(--panel);font-size:.85rem}.jammer-name{color:var(--text);text-decoration:none;font-weight:500}.jammer-name:hover{color:var(--accent)}.jamming-chip{display:inline-flex;align-items:center;gap:.3rem;padding:.05rem .2rem .05rem .5rem;border-radius:999px;background:color-mix(in srgb,#eab308 22%,transparent);color:#eab308;font-size:.8rem}.hop-notice{color:#eab308}.escort-alarm{color:var(--danger);margin-right:.6rem}.badge.escorting{background:color-mix(in srgb,#eab308 16%,transparent);color:#eab308;font-size:.75rem}.badge.alarm{background:color-mix(in srgb,var(--danger) 22%,transparent);color:var(--danger);font-size:.75rem}.stop-x{border:none;background:transparent;color:inherit;cursor:pointer;font:inherit;line-height:1;padding:.1rem .25rem;border-radius:999px}.stop-x:hover:not(:disabled){background:color-mix(in srgb,#eab308 30%,transparent)}.stop-x:disabled{opacity:.5;cursor:default}.btn-sm.jamming{background:color-mix(in srgb,#eab308 80%,black);color:#0f1419;font-weight:600}.jamming-note{color:#eab308;margin-right:.6rem}.table.signals .btn-sm{padding:.25rem .5rem;font-size:.78rem}.verdict-switch{position:relative;display:grid;grid-template-columns:repeat(3,1fr);width:8.4rem;padding:2px;border:1px solid var(--border);border-radius:999px;background:var(--bg);-webkit-user-select:none;user-select:none}.verdict-switch .knob{position:absolute;top:2px;left:2px;width:calc((100% - 4px) / 3);height:calc(100% - 4px);border-radius:999px;transition:transform .14s ease,background-color .14s ease}.verdict-switch.is-hostile .knob{transform:translate(0);background:var(--danger)}.verdict-switch.is-unknown .knob{transform:translate(100%);background:#eab308}.verdict-switch.is-friendly .knob{transform:translate(200%);background:var(--ok)}.verdict-switch .seg{position:relative;z-index:1;border:none;background:transparent;color:var(--muted);font:inherit;font-size:.75rem;line-height:1.5;padding:.15rem 0;border-radius:999px;cursor:pointer;white-space:nowrap}.verdict-switch.is-hostile .seg:nth-child(2),.verdict-switch.is-unknown .seg:nth-child(3),.verdict-switch.is-friendly .seg:nth-child(4){color:#0f1419;font-weight:600;cursor:default}.verdict-switch .seg:hover:not(:disabled){color:var(--text)}.verdict-switch.is-hostile .seg:nth-child(2):hover,.verdict-switch.is-unknown .seg:nth-child(3):hover,.verdict-switch.is-friendly .seg:nth-child(4):hover{color:#0f1419}.verdict-switch .seg:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.verdict-switch.disabled{opacity:.55}.verdict-switch .seg:disabled{cursor:default}.basis{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem}.basis .btn-sm{flex:none}.basis-text{min-width:0}.table.signals tr.row-hostile td{background:color-mix(in srgb,var(--danger) 7%,transparent)}.table.signals tr.row-friendly td{background:color-mix(in srgb,var(--ok) 7%,transparent)}.jam-modal{width:min(520px,94vw)}.jam-choices{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem;max-height:50vh;overflow-y:auto}.jam-choice{display:flex;align-items:flex-start;gap:.6rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:8px;cursor:pointer}.jam-choice:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.jam-choice.unavailable{opacity:.55;cursor:default}.jam-choice input{width:auto;margin-top:.25rem}.jam-choice-body{display:flex;flex-direction:column;gap:.15rem}.jam-choice-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.jam-choice-name{font-weight:500}.links{display:flex;flex-direction:column;gap:.6rem}.links-head{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap}.links-head h2{margin:0;font-size:1rem}.link-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.link-list li{display:flex;align-items:center;gap:.6rem}.link-list a{color:var(--text);text-decoration:none}.link-list a:hover{color:var(--accent)}.link-add{display:flex;gap:.5rem;align-items:center}.row-actions{display:flex;gap:.5rem;align-items:center;margin-top:.75rem}.range-edit{display:flex;gap:.35rem;align-items:center;flex-wrap:wrap}.range-edit input{width:5.5rem;padding:.15rem .35rem}.range-edit .error{flex-basis:100%}.check-group{border:1px solid var(--border);border-radius:8px;padding:.6rem .75rem;display:flex;flex-direction:column;gap:.4rem;max-height:30vh;overflow-y:auto}.check-group legend{font-size:.85rem;color:var(--muted);padding:0 .3rem}.form-modal .check-row,.check-row{display:flex;flex-direction:row;align-items:center;gap:.5rem;cursor:pointer;color:var(--text);font-size:.9rem}.form-modal .check-row input,.check-row input{width:auto;flex:none}.check-group .hint,.check-group .error{margin:0}
