/* ============================================================
   switchglyph — the control room. GENERATED by tools/gen-worlds.py; edit the spec
   there, not this file.

   Tokens for both themes, then the game's own --sw-<role> tokens
   re-pointed at them. Shared scaffolding (card, board, cells, buttons,
   readouts) is in lib/gv-world.css and reads these same tokens.
   ============================================================ */

:root body.gv-world{
  --w-font: 'Audiowide', 'Outfit', system-ui, sans-serif;
  --w-radius: 20px;
  --w-bg-0: #0b0d10;
  --w-bg-1: #14181d;
  --w-bg-2: #1c2229;
  --w-bg-3: #262d36;
  --w-edge-hi: rgba(255,255,255,.08);
  --w-edge-lo: rgba(0,0,0,.55);
  --w-ink: #eef3f8;
  --w-dim: #9aa8b6;
  --w-accent: #2de2a3;
  --w-accent-hi: #a6ffd9;
  --w-accent-lo: #128a5f;
  --w-accent-ink: #03150e;
  --w-accent-text: #4de8b2;
  --w-fill-tint: #ffffff;
  --w-good: #2de2a3;
  --w-good-text: #2de2a3;
  --w-bad: #ff4d5e;
  --w-bad-text: #ff8590;
  --w-warn: #ffb020;
  --w-warn-text: #ffb020;
  --w-blue: #4fc3ff;
  --w-violet: #b07cff;
  --w-line: rgba(45,226,163,.30);
  --w-line-soft: rgba(45,226,163,.13);
  --w-glow: rgba(45,226,163,.45);
  --w-glow-soft: rgba(45,226,163,.13);
  --w-drop: rgba(0,0,0,.55);
  --w-glow-scale: 1;
  --w-cell: #1e252d;
  --w-cell-hi: #2a333d;
  --w-cell-lo: #12171c;
  --w-cell-br: #3f4b58;
  --w-cell-ink: #eef3f8;
  --w-hole: rgba(0,0,0,.5);
  --w-texture: repeating-linear-gradient(90deg, rgba(255,255,255,.03) 0 2px, transparent 2px 9px);
  --w-fill-a: #a6ffd9;
  --w-fill-b: #2de2a3;
}

:root[data-theme="light"] body.gv-world{
  --w-bg-0: #dfe4e9;
  --w-bg-1: #edf1f4;
  --w-bg-2: #f6f8fa;
  --w-bg-3: #ffffff;
  --w-edge-hi: rgba(255,255,255,.9);
  --w-edge-lo: rgba(20,16,8,.14);
  --w-ink: #14181d;
  --w-dim: #56636f;
  --w-accent: #128a5f;
  --w-accent-hi: #8ff0c8;
  --w-accent-lo: #0a5c3e;
  --w-accent-ink: #ffffff;
  --w-accent-text: #0d6b48;
  --w-fill-tint: #0b0f14;
  --w-good: #1a9d54;
  --w-good-text: #0f6b3a;
  --w-bad: #c8402e;
  --w-bad-text: #a3301f;
  --w-warn: #c98a10;
  --w-warn-text: #7a5008;
  --w-blue: #1b74c8;
  --w-violet: #7233c9;
  --w-line: rgba(18,138,95,.36);
  --w-line-soft: rgba(18,138,95,.16);
  --w-glow: rgba(18,138,95,.3);
  --w-glow-soft: rgba(18,138,95,.12);
  --w-drop: rgba(20,16,8,.16);
  --w-glow-scale: 0.5;
  --w-cell: #ffffff;
  --w-cell-hi: #ffffff;
  --w-cell-lo: #e6ebef;
  --w-cell-br: #aeb9c4;
  --w-cell-ink: #14181d;
  --w-hole: rgba(20,24,29,.07);
  --w-texture: repeating-linear-gradient(90deg, rgba(20,24,29,.04) 0 2px, transparent 2px 9px);
  --w-fill-a: #0a5c3e;
  --w-fill-b: #0a5c3e;
}

/* ---- the game's own roles, in this world ---- */
:root body.gv-world{
  --sw-board-bg: linear-gradient(180deg, var(--w-bg-2), var(--w-bg-1));
  --sw-cell-bg: var(--w-cell);
  --sw-cell-br: var(--w-cell-br);
  --sw-cell-br2: color-mix(in srgb, var(--w-accent) 45%, transparent);
  --sw-press: color-mix(in srgb, var(--w-accent) 18%, transparent);
  --sw-good: color-mix(in srgb, var(--w-good) 62%, transparent);
  --sw-good2: color-mix(in srgb, var(--w-good) 20%, transparent);
  --sw-bad2: color-mix(in srgb, var(--w-bad) 18%, transparent);
  --sw-chip-bg: color-mix(in srgb, var(--w-ink) 5%, transparent);
  --sw-chip-glowA: color-mix(in srgb, var(--w-accent) 30%, transparent);
  --sw-chip-glowB: color-mix(in srgb, var(--w-violet) 26%, transparent);
  --sw-meter-bg: color-mix(in srgb, var(--w-ink) 8%, transparent);
  --sw-meter-fillB: color-mix(in srgb, var(--w-violet) 70%, transparent);
}
:root[data-theme="light"] body.gv-world{
  --sw-board-bg: linear-gradient(180deg, var(--w-bg-2), var(--w-bg-1));
  --sw-cell-bg: var(--w-cell);
  --sw-cell-br: var(--w-cell-br);
  --sw-cell-br2: color-mix(in srgb, var(--w-accent) 45%, transparent);
  --sw-press: color-mix(in srgb, var(--w-accent) 16%, transparent);
  --sw-good: color-mix(in srgb, var(--w-good) 62%, transparent);
  --sw-good2: color-mix(in srgb, var(--w-good) 18%, transparent);
  --sw-bad2: color-mix(in srgb, var(--w-bad) 16%, transparent);
  --sw-chip-bg: color-mix(in srgb, var(--w-ink) 5%, transparent);
  --sw-chip-glowA: color-mix(in srgb, var(--w-accent) 26%, transparent);
  --sw-chip-glowB: color-mix(in srgb, var(--w-violet) 22%, transparent);
  --sw-meter-bg: color-mix(in srgb, var(--w-ink) 8%, transparent);
  --sw-meter-fillB: color-mix(in srgb, var(--w-violet) 70%, transparent);
}

/* ---- the control room ---- */
:root body.gv-world .gvArcCell{ border-radius: 10px; }

/* ---- carried over from the game's earlier skin, re-pointed ---- */
/* The rule can change mid-round, so the moment of a correct tap has to be
   loud enough to confirm you read the new rule right. */
:root body.gv-world .swCell.good,
:root body.gv-world .swCell.hit{
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--w-good) 88%, var(--w-fill-tint)), var(--w-good));
  color: var(--w-accent-ink);
  border-color: color-mix(in srgb, var(--w-good) 60%, transparent);
  box-shadow: 0 0 18px color-mix(in srgb, var(--w-good) calc(55% * var(--w-glow-scale)), transparent);
  animation: swHit .32s cubic-bezier(.34,1.56,.64,1);
}
@keyframes swHit{ 0%{transform:scale(.72);filter:brightness(2)} 60%{transform:scale(1.13)} 100%{transform:scale(1)} }
:root body.gv-world .swCell.bad{
  border-color: color-mix(in srgb, var(--w-bad) 60%, transparent);
  box-shadow: 0 0 14px color-mix(in srgb, var(--w-bad) calc(45% * var(--w-glow-scale)), transparent);
  animation: swMiss .36s ease;
}
@keyframes swMiss{ 0%,100%{transform:none} 30%{transform:translateX(-4px)} 70%{transform:translateX(4px)} }
/* The rule chip is the thing you must re-read; make it the brightest label. */
:root body.gv-world .swRuleChip{
  border: 1px solid color-mix(in srgb, var(--w-accent) 55%, transparent);
  background: var(--nx-badge-bg);
  color: var(--w-ink);
  font-weight: 900;
  box-shadow: 0 0 20px color-mix(in srgb, var(--w-accent) calc(30% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .swMeterFill{
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--w-accent) 78%, var(--w-fill-tint)), var(--w-accent));
  box-shadow: 0 0 16px color-mix(in srgb, var(--w-accent) calc(70% * var(--w-glow-scale)), transparent);
}
