:root {
  --bg: #07090c;
  --crt: #0a0e12;
  --ink: #e8edf5;
  --dim: #7d8796;
  --line: #243040;
  --mint: #7dffa6;
  --amber: #ffb86b;
  --cyan: #6ee7ff;
  --rose: #ff7a9a;
}
* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; background: var(--bg); color: var(--ink);
  font: 14px/1.4 "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif; }
body { min-height: 100dvh; }
a { color: var(--mint); text-decoration: none; }
a:hover { color: var(--cyan); }

.scan {
  pointer-events: none; position: fixed; inset: 0; z-index: 40;
  background: repeating-linear-gradient(
    to bottom,
    rgba(0,0,0,.12) 0 1px,
    transparent 1px 3px
  );
}
.wrap { max-width: 1080px; margin: 0 auto; padding: 28px 20px 60px; }
.brand { letter-spacing: .34em; font-size: 11px; color: var(--dim); text-transform: uppercase; }
h1.marquee {
  margin: 8px 0 6px; font: 700 42px/1 "IBM Plex Mono", ui-monospace, Menlo, monospace;
  letter-spacing: .22em; color: var(--mint);
  text-shadow: 0 0 18px rgba(125,255,166,.35);
}
.lede { color: var(--dim); max-width: 620px; margin: 0 0 22px; }
.lede strong { color: var(--ink); font-weight: 600; }

.console {
  max-width: 1120px; margin: 18px auto 40px; padding: 0 14px;
}
.crt {
  background: linear-gradient(180deg, #0e141c, #080b10);
  border: 2px solid #2a3848;
  box-shadow: 0 0 0 6px #0a0c10, 0 24px 60px rgba(0,0,0,.55), inset 0 0 80px rgba(125,255,166,.03);
}
.term-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 12px; border-bottom: 1px solid var(--line);
  font: 12px/1 ui-monospace, Menlo, monospace; letter-spacing: .08em;
  background: #0b1016;
}
.term-bar .ttl {
  color: var(--mint); font-weight: 700; letter-spacing: .22em; font-size: 14px;
}
.term-bar .sp { flex: 1; min-width: 8px; }
.find {
  display: flex; align-items: center; gap: 8px;
  border: 1px solid var(--line); background: #070a0e; padding: 4px 8px;
  min-width: min(360px, 70vw);
}
.find label { color: var(--amber); letter-spacing: .16em; font-size: 10px; }
.find input {
  flex: 1; border: 0; background: transparent; color: var(--ink);
  font: 13px/1.4 ui-monospace, Menlo, monospace; outline: none; min-width: 0;
}
.flip {
  display: flex; border: 1px solid var(--line); padding: 2px;
  background: #070a0e;
}
.flip button {
  appearance: none; border: 0; background: transparent; color: var(--dim);
  font: 700 11px/1 ui-monospace, Menlo, monospace; letter-spacing: .14em;
  padding: 7px 10px; cursor: pointer;
}
.flip button.on { background: var(--mint); color: #06100a; }
.term-status {
  padding: 6px 12px; border-bottom: 1px solid var(--line);
  font: 12px/1.4 ui-monospace, Menlo, monospace; color: var(--dim);
}
.term-status b { color: var(--mint); font-weight: 700; }
.term-status .warn { color: var(--amber); }
.term-grid { padding: 12px 12px 8px; max-height: min(64vh, 720px); overflow: auto; }
.cab {
  cursor: pointer;
}
.cab.sel {
  border-color: var(--mint);
  box-shadow: 0 0 0 1px var(--mint), 0 0 22px rgba(125,255,166,.18);
  color: inherit;
}
.cab:focus { outline: none; }
.term-help {
  padding: 8px 12px 12px; color: var(--dim);
  font: 11px/1.5 ui-monospace, Menlo, monospace; letter-spacing: .04em;
}
.term-help kbd {
  display: inline-block; border: 1px solid var(--line); padding: 0 5px; color: var(--ink);
}

.bank { margin: 22px 0 10px; font: 600 11px/1 ui-monospace, Menlo, monospace;
  letter-spacing: .2em; color: var(--amber); }
.grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
}
@media (max-width: 860px) { .grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .grid { grid-template-columns: 1fr; } }

.cab {
  display: flex; flex-direction: column;
  background: linear-gradient(180deg, #141a22, #0c1016);
  border: 1px solid var(--line); padding: 16px 14px 14px; color: inherit;
  min-height: 196px; position: relative; overflow: visible;
  box-shadow: inset 0 0 0 1px rgba(125,255,166,.04);
}
.cab:hover { border-color: var(--mint); color: inherit; }
.cab .era {
  font: 600 10px/1 ui-monospace, Menlo, monospace; letter-spacing: .16em;
  color: var(--amber);
}
.cab h2 {
  margin: 10px 0 6px; font: 700 28px/1 "IBM Plex Mono", ui-monospace, Menlo, monospace;
  letter-spacing: .18em;
}
.cab p { margin: 0; color: var(--dim); font-size: 12px; letter-spacing: .08em; }
.cab .hi {
  margin-top: auto; padding-top: 12px;
  font: 12px/1.4 ui-monospace, Menlo, monospace; color: var(--cyan);
}
.cab .start-btn {
  display: block; margin-top: 10px; padding: 8px 12px; text-align: center;
  border: 1px solid var(--mint); color: var(--mint); text-decoration: none;
  font: 700 11px/1 ui-monospace, Menlo, monospace; letter-spacing: .16em;
  pointer-events: auto; position: relative; z-index: 2;
}
.cab .start-btn:hover { background: var(--mint); color: #0b0e13; }

.boards {
  display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 28px;
}
@media (max-width: 700px) { .boards { grid-template-columns: 1fr; } }
.board {
  background: var(--crt); border: 1px solid var(--line); padding: 14px 16px;
}
.board h3 {
  margin: 0 0 10px; font: 600 11px/1 ui-monospace, Menlo, monospace;
  letter-spacing: .16em; color: var(--dim); text-transform: uppercase;
}
.board ol { margin: 0; padding: 0; list-style: none; }
.board li {
  display: grid; grid-template-columns: 24px 72px 1fr; gap: 8px;
  font: 14px/1.7 "IBM Plex Mono", ui-monospace, Menlo, monospace;
  color: var(--ink);
}
.board li span:first-child { color: var(--dim); }
.board .empty { color: var(--dim); font-size: 13px; }

.foot { margin-top: 28px; color: var(--dim); font-size: 12px; }
.foot code { color: var(--amber); }

.play {
  min-height: 100dvh; display: grid; grid-template-rows: auto 1fr auto;
}
.bar {
  display: flex; align-items: center; gap: 16px; padding: 10px 16px;
  border-bottom: 1px solid var(--line); background: #0b0e13;
  font: 12px/1 ui-monospace, Menlo, monospace; letter-spacing: .08em;
}
.bar .nm { color: var(--mint); font-size: 16px; letter-spacing: .2em; font-weight: 700; }
.bar .sp { flex: 1; }
.stat { color: var(--amber); }
.stage-wrap { display: grid; place-items: center; padding: 16px; }
canvas#stage {
  background: #070a0e; border: 1px solid var(--line);
  image-rendering: pixelated; max-width: 100%;
}
.hintbar {
  padding: 8px 16px 6px; color: var(--dim); font-size: 12px; text-align: center;
}
.bus {
  position: relative; z-index: 30;
  margin: 0 auto 16px; max-width: 920px; padding: 8px 12px 12px;
  border-top: 1px solid var(--line);
  font: 12px/1.4 ui-monospace, Menlo, monospace;
}
.bus .acts { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 8px; }
.bus button {
  appearance: none; border: 1px solid var(--line); background: #10151c; color: var(--ink);
  font: 700 11px/1 ui-monospace, Menlo, monospace; letter-spacing: .08em;
  padding: 6px 8px; cursor: pointer;
}
.bus button:hover { border-color: var(--mint); color: var(--mint); }
.bus button.on { border-color: var(--mint); color: var(--mint); }
.bus .row { display: flex; gap: 8px; align-items: center; }
.bus input#cmd {
  flex: 1; min-width: 0; background: #070a0e; color: var(--mint);
  border: 1px solid var(--line); font: 12px/1.4 ui-monospace, Menlo, monospace;
  padding: 6px 8px;
}
#telem {
  margin: 8px 0 0; color: var(--amber); white-space: pre-wrap; word-break: break-all;
  max-height: 4.6em; overflow: auto; font-size: 11px;
}
.overlay {
  position: fixed; inset: 0; display: grid; place-items: center;
  background: rgba(6,8,12,.78); z-index: 20;
  pointer-events: none;
}
.overlay .card { pointer-events: auto; }
.overlay.hide { display: none; }
.overlay .card {
  background: #10151c; border: 1px solid var(--line); padding: 22px 26px;
  text-align: center; min-width: 280px;
}
.overlay h2 {
  margin: 0 0 8px; letter-spacing: .2em; font: 700 26px/1 ui-monospace, Menlo, monospace;
  color: var(--mint);
}
.tagrow { display: flex; gap: 8px; justify-content: center; margin: 14px 0; }
.tagrow input {
  width: 2.2em; text-align: center; font: 700 28px/1.2 ui-monospace, Menlo, monospace;
  background: #0a0d12; color: var(--mint); border: 1px solid var(--line);
  text-transform: uppercase;
}
.tagrow input:focus { outline: 1px solid var(--mint); }

/* Cabinet score toggle. Sits in the play-bar next to the lane readout — the score is
   a property of the cabinet you are at, so its switch belongs on the cabinet. */
.snd{background:transparent;border:1px solid var(--line);color:var(--amber);
  font:600 11px/1 ui-monospace,monospace;letter-spacing:.14em;padding:4px 9px;cursor:pointer}
.snd:hover{border-color:var(--amber)}
.snd.off{color:var(--dim);border-color:var(--line)}
