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

   Tokens for both themes, then the game's own --ha-<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: 'Baloo 2', 'Outfit', system-ui, sans-serif;
  --w-radius: 20px;
  --w-bg-0: #051a2a;
  --w-bg-1: #082638;
  --w-bg-2: #0c3448;
  --w-bg-3: #12455c;
  --w-edge-hi: rgba(255,255,255,.08);
  --w-edge-lo: rgba(0,0,0,.55);
  --w-ink: #eaf6ff;
  --w-dim: #93b9cf;
  --w-accent: #ffc857;
  --w-accent-hi: #ffe6a3;
  --w-accent-lo: #b8861a;
  --w-accent-ink: #1f1400;
  --w-accent-text: #ffd27a;
  --w-fill-tint: #ffffff;
  --w-good: #52e29a;
  --w-good-text: #52e29a;
  --w-bad: #ff6b6b;
  --w-bad-text: #ff8f8f;
  --w-warn: #ffc857;
  --w-warn-text: #ffc857;
  --w-blue: #4fc3ff;
  --w-violet: #b48cff;
  --w-line: rgba(79,195,255,.30);
  --w-line-soft: rgba(79,195,255,.13);
  --w-glow: rgba(79,195,255,.45);
  --w-glow-soft: rgba(79,195,255,.14);
  --w-drop: rgba(0,0,0,.55);
  --w-glow-scale: 1;
  --w-cell: #e9d5a8;
  --w-cell-hi: #f7e8c4;
  --w-cell-lo: #c9ad78;
  --w-cell-br: #a88a4e;
  --w-cell-ink: #2a1c0a;
  --w-hole: rgba(0,0,0,.4);
  --w-texture: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='24' viewBox='0 0 80 24'%3E%3Cpath d='M0 12 Q10 4 20 12 T40 12 T60 12 T80 12' fill='none' stroke='rgba(79,195,255,.10)' stroke-width='1.5'/%3E%3C/svg%3E") 0 0 / 80px 24px;
  --w-fill-a: #ffe6a3;
  --w-fill-b: #ffc857;
}

:root[data-theme="light"] body.gv-world{
  --w-bg-0: #cfe7f2;
  --w-bg-1: #e2f1f8;
  --w-bg-2: #eff8fc;
  --w-bg-3: #ffffff;
  --w-edge-hi: rgba(255,255,255,.9);
  --w-edge-lo: rgba(20,16,8,.14);
  --w-ink: #0b2a3a;
  --w-dim: #3d5f70;
  --w-accent: #d8961c;
  --w-accent-hi: #ffd27a;
  --w-accent-lo: #8a5a00;
  --w-accent-ink: #1f1400;
  --w-accent-text: #8a5a00;
  --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(27,116,200,.32);
  --w-line-soft: rgba(27,116,200,.14);
  --w-glow: rgba(27,116,200,.3);
  --w-glow-soft: rgba(27,116,200,.12);
  --w-drop: rgba(20,16,8,.16);
  --w-glow-scale: 0.5;
  --w-cell: #f6e9c9;
  --w-cell-hi: #fff6de;
  --w-cell-lo: #e2cf9e;
  --w-cell-br: #b8975a;
  --w-cell-ink: #2a1c0a;
  --w-hole: rgba(11,42,58,.07);
  --w-texture: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='24' viewBox='0 0 80 24'%3E%3Cpath d='M0 12 Q10 4 20 12 T40 12 T60 12 T80 12' fill='none' stroke='rgba(27,116,200,.07)' stroke-width='1.5'/%3E%3C/svg%3E") 0 0 / 80px 24px;
  --w-fill-a: #ffd27a;
  --w-fill-b: #d8961c;
}

/* ---- the game's own roles, in this world ---- */
:root body.gv-world{
  --hg-line: var(--w-accent);
  --hg-bad-bg: color-mix(in srgb, var(--w-bad) 18%, transparent);
  --hg-bad-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
}
:root[data-theme="light"] body.gv-world{
  --hg-line: var(--w-accent);
  --hg-bad-bg: color-mix(in srgb, var(--w-bad) 16%, transparent);
  --hg-bad-br: color-mix(in srgb, var(--w-bad) 58%, transparent);
}

/* ---- the archipelago ---- */
/* Islands are round rocks in the water. */
:root body.gv-world .gvArcCell{ border-radius: 50%; }

/* ---- carried over from the game's earlier skin, re-pointed ---- */
/* Islands carry their required bridge count; a satisfied one should read as
   banked, an over-subscribed one as a problem. Bridges are .hgLine. */
:root body.gv-world .hgIsland{
  font-weight: 900;
  color: var(--w-ink);
  transition: box-shadow .22s ease, border-color .2s ease, transform .16s cubic-bezier(.34,1.56,.64,1);
}
:root body.gv-world .hgIsland.done{
  border-color: color-mix(in srgb, var(--w-good) 62%, transparent);
  box-shadow: 0 0 18px color-mix(in srgb, var(--w-good) calc(45% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .hgIsland.sel{
  border-color: var(--w-accent);
  box-shadow:
    0 0 0 2px var(--w-accent) inset,
    0 0 0 4px color-mix(in srgb, var(--w-accent) 45%, transparent),
    0 0 24px color-mix(in srgb, var(--w-accent) calc(70% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .hgIsland.bad,
:root body.gv-world .hgIsland.warn{
  box-shadow: 0 0 16px color-mix(in srgb, var(--w-bad) calc(45% * var(--w-glow-scale)), transparent);
}
/* A placed bridge is a lit cable. */
:root body.gv-world .hgLine{
  background: var(--w-accent);
  box-shadow:
    0 0 8px color-mix(in srgb, var(--w-accent) calc(80% * var(--w-glow-scale)), transparent),
    0 0 18px color-mix(in srgb, var(--w-accent) calc(40% * var(--w-glow-scale)), transparent);
}
:root body.gv-world .hgDot{ background: var(--w-dim); }
:root body.gv-world .hgNum{ color: var(--w-ink); font-weight: 900; }
:root body.gv-world .hgBoard.badFlash{ animation: hgBad .4s ease; }
@keyframes hgBad{ 0%,100%{filter:none} 45%{filter:brightness(1.5) saturate(1.4)} }
