/* ============================================================================
   game.css — Stage, canvas, HUD layout, touch controls, loading, gate
   ========================================================================== */

.app {
  position: fixed;
  inset: 0;
  overflow: hidden;
  background:
    radial-gradient(140% 100% at 50% -20%, var(--th-bg1) 0%, var(--th-bg0) 62%, #02030a 100%);
  transition: background var(--t-scene) var(--ease-out);
  contain: strict;
}

/* ==========================================================================
   STAGE + CANVAS
   ========================================================================== */
.stage {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  isolation: isolate;
}

.game-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  image-rendering: auto;
  background: transparent;
  cursor: none;
  touch-action: none;
  z-index: 1;
}

.app[data-pointer="visible"] .game-canvas { cursor: crosshair; }

/* Full-screen post overlay: vignette + scanlines + aberration seam */
.stage-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  opacity: var(--fx-post, 1);
  background:
    radial-gradient(120% 92% at 50% 50%, transparent 52%, rgba(0, 0, 0, 0.34) 78%, rgba(0, 0, 0, 0.72) 100%),
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.022) 0 1px, transparent 1px 3px);
  mix-blend-mode: normal;
}

.app[data-quality="low"] .stage-overlay { background: radial-gradient(120% 92% at 50% 50%, transparent 60%, rgba(0,0,0,0.5) 100%); }

/* Global damage / heal / power flash driven by JS */
.stage::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  background: var(--flash-color, transparent);
  opacity: var(--flash, 0);
  transition: opacity 220ms var(--ease-out);
  mix-blend-mode: screen;
}

/* ==========================================================================
   HUD SHELL — three top clusters, bottom intentionally clear
   ========================================================================== */
.hud {
  position: absolute;
  inset: 0;
  z-index: 6;
  pointer-events: none;
  font-family: var(--ff-body);
  opacity: var(--hud-opacity);
  transition: opacity var(--t-base) var(--ease-out);
}

.app[data-hud="hidden"] .hud { opacity: 0; }

/* The HUD only belongs to the play scene — menus own the screen otherwise. */
.app:not([data-scene="play"]) .hud,
.app:not([data-scene="play"]) .touch-layer {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.hud-zone {
  position: absolute;
  display: flex;
  flex-direction: column;
  gap: var(--gap);
  transform: scale(var(--hud-scale));
}

.hud-zone--tl {
  top: calc(var(--safe-t) + var(--u) * 2);
  left: calc(var(--safe-l) + var(--u) * 2);
  align-items: flex-start;
  transform-origin: top left;
  width: clamp(210px, 25vw, 340px);
}

.hud-zone--tc {
  top: calc(var(--safe-t) + var(--u) * 2);
  left: 50%;
  transform: translateX(-50%) scale(var(--hud-scale));
  transform-origin: top center;
  align-items: center;
  width: clamp(280px, 40vw, 620px);
}

.hud-zone--tr {
  top: calc(var(--safe-t) + var(--u) * 2);
  right: calc(var(--safe-r) + var(--u) * 2);
  align-items: flex-end;
  transform-origin: top right;
  width: clamp(178px, 21vw, 268px);
}

.hud-zone--center {
  inset: 0;
  display: grid;
  place-items: center;
  transform: none;
}

/* ---------- Shared glass panel ---------- */
.glass {
  position: relative;
  background: var(--glass-bg);
  backdrop-filter: blur(var(--glass-blur)) saturate(1.25);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(1.25);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-panel), var(--glass-edge);
  padding: var(--pad);
  width: 100%;
  overflow: hidden;
}

.glass::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(120deg, transparent 35%, rgba(255, 255, 255, 0.06) 50%, transparent 65%);
  pointer-events: none;
}

.glass::after {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--th-a), transparent);
  opacity: 0.75;
}

/* ==========================================================================
   VITALS (hull / core / aegis / lives / xp)
   ========================================================================== */
.vitals__row { display: flex; align-items: center; gap: var(--gap); }

.vitals__avatar {
  flex: 0 0 auto;
  width: calc(var(--u) * 9);
  height: calc(var(--u) * 9);
  border-radius: var(--r-sm);
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 40% 30%, rgba(0, 240, 255, 0.30), rgba(4, 8, 18, 0.9));
  border: 1px solid var(--line-hi);
  box-shadow: var(--glow-cyan);
}
.vitals__sigil { width: 68%; height: 68%; stroke: var(--th-a); fill: rgba(0, 240, 255, 0.14); stroke-width: 1.6; }
.app[data-hurt="1"] .vitals__avatar { animation: pulse-danger 420ms var(--ease-out); }

.vitals__stack { flex: 1 1 auto; display: flex; flex-direction: column; gap: calc(var(--u) * 0.8); min-width: 0; }

.bar { position: relative; }
.bar__track {
  position: relative;
  height: calc(var(--u) * 2.6);
  border-radius: var(--r-pill);
  background: var(--bg-sunken);
  border: 1px solid rgba(255, 255, 255, 0.08);
  overflow: hidden;
}
.bar__fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: 100%;
  border-radius: inherit;
  transition: width 220ms var(--ease-out), background 300ms linear;
}
.bar__ghost {
  position: absolute;
  inset: 0 auto 0 0;
  width: 100%;
  border-radius: inherit;
  background: rgba(255, 255, 255, 0.35);
  transition: width 620ms 140ms var(--ease-out);
  z-index: -1;
}
.bar__shine {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(255,255,255,0.28), transparent 55%);
  pointer-events: none;
}
.bar__label {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 calc(var(--u) * 1.4);
  font-size: var(--fs-nano);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.95);
  color: #fff;
}
.bar--health .bar__fill { background: linear-gradient(90deg, #ff2d55, #ff7a3d 55%, #ffd24a); box-shadow: 0 0 14px rgba(255,60,90,0.55); }
.bar--health.is-critical .bar__fill { animation: crit-throb 620ms infinite; }
.bar--energy .bar__fill { background: linear-gradient(90deg, #1f6fff, #00f0ff 60%, #b6fbff); box-shadow: 0 0 14px rgba(0,240,255,0.5); }
.bar--shield .bar__fill { background: linear-gradient(90deg, #7cff5a, #d9ff6b); box-shadow: 0 0 14px rgba(124,255,90,0.5); }

.vitals__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--gap);
  margin-top: calc(var(--u) * 1.2);
}

.lives { display: flex; gap: calc(var(--u) * 0.7); }
.life {
  width: calc(var(--u) * 2.6);
  height: calc(var(--u) * 2.6);
  border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, #fff, var(--c-magenta) 60%, #6a0020);
  box-shadow: var(--glow-magenta);
}
.life.is-spent { background: rgba(255,255,255,0.09); box-shadow: none; }
.lives__inf { font-size: var(--fs-sm); line-height: 1; color: var(--c-lime); text-shadow: 0 0 8px var(--c-lime); margin-left: 2px; }
.life.is-lost { animation: life-burst 520ms var(--ease-out) forwards; }

.vitals__xp { flex: 1 1 auto; display: flex; align-items: center; gap: calc(var(--u)); min-width: 0; }
.vitals__xp span { font-size: var(--fs-nano); font-weight: 800; letter-spacing: .1em; color: var(--th-a); white-space: nowrap; }
.xpbar { flex: 1 1 auto; height: calc(var(--u) * 1.1); border-radius: var(--r-pill); background: var(--bg-sunken); overflow: hidden; }
.xpbar__fill { height: 100%; width: 0%; background: linear-gradient(90deg, var(--th-c), var(--th-a)); transition: width var(--t-slow) var(--ease-out); }

/* ==========================================================================
   POWERS PANEL — 5 primary (1-5) + 5 advanced (Numpad 1-5)
   ========================================================================== */
.powers { padding: calc(var(--pad) * 0.85); }
.powers__head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: calc(var(--u) * 1.2); }
.powers__title { font-size: var(--fs-nano); letter-spacing: 0.2em; font-weight: 800; color: var(--tx-dim); }
.powers__hint { font-size: var(--fs-nano); color: var(--th-a); font-family: var(--ff-mono); opacity: 0.9; }

.powers__grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: calc(var(--u) * 0.9); }

.powers__sep {
  display: flex; align-items: center; gap: var(--u);
  margin: calc(var(--u) * 1.2) 0 calc(var(--u) * 0.9);
  font-size: var(--fs-nano); letter-spacing: 0.16em; color: var(--tx-mute);
}
.powers__sep::before, .powers__sep::after { content: ""; flex: 1; height: 1px; background: var(--line); }

.power {
  position: relative;
  aspect-ratio: 1;
  border-radius: var(--r-sm);
  background: linear-gradient(165deg, rgba(40,60,100,0.6), rgba(6,10,20,0.85));
  border: 1px solid var(--line);
  display: grid;
  place-items: center;
  overflow: hidden;
  pointer-events: auto;
  cursor: pointer;
  transition: transform var(--t-fast) var(--ease-back), border-color var(--t-fast), box-shadow var(--t-fast);
}
.power:hover { transform: translateY(-2px) scale(1.05); border-color: var(--line-hi); }
.power:active { transform: scale(0.94); }

.power__ico { font-size: calc(var(--u) * 3.4); line-height: 1; filter: drop-shadow(0 0 6px currentColor); z-index: 2; }
.power__key {
  position: absolute; top: 1px; left: 3px;
  font-size: var(--fs-nano); font-family: var(--ff-mono); font-weight: 700;
  color: var(--tx-dim); z-index: 3;
}
.power__cd {
  position: absolute; inset: 0;
  background: conic-gradient(from -90deg, rgba(3,6,14,0.86) var(--cd, 0%), transparent 0);
  z-index: 2; pointer-events: none;
}
.power__timer {
  position: absolute; inset: auto 0 1px 0;
  text-align: center;
  font-size: var(--fs-nano);
  font-family: var(--ff-mono);
  color: #fff; text-shadow: 0 1px 3px #000; z-index: 4;
}
.power.is-ready { border-color: var(--th-a); box-shadow: 0 0 10px rgba(0,240,255,0.35), inset 0 0 12px rgba(0,240,255,0.16); }
.power.is-ready .power__ico { animation: ready-bob 2.2s var(--ease-io) infinite; }
.power.is-active { border-color: var(--c-lime); box-shadow: 0 0 16px rgba(124,255,90,0.6); }
.power.is-active::after { content:""; position:absolute; inset:0; background: radial-gradient(circle, rgba(124,255,90,0.28), transparent 70%); animation: power-live 1.1s infinite; }
.power.is-locked { filter: grayscale(1) brightness(0.55); }
.power.is-locked .power__ico::after { content: "🔒"; }
.power.just-fired { animation: power-pop 420ms var(--ease-back); }

/* ==========================================================================
   MISSION / OBJECTIVE (top-centre)
   ========================================================================== */
.mission { text-align: center; padding: calc(var(--pad) * 0.8) var(--pad); }
.mission__top { display: flex; gap: calc(var(--u)); justify-content: center; margin-bottom: calc(var(--u)); flex-wrap: wrap; }

.chip {
  font-size: var(--fs-nano);
  font-weight: 800;
  letter-spacing: 0.14em;
  padding: calc(var(--u) * 0.5) calc(var(--u) * 1.3);
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  background: var(--bg-sunken);
  color: var(--tx);
  white-space: nowrap;
}
.chip--mode  { color: var(--th-a); border-color: rgba(0,240,255,0.4); }
.chip--diff  { color: var(--c-amber); border-color: rgba(255,176,32,0.4); }
.chip--depth { color: var(--th-b); border-color: rgba(255,45,117,0.4); }

.mission__objective {
  font-size: var(--fs-sm);
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--tx-hi);
  text-shadow: 0 0 12px rgba(0, 240, 255, 0.35);
  min-height: 1.3em;
}
.mission__objective.is-updated { animation: obj-flash 700ms var(--ease-out); }

.mission__meters { display: flex; gap: calc(var(--u) * 1.6); justify-content: center; margin-top: calc(var(--u) * 0.9); flex-wrap: wrap; }
.omtr { display: flex; align-items: center; gap: calc(var(--u) * 0.6); font-size: var(--fs-xs); font-weight: 700; }
.omtr__ico { font-size: var(--fs-xs); filter: drop-shadow(0 0 5px currentColor); }
.omtr b { font-family: var(--ff-mono); color: var(--tx-hi); }
.omtr--timer b { color: var(--c-amber); }
.omtr--timer.is-urgent b { color: var(--c-red); animation: crit-throb 640ms infinite; }
.omtr.is-done b { color: var(--c-lime); }
.omtr.is-hidden { display: none; }

.mission__fail {
  display: flex; gap: calc(var(--u) * 0.8); justify-content: center; flex-wrap: wrap;
  margin-top: calc(var(--u) * 0.9);
  padding-top: calc(var(--u) * 0.8);
  border-top: 1px dashed rgba(255, 68, 51, 0.25);
}
.failchip {
  font-size: var(--fs-nano);
  letter-spacing: 0.08em;
  font-weight: 700;
  color: #ffb4ac;
  background: rgba(255, 68, 51, 0.12);
  border: 1px solid rgba(255, 68, 51, 0.34);
  border-radius: var(--r-xs);
  padding: 1px calc(var(--u));
  white-space: nowrap;
}
.failchip.is-triggered { background: var(--c-red); color: #fff; animation: crit-throb 400ms 3; }

/* ---------- Big transient banner ---------- */
.banner {
  margin-top: var(--gap);
  font-family: var(--ff-display);
  font-size: var(--fs-xl);
  font-weight: 900;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
  text-shadow: 0 0 22px var(--th-a), 0 0 60px var(--th-b), 0 4px 12px #000;
  opacity: 0;
  transform: scale(0.7);
  pointer-events: none;
  white-space: nowrap;
}
.banner.is-live { animation: banner-slam 1500ms var(--ease-out) forwards; }

/* ==========================================================================
   TOP-RIGHT — tools, score, minimap, weapon
   ========================================================================== */
.hud-tools { display: flex; gap: calc(var(--u)); pointer-events: auto; }

.iconbtn {
  width: calc(var(--u) * 6.4);
  height: calc(var(--u) * 6.4);
  display: grid; place-items: center;
  border-radius: var(--r-sm);
  background: var(--bg-panel);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  border: 1px solid var(--line);
  color: var(--tx);
  transition: all var(--t-fast) var(--ease-out);
  box-shadow: var(--shadow-btn);
}
.iconbtn svg { width: 55%; height: 55%; stroke-width: 2.2; }
.iconbtn:hover { color: var(--th-a); border-color: var(--line-hi); box-shadow: var(--glow-cyan); transform: translateY(-2px); }
.iconbtn:active { transform: scale(0.9); }
.iconbtn.is-off { color: var(--c-red); }
.iconbtn.is-off .wave { opacity: 0.18; }

.scorebox { padding: calc(var(--pad) * 0.7) var(--pad); }
.scorebox__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--gap); }
.scorebox__row span { font-size: var(--fs-nano); letter-spacing: 0.18em; color: var(--tx-dim); }
.scorebox__row b { font-family: var(--ff-mono); font-size: var(--fs-md); color: #fff; text-shadow: 0 0 10px var(--th-a); }
.scorebox__row--sub b { font-size: var(--fs-sm); color: var(--c-amber); text-shadow: 0 0 10px var(--c-amber); }
.scorebox__row b.is-bumped { animation: num-bump 300ms var(--ease-back); }
.combobar { height: calc(var(--u) * 0.8); border-radius: var(--r-pill); background: var(--bg-sunken); overflow: hidden; margin-top: calc(var(--u) * 0.6); }
.combobar__fill { height: 100%; width: 0; background: linear-gradient(90deg, var(--c-amber), var(--c-magenta)); transition: width 120ms linear; }

.minimap { padding: calc(var(--u) * 1.2); }
.minimap canvas { width: 100%; height: auto; border-radius: var(--r-sm); background: rgba(2,5,12,0.72); display: block; }
.minimap__legend {
  display: flex; align-items: center; gap: calc(var(--u) * 0.5);
  margin-top: calc(var(--u) * 0.8);
  font-size: var(--fs-nano); color: var(--tx-mute); letter-spacing: 0.06em;
}
.lg { width: calc(var(--u)*1.2); height: calc(var(--u)*1.2); border-radius: 50%; display: inline-block; margin-left: calc(var(--u)*0.6); }
.lg--you { background: var(--th-a); box-shadow: 0 0 6px var(--th-a); margin-left: 0; }
.lg--exit { background: var(--c-lime); box-shadow: 0 0 6px var(--c-lime); }
.lg--foe { background: var(--c-red); box-shadow: 0 0 6px var(--c-red); }

.weaponbox { padding: calc(var(--pad) * 0.7) var(--pad); }
.weaponbox__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--u); }
.weaponbox__name { font-size: var(--fs-micro); font-weight: 800; letter-spacing: 0.1em; color: var(--th-a); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.weaponbox__tier { font-size: var(--fs-nano); font-family: var(--ff-mono); color: var(--c-amber); }
.weaponbox__ammo { position: relative; display: flex; align-items: baseline; gap: 2px; margin-top: calc(var(--u) * 0.4); }
.weaponbox__ammo b { font-family: var(--ff-mono); font-size: var(--fs-lg); color: #fff; text-shadow: 0 0 12px var(--th-a); line-height: 1; }
.weaponbox__ammo span { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--tx-mute); }
.weaponbox__ammo.is-empty b { color: var(--c-red); animation: crit-throb 500ms infinite; }

.reload { position: absolute; left: 0; right: 0; bottom: calc(var(--u) * -0.9); height: calc(var(--u) * 0.7); background: var(--bg-sunken); border-radius: var(--r-pill); overflow: hidden; opacity: 0; transition: opacity var(--t-fast); }
.reload.is-live { opacity: 1; }
.reload__fill { height: 100%; width: 0; background: linear-gradient(90deg, var(--c-amber), var(--th-a)); }

.weaponbox__slots { display: flex; gap: calc(var(--u) * 0.5); margin-top: calc(var(--u) * 1.6); flex-wrap: wrap; }
.wslot {
  flex: 1 1 auto;
  min-width: calc(var(--u) * 3.4);
  height: calc(var(--u) * 3.4);
  border-radius: var(--r-xs);
  border: 1px solid var(--line);
  background: var(--bg-sunken);
  display: grid; place-items: center;
  font-size: var(--fs-nano);
  font-family: var(--ff-mono);
  color: var(--tx-mute);
  pointer-events: auto; cursor: pointer;
  transition: all var(--t-fast) var(--ease-out);
}
.wslot:hover { border-color: var(--line-hi); color: var(--tx-hi); }
.wslot.is-active { background: linear-gradient(180deg, rgba(0,240,255,0.28), rgba(0,240,255,0.05)); border-color: var(--th-a); color: #fff; box-shadow: var(--glow-cyan); }
.wslot.is-locked { opacity: 0.28; pointer-events: none; }

/* ==========================================================================
   CENTRE — crosshair + toasts
   ========================================================================== */
.crosshair { position: fixed; left: 0; top: 0; width: 44px; height: 44px; margin: -22px 0 0 -22px; z-index: 8; pointer-events: none; opacity: 0; transition: opacity var(--t-fast); }
.app[data-scene="play"] .crosshair { opacity: 1; }
.crosshair__ring {
  position: absolute; inset: 0; border-radius: 50%;
  border: 1.5px solid var(--th-a);
  box-shadow: 0 0 10px var(--th-a), inset 0 0 8px rgba(0,240,255,0.28);
  transform: scale(var(--ch-spread, 1));
  transition: transform 90ms var(--ease-out);
}
.crosshair__dot { position: absolute; left: 50%; top: 50%; width: 3px; height: 3px; margin: -1.5px 0 0 -1.5px; border-radius: 50%; background: #fff; box-shadow: 0 0 6px var(--th-a); }
.crosshair.is-charging .crosshair__ring { border-color: var(--c-amber); box-shadow: 0 0 14px var(--c-amber); }
.crosshair.is-blocked .crosshair__ring { border-color: var(--c-red); }

.toast-stack {
  position: absolute;
  top: 24%;
  left: 50%;
  transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: calc(var(--u));
  width: min(70vw, 560px);
  pointer-events: none;
}
.toast {
  display: flex; align-items: center; gap: var(--gap);
  padding: calc(var(--u) * 1.2) calc(var(--u) * 2.4);
  border-radius: var(--r-pill);
  background: var(--bg-panel-2);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  border: 1px solid var(--line-hi);
  box-shadow: var(--shadow-panel), 0 0 24px rgba(0,240,255,0.18);
  font-size: var(--fs-xs); font-weight: 700; letter-spacing: 0.06em;
  color: var(--tx-hi);
  animation: toast-in 340ms var(--ease-back), toast-out 340ms var(--ease-in) forwards;
  white-space: nowrap;
}
.toast__ico { font-size: var(--fs-md); filter: drop-shadow(0 0 8px currentColor); }
.toast--good  { border-color: rgba(124,255,90,0.55); box-shadow: var(--shadow-panel), 0 0 24px rgba(124,255,90,0.22); }
.toast--bad   { border-color: rgba(255,68,51,0.55);  box-shadow: var(--shadow-panel), 0 0 24px rgba(255,68,51,0.22); }
.toast--epic  { border-color: rgba(255,176,32,0.65); box-shadow: var(--shadow-panel), 0 0 30px rgba(255,176,32,0.32); }

/* ==========================================================================
   TOUCH CONTROLS — invisible until engaged; bottom stays visually clean
   ========================================================================== */
.touch-layer { position: absolute; inset: 0; z-index: 7; display: none; }
.app[data-input="touch"] .touch-layer { display: block; }

.touch-zone { position: absolute; top: 0; bottom: 0; width: 45%; touch-action: none; pointer-events: auto; }
.touch-zone--move { left: 0; }
.touch-zone--aim { right: 0; }

.stick { position: absolute; width: 132px; height: 132px; margin: -66px 0 0 -66px; opacity: 0; transition: opacity 160ms var(--ease-out); pointer-events: none; }
.stick.is-live { opacity: 1; }
.stick__base {
  position: absolute; inset: 0; border-radius: 50%;
  border: 2px solid rgba(0, 240, 255, 0.34);
  background: radial-gradient(circle, rgba(0,240,255,0.10), rgba(4,8,18,0.34) 70%);
  box-shadow: 0 0 22px rgba(0,240,255,0.24), inset 0 0 20px rgba(0,240,255,0.10);
}
.stick__knob {
  position: absolute; left: 50%; top: 50%;
  width: 54px; height: 54px; margin: -27px 0 0 -27px;
  border-radius: 50%;
  background: radial-gradient(circle at 36% 30%, #fff, var(--th-a) 55%, rgba(0,90,120,0.9));
  box-shadow: 0 0 20px var(--th-a), 0 6px 14px rgba(0,0,0,0.5);
  transform: translate(var(--kx, 0px), var(--ky, 0px));
}
.touch-zone--aim .stick__base { border-color: rgba(255,45,117,0.34); background: radial-gradient(circle, rgba(255,45,117,0.10), rgba(4,8,18,0.34) 70%); box-shadow: 0 0 22px rgba(255,45,117,0.24); }
.touch-zone--aim .stick__knob { background: radial-gradient(circle at 36% 30%, #fff, var(--th-b) 55%, rgba(120,0,40,0.9)); box-shadow: 0 0 20px var(--th-b), 0 6px 14px rgba(0,0,0,0.5); }

/* Vertical action rail hugs the right EDGE at thumb height. Deliberately sits
   below the top-right HUD cluster and above the bottom edge, so all three
   bottom corners stay clear. */
.touch-rail {
  position: absolute;
  right: calc(var(--safe-r) + 8px);
  top: 62%;
  transform: translateY(-50%);
  display: flex; flex-direction: column; gap: 10px;
  pointer-events: auto;
  z-index: 3;
}
.tbtn {
  width: 58px; height: 58px;
  border-radius: 50%;
  display: grid; place-items: center;
  background: var(--bg-panel-2);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1.5px solid var(--line);
  color: var(--tx-hi);
  font-size: 22px;
  box-shadow: 0 6px 18px rgba(0,0,0,0.45);
  transition: transform 90ms var(--ease-out), box-shadow 120ms;
  pointer-events: auto;
  touch-action: none;
}
.tbtn:active, .tbtn.is-down { transform: scale(0.88); box-shadow: 0 0 18px var(--th-a); border-color: var(--th-a); }
.tbtn--fire { width: 74px; height: 74px; font-size: 27px; border-color: rgba(255,45,117,0.6); box-shadow: 0 0 18px rgba(255,45,117,0.4); }
.tbtn small { position: absolute; bottom: 3px; font-size: 8px; letter-spacing: .08em; color: var(--tx-mute); }

/* ==========================================================================
   LOADING SCREEN
   ========================================================================== */
.loading {
  position: absolute; inset: 0; z-index: 60;
  display: grid; place-items: center;
  background: radial-gradient(120% 100% at 50% 40%, #0c1730 0%, #04060d 70%);
  transition: opacity var(--t-scene) var(--ease-out), visibility var(--t-scene);
}
.loading.is-done { opacity: 0; visibility: hidden; pointer-events: none; }
.loading__inner { width: min(560px, 78vw); text-align: center; }
.loading__logo { display: flex; flex-direction: column; line-height: 1; margin-bottom: calc(var(--u) * 6); }
.loading__alpha { font-family: var(--ff-display); font-size: var(--fs-md); letter-spacing: 0.62em; color: var(--c-cyan); text-shadow: var(--glow-cyan); }
.loading__rocket { font-family: var(--ff-display); font-size: var(--fs-xl); font-weight: 900; letter-spacing: 0.06em; color: #fff; text-shadow: 0 0 24px rgba(0,240,255,0.6), 0 0 70px rgba(255,45,117,0.35); margin: 4px 0; }
.loading__maze { font-family: var(--ff-display); font-size: var(--fs-lg); letter-spacing: 0.36em; color: var(--c-magenta); text-shadow: var(--glow-magenta); }
.loading__maze b { color: #fff; }

.loading__bar { height: 6px; border-radius: var(--r-pill); background: rgba(255,255,255,0.07); overflow: hidden; box-shadow: inset 0 0 10px rgba(0,0,0,0.6); }
.loading__fill { height: 100%; width: 0%; border-radius: inherit; background: linear-gradient(90deg, var(--c-cyan), var(--c-violet) 50%, var(--c-magenta)); box-shadow: 0 0 18px rgba(0,240,255,0.7); transition: width 220ms var(--ease-out); }
.loading__meta { display: flex; justify-content: space-between; margin-top: calc(var(--u) * 1.6); font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--tx-dim); }
.loading__tip { margin-top: calc(var(--u) * 5); font-size: var(--fs-xs); color: var(--tx-mute); min-height: 2.4em; max-width: 46ch; margin-inline: auto; }

/* ==========================================================================
   ORIENTATION GATE
   ========================================================================== */
.orientation-gate {
  position: absolute; inset: 0; z-index: 90;
  display: none; place-items: center; text-align: center;
  background: radial-gradient(120% 100% at 50% 40%, #0a1428 0%, #03050c 70%);
  padding: 6vw;
}
.orientation-gate__inner { max-width: 380px; }
.orientation-gate__phone {
  width: 92px; height: 150px; margin: 0 auto calc(var(--u) * 5);
  border: 3px solid var(--c-cyan); border-radius: 14px;
  box-shadow: var(--glow-cyan);
  display: grid; place-items: center;
  animation: rotate-hint 2.6s var(--ease-io) infinite;
}
.orientation-gate__arrow { font-size: 40px; color: var(--c-cyan); }
.orientation-gate h2 { font-family: var(--ff-display); font-size: clamp(18px, 5vw, 28px); letter-spacing: 0.16em; color: #fff; margin-bottom: 12px; text-shadow: var(--glow-cyan); }
.orientation-gate p { font-size: clamp(12px, 3.4vw, 15px); color: var(--tx); line-height: 1.6; }
.orientation-gate p b { color: var(--c-magenta); }
.orientation-gate .btn { margin-top: 22px; }

/* ==========================================================================
   DEBUG OVERLAY
   ========================================================================== */
.debug {
  position: absolute;
  left: calc(var(--safe-l) + 6px);
  bottom: calc(var(--safe-b) + 6px);
  z-index: 40;
  font-family: var(--ff-mono);
  font-size: 10px;
  line-height: 1.5;
  color: #9dffb0;
  background: rgba(0, 8, 4, 0.72);
  border: 1px solid rgba(120, 255, 160, 0.28);
  border-radius: var(--r-sm);
  padding: 6px 10px;
  pointer-events: none;
  white-space: pre;
  max-height: 46vh;
  overflow: hidden;
}
