/* Pew Pew — "Tactical Field Console" UI
   Layers: canvas 0 · vignette 3 · dmg 4 · hud 6 · lobby 8 · results 10 · title 11 · link card 12 · crosshair 40 */

:root {
  --bg: #07080c;
  --surface: rgba(11, 14, 18, 0.66);
  --surface-strong: rgba(8, 10, 13, 0.92);
  --ink: #ece7d8;
  --ink-muted: #9aa08e;
  --ink-dim: #767d70;
  --accent: #f2ab3c;
  --accent-2: #b9cc8a;
  --self: #b9cc8a;
  --danger: #ff4a3d;
  --warn: #ff8f3a;
  --ok: #8ed67a;
  --shield: #74b9ff;
  --line: rgba(242, 171, 60, 0.34);
  --line-strong: rgba(242, 171, 60, 0.7);
  --line-soft: rgba(236, 231, 216, 0.12);
  --self-line: rgba(185, 204, 138, 0.45);
  --self-tint: rgba(185, 204, 138, 0.1);

  --w-pistol: #ffeaa7; --w-rifle: #ffd700; --w-shotgun: #ff9f43; --w-smg: #74b9ff; --w-sniper: #a29bfe;
  --p-hp: #2ed573; --p-ammo: #ffeaa7; --p-speed: #00cec9; --p-shield: #74b9ff; --p-rapid: #fd79a8; --p-dmg: #ff7675;
  --e-grunt: #ff4757; --e-rusher: #ff6b81; --e-tank: #e17055; --e-sniper: #a29bfe;

  --font-ui: "Chakra Petch", "Special Gothic", sans-serif;
  --font-num: "JetBrains Mono", ui-monospace, Menlo, monospace;
  --fs-display: clamp(88px, 9vw, 128px);
  --fs-callout: 52px;
  --fs-callout-3: 56px;
  --fs-callout-4: 60px;
  --fs-hero: 44px;
  --fs-num-xl: 44px;
  --fs-num-l: 28px;
  --fs-num-m: 22px;
  --fs-num-s: 18px;
  --fs-num-xs: 16px;
  --fs-body: 15px;
  --fs-label: 12px;
  --fs-micro: 11px;

  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 24px; --s-6: 32px; --s-7: 48px;
  --r-1: 2px;
  --bracket: 12px;

  --glow-accent: 0 0 14px rgba(242, 171, 60, 0.35);
  --glow-danger: 0 0 16px rgba(255, 74, 61, 0.45);
  --glow-self: 0 0 8px rgba(185, 204, 138, 0.6);
  --shadow-text: 0 1px 0 rgba(0, 0, 0, 0.9), 0 0 10px rgba(0, 0, 0, 0.7);
  --shadow-panel: 0 8px 28px rgba(0, 0, 0, 0.45);

  --t-fast: 120ms; --t-base: 160ms; --t-slow: 240ms; --t-toast: 320ms;
  --e-out: cubic-bezier(0.2, 0.8, 0.2, 1);
  --e-in: cubic-bezier(0.6, 0, 0.9, 0.2);
  --e-mech: steps(6, end);

  /* gutters / console offsets (overridden by media queries) */
  --gutter: 24px;
  --console-bottom: 40px;
  --console-w: 640px;
  --console-h: 126px;
  --console-head: 28px;
  --console-cols: 320px 84px 1fr;
  --cell-pad: 10px 16px;
  --vitals-cols: 106px 172px;
  --ring: 48px;
  --map-w: 216px;
  --feed-w: 320px;
  --lead-w: 264px;
  --announcer-top: 100px;
  --announcer-w: 720px;
  --toast-top: 180px;
  --results-w: 720px;
  --results-row: 44px;

  /* live values written by game.js on .game-container */
  --hp: 1; --hp-ghost: 1; --sh: 0; --reload: 0; --dash: 1; --combo-t: 1; --dmg: 0;
}

/* ---------- base ---------- */
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; height: 100%; }
body {
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-ui);
  font-size: var(--fs-body);
  line-height: 1.25;
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
}
[hidden] { display: none !important; }
b { font-weight: 700; }

.num { font-family: var(--font-num); font-variant-numeric: tabular-nums; font-weight: 700; letter-spacing: -0.01em; }
.lbl { font: 600 var(--fs-label) / 1 var(--font-ui); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-muted); }
.micro { font: 500 var(--fs-micro) / 1 var(--font-ui); letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-dim); }

.game-container { position: relative; width: 100vw; height: 100vh; overflow: hidden; }
#gameCanvas { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; display: block; background: var(--bg); z-index: 0; }
.in-match #gameCanvas { cursor: none; }
.in-match.lobby-open #gameCanvas, .in-match.results-open #gameCanvas { cursor: default; }

.vignette {
  position: absolute; inset: 0; z-index: 3; pointer-events: none;
  background: radial-gradient(ellipse at center, transparent 48%, rgba(0, 0, 0, 0.55) 100%);
}
.game-container:not(.in-match) .vignette { display: none; }

#dmg {
  position: absolute; inset: 0; z-index: 4; pointer-events: none;
  opacity: var(--dmg);
  background: radial-gradient(ellipse at center, rgba(255, 74, 61, 0) 42%, rgba(255, 74, 61, 0.62) 100%);
  transition: opacity 240ms var(--e-out);
}
#dmg::before {
  content: ""; position: absolute; inset: 0; opacity: 0;
  background: radial-gradient(ellipse at center, rgba(255, 74, 61, 0) 42%, rgba(255, 74, 61, 0.62) 100%);
}
.game-container.lowhp #dmg::before { animation: dmg-breathe 1.1s ease-in-out infinite alternate; }
.game-container.shielded #dmg { background: radial-gradient(ellipse at center, rgba(116, 185, 255, 0) 42%, rgba(116, 185, 255, 0.35) 100%); }
@keyframes dmg-breathe { from { opacity: 0.28; } to { opacity: 0.55; } }

/* ---------- primitives ---------- */
.panel { background: var(--surface); border: 1px solid var(--line-soft); box-shadow: var(--shadow-panel); color: var(--ink); }
.panel.strong { background: var(--surface-strong); }
.panel.tex { position: relative; }
.panel.tex::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.02) 0 1px, transparent 1px 7px);
}
.panel.tex > * { position: relative; z-index: 1; }

.brk { position: relative; --bc: var(--accent); --bl: var(--bracket); --bw: 2px; }
.brk.muted { --bc: var(--ink-muted); }
.brk.danger { --bc: var(--danger); }
.brk.ink { --bc: var(--ink); }
.brk::after {
  content: ""; position: absolute; inset: -1px; pointer-events: none; z-index: 2;
  background:
    linear-gradient(var(--bc), var(--bc)) top left / var(--bl) var(--bw) no-repeat,
    linear-gradient(var(--bc), var(--bc)) top left / var(--bw) var(--bl) no-repeat,
    linear-gradient(var(--bc), var(--bc)) top right / var(--bl) var(--bw) no-repeat,
    linear-gradient(var(--bc), var(--bc)) top right / var(--bw) var(--bl) no-repeat,
    linear-gradient(var(--bc), var(--bc)) bottom left / var(--bl) var(--bw) no-repeat,
    linear-gradient(var(--bc), var(--bc)) bottom left / var(--bw) var(--bl) no-repeat,
    linear-gradient(var(--bc), var(--bc)) bottom right / var(--bl) var(--bw) no-repeat,
    linear-gradient(var(--bc), var(--bc)) bottom right / var(--bw) var(--bl) no-repeat;
}

.bar { position: relative; height: 14px; background: rgba(0, 0, 0, 0.55); border: 1px solid var(--line-soft); overflow: hidden; }
.bar.thin { height: 6px; }
.bar > i { position: absolute; inset: 0; display: block; transform-origin: left center; transform: scaleX(var(--x, 1)); transition: transform var(--t-base) var(--e-out); }
.bar.seg::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: repeating-linear-gradient(90deg, transparent 0 calc(10% - 2px), rgba(7, 8, 12, 0.9) calc(10% - 2px) 10%);
}

.btn {
  font: 700 15px / 1 var(--font-ui); letter-spacing: 0.22em; text-transform: uppercase;
  color: #14110c; background: var(--accent); border: 0; padding: 14px 24px; cursor: pointer;
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
  transition: background var(--t-fast) var(--e-out), transform var(--t-fast) var(--e-out);
}
.btn:hover { background: #ffc35a; }
.btn:active { transform: translateY(1px); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
.btn.ghost { background: transparent; color: var(--accent); box-shadow: inset 0 0 0 1px var(--line-strong); clip-path: none; }
.btn.ghost:hover { background: rgba(242, 171, 60, 0.1); }

.input {
  font-family: var(--font-num); font-size: 20px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--ink); background: rgba(0, 0, 0, 0.45); border: 1px solid var(--line); border-radius: 0; padding: 0 14px;
  outline: none; min-width: 0;
}
.input::placeholder { color: var(--ink-dim); }
.input:focus { border-color: var(--accent); box-shadow: var(--glow-accent); }

.key {
  display: inline-block; font: 700 11px / 1 var(--font-num); font-style: normal; letter-spacing: 0.06em; color: var(--ink);
  padding: 4px 6px 3px; border: 1px solid var(--line-soft); border-bottom-width: 2px; border-radius: var(--r-1);
  background: rgba(0, 0, 0, 0.35); vertical-align: middle;
}
.dot { display: inline-block; width: 7px; height: 7px; background: currentColor; flex: 0 0 auto; }

/* ---------- title ---------- */
.title-screen { position: absolute; inset: 0; z-index: 11; }
.in-match .title-screen { display: none; }
.title-screen .wash {
  position: absolute; inset: 0; pointer-events: none;
  background:
    linear-gradient(90deg, rgba(7, 8, 12, 0.88) 0%, rgba(7, 8, 12, 0.55) 38%, rgba(7, 8, 12, 0.08) 70%),
    linear-gradient(to top, rgba(7, 8, 12, 0.8), transparent 30%),
    repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.12) 0 1px, transparent 1px 4px);
}
#titleBrand { position: absolute; left: 64px; top: 24px; letter-spacing: 0.3em; }
#demoTag {
  position: absolute; right: 64px; top: 24px; height: 26px; display: flex; align-items: center; gap: 8px; padding: 0 12px;
  font: 600 11px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted);
}
#demoTag .dot { color: var(--danger); animation: blink 1.2s steps(2, end) infinite; }
#titleCopy { position: absolute; left: 64px; top: 92px; }
#titleCopy .eyebrow { display: flex; align-items: center; gap: 12px; font: 600 12px / 1 var(--font-ui); letter-spacing: 0.3em; color: var(--accent); }
#titleCopy .eyebrow::before { content: ""; width: 28px; height: 2px; background: var(--accent); }
#gameTitle {
  margin: 14px 0 0; font: 700 var(--fs-display) / 0.86 var(--font-ui); letter-spacing: 0.04em; color: var(--ink);
  text-shadow: 0 10px 40px rgba(0, 0, 0, 0.55); opacity: 0; transition: opacity var(--t-base) var(--e-out);
}
html.fonts-ready #gameTitle { opacity: 1; }
#gameTitle em { display: block; font-style: normal; color: var(--accent); }
#titleCopy .sub { margin-top: 22px; font: 500 13px / 1 var(--font-ui); letter-spacing: 0.2em; color: var(--ink-muted); }
#titleCopy .sub b { color: var(--accent); font-weight: 400; margin: 0 6px; }
#titleCopy .ruler {
  margin-top: 16px; width: 440px; height: 8px;
  background:
    linear-gradient(var(--accent), var(--accent)) left bottom / 90px 2px no-repeat,
    repeating-linear-gradient(90deg, var(--ink-dim) 0 1px, transparent 1px 20px) left bottom / 100% 8px no-repeat;
}
#titlePlate { position: absolute; left: 64px; bottom: 260px; width: 440px; padding: 14px 16px 12px; margin: 0; }
#titlePlate .head, #fieldManual .head, #scoreboardPanel .head, #mapPanel .head { display: flex; justify-content: space-between; align-items: center; }
#titlePlate .row { display: grid; grid-template-columns: 1fr 130px; gap: 8px; margin-top: 10px; height: 54px; }
#titlePlate .btn { padding: 0; }
#titlePlate .hint { margin: 10px 0 0; font-size: 12px; color: var(--ink-muted); letter-spacing: 0.02em; }
#fieldManual { position: absolute; right: 64px; bottom: 96px; width: 340px; padding: 14px 16px 10px; }
#fieldManual dl { margin: 8px 0 0; }
#fieldManual dl > div { display: grid; grid-template-columns: 118px 1fr; align-items: center; height: 35px; border-top: 1px solid var(--line-soft); }
#fieldManual dt { display: flex; gap: 3px; margin: 0; }
#fieldManual dd { margin: 0; display: flex; align-items: baseline; gap: 10px; }
#fieldManual dd b { font: 700 13px / 1 var(--font-ui); letter-spacing: 0.08em; text-transform: uppercase; }
#fieldManual dd span { font-size: 11px; color: var(--ink-muted); }
#statusStrip {
  position: absolute; left: 64px; right: 64px; bottom: 40px; height: 16px; display: flex; align-items: center; gap: 28px;
  font: 500 11px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted);
}
#statusStrip b { font-family: var(--font-num); color: var(--ink); }
#statusStrip .link { display: flex; align-items: center; gap: 8px; }
#statusStrip .link .dot { color: var(--ok); }
#statusStrip .credits { margin-left: auto; text-transform: none; letter-spacing: 0.02em; color: var(--ink-dim); }

/* ---------- HUD wrapper + visibility ---------- */
#hud { position: absolute; inset: 0; z-index: 6; pointer-events: none; display: none; }
.game-container.live #hud { display: block; }
.game-container[data-round="ended"].in-match #hud { display: block; }
.game-container[data-round="ended"] #hud > :not(#roundModule) { display: none; }
.game-container.offline #hud { opacity: 0.55; }
.game-container.offline #console .num { color: var(--ink-muted); }

/* round module */
#roundModule {
  position: absolute; left: 50%; top: 18px; transform: translateX(-50%); height: 46px; display: flex; align-items: stretch;
}
#roundModule .cell { display: flex; align-items: center; gap: 10px; padding: 0 16px; border-left: 1px solid var(--line-soft); }
#roundModule .cell:first-child { border-left: 0; }
#roundNumber { font-size: var(--fs-num-s); min-width: 2ch; text-align: right; }
#roundTimer { font-size: var(--fs-num-l); min-width: 4ch; text-align: center; }
#roundTimer.urgent { color: var(--danger); }
#roundTimer.urgent.blink { animation: blink 1s steps(2, end) infinite; }
#roundState { display: flex; align-items: center; gap: 8px; font: 600 12px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent); }
#roundState.is-results { color: var(--ink-muted); }
#roundModule .tick { position: absolute; left: 50%; bottom: -10px; width: 1px; height: 10px; background: var(--accent); }

/* kill feed */
#killFeed { position: absolute; left: var(--gutter); top: 22px; width: var(--feed-w); display: flex; flex-direction: column; align-items: flex-start; gap: 4px; will-change: transform; }
.kill-line {
  display: inline-flex; align-items: center; gap: 6px; height: 28px; max-width: var(--feed-w); padding: 0 12px 0 10px;
  background: var(--surface); border-left: 2px solid var(--ink-muted);
  font: 600 14px / 1 var(--font-ui); letter-spacing: 0.04em; white-space: nowrap; text-shadow: var(--shadow-text);
  animation: feed-in var(--t-base) var(--e-out);
  transition: opacity var(--t-slow) var(--e-in), transform var(--t-slow) var(--e-in);
}
.kill-line .who, .kill-line .vic { max-width: 110px; overflow: hidden; text-overflow: ellipsis; color: var(--ink); }
.kill-line .verb { color: var(--ink-muted); font-weight: 500; }
.kill-line .pts { color: var(--accent); font-size: 13px; }
.kill-line .tag { font: 700 10px / 1 var(--font-ui); letter-spacing: 0.2em; color: var(--accent); border: 1px solid var(--line-strong); padding: 3px 5px 2px; margin-left: 4px; }
.kill-line.mine { border-left-color: var(--self); background: linear-gradient(var(--self-tint), var(--self-tint)), var(--surface); }
.kill-line.mine .who { color: var(--self); }
.kill-line.downed { border-left-color: var(--danger); }
.kill-line.downed .who { color: var(--danger); }
.kill-line.fade { opacity: 0; transform: translateX(-8px); }
@keyframes feed-in { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: none; } }

/* link chip */
#link {
  position: absolute; right: var(--gutter); top: 22px; height: 22px; display: flex; align-items: center; gap: 7px; padding: 0 10px;
  font: 600 11px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted); box-shadow: none;
}
#link .dot { color: var(--ok); }
#link.lost { color: var(--danger); border-color: rgba(255, 74, 61, 0.4); }
#link.lost .dot { color: var(--danger); animation: blink 0.8s steps(2, end) infinite; }

/* scoreboard panel */
#scoreboardPanel { position: absolute; right: var(--gutter); top: 54px; width: var(--lead-w); padding: 0 10px 6px; }
#scoreboardPanel .head { height: 30px; border-bottom: 1px solid var(--line-soft); }
#scoreboardPanel .head b { font-family: var(--font-num); color: var(--ink); }
.lead-row { display: grid; grid-template-columns: 16px 8px 1fr 36px 44px; align-items: center; gap: 6px; height: 28px; padding: 0 4px; }
.lead-row .rk { font: 700 11px / 1 var(--font-num); color: var(--ink-dim); }
.lead-row .sw { width: 8px; height: 8px; background: var(--ink-muted); }
.lead-row .nm { font: 600 14px / 1 var(--font-ui); letter-spacing: 0.04em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lead-row .kd { font: 500 11px / 1 var(--font-num); color: var(--ink-muted); text-align: right; }
.lead-row .sc { font-size: 14px; text-align: right; }
.lead-row.me { background: var(--self-tint); box-shadow: inset 2px 0 0 var(--self); }
.lead-row.me .nm { color: var(--self); }
#kd { display: flex; justify-content: flex-end; gap: 14px; height: 26px; align-items: center; border-top: 1px solid var(--line-soft); margin-top: 2px; font: 600 11px / 1 var(--font-ui); letter-spacing: 0.18em; color: var(--ink-muted); }
#kd b { font-family: var(--font-num); color: var(--ink); margin-left: 6px; }

/* announcer */
#announcer {
  position: absolute; left: 50%; top: var(--announcer-top); transform: translateX(-50%); width: var(--announcer-w);
  text-align: center; --rule: 60px; --rc: var(--ink-muted); --tc: var(--ink); --fs: var(--fs-callout); will-change: transform;
  opacity: 0; transition: opacity var(--t-slow) var(--e-in);
}
#announcer.show { opacity: 1; animation: announce-in var(--t-base) var(--e-out); }
#announcer .who { display: none; font: 600 12px / 1 var(--font-ui); letter-spacing: 0.3em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 8px; }
#announcer.other .who { display: block; }
#announcer .line { display: flex; align-items: center; justify-content: center; gap: 18px; }
#announcer .line::before, #announcer .line::after {
  content: ""; flex: 0 1 var(--rule); min-width: 40px; height: 2px; box-shadow: 0 0 10px var(--rc);
}
#announcer .line::before { background: linear-gradient(90deg, transparent, var(--rc)); }
#announcer .line::after { background: linear-gradient(90deg, var(--rc), transparent); }
#announcerText {
  font: 700 var(--fs) / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; white-space: nowrap; color: var(--tc);
  text-shadow: 0 2px 0 #07080c, 0 0 3px #000, 0 0 10px rgba(0, 0, 0, 0.8), 0 0 22px rgba(242, 171, 60, 0.45);
}
#announcer.t1 { --rule: 60px; --rc: var(--ink-muted); }
#announcer.t2 { --rule: 100px; --rc: var(--accent); }
#announcer.t3 { --rule: 140px; --rc: var(--accent); --tc: var(--accent); --fs: var(--fs-callout-3); }
#announcer.t4 { --rule: 180px; --rc: var(--danger); --tc: var(--danger); --fs: var(--fs-callout-4); }
#announcer.t4 #announcerText { letter-spacing: 0.24em; text-shadow: 0 2px 0 #07080c, 0 0 3px #000, 0 0 10px rgba(0, 0, 0, 0.8), var(--glow-danger); }
#announcer.other { --tc: var(--ink); --fs: var(--fs-callout); }
@keyframes announce-in { from { opacity: 0; transform: translateX(-50%) scale(1.06); } to { opacity: 1; transform: translateX(-50%) scale(1); } }

/* round toast */
#roundMessage {
  position: absolute; left: 50%; top: var(--toast-top); transform: translateX(-50%); width: 420px; height: 92px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; text-align: center;
  opacity: 0; transition: opacity var(--t-slow) var(--e-in);
}
#roundMessage.show { opacity: 1; animation: toast-in var(--t-toast) var(--e-out); }
#roundMessage .kicker { font: 600 12px / 1 var(--font-ui); letter-spacing: 0.3em; text-transform: uppercase; color: var(--accent); }
#roundMessage .title { font: 700 40px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink); text-shadow: var(--shadow-text); }
#roundMessage .sub { font-size: 12px; color: var(--ink-muted); letter-spacing: 0.04em; }
#roundMessage .sub:empty { display: none; }
#roundMessage.dropin { height: auto; padding: 14px 18px; }
@keyframes toast-in { from { opacity: 0; transform: translateX(-50%) translateY(-8px); } to { opacity: 1; transform: translateX(-50%); } }

/* console */
#console {
  position: absolute; bottom: var(--console-bottom); transform: translateX(-50%);
  left: max(50%, calc(var(--gutter) + var(--map-w) + 16px + var(--console-w) / 2));
  width: var(--console-w); height: var(--console-h); display: grid; grid-template-rows: var(--console-head) 1fr; will-change: transform;
}
#consoleHead { display: flex; align-items: center; gap: 10px; padding: 0 16px; min-width: 0; border-bottom: 1px solid var(--line-soft); }
#tag { display: flex; align-items: baseline; gap: 10px; }
#tag .me { font: 700 12px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--self); }
#scoreText { font-size: var(--fs-num-s); min-width: 5ch; text-align: right; }
#buffs { display: flex; gap: 8px; margin: 0 auto; }
.buff {
  --bc: var(--ink); --t: 1; position: relative; display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 10px;
  background: rgba(0, 0, 0, 0.35); border: 1px solid var(--line-soft); font: 700 11px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink);
  transition: opacity var(--t-base) var(--e-in);
}
.buff::before { content: ""; width: 8px; height: 8px; background: var(--bc); transform: rotate(45deg) scale(0.75); flex: 0 0 auto; }
.buff .num { font-size: 12px; color: var(--ink-muted); font-weight: 500; }
.buff > i { position: absolute; left: 0; bottom: -1px; height: 2px; width: calc(var(--t) * 100%); background: var(--bc); transition: width 80ms linear; }
.buff.speed { --bc: var(--p-speed); order: 1; }
.buff.rapid { --bc: var(--p-rapid); order: 2; }
.buff.dmg { --bc: var(--p-dmg); order: 3; }
.buff.inv { --bc: var(--ink); order: 4; }
.buff.last { animation: blink 0.5s steps(2, end) infinite; }
.buff.out { opacity: 0; }
#combo { display: flex; align-items: center; gap: 10px; --cc: var(--accent); }
#comboText { font-size: var(--fs-num-m); min-width: 3ch; text-align: right; color: var(--cc); }
#combo .drain { width: 56px; height: 3px; background: rgba(0, 0, 0, 0.55); overflow: hidden; }
#combo .drain i { display: block; height: 100%; background: var(--cc); transform-origin: left center; transform: scaleX(var(--combo-t)); transition: transform 80ms linear; }
#combo.t2 { --cc: var(--warn); }
#combo.t3 { --cc: var(--danger); }
#combo.t3 #comboText { text-shadow: var(--glow-danger); }
#comboText.pop { animation: pop var(--t-fast) var(--e-mech); }
@keyframes pop { from { transform: scale(1.15); } to { transform: scale(1); } }

#consoleBody { display: grid; grid-template-columns: var(--console-cols); }
#consoleBody > * { padding: var(--cell-pad); border-left: 1px solid var(--line-soft); }
#consoleBody > :first-child { border-left: 0; }

#vitals { display: grid; grid-template-columns: var(--vitals-cols); grid-template-rows: auto auto; column-gap: 10px; row-gap: 6px; align-content: center; }
.vcell { display: flex; align-items: flex-end; justify-content: flex-end; }
.vcell.hp { justify-content: space-between; align-items: flex-start; gap: 6px; }
.vcell.hp .lbl { margin-top: 2px; }
#healthText { font-size: var(--fs-num-xl); line-height: 0.9; min-width: 3ch; text-align: right; }
.bar.hp { align-self: end; margin-bottom: 4px; }
.bar.hp > i.ghost { background: rgba(236, 231, 216, 0.35); --x: var(--hp-ghost); transition: transform 320ms var(--e-out); }
#healthFill { background: var(--ink); --x: var(--hp); }
.vcell.sh { gap: 8px; align-items: center; }
#shieldText { font-size: var(--fs-num-xs); min-width: 3ch; text-align: right; color: var(--shield); }
.bar.sh { align-self: center; }
#shieldFill { background: var(--shield); --x: var(--sh); }
#shieldFill.absorb { box-shadow: 0 0 10px var(--shield); }
.game-container.noshield .vcell.sh, .game-container.noshield .bar.sh { opacity: 0.45; }
.game-container.lowhp #healthFill { background: var(--danger); box-shadow: 0 0 10px rgba(255, 74, 61, 0.6); animation: hp-pulse 0.9s ease-in-out infinite alternate; }
.game-container.lowhp #healthText, .game-container.lowhp .vcell.hp .lbl { color: var(--danger); }
@keyframes hp-pulse { from { opacity: 1; } to { opacity: 0.6; } }

#dash { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; }
#dash .ring { position: relative; width: var(--ring); height: var(--ring); }
#dashRing { width: 100%; height: 100%; transform: rotate(-90deg); fill: none; }
#dashRing .track { stroke: rgba(236, 231, 216, 0.12); stroke-width: 4; }
#dashRing .arc { stroke: var(--ink-muted); stroke-width: 4; stroke-dasharray: 150.8; stroke-dashoffset: calc(150.8 * (1 - var(--dash))); transition: stroke-dashoffset 80ms linear, stroke var(--t-fast); }
#dash.ready #dashRing .arc { stroke: var(--self); filter: none; }
#dash.ready .ring { box-shadow: none; }
#dash.ready #dashText { font: 600 12px / 1 var(--font-ui); letter-spacing: 0.1em; color: var(--self); }
#dash.flash #dashRing .arc { stroke: var(--ink); }
#dashText { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: var(--fs-num-xs); color: var(--ink); }

#ammoBlock { display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto auto; row-gap: 4px; align-items: end; }
#ammoText { font-size: var(--fs-num-xl); line-height: 0.9; color: var(--ink); }
#ammoText small { font-size: var(--fs-num-s); font-weight: 500; color: var(--ink-muted); margin-left: 2px; }
#ammoText.low { color: var(--warn); }
#ammoBlock.reloading #ammoText { color: var(--accent); }
#ammoBlock.empty #ammoText { color: var(--danger); animation: blink 0.7s steps(2, end) infinite; }
#weaponText {
  display: flex; align-items: center; gap: 8px; padding-bottom: 8px; justify-self: end;
  font: 700 13px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase;
}
#weaponText::before { content: ""; width: 8px; height: 8px; background: currentColor; transform: rotate(45deg) scale(0.8); }
#reloadText { grid-column: 1 / -1; min-height: 12px; text-align: right; font: 700 12px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent); }
#reloadText .num { color: var(--ink); font-size: 12px; }
#ammoBlock.empty #reloadText { color: var(--danger); animation: blink 0.7s steps(2, end) infinite; }
#reloadBar { grid-column: 1 / -1; height: 5px; background: rgba(0, 0, 0, 0.55); border: 1px solid var(--line-soft); overflow: hidden; }
#reloadBar i { display: block; height: 100%; background: var(--accent); box-shadow: var(--glow-accent); transform-origin: left center; transform: scaleX(var(--reload)); transition: transform 80ms linear; }
#ammoBlock.empty #reloadBar i { display: none; }

/* map panel */
#mapPanel { position: absolute; left: var(--gutter); bottom: var(--console-bottom); width: var(--map-w); padding: 6px 7px 7px; }
#mapPanel .head { height: 20px; }
#mapPanel .legend { display: flex; gap: 10px; font: 600 10px / 1 var(--font-ui); letter-spacing: 0.14em; color: var(--ink-muted); }
#mapPanel .legend span { display: flex; align-items: center; gap: 4px; }
#mapPanel .legend .me i { width: 0; height: 0; border-top: 4px solid transparent; border-bottom: 4px solid transparent; border-left: 6px solid var(--self); }
#mapPanel .legend .en i { width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-bottom: 7px solid var(--danger); }
#minimap { display: block; width: 200px; height: 125px; margin: 2px auto 0; background: #0d1219; border: 1px solid var(--line-soft); }
#mapPanel .foot { display: flex; justify-content: space-between; align-items: center; height: 18px; margin-top: 4px; font: 600 11px / 1 var(--font-ui); letter-spacing: 0.16em; color: var(--ink-muted); }
#mapPanel .foot b { font-family: var(--font-num); color: var(--ink); margin-left: 6px; }
#mapPanel .foot .h b { color: var(--danger); }
#credits { margin-top: 5px; padding-top: 5px; border-top: 1px solid var(--line-soft); font-size: 10px; line-height: 1.3; color: var(--ink-dim); letter-spacing: 0.02em; }

/* crosshair */
#crosshair {
  position: fixed; left: 0; top: 0; width: 48px; height: 48px; margin: -24px 0 0 -24px; z-index: 40; pointer-events: none;
  will-change: transform; display: block;
}
#crosshair svg { width: 48px; height: 48px; overflow: visible; }
#crosshair .halo { fill: none; stroke: rgba(7, 8, 12, 0.9); stroke-width: 4.5; }
#crosshair .ring { fill: none; stroke: var(--accent); stroke-opacity: 0.35; stroke-width: 2; }
#crosshair .arc { fill: none; stroke: var(--accent); stroke-width: 2.5; stroke-dasharray: 125.7; stroke-dashoffset: calc(125.7 * (1 - var(--reload))); transform: rotate(-90deg); transform-origin: 24px 24px; }
#crosshair .tick { stroke: var(--accent); stroke-width: 2; stroke-linecap: square; transition: transform var(--t-fast) var(--e-out); }
#crosshair .dot { fill: var(--ink); stroke: #07080c; stroke-width: 1; }
#crosshair.empty .tick { stroke: var(--danger); }
#crosshair.empty .tick.n { transform: translateY(2px); }
#crosshair.empty .tick.s { transform: translateY(-2px); }
#crosshair.empty .tick.w { transform: translateX(2px); }
#crosshair.empty .tick.e { transform: translateX(-2px); }
#crosshair.empty .ring { stroke: var(--danger); stroke-opacity: 0.45; }
#crosshair.hit .tick { stroke: var(--ink); }
.game-container.offline #crosshair { display: none; }

/* ---------- lobby / staging ---------- */
#lobby {
  position: absolute; left: 48px; top: 64px; z-index: 8; width: 460px; max-height: calc(100vh - 128px);
  padding: 22px 24px 20px; display: flex; flex-direction: column; overflow: hidden;
  animation: lobby-in var(--t-slow) var(--e-out);
}
.game-container.lobby-open::before {
  content: ""; position: absolute; inset: 0; z-index: 7; pointer-events: none;
  background: linear-gradient(90deg, rgba(7, 8, 12, 0.72) 0%, rgba(7, 8, 12, 0.45) 40%, rgba(7, 8, 12, 0.05) 70%);
}
.game-container.lobby-open #demoTag, .game-container.lobby-open .in-match-demo { display: flex; }
#lobby .brand { display: flex; justify-content: space-between; align-items: center; font: 500 11px / 1 var(--font-ui); letter-spacing: 0.3em; text-transform: uppercase; color: var(--ink-dim); }
#lobby .link { display: flex; align-items: center; gap: 7px; letter-spacing: 0.18em; color: var(--ink-muted); }
#lobby .link .dot { color: var(--ok); }
#lobbyCount { display: none; font-size: 96px; line-height: 0.9; color: var(--accent); margin: 18px 0 6px; }
#lobbyCount.tick { animation: count-tick var(--t-fast) var(--e-mech); }
@keyframes count-tick { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
#lobbyTitle { margin: 12px 0 0; font: 700 var(--fs-hero) / 1 var(--font-ui); letter-spacing: 0.04em; text-transform: uppercase; }
#lobbyTitle em { font-style: normal; color: var(--accent); }
#lobbyHint { margin: 10px 0 0; font: 600 13px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted); }
#lobbyHint b { font-family: var(--font-num); color: var(--ink); }
#lobbySegs { display: flex; gap: 4px; height: 4px; margin-top: 10px; }
#lobbySegs i { flex: 1; background: rgba(236, 231, 216, 0.12); }
#lobbySegs i.on { background: var(--self); box-shadow: var(--glow-self); }
#lobbyLive {
  display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 12px; margin-top: 18px; padding: 10px 12px;
  background: rgba(242, 171, 60, 0.1); border-left: 2px solid var(--accent); font-size: 13px; color: var(--ink);
}
#lobbyLive .st { font: 600 11px / 1 var(--font-ui); letter-spacing: 0.2em; color: var(--accent); }
#lobbyLive .tl { font-size: var(--fs-num-s); }
#lobbyRoster { list-style: none; margin: 18px 0 0; padding: 0; overflow: auto; flex: 0 1 auto; min-height: 0; }
#lobbyRoster li { display: grid; grid-template-columns: 26px 1fr 90px 92px; align-items: center; gap: 10px; height: 41px; border-top: 1px solid var(--line-soft); }
#lobbyRoster li.head { height: 26px; border-top: 0; }
#lobbyRoster li .sw { width: 10px; height: 10px; background: var(--ink-muted); margin-left: 8px; }
#lobbyRoster li .nm { font: 600 15px / 1 var(--font-ui); letter-spacing: 0.04em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#lobbyRoster li .wp { font: 500 11px / 1 var(--font-ui); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-muted); }
#lobbyRoster li .fl { justify-self: end; font: 700 11px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-muted); border: 1px solid var(--line-soft); padding: 5px 8px 4px; }
#lobbyRoster li.ready .fl { color: var(--self); border-color: var(--self-line); background: rgba(185, 204, 138, 0.08); }
#lobbyRoster li.me { background: var(--self-tint); box-shadow: inset 3px 0 0 var(--self); }
#lobbyRoster li.me .nm { color: var(--self); }
#lobbyRoster li.open { color: var(--ink-dim); }
#lobbyRoster li.open .sw { background: none; border: 1px dashed var(--ink-dim); }
#lobbyRoster li.open .nm { grid-column: 2 / 4; font-weight: 500; color: var(--ink-dim); }
#lobbyRoster li.open .fl { border-style: dashed; }
#readyRow { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 16px; margin-top: 16px; }
#readyButton { width: 180px; height: 52px; padding: 0; }
#readyNote { text-align: right; font: 500 11px / 1.45 var(--font-ui); letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-muted); }
#lobby .keys { display: flex; gap: 18px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--line-soft); font: 600 10px / 1 var(--font-ui); letter-spacing: 0.16em; color: var(--ink-muted); }
#lobby .keys span { display: flex; align-items: center; gap: 6px; }
#lobby .keys .key { font-size: 10px; padding: 3px 5px 2px; }
#lobby .credits { margin-top: 8px; font-size: 10px; color: var(--ink-dim); letter-spacing: 0.02em; }
@keyframes lobby-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* countdown variant */
#lobby.countdown { left: 50%; top: 140px; transform: translateX(-50%); width: 500px; height: 300px; align-items: center; text-align: center; padding-top: 18px; }
#lobby.countdown #lobbyCount { display: block; }
#lobby.countdown .brand { width: 100%; }
#lobby.countdown #lobbyTitle { font-size: 26px; letter-spacing: 0.3em; margin-top: 4px; }
#lobby.countdown #lobbyTitle em { color: var(--ink); }
#lobby.countdown #lobbyHint { margin-top: 8px; }
#lobby.countdown #lobbySegs, #lobby.countdown #readyRow, #lobby.countdown .keys, #lobby.countdown .credits, #lobby.countdown #lobbyLive { display: none; }
#lobby.countdown #lobbyRoster { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 12px; overflow: visible; }
#lobby.countdown #lobbyRoster li { display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 8px; border: 1px solid var(--line-soft); background: rgba(0, 0, 0, 0.35); box-shadow: none; }
#lobby.countdown #lobbyRoster li.head, #lobby.countdown #lobbyRoster li.open, #lobby.countdown #lobbyRoster li .wp, #lobby.countdown #lobbyRoster li .fl { display: none; }
#lobby.countdown #lobbyRoster li .sw { width: 8px; height: 8px; margin: 0; }
#lobby.countdown #lobbyRoster li .nm { font-size: 12px; }

/* ---------- results ---------- */
#scoreboard {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 10; width: var(--results-w); padding: 0 0 18px;
  animation: results-in var(--t-toast) var(--e-out);
}
.game-container.results-open::before {
  content: ""; position: absolute; inset: 0; z-index: 9; pointer-events: none; background: rgba(7, 8, 12, 0.42);
}
#scoreboard .head { display: flex; justify-content: space-between; align-items: flex-end; padding: 16px 22px 14px; border-bottom: 2px solid var(--accent); }
#scoreboard h2 { margin: 0; font: 700 26px / 1 var(--font-ui); letter-spacing: 0.14em; text-transform: uppercase; }
#scoreboard h2 em { font-style: normal; color: var(--accent); font-family: var(--font-num); }
#scoreboard .head .right { display: flex; gap: 28px; align-items: flex-end; }
#resultsPlace, #scoreboard .next { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; font: 500 11px / 1 var(--font-ui); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-muted); }
#resultsPlaceNum { font-size: 20px; color: var(--self); }
#resultsNext { font-size: 26px; color: var(--accent); }
#winner {
  display: flex; align-items: center; gap: 16px; margin: 18px 22px 0; padding: 14px 18px;
  background: rgba(242, 171, 60, 0.1); border: 1px solid var(--line);
}
#winner .badge { font: 700 10px / 1 var(--font-ui); letter-spacing: 0.26em; text-transform: uppercase; color: #14110c; background: var(--accent); padding: 5px 8px 4px; }
#winner .nm { display: flex; align-items: center; gap: 12px; font: 700 30px / 1 var(--font-ui); letter-spacing: 0.04em; text-transform: uppercase; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#winner .sw { width: 14px; height: 14px; background: var(--ink-muted); flex: 0 0 auto; }
#winner .stat { margin-left: auto; text-align: right; }
#winnerScore { font-size: 32px; color: var(--accent); text-shadow: var(--glow-accent); }
#resultsTable { display: grid; grid-template-columns: 34px 26px 1fr 110px 110px 64px 64px; margin: 14px 22px 0; }
#resultsTable .h { font: 600 10px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-dim); padding: 0 6px 8px; border-bottom: 1px solid var(--line-soft); }
#resultsTable .r { text-align: right; }
.result-row { display: contents; }
.result-row > span { display: flex; align-items: center; height: var(--results-row); padding: 0 6px; border-bottom: 1px solid var(--line-soft); font: 600 15px / 1 var(--font-ui); letter-spacing: 0.04em; }
.result-row .rk { font: 700 11px / 1 var(--font-num); color: var(--ink-dim); }
.result-row .sw i { width: 10px; height: 10px; background: var(--ink-muted); }
.result-row .nm { gap: 8px; overflow: hidden; }
.result-row .nm .t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.result-row .you { font: 700 10px / 1 var(--font-ui); letter-spacing: 0.2em; color: #14110c; background: var(--self); padding: 3px 5px 2px; }
.result-row .r { justify-content: flex-end; font-size: 16px; }
.result-row .sc-total, .result-row .kd { color: var(--ink-muted); }
.result-row.me > span { background: var(--self-tint); }
.result-row.me .nm { color: var(--self); }
.result-row.first.me > .rk { box-shadow: inset 3px 0 0 var(--self); }
#scoreboard .foot { margin: 16px 22px 0; }
#scoreboard .foot .bar { height: 4px; border: 0; background: rgba(236, 231, 216, 0.1); }
#resultsBar { background: var(--accent); transition: none; }
#scoreboard .foot .row { display: flex; justify-content: space-between; margin-top: 10px; font: 500 11px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted); }
#scoreboard .foot .row b { font-family: var(--font-num); color: var(--ink); }
@keyframes results-in { from { opacity: 0; transform: translate(-50%, -50%) scale(0.98); } to { opacity: 1; transform: translate(-50%, -50%); } }

/* ---------- connection card ---------- */
#loadingText {
  position: absolute; left: 50%; top: 40%; transform: translateX(-50%); z-index: 12; width: 360px; height: 96px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
}
#loadingText .st { display: flex; align-items: center; gap: 8px; font: 600 11px / 1 var(--font-ui); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-muted); }
#loadingText .msg { font-size: 15px; color: var(--ink); }
#loadingText.lost { --bc: var(--danger); }
#loadingText.lost .st { color: var(--danger); }
#loadingText.lost .dot { animation: blink 0.8s steps(2, end) infinite; }

@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }

/* ---------- responsive ---------- */
@media (max-width: 1320px), (max-height: 760px) {
  :root {
    --fs-num-xl: 36px; --fs-callout: 44px; --fs-callout-3: 48px; --fs-callout-4: 50px;
    --console-w: 560px; --console-h: 112px; --console-head: 26px; --console-cols: 272px 72px 1fr; --cell-pad: 8px 12px;
    --vitals-cols: 88px 150px; --ring: 42px; --feed-w: 300px; --lead-w: 240px; --announcer-top: 88px; --announcer-w: 560px;
    --toast-top: 150px; --results-w: 660px; --results-row: 38px;
  }
  #announcer.t1 { --rule: 60px; } #announcer.t2 { --rule: 60px; } #announcer.t3 { --rule: 80px; } #announcer.t4 { --rule: 100px; }
  #lobby { top: 32px; max-height: calc(100vh - 64px); }
  #lobbyRoster li.open { display: none; }
  #titlePlate { bottom: 180px; }
  #fieldManual { bottom: 72px; }
}
@media (max-height: 700px) {
  :root { --fs-display: 72px; }
  #titleCopy { top: 56px; }
  #titleCopy .sub { margin-top: 14px; }
  #titlePlate { bottom: 88px; }
  #statusStrip { bottom: 22px; }
  #fieldManual { bottom: 60px; }
}
@media (max-width: 1100px) {
  #fieldManual { display: none; }
  #titleBrand, #titleCopy, #titlePlate, #statusStrip { left: 40px; }
  #statusStrip { right: 40px; }
  #demoTag { right: 40px; }
}
@media (min-width: 1800px) {
  :root { --gutter: 32px; --console-bottom: 56px; }
  #titleBrand, #titleCopy, #titlePlate, #statusStrip { left: 80px; }
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; }
  .game-container.lowhp #dmg::before { opacity: 0.35; }
  .game-container.lowhp #healthFill { opacity: 1; }
  #ammoBlock.empty #ammoText, #ammoBlock.empty #reloadText, .buff.last, #link.lost .dot, #demoTag .dot, #loadingText.lost .dot, #roundTimer.urgent.blink { opacity: 1; }
  .bar > i, #reloadBar i, #combo .drain i, .buff > i, #dashRing .arc { transition-duration: 0.001ms !important; }
}

/* compact console details (720p-class windows) */
@media (max-width: 1320px), (max-height: 760px) {
  #weaponText { font-size: 12px; letter-spacing: 0.16em; gap: 6px; }
  #ammoText small { font-size: 15px; }
  .buff { padding: 0 7px; gap: 5px; letter-spacing: 0.14em; }
  #combo .drain { width: 36px; }
  #scoreText { font-size: 16px; }
}
/* very narrow windows: tighter map so the console keeps its room */
@media (max-width: 960px) {
  :root { --map-w: 176px; --gutter: 16px; }
  #minimap { width: 160px; height: 100px; }
}

/* music toggle: bottom-right, only once the player has deployed (music starts on that click) */
#musicToggle {
  position: absolute; right: var(--gutter); bottom: var(--console-bottom); z-index: 13; display: none;
  align-items: center; gap: 8px; height: 30px; padding: 0 10px; cursor: pointer; pointer-events: auto;
  font: 600 11px / 1 var(--font-ui); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-muted);
  box-shadow: none; transition: color var(--t-fast), border-color var(--t-fast);
}
.game-container.in-match #musicToggle { display: flex; }
#musicToggle svg { width: 13px; height: 13px; fill: var(--self); }
#musicToggle .key { font-size: 10px; padding: 2px 5px 1px; }
#musicToggle:hover { color: var(--ink); border-color: var(--line); }
#musicToggle.off svg { fill: var(--ink-dim); }
#musicToggle.off #musicLabel { color: var(--ink-dim); text-decoration: line-through; }
#musicToggle:focus-visible { outline: 1px solid var(--accent); outline-offset: 2px; }
