:root{--bg:#04070c;--panel:#0a1119;--panel-2:#0e1822;--line:#1b2a3a;--text:#c9d6e2;--dim:#7b8c9c;--own:#5fd3ff;--contact:#ffb347;--probable:#ff9a3c;--identified:#ff6b4a;--munition:#ff5fd2;--good:#7dff9a;--warn:#ffd166;--danger:#ff5a5a;--mono:ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#app{background:var(--bg);height:100%;color:var(--text);font:13px/1.45 var(--mono);margin:0;overflow:hidden}button,select,input,textarea{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:3px;padding:3px 8px}button{cursor:pointer}button:hover:not(:disabled){border-color:var(--own)}button.active{border-color:var(--own);color:#e8f7ff;background:#12324a}button:disabled{opacity:.45;cursor:default}button.primary{background:#0f3550;border-color:#2c7aa6}button.primary.danger{background:#4a1414;border-color:#a63c3c}button.small{padding:1px 6px;font-size:12px}button.big{padding:8px 24px;font-size:15px}input[type=number]{width:6.5em}input[type=range]{accent-color:var(--own)}h2{letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:0 0 6px;font-size:12px;font-weight:600}h3{color:var(--own);margin:12px 0 4px;font-size:12px;font-weight:600}.hint{color:var(--dim);margin:4px 0;font-size:12px}.hint.ok{color:var(--good)}.hint.warn,.error{color:var(--danger)}.loading{height:100%;color:var(--dim);place-items:center;gap:12px;display:grid}.start{place-items:start center;height:100%;padding:32px 16px;display:grid;overflow:auto}.start-inner{gap:16px;width:min(1100px,100%);display:grid}.masthead b{letter-spacing:.3em;color:var(--own);font-size:28px;display:block}.masthead span{color:var(--dim);letter-spacing:.08em}.masthead .tester{float:right;color:var(--own)}.columns{grid-template-columns:320px 1fr;gap:16px;display:grid}.cards{align-content:start;gap:8px;display:grid}.card{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:4px;gap:4px;padding:10px 12px;display:grid}.card span{color:var(--dim)}.card.selected{border-color:var(--own);background:#0c1d2b}.briefing{border:1px solid var(--line);background:var(--panel);border-radius:4px;max-width:70ch;padding:12px 18px}.briefing h2{color:var(--own);letter-spacing:.08em;font-size:16px}.briefing .meta{color:var(--dim)}.tuning{border:1px solid var(--line);background:var(--panel);border-radius:4px;padding:8px 12px}.tuning summary{cursor:pointer;color:var(--dim)}.tuning textarea{width:100%;margin-top:4px}.grid4{grid-template-columns:repeat(4,1fr);gap:8px;margin:8px 0;display:grid}.game{grid-template-rows:46px minmax(0,1fr) 180px;grid-template-columns:minmax(0,1fr);width:100vw;height:100%;display:grid;overflow:hidden}.game>*{min-width:0}aside select,aside input:not([type=checkbox]):not([type=range]){min-width:0;max-width:100%}.topbar{border-bottom:1px solid var(--line);background:var(--panel);white-space:nowrap;align-items:center;gap:18px;padding:0 12px;display:flex;overflow:hidden}.topbar .brand span{display:none}@media (min-width:1800px){.topbar .brand span{display:inline}}.brand b{color:var(--own);letter-spacing:.25em;margin-right:8px}.brand span,.topbar .scenario{color:var(--dim)}.topbar .clock{align-items:center;gap:10px;margin-left:auto;display:flex}.topbar .time{color:#e8f3fb;min-width:11ch;font-size:18px}.topbar .rate{color:var(--dim);min-width:8ch}.speeds{gap:2px;display:flex}.speeds button{padding:2px 7px}.topbar .objective{text-overflow:ellipsis;max-width:34vw;color:var(--dim);overflow:hidden}.topbar .objective[data-status=success]{color:var(--good)}.topbar .objective[data-status=partial]{color:var(--warn)}.topbar .objective[data-status=failure]{color:var(--danger)}.topbar .right{gap:6px;display:flex}.middle{grid-template-columns:330px minmax(0,1fr) 360px;min-height:0;display:grid}aside{background:var(--panel);min-width:0;min-height:0;overflow:hidden auto}aside.left{border-right:1px solid var(--line)}aside.right{border-left:1px solid var(--line)}.panel{padding:10px 12px}.view{min-width:0;position:relative;overflow:hidden}.view canvas{display:block}.labels{pointer-events:none;position:absolute;top:0;left:0}.label{white-space:nowrap;text-shadow:0 0 3px #000,0 0 2px #000;padding-left:10px;font-size:11px}.label.body{color:#8f9aa5}.label.ship{color:var(--own)}.label.munition{color:var(--munition)}.label.drone{color:var(--good)}.label.decoy{color:#a6b8c8}.label.grid{color:#2d4257;font-size:10px}.label.overlay{color:#7fb6d6;font-size:10px}.label.overlay.exposure{color:#ff8a7a}.label.track.selected{font-weight:700;text-decoration:underline}.label.truth.human{color:var(--own)}.label.truth.enemy{color:var(--danger);font-weight:600}.label.belief{color:var(--contact);font-size:10px}.list{gap:2px;margin-bottom:8px;display:grid}.list:empty:after{content:attr(data-empty);color:var(--dim);font-size:12px}.row{cursor:pointer;border-radius:3px;grid-template-columns:16px auto 1fr;align-items:baseline;gap:6px;padding:3px 6px;display:grid}.row:hover{background:#0f1c28}.row.selected{background:#11283a}.row.dead{opacity:.55}.row .meta{color:var(--dim);text-align:right;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.glyph.own{color:var(--own)}.contacts .row .glyph{color:var(--contact)}.contacts .row[data-level="1"] .glyph,.contacts .row[data-level="1"] .name{color:var(--probable)}.contacts .row[data-level="2"] .glyph,.contacts .row[data-level="2"] .name{color:var(--identified)}.contacts .row[data-level=munition] .glyph,.contacts .row[data-level=munition] .name{color:var(--munition)}.contacts .row[data-level=decoy] .name{color:#a6b8c8;text-decoration:line-through}.detail{border-top:1px solid var(--line);gap:3px;padding-top:8px;display:grid}.detail .title{color:#e8f3fb;justify-content:space-between;align-items:center;font-weight:600;display:flex}.kv{grid-template-columns:78px 1fr;gap:6px;font-size:12px;display:grid}.kv>span:first-child{color:var(--dim)}.bar{border:1px solid var(--line);background:#0d1720;height:14px;display:block;position:relative}.bar i{background:#1e6f8f;position:absolute;inset:0 auto 0 0}.bar i.warm{background:#a2701d}.bar i.hot{background:#a33030}.bar b{padding-left:4px;font-size:11px;font-weight:400;position:relative}.buttons{flex-wrap:wrap;align-items:center;gap:4px;margin:3px 0;display:flex}.buttons .lbl{color:var(--dim);width:74px;font-size:12px}.burn,.device{color:var(--dim);flex-wrap:wrap;align-items:center;gap:6px;padding:2px 0;font-size:12px;display:flex}.tabs{border-bottom:1px solid var(--line);gap:2px;margin-top:10px;display:flex}.tabs .tab{border-bottom:none;border-radius:3px 3px 0 0}.tabbody{padding-top:6px}.form{gap:6px;display:grid}.form label{color:var(--dim);gap:2px;font-size:12px;display:grid}.form label.check{color:var(--text);display:block}.form label.check input[type=number]{width:5em}.grid2{grid-template-columns:1fr 1fr;align-items:end;gap:6px;display:grid}.grid3{grid-template-columns:1fr 1fr 1fr;gap:6px;display:grid}.grid2 input[type=number],.grid3 input[type=number],.form select{width:100%}.readout{border:1px solid var(--line);background:#08121a;gap:3px;padding:6px 8px;font-size:12px;display:grid}.readout .odds b{color:var(--warn);font-size:14px}.form.engage{border-top:1px solid var(--line);margin-top:8px;padding-top:6px}table.alerts{border-collapse:collapse;font-size:12px}table.alerts td,table.alerts th{text-align:left;padding:1px 6px}table.alerts th{color:var(--dim);font-weight:400}.bottom{border-top:1px solid var(--line);background:var(--panel);grid-template-columns:minmax(0,1fr) minmax(0,560px);min-height:0;display:grid}.log{grid-template-rows:auto 1fr;min-height:0;padding:8px 12px;display:grid;overflow:hidden}.entries{min-height:0;font-size:12px;overflow-y:auto}.entry{padding:1px 0}.entry .t{color:var(--dim);margin-right:8px}.entry.contact{color:var(--contact)}.entry.warning{color:var(--warn)}.entry.danger{color:var(--danger)}.entry.good{color:var(--good)}.bottombar{border-left:1px solid var(--line);align-content:start;gap:10px;padding:8px 12px;display:grid}.projection{grid-template-columns:auto 1fr auto auto;align-items:center;gap:8px;display:grid}.projection .lbl{color:var(--dim)}.bottombar.projecting .projection span{color:var(--warn)}.overlays{flex-wrap:wrap;gap:4px;display:flex}.toasts{pointer-events:none;z-index:5;gap:4px;display:grid;position:absolute;top:10px;left:50%;transform:translate(-50%)}.toast{border:1px solid var(--line);border-left:3px solid var(--own);background:#0a1119eb;padding:4px 10px;transition:opacity 1s}.toast.contact{border-left-color:var(--contact)}.toast.warning{border-left-color:var(--warn)}.toast.danger{border-left-color:var(--danger)}.toast.good{border-left-color:var(--good)}.toast.fade{opacity:0}.helpbtn{z-index:4;position:absolute;bottom:10px;right:10px}.help{border:1px solid var(--line);z-index:6;background:#0a1119f5;width:min(560px,90%);max-height:80%;padding:12px 16px;display:none;position:absolute;bottom:40px;right:10px;overflow-y:auto}.help.open{display:block}.help h2{color:var(--own);margin-top:8px}.modal{z-index:8;background:#0a1119f7;border:1px solid #2c4a63;width:min(620px,92%);max-height:86%;padding:16px 20px;position:absolute;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 10px 40px #000}.modal h2{color:var(--own);font-size:15px}.modal .objective{color:var(--warn)}.modal.finished.success h2{color:var(--good)}.modal.finished.failure h2{color:var(--danger)}.modal.finished.partial h2{color:var(--warn)}.view.training .toasts{justify-items:end;left:auto;right:10px;transform:none}.tutorial{border:1px solid #2c7aa6;border-left:3px solid var(--own);z-index:7;background:#08141ef2;gap:6px;width:min(390px,100% - 20px);max-height:calc(100% - 60px);padding:10px 14px;display:grid;position:absolute;top:10px;left:10px;overflow-y:auto;box-shadow:0 6px 30px #000}.tutorial.collapsed .tut-body,.tutorial.collapsed .tut-hint,.tutorial.collapsed .tut-status,.tutorial.collapsed .buttons{display:none}.tut-head{color:var(--dim);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:8px;font-size:11px;display:flex}.tut-head .tut-progress{margin-left:auto}.tut-title{color:var(--own);font-size:14px}.tut-text p{margin:0 0 6px}.tut-text code{background:#10263a;padding:0 3px}.tut-hint{color:var(--warn);margin:0;font-size:12px;display:none}.tut-hint.open{display:block}.tut-status{color:var(--dim);font-size:12px}.tut-status.ok{color:var(--good)}.tut-highlight{outline-offset:2px;animation:1.2s ease-in-out infinite tut-pulse;outline:2px solid var(--warn)!important}@keyframes tut-pulse{50%{outline-color:#ffd16640}}.cards h3{margin:8px 0 0}.card .lesson{color:var(--own);letter-spacing:.08em;text-transform:uppercase;font-size:11px}.game.in-debrief .tutorial,.game.in-debrief aside{display:none}.game.in-debrief .middle{grid-template-columns:1fr}.debrief-side{border-right:1px solid var(--line);z-index:5;background:#0a1119f2;align-content:start;gap:6px;width:400px;display:grid;position:absolute;top:0;bottom:44px;left:0;overflow-y:auto}.debrief-side .entries{max-height:none}.debrief-side .entry{cursor:pointer}.debrief-side .entry:hover{background:#0f1c28}.debrief-side .entry.hit,.debrief-side .entry.destroyed,.debrief-side .entry.damage,.debrief-side .entry.disabled{color:var(--danger)}.debrief-side .entry.first_detection{color:var(--contact)}.outcome{font-size:14px}.outcome.success b{color:var(--good)}.outcome.failure b{color:var(--danger)}.outcome.partial b{color:var(--warn)}.legend{gap:2px;font-size:12px;display:grid}.sw{width:10px;height:10px;margin-right:6px;display:inline-block}.sw.human{background:var(--own)}.sw.enemy{background:var(--danger)}.sw.belief{background:var(--contact)}.sw.enemybelief{border:2px solid var(--danger);border-radius:50%}.timeline{border-top:1px solid var(--line);z-index:5;background:#0a1119f2;grid-template-columns:auto auto 1fr auto;align-items:center;gap:10px;height:44px;padding:0 12px;display:grid;position:absolute;bottom:0;left:0;right:0}.timeline .time{text-align:right;min-width:18ch}
