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

   Tokens for both themes, then the game's own --ca-<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: 'Alfa Slab One', 'Outfit', system-ui, sans-serif;
  --w-radius: 20px;
  --w-bg-0: #07171a;
  --w-bg-1: #0c2226;
  --w-bg-2: #123035;
  --w-bg-3: #1a3f45;
  --w-edge-hi: rgba(255,255,255,.08);
  --w-edge-lo: rgba(0,0,0,.55);
  --w-ink: #eef7f5;
  --w-dim: #9bbcb8;
  --w-accent: #f0b64a;
  --w-accent-hi: #ffd98a;
  --w-accent-lo: #a8761a;
  --w-accent-ink: #1f1300;
  --w-accent-text: #f5c86a;
  --w-fill-tint: #ffffff;
  --w-good: #4be0a0;
  --w-good-text: #4be0a0;
  --w-bad: #ff6b6b;
  --w-bad-text: #ff8a8a;
  --w-warn: #f0b64a;
  --w-warn-text: #f0b64a;
  --w-blue: #5fb8ff;
  --w-violet: #b48cff;
  --w-line: rgba(240,182,74,.28);
  --w-line-soft: rgba(240,182,74,.13);
  --w-glow: rgba(240,182,74,.42);
  --w-glow-soft: rgba(240,182,74,.13);
  --w-drop: rgba(0,0,0,.55);
  --w-glow-scale: 1;
  --w-cell: #0f2b30;
  --w-cell-hi: #164046;
  --w-cell-lo: #081d21;
  --w-cell-br: #2a5a62;
  --w-cell-ink: #eef7f5;
  --w-hole: rgba(0,0,0,.4);
  --w-texture: repeating-linear-gradient(180deg, transparent 0 27px, rgba(240,182,74,.06) 27px 28px);
  --w-fill-a: #ffd98a;
  --w-fill-b: #f0b64a;
}

:root[data-theme="light"] body.gv-world{
  --w-bg-0: #e6efec;
  --w-bg-1: #f3f8f6;
  --w-bg-2: #fafcfb;
  --w-bg-3: #ffffff;
  --w-edge-hi: rgba(255,255,255,.9);
  --w-edge-lo: rgba(20,16,8,.14);
  --w-ink: #0c2226;
  --w-dim: #4c6a66;
  --w-accent: #b8801a;
  --w-accent-hi: #f2d38a;
  --w-accent-lo: #7a5008;
  --w-accent-ink: #1f1300;
  --w-accent-text: #7a5008;
  --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: #2a63d8;
  --w-violet: #7233c9;
  --w-line: rgba(184,128,26,.34);
  --w-line-soft: rgba(184,128,26,.15);
  --w-glow: rgba(184,128,26,.3);
  --w-glow-soft: rgba(184,128,26,.12);
  --w-drop: rgba(20,16,8,.16);
  --w-glow-scale: 0.5;
  --w-cell: #ffffff;
  --w-cell-hi: #ffffff;
  --w-cell-lo: #e7f0ee;
  --w-cell-br: #a9c4c0;
  --w-cell-ink: #0c2226;
  --w-hole: rgba(12,34,38,.07);
  --w-texture: repeating-linear-gradient(180deg, transparent 0 27px, rgba(26,79,84,.08) 27px 28px);
  --w-fill-a: #f2d38a;
  --w-fill-b: #b8801a;
}

/* ---- the game's own roles, in this world ---- */
:root body.gv-world{
  --cg-cell-bg: var(--w-cell);
  --cg-cell-br: var(--w-cell-br);
  --cg-cell-br2: color-mix(in srgb, var(--w-accent) 45%, transparent);
  --cg-cage: color-mix(in srgb, var(--w-accent) 72%, transparent);
  --cg-sel: color-mix(in srgb, var(--w-accent) 26%, transparent);
  --cg-sel-br: color-mix(in srgb, var(--w-accent) 70%, transparent);
  --cg-dup-bg: color-mix(in srgb, var(--w-bad) 18%, transparent);
  --cg-dup-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
  --cg-sat-bg: color-mix(in srgb, var(--w-good) 18%, transparent);
  --cg-sat-br: color-mix(in srgb, var(--w-good) 62%, transparent);
  --cg-bad-bg: color-mix(in srgb, var(--w-bad) 18%, transparent);
  --cg-bad-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
}
:root[data-theme="light"] body.gv-world{
  --cg-cell-bg: var(--w-cell);
  --cg-cell-br: var(--w-cell-br);
  --cg-cell-br2: color-mix(in srgb, var(--w-accent) 45%, transparent);
  --cg-cage: color-mix(in srgb, var(--w-accent) 72%, transparent);
  --cg-sel: color-mix(in srgb, var(--w-accent) 22%, transparent);
  --cg-sel-br: color-mix(in srgb, var(--w-accent) 70%, transparent);
  --cg-dup-bg: color-mix(in srgb, var(--w-bad) 16%, transparent);
  --cg-dup-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
  --cg-sat-bg: color-mix(in srgb, var(--w-good) 16%, transparent);
  --cg-sat-br: color-mix(in srgb, var(--w-good) 62%, transparent);
  --cg-bad-bg: color-mix(in srgb, var(--w-bad) 16%, transparent);
  --cg-bad-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
}

/* ---- the counting house ---- */


/* ---- carried over from the game's earlier skin, re-pointed ---- */
/* The selected cell is the one thing you are steering — make it unmistakable. */
:root body.gv-world .cgCell.sel{
  box-shadow:
    0 0 0 2px var(--w-accent) inset,
    0 0 18px color-mix(in srgb, var(--w-accent) calc(55% * var(--w-glow-scale)), transparent);
}
/* A repeat in a row, column or cage is an error you want to see instantly. */
:root body.gv-world .cgCell.dup{
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--w-bad) 75%, transparent) inset,
    0 0 16px color-mix(in srgb, var(--w-bad) calc(45% * var(--w-glow-scale)), transparent);
  animation: cgDup .4s ease;
}
@keyframes cgDup{ 0%,100%{transform:none} 30%{transform:translateX(-3px)} 65%{transform:translateX(3px)} }
:root body.gv-world .cgCell.cgood{
  box-shadow: 0 0 16px color-mix(in srgb, var(--w-good) calc(45% * var(--w-glow-scale)), transparent);
}
/* The keypad is the main control surface; give the keys weight. */
:root body.gv-world .cgKey{
  background: color-mix(in srgb, var(--w-ink) 6%, transparent);
  border: 1px solid var(--w-line);
  color: var(--w-ink);
  font-weight: 900;
  transition: transform .12s ease, box-shadow .2s ease, border-color .2s ease;
}
:root body.gv-world .cgKey:not([disabled]):hover{
  border-color: color-mix(in srgb, var(--w-accent) 60%, transparent);
  box-shadow: 0 0 18px color-mix(in srgb, var(--w-accent) calc(28% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .cgKey:not([disabled]):active{ transform: scale(.93); }
