.settings-page{margin:0;background:#080e10;color:#d2e9e5;font:16px/1.6 system-ui,sans-serif}.settings-page main{max-width:760px;margin:40px auto;padding:0 22px}.settings-page a{color:#66ded0}.settings-page button,.file-button{display:inline-block;background:#172b2d;color:#d2e9e5;border:1px solid #408783;border-radius:6px;padding:12px;margin:5px;cursor:pointer;font:inherit}.file-button input{display:block;max-width:240px}.boot-error{position:fixed;inset:20%;padding:30px;background:#15282b;color:#fff;z-index:9999;font:18px/1.6 monospace}

/* Authoring controls belong to labs, independent of the game's HUD. */
.preset-panel { position:fixed; bottom:12px; left:12px; z-index:120; display:flex; flex-wrap:wrap; align-items:center; gap:8px; max-width:min(740px,calc(100vw - 24px)); padding:12px; border:1px solid #46616c; background:#111b22f5; color:#d8e6e8; font:12px ui-monospace,monospace; }
.preset-panel input:not([type=file]) { width:130px; }
.preset-panel output { flex-basis:100%; min-height:1em; }
.preset-panel button,.preset-import { padding:6px; background:#20343c; color:inherit; border:1px solid #46616c; cursor:pointer; }
.preset-import input { width:180px; }
.audio-lab { max-width:780px; margin:80px auto 230px; padding:24px; color:#d8e6e8; font:15px ui-monospace,monospace; }
.audio-lab label { display:block; margin:15px 0; }
.audio-lab input { width:100px; }
.audio-lab output { display:block; margin-top:18px; }
.audio-lab button,.audio-lab select,.audio-lab input { padding:8px; background:#20343c; color:inherit; border:1px solid #46616c; }

/* One bounded choice browser for both lil-gui and native Workshop controls. */
.lab-choice-native { display:none !important; }
.widget:has(> .lab-choice-native) > .display { display:none !important; }
.lab-choice-trigger { max-width:100%; width:100%; min-height:32px; padding:6px 9px !important; text-align:left; white-space:normal; overflow-wrap:anywhere; cursor:pointer; background:#292d32; color:#eee; border:1px solid #73777c; border-radius:3px; font:inherit; }
.lab-choice-trigger::after { content:' ›'; }
.lab-choice-trigger[hidden] { display:none !important; }
.lab-choice-dialog { box-sizing:border-box; width:min(620px,calc(100vw - 24px)); max-height:calc(100dvh - 32px); padding:20px; border:1px solid #888; border-radius:8px; background:#17191d; color:#eee; font:15px/1.45 system-ui,sans-serif; }
.lab-choice-dialog::backdrop { background:#000b; }
.lab-choice-dialog header { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:16px; }
.lab-choice-dialog h2 { margin:0; font-size:18px; }
.lab-choice-dialog input { box-sizing:border-box; width:100%; padding:12px; background:#25282d; color:inherit; border:1px solid #888; border-radius:3px; font:inherit; }
.lab-choice-dialog [role=status] { margin:10px 0; color:#bbb; font-size:13px; }
.lab-choice-results { display:grid; gap:6px; max-height:55dvh; overflow-y:auto; overscroll-behavior:contain; }
.lab-choice-dialog button { padding:10px 12px; min-height:44px; background:#282b30; color:inherit; border:1px solid #555; border-radius:3px; font:inherit; cursor:pointer; text-align:left; overflow-wrap:anywhere; }
.lab-choice-dialog button[aria-pressed=true] { border-color:#eee; background:#41454a; }
.lab-choice-dialog button[aria-pressed=true]::before { content:'✓ '; }
.lab-choice-dialog :focus-visible,.lab-choice-trigger:focus-visible { outline:2px solid #fff; outline-offset:2px; }
.lab-choice-dialog button:disabled { opacity:.45; cursor:default; }

.sentry-radial { box-sizing:border-box; position:fixed; margin:0; padding:0; max-width:none; max-height:none; border:1px solid #888; border-radius:50%; background:#11161bf2; color:#eee; overflow:visible; }
.sentry-radial::backdrop { background:#0006; }
.sentry-radial button { position:absolute; transform:translate(-50%,-50%); border-radius:50%; background:#252c32; color:#eee; border:1px solid #7d858c; cursor:pointer; font:11px/1.3 ui-monospace,monospace; white-space:pre-line; touch-action:manipulation; }
.sentry-radial-item { width:23%; height:23%; padding:4px; }
.sentry-radial-center { left:50%; top:50%; width:23%; height:23%; padding:4px; }
.sentry-radial button[aria-pressed=true],.sentry-radial button:hover { background:#46505a; border-color:#fff; }
.sentry-radial button:focus-visible { outline:2px solid white; outline-offset:3px; }
#sentry-missile-status { position:absolute; left:12px; top:55px; max-width:calc(100% - 300px); color:#eee; background:#111b; padding:8px; font:12px/1.5 ui-monospace,monospace; pointer-events:none; }
@media(max-width:700px) { #sentry-missile-status { max-width:calc(100% - 24px); top:55px; } }

#sentry-missile-status { white-space:pre-line; }
#tab-sentry #sentry-hud { bottom:150px; }
@media(max-width:700px) { #tab-sentry #sentry-hud { bottom:230px; font-size:10px; } }

.lab-help-label { cursor:help; text-decoration:underline dotted #8b949c; text-underline-offset:3px; }
.lab-help-label:focus-visible { outline:1px solid #ddd; outline-offset:-1px; }
.lab-control-help { position:fixed; z-index:1000; box-sizing:border-box; width:min(320px,calc(100vw - 16px)); max-height:calc(100dvh - 16px); overflow:auto; padding:14px 16px; border:1px solid #89939c; border-radius:6px; background:#171d23; color:#eee; box-shadow:0 8px 30px #0008; font:13px/1.5 system-ui,sans-serif; }
.lab-control-help[hidden] { display:none; }
.lab-control-help strong { display:block; font-size:13px; }
.lab-control-help p { margin:8px 0 0; }
.lil-gui .controller.disabled .lab-help-label { pointer-events:auto !important; }
.authoring-review { color:#d8e6e8; background:#111b22; border:1px solid #71838b; width:min(760px,calc(100vw - 40px)); max-height:85vh; overflow:auto; padding:20px; }
.authoring-review::backdrop { background:#000b; }
.authoring-review table { width:100%; border-collapse:collapse; font:12px ui-monospace,monospace; }
.authoring-review th,.authoring-review td { padding:8px; border-bottom:1px solid #40505a; text-align:left; overflow-wrap:anywhere; }
.authoring-review button { padding:9px 12px; color:inherit; background:#25333c; border:1px solid #71838b; }
.authoring-review [data-authoring-status] { white-space:pre-wrap; }
.preset-backup summary { cursor:pointer; padding:6px; }
.preset-backup[open] { flex-basis:100%; }
.preset-backup[open] > label,.preset-backup[open] > button { margin:4px; display:inline-block; }

/* Actual TD map / manual sentry experiment. */
#sentry-pilot{position:absolute;inset:58px 14px auto;z-index:80;color:#e4ecec;font:12px monospace;pointer-events:none;text-shadow:0 1px 3px #000}
#sentry-pilot header{font-size:17px;letter-spacing:2px}#sentry-pilot small{font-size:10px;margin-left:12px}
#sentry-pilot button,#sentry-pilot a{pointer-events:auto;background:#10191de8;color:#e4ecec;border:1px solid #657479;padding:7px;cursor:pointer;font:inherit}
#sentry-pilot .pilot-cross.hit{color:#ff3b2f;transform:translate(-50%,-50%) scale(1.5)}
#sentry-pilot .pilot-guns{display:flex;gap:6px;margin:6px 0}#sentry-pilot .pilot-guns button.on{background:#2a2416;border-color:#ffb43d;color:#ffd48a}
#sentry-pilot button.on{background:#d7e3e5;color:#111}
#sentry-pilot output{display:block;white-space:pre-line;padding:10px 0}#sentry-pilot footer{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);white-space:normal;width:max-content;max-width:min(92vw,1100px);text-align:center;background:#10191de8;padding:9px}
.pilot-cross{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);font-size:30px;font-weight:200}.pilot-map .pilot-cross{display:none}
.sentry-pilot-mode #td-pad,.sentry-pilot-mode #td-throttle,.sentry-pilot-mode #td-coach,.sentry-pilot-mode #td-tut-banner{display:none!important}
.sentry-pilot-mode #td-stats,.sentry-pilot-mode #td-tower,.sentry-pilot-mode #td-wave,.sentry-pilot-mode #td-launch,.sentry-pilot-mode .tc-util,.sentry-pilot-mode #td-brief,.sentry-pilot-mode #td-tut,.sentry-pilot-mode #td-hint,.sentry-pilot-mode #td-stick,.sentry-pilot-mode .tzone,.sentry-pilot-mode .tfire{display:none!important}
.laser-seat #td-pad,.laser-seat #td-throttle,.laser-seat #td-coach,.laser-seat #td-tut-banner,.laser-seat #td-stats,.laser-seat #td-tower,.laser-seat #td-wave,.laser-seat #td-launch,.laser-seat .tc-util,.laser-seat #td-brief,.laser-seat #td-tut,.laser-seat #td-hint,.laser-seat #td-stick,.laser-seat .tzone,.laser-seat .tfire,.laser-seat #td-next,.laser-seat #td-sitrep{display:none!important}
#tab-td.pilot-framing .pilot-cross,#tab-td.pilot-framing #story-scope .reticle{opacity:0}   /* the view follows a round in flight, away from the aim (src/core/round-framing.js) */
.sentry-pilot-mode #td-perf{top:215px;left:14px}.sentry-pilot-mode #td-next{right:20px;left:auto;transform:none}
/* --- the enemy study (#swarm): a crowd on the left of a readout that does
   not flatter it. Two panels because two questions are asked at once. --- */
#swarm{display:flex;height:100%;min-height:0}
#swarm .sw-side{width:270px;flex:0 0 270px;padding:14px;overflow:auto;border-right:1px solid #1d2630;background:#0a0e12}
#swarm .sw-side h2{margin:0 0 12px;font-size:13px;letter-spacing:3px;text-transform:uppercase;color:#8fb6c9;font-weight:600}
#swarm .sw-side label{display:block;margin:0 0 11px;font-size:11px;letter-spacing:1px;color:#9fb3c2;text-transform:uppercase}
#swarm .sw-side select,#swarm .sw-side input[type=range]{width:100%;margin-top:4px}
#swarm .sw-side input[type=checkbox]{width:auto;margin-right:6px;vertical-align:-1px}
#swarm .sw-side b{color:#e8f2f8;font-variant-numeric:tabular-nums}
#swarm .sw-note{font-size:10.5px;line-height:1.5;color:#6b8494;border-top:1px solid #1d2630;padding-top:10px;margin-top:14px}
#swarm .sw-stage{flex:1 1 auto;position:relative;min-width:0}
#swarm .sw-stage canvas{display:block;width:100%;height:100%}
#swarm .sw-read{position:absolute;left:12px;bottom:12px;padding:8px 12px;border:1px solid #23303c;
  background:rgba(6,9,12,.82);color:#b9cdd9;font:11px/1.6 ui-monospace,Menlo,monospace;
  letter-spacing:.4px;border-radius:2px;pointer-events:none;font-variant-numeric:tabular-nums}
#swarm .sw-read b{color:#7fe6d0}
@media (max-width:760px){#swarm{flex-direction:column}#swarm .sw-side{width:auto;flex:0 0 auto;border-right:0;border-bottom:1px solid #1d2630}}

#swarm .sw-hud{position:absolute;right:12px;top:12px;padding:7px 12px;border:1px solid #23303c;
  background:rgba(6,9,12,.82);color:#cfe2ec;font:12px/1.5 ui-monospace,Menlo,monospace;
  letter-spacing:1px;border-radius:2px;pointer-events:none;font-variant-numeric:tabular-nums;text-transform:uppercase}
#swarm .sw-hud .hot{color:#ffb43d;font-weight:700}
#swarm .sw-hud .bad{color:#ff6b5e}

/* The shout layer, positioned for the lane. The TREATMENT is the game's —
   .callout, .co-milestone and .combobox [data-tier] all come from styles.css,
   so a typeface or phosphor decision reaches the lab without a second edit. */
#swarm .sw-callouts{position:absolute;top:30%;left:50%;transform:translateX(-50%);
  z-index:12;pointer-events:none;text-align:center;width:max-content}
#swarm .sw-combo{position:absolute;top:44%;left:50%;transform:translateX(-50%);
  z-index:12;pointer-events:none}
#swarm .sw-combo.pop{animation:combo-pop .2s ease-out}
#swarm .sw-keys{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);
  padding:5px 12px;border:1px solid #23303c;background:rgba(6,9,12,.7);color:#6b8494;
  font:10.5px/1.4 ui-monospace,Menlo,monospace;letter-spacing:2px;text-transform:uppercase;
  border-radius:2px;pointer-events:none}

/* --- the run button and the scorecard ------------------------------------ */
#swarm .sw-run{width:100%;margin:2px 0 12px;padding:9px;border:1px solid #2c6d63;
  background:#10241f;color:#7fe6d0;font:11px/1 ui-monospace,Menlo,monospace;letter-spacing:2px;
  text-transform:uppercase;border-radius:2px;cursor:pointer}
#swarm .sw-run:hover{background:#16332c}
#swarm .sw-run.on{border-color:#8a6a2b;background:#241c10;color:#ffb43d;cursor:default}

/* --- the boss study (#boss): the enemy study's side panel, stage and readout, reused for the Nih-Dairia lab --- */
#boss{display:flex;height:100%;min-height:0}
#boss .sw-side{width:270px;flex:0 0 270px;padding:14px;overflow:auto;border-right:1px solid #1d2630;background:#0a0e12}
#boss .sw-side h2{margin:0 0 12px;font-size:13px;letter-spacing:3px;text-transform:uppercase;color:#8fb6c9;font-weight:600}
#boss .sw-side label{display:block;margin:0 0 11px;font-size:11px;letter-spacing:1px;color:#9fb3c2;text-transform:uppercase}
#boss .sw-side select{width:100%;margin-top:4px}
#boss .sw-side label[hidden],#boss .sw-note[hidden]{display:none}
#boss .sw-side b{color:#e8f2f8;font-variant-numeric:tabular-nums}
#boss .sw-side textarea{width:100%;box-sizing:border-box;background:#05080b;color:#b9cdd9;border:1px solid #23303c;font:10.5px/1.4 ui-monospace,Menlo,monospace}
#boss .sw-note{font-size:10.5px;line-height:1.5;color:#6b8494;border-top:1px solid #1d2630;padding-top:10px;margin-top:14px}
#boss .sw-stage{flex:1 1 auto;position:relative;min-width:0}
#boss .sw-stage canvas{display:block;width:100%;height:100%}
#boss .sw-read{position:absolute;z-index:6;left:12px;bottom:12px;max-width:calc(100% - 24px);padding:8px 12px;border:1px solid #23303c;
  background:rgba(6,9,12,.82);color:#b9cdd9;font:11px/1.6 ui-monospace,Menlo,monospace;
  letter-spacing:.4px;border-radius:2px;pointer-events:none;font-variant-numeric:tabular-nums}
#boss .sw-read b{color:#7fe6d0}
#boss .sw-read b.late{color:#ff6b5e}
#boss .sw-callouts{position:absolute;top:30%;left:50%;transform:translateX(-50%);
  z-index:12;pointer-events:none;text-align:center;width:max-content}
#boss .sw-keys{position:absolute;left:50%;top:14px;transform:translateX(-50%);
  padding:5px 12px;border:1px solid #23303c;background:rgba(6,9,12,.7);color:#6b8494;
  font:10.5px/1.4 ui-monospace,Menlo,monospace;letter-spacing:2px;text-transform:uppercase;
  border-radius:2px;pointer-events:none}
#boss .sw-run{width:100%;margin:2px 0 8px;padding:9px;border:1px solid #2c6d63;
  background:#10241f;color:#7fe6d0;font:11px/1 ui-monospace,Menlo,monospace;letter-spacing:2px;
  text-transform:uppercase;border-radius:2px;cursor:pointer}
#boss .sw-run:hover{background:#16332c}
/* the fight's round (src/labs/boss/round.js): the bar row is the integrity HUD's gate row (styles.css scopes its .ih-* rules to
   #integrity-hud, the game's fixed strip, so the same look is restated here, under the keys strip); the card a small panel */
#boss .sw-hud{position:absolute;z-index:6;left:12px;top:48px;padding:5px 8px;border:1px solid #23303c;
  background:rgba(6,9,12,.82);color:#cfe2ec;font:600 11px/1.5 ui-monospace,Menlo,monospace;
  letter-spacing:.08em;border-radius:2px;pointer-events:none;font-variant-numeric:tabular-nums}
#boss .sw-hud[hidden]{display:none}
#boss .ih-row{display:flex;align-items:center;gap:8px;color:#b8ffca}
#boss .ih-lbl{font-size:10px;letter-spacing:.16em;color:#4fae63}
#boss .ih-row[hidden]{display:none}
/* the bait mode's NUKE CLEAR cue (src/labs/boss/bait.js): grey while Isao is inside the MK-9's ring round the creature plus 8 m, lit when he is clear of it */
#boss .nk-cue{margin-left:6px;padding:0 5px;border:1px solid #3a444d;color:#56626b;letter-spacing:.14em}
#boss .nk-cue.nk-on{border-color:#ffb43d;color:#ffd27a;background:rgba(255,180,61,.12)}
#boss .nk-cue[hidden]{display:none}
#boss .sw-fps{position:absolute;z-index:7;left:12px;top:16px;padding:1px 6px;font:10.5px ui-monospace,Menlo,monospace;color:#9fb3c2;background:rgba(5,8,11,.6);pointer-events:none;font-variant-numeric:tabular-nums}
#boss .sw-fps[hidden]{display:none}
/* the bait mode in the game's gunship seat (src/labs/boss/game-seat.js): its HUD over the stage, not the window, so the reticle sits on the
   view's centre; its readout and the GROUND TRUTH monitor stand left of the lab's panel (--seat-clear: the px of the stage it covers) */
#boss #sentry-pilot{inset:104px 14px auto}   /* under the lab's creature and Isao bars (.sw-hud) */
#boss #gunship-hud{position:absolute}
#boss #gunship-hud .ro{right:calc(var(--seat-clear,0px) + 18px)}
#boss #story-monitor{position:absolute;right:calc(var(--seat-clear,0px) + 12px)}
#boss .ih-num{min-width:7ch}
#boss .ih-bar{position:relative;width:140px;height:7px;border:1px solid rgba(184,255,202,.45)}
#boss .ih-bar i{position:absolute;inset:0 auto 0 0;background:#b8ffca;transition:width .25s linear}
#boss .ih-low .ih-bar i{background:#ffb347}
#boss .ih-low .ih-num{color:#ff6a88}
#boss .rd-clock{color:#cfe2ec;min-width:7ch}
#boss .rd-hits{color:#9fb3c2}
#boss .rd-stage{color:#ffb347;letter-spacing:.14em}   /* the dead boss's carcass's stage (src/labs/boss/remains.js) */
#boss .rd-stage[hidden]{display:none}
#boss .sw-card{position:absolute;top:20%;left:50%;transform:translateX(-50%);z-index:20;padding:10px 16px;
  border:1px solid #23303c;background:rgba(6,9,12,.92);border-radius:3px;pointer-events:none;
  font:11px/1.5 ui-monospace,Menlo,monospace;color:#b9cdd9}
#boss .sw-card[hidden]{display:none}
#boss .sw-card-head{display:flex;align-items:baseline;gap:10px}
#boss .sw-card-head b{color:#e8f2f8;letter-spacing:4px;text-transform:uppercase;font-size:15px}
#boss .sw-card-head span{color:#9fb3c2;letter-spacing:1px;font-variant-numeric:tabular-nums}
@media (max-width:760px){#boss{flex-direction:column}#boss .sw-side{width:auto;flex:0 0 auto;border-right:0;border-bottom:1px solid #1d2630}}
#swarm .sw-card{position:absolute;inset:16px;z-index:20;overflow:auto;padding:14px;
  border:1px solid #23303c;background:rgba(6,9,12,.95);border-radius:3px;
  font:11px/1.5 ui-monospace,Menlo,monospace;color:#b9cdd9}
#swarm .sw-card-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid #1d2630}
#swarm .sw-card-head b{color:#7fe6d0;letter-spacing:3px;text-transform:uppercase;font-size:12px}
#swarm .sw-card-head span{color:#6b8494;margin-right:auto}
#swarm .sw-card-head button{padding:5px 10px;border:1px solid #2a3a47;background:#0e151b;
  color:#9fb3c2;font:10px/1 ui-monospace,Menlo,monospace;letter-spacing:1.5px;
  text-transform:uppercase;border-radius:2px;cursor:pointer}
#swarm .sw-card-head button:hover{background:#17222b;color:#cfe2ec}
#swarm .sw-cols{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap}
#swarm .sw-col{flex:1 1 220px;min-width:200px;max-width:300px;padding:10px;
  border:1px solid #1d2630;border-radius:2px;background:#080c10}
#swarm .sw-col.now{border-color:#2c6d63;background:#0a1614}
#swarm .sw-col h4{margin:0 0 8px;font-size:11px;letter-spacing:1.5px;text-transform:uppercase;
  color:#cfe2ec;font-weight:600}
#swarm .sw-col h4 i{color:#7fe6d0;font-style:normal;font-size:9.5px;letter-spacing:1px}
#swarm .sw-spark{margin:0 0 10px;padding:4px;background:#05080b;border:1px solid #141d25;border-radius:2px}
#swarm .sw-col dl{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin:0}
#swarm .sw-col dt{color:#6b8494;text-transform:uppercase;letter-spacing:1px;font-size:10px}
#swarm .sw-col dd{margin:0;color:#e8f2f8;text-align:right;font-variant-numeric:tabular-nums}
#swarm .sw-col dd s{color:#6b8494;text-decoration:none;font-size:10px}
#swarm .sw-col dd.bad{color:#ff6b5e}
#swarm .sw-run-stats{margin-top:10px;padding-top:8px;border-top:1px solid #141d25}
#swarm .sw-nogpu{margin:0 0 8px;color:#ffb43d;font-size:10px}
@media (max-width:760px){#swarm .sw-card{inset:8px}#swarm .sw-col{max-width:none}}

#swarm .sw-col dt.hd,#swarm .sw-col dd.hd{color:#4d626f}
#swarm .sw-col dt.hd{color:#7fe6d0;font-size:9px;letter-spacing:2px}
#swarm .sw-col dd.hd{color:#4d626f;font-size:9px;letter-spacing:1px;text-transform:uppercase}
#swarm .sw-col dd.good{color:#7fe6d0}
#swarm .sw-col dl.sw-gpu{margin-top:8px;padding-top:6px;border-top:1px dotted #141d25;opacity:.75}

/* --- the roadmap / devlog tab -------------------------------------------- */
#notes{display:flex;height:100%;min-height:0}
#notes .nt-rail{width:250px;flex:0 0 250px;display:flex;flex-direction:column;
  padding:58px 14px 14px;border-right:1px solid #1d2630;background:#0a0e12;overflow:auto}
#notes .nt-rail>[data-doc]{display:block;width:100%;text-align:left;margin:0 0 6px;padding:9px 11px;
  border:1px solid #1d2630;background:#0c1116;border-radius:2px;cursor:pointer}
#notes .nt-rail>[data-doc] b{display:block;color:#9fb3c2;font:600 11px/1.4 ui-monospace,Menlo,monospace;
  letter-spacing:2.5px;text-transform:uppercase}
#notes .nt-rail>[data-doc] span{display:block;color:#5d7382;font:10px/1.4 ui-monospace,Menlo,monospace}
#notes .nt-rail>[data-doc]:hover{background:#121a21}
#notes .nt-rail>[data-doc].on{border-color:#2c6d63;background:#0d1b19}
#notes .nt-rail>[data-doc].on b{color:#7fe6d0}
#notes .nt-find{display:block;margin:10px 0 4px;color:#5d7382;
  font:10px/1.6 ui-monospace,Menlo,monospace;letter-spacing:2px;text-transform:uppercase}
#notes .nt-find input{width:100%;margin-top:4px;padding:6px 8px;border:1px solid #23303c;
  background:#06090c;color:#cfe2ec;font:11px/1.4 ui-monospace,Menlo,monospace;border-radius:2px}
#notes .nt-toc{margin-top:10px;padding-top:10px;border-top:1px solid #1d2630;min-height:0}
#notes .nt-toc a{display:block;padding:3px 0;color:#6b8494;text-decoration:none;
  font:10.5px/1.4 ui-monospace,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#notes .nt-toc a:hover{color:#7fe6d0}
/* The reading column is measured, not full-bleed: these are documents, and a
   1500px line of prose is not one. */
#notes .nt-body{flex:1 1 auto;min-width:0;overflow:auto;padding:58px 32px 80px;
  color:#b9cdd9;font:13px/1.65 ui-monospace,Menlo,monospace}
#notes .nt-body>*{max-width:74ch}
#notes .nt-body h1{margin:0 0 6px;color:#e8f2f8;font-size:17px;letter-spacing:2px;text-transform:uppercase}
#notes .nt-body h2{margin:30px 0 8px;padding-top:14px;border-top:1px solid #1d2630;
  color:#7fe6d0;font-size:14px;letter-spacing:1.5px}
#notes .nt-body h3{margin:20px 0 6px;color:#cfe2ec;font-size:12.5px;letter-spacing:1px}
#notes .nt-body h4{margin:16px 0 4px;color:#9fb3c2;font-size:12px}
#notes .nt-body p{margin:0 0 11px}
#notes .nt-body ul,#notes .nt-body ol{margin:0 0 12px;padding-left:20px}
#notes .nt-body li{margin:0 0 4px}
#notes .nt-body code{padding:1px 4px;background:#0f171d;border:1px solid #1d2630;
  border-radius:2px;color:#7fe6d0;font-size:12px}
#notes .nt-body pre{margin:0 0 14px;padding:12px;overflow-x:auto;background:#06090c;
  border:1px solid #1d2630;border-radius:2px;max-width:100%}
#notes .nt-body pre code{padding:0;border:0;background:none;color:#9fdcff;line-height:1.5}
#notes .nt-body strong{color:#e8f2f8}
#notes .nt-body del{color:#5d7382}
#notes .nt-body a{color:#7fe6d0}
#notes .nt-body hr{margin:22px 0;border:0;border-top:1px solid #1d2630}
#notes .nt-body blockquote{margin:0 0 12px;padding:2px 0 2px 12px;border-left:2px solid #2c6d63;color:#9fb3c2}
#notes .nt-body table{margin:0 0 14px;border-collapse:collapse;font-size:12px;display:block;overflow-x:auto;max-width:100%}
#notes .nt-body th,#notes .nt-body td{padding:5px 10px;border:1px solid #1d2630;text-align:left;vertical-align:top}
#notes .nt-body th{background:#0d141a;color:#7fe6d0;font-weight:600;letter-spacing:1px;
  text-transform:uppercase;font-size:10.5px}
#notes .nt-wait{color:#5d7382}
@media (max-width:760px){#notes{flex-direction:column}
  #notes .nt-rail{width:auto;flex:0 0 auto;border-right:0;border-bottom:1px solid #1d2630}
  #notes .nt-toc{display:none}#notes .nt-body{padding:18px 16px 60px}}

#swarm .sw-hud .mode{color:#6b8494}
#swarm .sw-hud .mode.run{color:#7fe6d0;font-weight:700}
#swarm .sw-hint{margin:-6px 0 12px;padding-bottom:11px;border-bottom:1px solid #1d2630;
  color:#6b8494;font-size:10.5px;line-height:1.5}
#swarm .sw-hint b{color:#7fe6d0;font-weight:600}

#swarm .sw-sweep{width:100%;margin:-6px 0 12px;padding:8px;border:1px solid #2a3a47;
  background:#0c1116;color:#9fb3c2;font:10px/1 ui-monospace,Menlo,monospace;letter-spacing:2px;
  text-transform:uppercase;border-radius:2px;cursor:pointer}
#swarm .sw-sweep:hover{background:#141d25;color:#cfe2ec}
#swarm .sw-build{margin:-4px 0 8px;color:#5d7382;font-size:9.5px;letter-spacing:1px}
#swarm .sw-build b{color:#ff6b5e;display:block;margin-top:2px}

/* the debrief lab (src/labs/debrief-tab.js): the sector debrief on a stand-in for the game, with a width toggle */
#tab-debrief{flex-direction:column;background:#020607}
#tab-debrief:not(.tab-hidden){display:flex}   /* an id rule outranks .tab-hidden: a hidden lab must not stay a full-page layer over the others */
#tab-debrief .dbl-stage{position:relative;flex:1;min-height:0;display:flex;justify-content:center}
#tab-debrief .dbl-host{position:relative;width:100%;height:100%;overflow:hidden}
#tab-debrief .dbl-stage[data-width="1280"] .dbl-host{width:min(1280px,100%)}
#tab-debrief .dbl-stage[data-width="400"] .dbl-host{width:min(400px,100%)}
#tab-debrief .dbl-stage:not([data-width="full"]) .dbl-host{box-shadow:0 0 0 1px #1f3a44}
#tab-debrief .dbl-world{position:absolute;inset:0;overflow:hidden;background:radial-gradient(circle at 50% 120%,#0d2a2a 0,#061314 40%,#020607 70%)}
#tab-debrief .dbl-planet{position:absolute;left:50%;top:58%;width:130vmin;height:130vmin;translate:-50% 0;border-radius:50%;
  background:radial-gradient(circle at 40% 30%,#1b3a36,#08201e 55%,#020a0a 70%);box-shadow:0 0 80px rgba(53,255,208,.12)}
#tab-debrief .dbl-grid{position:absolute;inset:0;background:linear-gradient(rgba(53,255,208,.05) 1px,transparent 1px) 0 0/40px 40px,
  linear-gradient(90deg,rgba(53,255,208,.05) 1px,transparent 1px) 0 0/40px 40px}
#tab-debrief .dbl-idle{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;gap:14px;text-align:center;
  font:20px/1.2 var(--font-ui);letter-spacing:.2em;color:#62978d}
#tab-debrief .dbl-idle[hidden]{display:none}
#tab-debrief .dbl-idle b{color:#ffb020;font-weight:normal}
#tab-debrief .dbl-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;padding:8px 12px calc(8px + env(safe-area-inset-bottom,0px));
  border-top:1px solid #1f3a44;background:#050c0e}
#tab-debrief .dbl-group{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
#tab-debrief .dbl-group b{margin-right:4px;font:15px/1 var(--font-ui);letter-spacing:.2em;color:#62978d}
#tab-debrief .dbl-btn{min-height:32px;padding:0 10px;font:16px/1 var(--font-ui);letter-spacing:.14em;color:#9fc9c0;background:#08171a;
  border:1px solid #1f3a44;cursor:pointer}
#tab-debrief .dbl-btn:hover{color:#dff;border-color:#35ffd0}
#tab-debrief .dbl-btn.on{color:#04120f;background:#35ffd0;border-color:#35ffd0}
@media (max-width:700px){
  #tab-debrief .dbl-bar{gap:4px 8px;padding:6px 8px calc(6px + env(safe-area-inset-bottom,0px))}
  #tab-debrief .dbl-group b{display:none}
  #tab-debrief .dbl-btn{min-height:30px;padding:0 6px;font-size:14px;letter-spacing:.06em}
}

/* THE VOICE LAB (src/labs/voice-tab.js): Isao's triggers and lines, the switches, and what still needs a hook or a voice */
#tab-voice:not(.tab-hidden) { display: block; overflow: auto; background: #071014; }
.voice-lab { --ink: #d8e6e8; --dim: #7f9aa3; --line: #24404a; --cyan: #6fe6ff; --warn: #ffb35c; max-width: 1280px; margin: 0 auto; padding: 64px 16px 120px; color: var(--ink); font: 13px/1.45 ui-monospace, Menlo, monospace; box-sizing: border-box; }
.voice-lab h1 { margin: 0; font-size: 18px; letter-spacing: .16em; color: #9fdcff; }
.voice-lab .vl-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 12px; border-bottom: 1px solid var(--line); padding-bottom: 12px; }
.voice-lab .vl-sub { margin: 4px 0 0; color: var(--dim); font-size: 12px; }
.voice-lab .vl-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.voice-lab button, .voice-lab .vl-file { font: 11px/1 ui-monospace, Menlo, monospace; letter-spacing: .1em; padding: 7px 10px; background: #14262d; color: var(--ink); border: 1px solid #3a5b66; cursor: pointer; }
.voice-lab .vl-file input { display: none; }
.voice-lab .vl-master { display: flex; gap: 6px; align-items: center; color: var(--cyan); }
.voice-lab .vl-bar { position: sticky; top: 0; z-index: 2; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding: 10px 0; background: #071014; border-bottom: 1px solid var(--line); }
.voice-lab input[type=search] { flex: 1 1 240px; min-width: 0; padding: 8px; background: #0d1b21; color: var(--ink); border: 1px solid #3a5b66; font: inherit; }
.voice-lab .vl-filters { display: flex; gap: 4px; }
.voice-lab .vl-filters button.on { border-color: var(--cyan); color: var(--cyan); }
.voice-lab output { color: var(--dim); font-size: 12px; }
.voice-lab .vl-body { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 20px; margin-top: 14px; align-items: start; }
.voice-lab .vl-trig { border: 1px solid var(--line); margin: 0 0 12px; padding: 8px 10px; scroll-margin-top: 60px; }
.voice-lab .vl-trig.unwired { border-left: 3px solid var(--warn); }
.voice-lab .vl-trig.quiet { opacity: .5; }
.voice-lab .vl-trow { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.voice-lab .vl-trow b { font-size: 14px; letter-spacing: .06em; }
.voice-lab .vl-tog { display: inline-flex; gap: 6px; align-items: center; cursor: pointer; }
.voice-lab .vl-hooks { display: flex; flex-wrap: wrap; gap: 4px; }
.voice-lab .vl-hook { font-size: 10px; padding: 2px 6px; border: 1px solid #3a5b66; color: var(--dim); white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.voice-lab .vl-callout { color: #ffd98a; border-color: #6b5a33; } .voice-lab .vl-event { color: #b6f7a8; border-color: #3f6b3a; }
.voice-lab .vl-none { color: var(--warn); border-color: var(--warn); }
.voice-lab .vl-note { color: var(--dim); font-size: 11px; margin: 4px 0 0 24px; }
.voice-lab ul { list-style: none; margin: 6px 0 0; padding: 0; }
.voice-lab li { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; padding: 4px 0 4px 2px; border-top: 1px solid #12252c; }
.voice-lab li.off .vl-text, .voice-lab li.off code { opacity: .4; text-decoration: line-through; }
.voice-lab li.playing { background: #0f2830; }
.voice-lab .vl-play { padding: 3px 7px; }
.voice-lab code { color: var(--dim); font-size: 11px; min-width: 150px; }
.voice-lab .vl-text { flex: 1 1 260px; min-width: 0; }
.voice-lab .vl-chip { font-size: 10px; padding: 1px 6px; border: 1px dashed var(--dim); color: var(--dim); }
.voice-lab .vl-kind { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--dim); }
.voice-lab .vl-announce { color: #ff8f8f; } .voice-lab .vl-countdown { color: #ffd98a; }
.voice-lab .vl-dur { font-size: 11px; color: var(--dim); width: 56px; text-align: right; } .voice-lab .vl-dur.long { color: var(--warn); }
.voice-lab .vl-gaps { position: sticky; top: 56px; max-height: calc(100vh - 80px); overflow: auto; border: 1px solid var(--line); padding: 10px 12px; }
.voice-lab .vl-gaps h2 { font-size: 12px; letter-spacing: .14em; color: #9fdcff; margin: 6px 0 2px; } .voice-lab .vl-gaps h2 small { color: var(--warn); }
.voice-lab .vl-gaps p { color: var(--dim); font-size: 11px; margin: 0 0 6px; }
.voice-lab .vl-gaps li { display: block; } .voice-lab .vl-gaps a { color: var(--cyan); }
.voice-lab .vl-said { color: var(--dim); font-size: 11px; margin-top: 2px; }
.voice-lab .vl-empty { color: var(--dim); }
@media (max-width: 860px) { .voice-lab .vl-body { grid-template-columns: 1fr; } .voice-lab .vl-gaps { position: static; max-height: none; } .voice-lab code { min-width: 0; } }
.voice-lab .vl-cal { margin: 12px 0 0; padding: 10px 12px; border: 1px solid var(--line); background: #0a171c; }
.voice-lab .vl-cal h2 { margin: 0 0 8px; font-size: 12px; letter-spacing: .14em; color: #9fdcff; }
.voice-lab .vl-cal-row { display: flex; flex-wrap: wrap; gap: 8px 10px; align-items: center; margin: 6px 0; }
.voice-lab .vl-cal-k { font-size: 11px; letter-spacing: .12em; color: var(--dim); min-width: 52px; }
.voice-lab .vl-cal input[type=range] { width: min(240px, 60vw); accent-color: #6fe6ff; }
.voice-lab .vl-cal output { color: var(--ink); min-width: 120px; font-size: 12px; }
.voice-lab .vl-cal button.on { border-color: var(--cyan); color: var(--cyan); }
.voice-lab .vl-cal-note { color: var(--dim); font-size: 11px; }
