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

   Tokens for both themes, then the game's own --fo-<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: 'Kanit', 'Outfit', system-ui, sans-serif;
  --w-radius: 20px;
  --w-bg-0: #0c0608;
  --w-bg-1: #160a0e;
  --w-bg-2: #221016;
  --w-bg-3: #2e1620;
  --w-edge-hi: rgba(255,255,255,.08);
  --w-edge-lo: rgba(0,0,0,.55);
  --w-ink: #fbf1f0;
  --w-dim: #c0a3a8;
  --w-accent: #ff3b5c;
  --w-accent-hi: #ffa3b3;
  --w-accent-lo: #a11a34;
  --w-accent-ink: #ffffff;
  --w-accent-text: #ff6b85;
  --w-fill-tint: #ffffff;
  --w-good: #52e29a;
  --w-good-text: #52e29a;
  --w-bad: #ff3b5c;
  --w-bad-text: #ff8aa0;
  --w-warn: #ffcf5a;
  --w-warn-text: #ffcf5a;
  --w-blue: #5aa8ff;
  --w-violet: #c08bff;
  --w-line: rgba(255,59,92,.30);
  --w-line-soft: rgba(255,59,92,.13);
  --w-glow: rgba(255,59,92,.45);
  --w-glow-soft: rgba(255,59,92,.14);
  --w-drop: rgba(0,0,0,.55);
  --w-glow-scale: 1;
  --w-cell: #1e1016;
  --w-cell-hi: #2c1820;
  --w-cell-lo: #120810;
  --w-cell-br: #5a2a3a;
  --w-cell-ink: #fbf1f0;
  --w-hole: rgba(0,0,0,.45);
  --w-texture: radial-gradient(60% 40% at 30% 20%, rgba(255,59,92,.06), transparent 70%), radial-gradient(50% 35% at 75% 80%, rgba(255,59,92,.06), transparent 70%);
  --w-fill-a: #a11a34;
  --w-fill-b: #a11a34;
}

:root[data-theme="light"] body.gv-world{
  --w-bg-0: #f1e3e0;
  --w-bg-1: #f9efec;
  --w-bg-2: #fdf6f4;
  --w-bg-3: #ffffff;
  --w-edge-hi: rgba(255,255,255,.9);
  --w-edge-lo: rgba(20,16,8,.14);
  --w-ink: #2a1016;
  --w-dim: #6e4d55;
  --w-accent: #d0203f;
  --w-accent-hi: #ff9db0;
  --w-accent-lo: #8e1329;
  --w-accent-ink: #ffffff;
  --w-accent-text: #a3152f;
  --w-fill-tint: #0b0f14;
  --w-good: #1a9d54;
  --w-good-text: #0f6b3a;
  --w-bad: #d0203f;
  --w-bad-text: #a3152f;
  --w-warn: #c98a10;
  --w-warn-text: #7a5008;
  --w-blue: #2a63d8;
  --w-violet: #7233c9;
  --w-line: rgba(208,32,63,.32);
  --w-line-soft: rgba(208,32,63,.14);
  --w-glow: rgba(208,32,63,.3);
  --w-glow-soft: rgba(208,32,63,.12);
  --w-drop: rgba(20,16,8,.16);
  --w-glow-scale: 0.5;
  --w-cell: #ffffff;
  --w-cell-hi: #ffffff;
  --w-cell-lo: #f3e7e5;
  --w-cell-br: #d9b9bf;
  --w-cell-ink: #2a1016;
  --w-hole: rgba(80,20,30,.07);
  --w-texture: radial-gradient(60% 40% at 30% 20%, rgba(208,32,63,.06), transparent 70%), radial-gradient(50% 35% at 75% 80%, rgba(208,32,63,.06), transparent 70%);
  --w-fill-a: #d0203f;
  --w-fill-b: #8e1329;
}

/* ---- the game's own roles, in this world ---- */
:root body.gv-world{
  --fg-good-bg: color-mix(in srgb, var(--w-good) 20%, transparent);
  --fg-good-br: color-mix(in srgb, var(--w-good) 62%, transparent);
  --fg-tile-bg: var(--w-cell);
  --fg-tile-br: var(--w-cell-br);
  --fg-tile-hover: color-mix(in srgb, var(--w-accent) 12%, transparent);
  --fg-ring: color-mix(in srgb, var(--w-accent) 62%, transparent);
  --fgHelpBg: color-mix(in srgb, var(--w-ink) 4%, transparent);
}
:root[data-theme="light"] body.gv-world{
  --fg-good-bg: color-mix(in srgb, var(--w-good) 18%, transparent);
  --fg-good-br: color-mix(in srgb, var(--w-good) 62%, transparent);
  --fg-tile-bg: var(--w-cell);
  --fg-tile-br: var(--w-cell-br);
  --fg-tile-hover: color-mix(in srgb, var(--w-accent) 12%, transparent);
  --fg-ring: color-mix(in srgb, var(--w-accent) 62%, transparent);
  --fgHelpBg: color-mix(in srgb, var(--w-ink) 4%, transparent);
}

/* ---- the dojo ---- */
:root body.gv-world .gvArcCell{ border-radius: 50%; }

/* ---- carried over from the game's earlier skin, re-pointed ---- */
/* Find-the-next-number under time pressure: the tile you just cleared should
   confirm instantly, and the board should read as scannable, not busy. */
:root body.gv-world .fgTile{
  font-weight: 900;
  color: var(--w-ink);
}
:root body.gv-world .fgTile.correct{
  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 16px color-mix(in srgb, var(--w-good) calc(50% * var(--w-glow-scale)), transparent);
  animation: fgGot .3s cubic-bezier(.34,1.56,.64,1);
}
@keyframes fgGot{ 0%{transform:scale(.75);filter:brightness(2)} 100%{transform:scale(1)} }
:root body.gv-world .fgTile.next{
  box-shadow:
    0 0 0 2px var(--w-accent) inset,
    0 0 18px color-mix(in srgb, var(--w-accent) calc(50% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .fgGrid.shake{ animation: fgShake .4s ease; }
@keyframes fgShake{ 0%,100%{transform:none} 25%{transform:translateX(-6px)} 60%{transform:translateX(6px)} }
