:root{--paper: #f2efe6;--paper-dim: #e4e0d3;--ink: #2c2c2a;--ink-faded: #8a877c;--signal: #c24d2a;--plot: #6a5fc7;--own: #1b7a61;--depot: #2d6fb0;--mark: #0b5cd6;--select: #e07b1f;--unknown: #b8901a;--reveal: #ff69b4;--hairline: rgba(44, 44, 42, .35);--mono: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, "Courier New", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:13px;-webkit-font-smoothing:antialiased;touch-action:manipulation}#app,#tutorial{height:100dvh;display:flex;flex-direction:column;overflow-x:hidden}button{font-family:var(--mono);font-size:11px;letter-spacing:.06em;background:transparent;color:var(--ink);border:1px solid var(--ink);padding:7px 9px;cursor:pointer;border-radius:0;min-height:34px}button:disabled{color:var(--ink-faded);border-color:var(--hairline);cursor:default}button.selected{background:var(--ink);color:var(--paper)}button.commit{width:100%;border-width:2px;padding:11px;font-size:12px;letter-spacing:.18em}button.commit:not(:disabled){background:var(--own);border-color:var(--own);color:var(--paper)}.commit-group{display:flex;gap:0}button.commit.ff{width:auto;flex:0 0 auto;padding-inline:14px;letter-spacing:.06em;border-left:none}button.commit.ff:not(:disabled){background:var(--paper);border-color:var(--own);color:var(--own)}button.commit.ff:not(:disabled):hover{background:#1b7a611a}.btn-group{display:flex;gap:0}button.auto{border-left:none;padding-inline:6px;font-size:9px;letter-spacing:.02em;color:var(--ink-faded)}button.auto.selected{color:var(--paper)}button.spent{text-decoration:line-through;text-decoration-thickness:1px}button.selected+button.auto.selected{border-left:1px solid var(--paper)}.main{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 330px}.board-wrap{min-width:0;min-height:0;overflow:hidden;display:grid;place-items:center;padding:6px}.board-wrap svg{width:100%;height:100%;display:block}.panel{border-left:1px solid var(--ink);overflow-y:auto;padding:14px 16px 24px}.panel-body{display:flex;flex-direction:column;gap:18px}.panel-tabs{display:none}section.pane h3{font-size:12px;font-weight:500;letter-spacing:.25em;margin-bottom:10px}@media(max-width:899px){.main{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}.panel{border-left:none;border-top:1px solid var(--ink);max-height:44dvh;padding-bottom:calc(16px + env(safe-area-inset-bottom))}.panel-tabs{display:flex;gap:6px;position:sticky;top:0;background:var(--paper);padding:4px 0 8px;z-index:2}.panel-tabs button{flex:1;min-width:0;padding-inline:4px}.panel-body.collapsed,.panel-tabs.collapsed{display:none}.panel.collapsed{padding:0;border-top:none}section.pane.tab-hidden{display:none}}.gauge{margin-bottom:10px}.gauge-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:3px}.gauge label{display:block;color:var(--ink-faded);font-size:10px;letter-spacing:.1em}.gauge .amount{font-size:10px;letter-spacing:.06em;color:var(--ink);font-variant-numeric:tabular-nums}.gauge .bar{height:8px;border:1px solid var(--ink);position:relative}.gauge .bar i{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;display:block;transition:transform .5s ease}.gauge.fuel .bar i{background:var(--own)}.gauge.ls .bar i{background:var(--signal)}.gauge.cap .bar i{background:var(--depot)}.statline{display:flex;justify-content:space-between;color:var(--ink);font-size:11px;padding:2px 0}.statline .dim{color:var(--ink-faded)}.statline .hot{color:var(--unknown);font-weight:600}.subsystems{margin-top:12px}.subgauge{margin-bottom:8px}.subgauge-head{display:flex;justify-content:space-between;color:var(--ink-faded);font-size:10px;letter-spacing:.1em;margin-bottom:3px}.subgauge .bar{height:6px;border:1px solid var(--ink);position:relative}.subgauge .bar i{position:absolute;top:0;right:0;bottom:0;left:0;display:block;background:var(--ink);transform-origin:left;transition:transform .5s ease}.subgauge.hurt .bar i{background:var(--signal)}.subgauge.hurt .subgauge-head .pct{color:var(--signal)}.cap-tick{position:absolute;left:75%;top:-3px;bottom:-3px;width:1px;background:var(--ink-faded);display:block}.consumables{margin-top:10px}.slotline{display:flex;justify-content:space-between;align-items:center;padding:3px 0;font-size:11px}.slotline .dim{color:var(--ink-faded);font-size:10px;letter-spacing:.1em}.slots{display:flex;gap:4px}.slots i{width:10px;height:10px;border:1px solid var(--ink);background:var(--ink);transition:background .4s ease}.slots i.spent{background:transparent;border-color:var(--ink-faded)}.contact-row{display:flex;align-items:center;gap:9px;padding:6px 4px;border-bottom:1px solid var(--hairline);cursor:pointer}.contact-row.selected{outline:1px solid var(--select);border-left:3px solid var(--select);background:#e07b1f17}.heard{color:var(--signal);letter-spacing:.06em;opacity:.85}.status-tag{padding:1px 4px;font-size:9px;letter-spacing:.08em;color:var(--paper);background:var(--signal)}.contact-row .cid{font-size:11px;min-width:0}.contact-row .sub{color:var(--ink-faded);font-size:10px}.contact-row .rng-unknown{color:var(--unknown)}.contact-row .rng-bracketed{color:var(--plot)}.contact-row .rng-solved{color:var(--ink)}.contact-row .det{display:flex;gap:8px;letter-spacing:.04em}.contact-row .det-visual{color:var(--ink)}.contact-row .det-thermal{color:var(--signal)}.contact-row .det-pulse{color:var(--depot)}.contact-row .det .cold{color:var(--ink-faded)}.contact-row .cls-hostile,.contact-row .cls-missile{color:var(--signal)}.contact-row .cls-depot{color:var(--depot)}.contact-row .cls-unknown{color:var(--unknown)}.contact-row .cls-wrecked{color:var(--ink-faded)}.order-group{margin-bottom:12px}.order-group .grouplabel{color:var(--ink-faded);font-size:10px;letter-spacing:.12em;margin-bottom:6px}.order-grid{display:flex;flex-wrap:wrap;gap:6px}.order-note{color:var(--ink-faded);font-size:10px;margin-top:6px;min-height:13px}.loglines{display:flex;flex-direction:column-reverse;gap:3px;font-size:10.5px}.logline .t{color:var(--ink-faded);margin-right:6px}.logline.alert{color:var(--signal)}header.banner{display:flex;align-items:baseline;flex-wrap:wrap;gap:16px;padding:10px 16px;border-bottom:1px solid var(--ink)}header.banner .phase{font-size:11px;letter-spacing:.12em;color:var(--ink-faded)}header.banner .phase.revealing{color:var(--signal)}header.banner .newmatch{margin-left:auto;padding:4px 10px;font-size:10px;letter-spacing:.12em;background:var(--paper);border:1px solid var(--hairline);color:var(--ink);font-family:var(--mono);text-decoration:none;line-height:1.4}header.banner .newmatch:hover{background:var(--paper-dim)}.topbar{position:relative}.alert-bar{position:absolute;top:100%;left:0;right:0;z-index:5;padding:3px 16px;font-size:10px;letter-spacing:.1em;color:var(--paper);background:var(--signal);animation:alertBlink .9s ease-in-out 3}.alert-bar[data-tone=good]{background:var(--own)}.alert-bar[data-tone=warn]{background:var(--unknown)}@keyframes alertBlink{0%,to{opacity:1}50%{opacity:.25}}.gameover-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#f2efe6e0;display:flex;align-items:center;justify-content:center;z-index:10}.gameover-card{border:2px solid var(--ink);background:var(--paper);padding:28px 34px;text-align:center;max-width:420px}.gameover-card h2{font-size:16px;letter-spacing:.25em;margin-bottom:12px}.gameover-card p{color:var(--ink-faded);margin-bottom:18px}.setup-card{text-align:left;min-width:300px}.setup-group{margin-bottom:16px}.setup-label{color:var(--ink-faded);font-size:10px;letter-spacing:.12em;margin-bottom:6px}.setup-opts{display:flex;gap:6px}.setup-opts button{flex:1}.setup-blurb{margin:6px 0 0;min-height:26px;color:var(--ink-faded);font-size:10px;line-height:1.3}.setup-blurb a{color:var(--select);text-decoration:none;border-bottom:1px solid currentColor}.setup-blurb a:hover{color:var(--ink)}.setup-actions{display:flex;gap:6px;margin-top:20px}.setup-actions .commit{flex:1}.revealing .anim{transition:transform .75s cubic-bezier(.3,.7,.3,1)}.mark,.chip{animation:beliefIn .18s ease-out}@keyframes beliefIn{0%{opacity:0}to{opacity:1}}.env{transition:opacity .5s ease}.shadow,.plume{transform-box:view-box;transform-origin:0 0}@keyframes collapsePulse{0%{opacity:0;r:26}60%{opacity:.9}to{opacity:0;r:4}}.collapse-ring{animation:collapsePulse .9s ease-out forwards}@keyframes markPulse{0%{opacity:.9;r:9;stroke-width:2.4}to{opacity:0;r:34;stroke-width:.6}}.mark-ring{animation:markPulse .95s ease-out 2}@keyframes surpriseFlash{0%,to{opacity:0}20%,60%{opacity:1}}.surprise-ring{animation:surpriseFlash 1.1s ease-out 2}svg :focus,svg :focus-visible{outline:none}@keyframes lockOn{0%{opacity:0;transform:scale(1.7)}55%{opacity:1;transform:scale(.94)}to{opacity:1;transform:scale(1)}}@keyframes lockBreathe{0%,to{opacity:1}50%{opacity:.62}}.target-lock{transform-box:fill-box;transform-origin:center;animation:lockOn .26s ease-out,lockBreathe 1.9s ease-in-out .26s infinite}@keyframes beamFire{0%{stroke-dashoffset:var(--beam-len);opacity:1}18%{stroke-dashoffset:0;opacity:1}70%{opacity:.9}to{stroke-dashoffset:0;opacity:0}}.beam{animation:beamFire .9s cubic-bezier(.15,.8,.3,1) forwards}@keyframes pulseWave{0%{r:2px;opacity:.9}to{r:var(--wave-r);opacity:0}}.pulse-wave{animation:pulseWave 1.5s cubic-bezier(.2,.6,.35,1) forwards}@keyframes burstPop{0%,14%{opacity:0;transform:scale(.3)}26%{opacity:1;transform:scale(1.25)}45%{transform:scale(1)}to{opacity:0;transform:scale(1.1)}}.burst,.miss-mark{transform-box:fill-box;transform-origin:center;animation:burstPop 1s ease-out forwards}@keyframes blastRing{0%{opacity:1;r:3;stroke-width:3}70%{opacity:.7}to{opacity:0;r:26;stroke-width:1}}.blast{animation:blastRing .95s ease-out forwards}@keyframes fizzleRing{0%{opacity:.9;r:2}to{opacity:0;r:13}}.fizzle{animation:fizzleRing .9s ease-out forwards}.fizzle-label{animation:surpriseFlash 1.4s ease-out forwards}@keyframes dialAlarm{0%,to{opacity:1}50%{opacity:.15}}@keyframes dialAlarmBg{0%,to{opacity:.45}50%{opacity:.08}}.dial-critical{animation:dialAlarm 1.1s ease-in-out infinite}.dial-critical-bg{animation:dialAlarmBg 1.1s ease-in-out infinite}@keyframes pdRingIn{0%{opacity:0}to{opacity:.75}}.pd-ring{animation:pdRingIn .4s ease-out}@keyframes pdBurst{0%,to{opacity:.55}10%,40%,70%{opacity:1}25%,55%,85%{opacity:.35}}.pd-arc{animation:pdBurst 1.1s ease-out forwards}
