/* 2055 Anno Dominion — generated from tokens.json */
:root, [data-theme="night"] {
  --ground: #04070d;
  --surface: #0e1013;
  --ink: #f2f6fb;
  --ink-2: #c8ccd2;
  --ink-muted: #93a1b3;
  --play-ink: #0f1640;
  --disabled: #1a2230;
  --map-sea: #0b1440; /* sea darker, neutral land lighter (Douwe 2026-10-26, playtest: sea and land looked alike; CIEDE2000 7 → 17) */
  --neutral: #3a4889;
  --map-candidate: #4557a6;
  --map-grid: #142158; /* one step quieter on the darker sea (Douwe 2026-10-26) */
  --globe-ocean: #0a1424;
  --globe-atmosphere: #4aa3ff;
  --dot-neutral: #50648a;
  --radiation: #a8ff3e; /* radioactive land (Douwe 2026-10-18): glowing green stripes over the owner's colour, like a revolt's red stripes */
  --radiation-2: #f2ff3a; /* …that pulse to yellow and back, like neon */
  --dot-news: #eaf2ff;
  --bar: #f4f5f7;
  --bar-sub: #e4e4df;
  --bar-dark: #1d2128;
  --on-bar: #0a0a0f;
  --on-bar-muted: #4a4f56;
  --on-bar-sub: #22252a;
  --lln-red: #e10600;
  --unrest-1: #fff3a0;    /* unrest ring around the army number, a fifth per point; pale yellow, yellow, red, deep red — no orange: player 1 is orange (Douwe 2026-10-26) */
  --unrest-2: #ffd21f;
  --unrest-3: #ee3b2b;
  --unrest-4: #c4001a;
  --unrest-5: #c4001a;    /* full ring: the country revolts at the end of the year */
  --calm: #6ff03f;        /* Support on the home front (was the unrest-1 lime) */
  --confirm: var(--card-military); /* the button that commits a choice (Keep this goal, Move): army green, never a player colour (Douwe 2026-10-27: the lime sat too close to player 4) */
  --on-confirm: var(--ink);
  --market-up: #2fd170;   /* ticker markets: up (on the dark market box) */
  --market-down: #ff4d47; /* ticker markets: down (the LLN red, lifted to read on dark) */
  --on-lln-red: #ffffff;
  --lln-ticker: var(--surface);
  --lln-grey: #3a4352;
  --player-1: #ff8a3d; /* orange again (Douwe 2026-10-26): silver read as a greyed-out button; the unrest scale lost its orange instead */
  --player-2: #36b3ff;
  --player-3: #b66dff;
  --player-4: #4fd17a;
  --player-5: #ff5fa2;
  --player-6: #b5835a; /* brown (Douwe 2026-10-17): gold is the coins' colour only */
  --on-player-1: #1a0d00;
  --on-player-2: #04121f;
  --on-player-3: #04070d;
  --on-player-4: #04170b;
  --on-player-5: #04070d;
  --on-player-6: #140a03;
  --you: var(--player-1);
  --on-you: var(--on-player-1);
  --card-military: #3d6b2e;
  --card-economy: #e3a514;
  --card-intelligence: #1e6fd9;
  --on-card: #ffffff;
  --card-paper: var(--bar);
  --goal-paper: #f3ecdc;
  --goal-ink: #1d1a14;
  --goal-muted: #6b6250;
  --goal-accent: #6b4a1e;
  --goal-line: #d9cfb8;
  --goal-met: #2f6b2a;
  --unrest: #c6f432;
  --unrest-5: var(--unrest-4);
  --pip-empty: #36406e;
  --coin: #ffd166;
  --coin-edge: #b8860b;
  --value: #efe7d6;  /* a country's value: the land tile (Douwe 2026-10-27: the coin is cash only) */
  --value-edge: #7a6a4f;
  --coin-sea: #2f6bff;  /* edge of a strait's trade coin: water; deeper than player 2's sky blue (Douwe 2026-10-26) */
  --target: #ffffff;
  --glow-lit: 0 0 16px 2px #eaf2ffcc;
  --shadow-target: 0 0 0 8px #ffffff;
  --shadow-ring: 0 0 0 4px #04070d, 0 0 0 9px #f2f6fb;
  --focus-ring: 0 0 0 3px #0f1640, 0 0 0 6px #f2f6fb;
}
:root {
  --space-1: 4px;
  --space-2: 6px;
  --space-3: 8px;
  --space-4: 10px;
  --space-5: 14px;
  --space-6: 16px;
  --space-7: 18px;
  --space-8: 22px;
  --space-9: 28px;
  --space-10: 36px;
  --space-11: 56px;
  --space-12: 90px;
  --radius-xs: 2px;
  --radius-sm: 3px;
  --radius-md: 4px;
  --radius-lg: 8px;
  --radius-full: 999px;
  --touch-min: 44px;
  --button-height: 56px;
  --button-alt-height: 60px;
  --row-height: 52px;
  --tabbar-height: 68px;
  --phone-header: 64px;
  --phone-width: 390px;
  --tv-safe-x: 90px;
  --tv-safe-y: 56px;
  --tv-ticker: 76px;
  --tv-slot-bottom: 104px;
  --lln-tab-height: 56px;
  --lln-bar-height: 120px;
  --lln-sub-height: 58px;
  --tv-map-height: 1004px;
  --die-chip: 62px;
  --pin-square: 72px;
  --tv-dot: 54px;
  --tv-die: 84px;
  --logo-tv: 132px;
  --attack-ring: 8px;
  --attack-edge: 6px;
  --clock-stripe: 10px;
  --opacity-idle: 0.5;
  --opacity-dot: 0.55;
  --opacity-out: 0.4;
  --opacity-faded: 0.25;
  --dur-state: 250ms;
  --dur-reveal: 400ms;
  --dur-ring: 350ms;
  --dur-wipe: 350ms;
  --dur-dive: 2000ms;
  --dur-idle: 4000ms;
  --attack-phone-scale: 0.5;
  --font-display: 'Boldonse 2055', Boldonse, 'Bricolage Grotesque', sans-serif;
  --font-body: 'Bricolage Grotesque', system-ui, sans-serif;
}
/* type: one custom property per style, the class reads it; a screen uses the class or font:var(--type-…) (2026-10-16) */
:root {
  /* display text that can wrap gets 1.3 leading: Boldonse capitals are 1.19 em tall, so at 1.2 two lines touch (Douwe 2026-10-17) */
  --type-tv-moment: 400 200px/1.3 var(--font-display);
  --type-tv-headline: 400 90px/1.3 var(--font-display);
  --type-tv-title: 400 96px/1.3 var(--font-display);
  --type-tv-year: 400 34px/1.1 var(--font-display); /* the year on the square doomsday clock */
  --type-tv-clock: 400 70px/1 var(--font-display); /* the seconds to midnight on the clock */
  --type-tv-pin: 400 120px/1.2 var(--font-display);
  --type-tv-pin-square: 400 48px/1.2 var(--font-display); /* map pins compute their digits from --pin (see the ratios below) */
  --type-tv-value: 400 54px/1 var(--font-display);
  --type-tv-score: 400 42px/1 var(--font-display); /* numbers are display */
  --type-tv-name: 800 36px/1.1 var(--font-body);
  --type-tv-label: 800 34px/1 var(--font-body);
  --type-tv-kicker: 700 32px/1.2 var(--font-body);
  --type-tv-caption: 600 32px/1.3 var(--font-body);
  --type-lln-stinger: 400 176px/1.3 var(--font-display);
  --type-lln-headline: 400 42px/1.3 var(--font-display); /* a quarter smaller (Douwe 2026-10-14) */
  --type-lln-logo: 400 40px/1.2 var(--font-display);
  --type-lln-tab: 800 32px/1 var(--font-body); /* the TV floor: no 26 px override (Douwe 2026-10-16) */
  --type-lln-sub: 600 32px/1.3 var(--font-body);
  --type-lln-die: 400 36px/1 var(--font-display); /* = die-chip 62 x die-digit */
  --type-lln-ticker: 700 32px/1 var(--font-body);
  --type-lln-clock: 700 32px/1 var(--font-body);
  --type-ph-moment: 400 56px/1.3 var(--font-display); /* the phone scale, calmer (Douwe 2026-10-27: "the type is too big, people are not blind"): real steps between levels */
  --type-ph-result: 400 52px/1.3 var(--font-display);
  --type-ph-headline: 400 36px/1.3 var(--font-display); /* a result in one line: "You win", "2nd", "Midnight" (Douwe 2026-10-15: the 84 px moment was too big) */
  --type-ph-title: 400 22px/1.3 var(--font-display);
  --type-ph-number: 400 24px/1.3 var(--font-display);
  --type-ph-name: 400 20px/1.3 var(--font-display);
  --type-ph-button: 400 18px/1.3 var(--font-display);
  --type-ph-row: 700 17px/1.2 var(--font-body);
  --type-ph-status: 700 16px/1.25 var(--font-body);
  --type-ph-body: 500 16px/1.4 var(--font-body);
  --type-ph-small: 600 14px/1.3 var(--font-body);
  --type-ph-label: 700 14px/1.2 var(--font-body);
  --type-ph-tab: 700 14px/1 var(--font-body);
  /* ratios: digits inside a drawn object scale with it */
  --pin-digit: .5625;       /* square army pin: digit = pin x this (map pins: --pin in globe.js; phone fight pin) */
  --pin-digit-round: .4375; /* round army pin, also the army number in a circle (home front, rules) */
  --digit-2: .8;            /* a 2-digit number: x this; 3 digits: x --digit-3 (rows, pins, circles) */
  --digit-3: .6;
  --die-digit: .58;         /* die chip: digit = chip x this (TV, phone, rules) */
  /* cards: three sizes, in em of the card's base (width / 16); --card-read grows only the reading sizes, never the titles (Douwe 2026-10-16) */
  --card-read: 1;
  --card-title: 1.5em;
  --card-text: calc(1em * var(--card-read));
  --card-small: calc(.9em * var(--card-read));
}
.tv-moment { font: var(--type-tv-moment); }
.tv-headline { font: var(--type-tv-headline); }
.tv-title { font: var(--type-tv-title); }
.tv-year { font: var(--type-tv-year); }
.tv-clock { font: var(--type-tv-clock); }
.tv-pin { font: var(--type-tv-pin); }
.tv-pin-square { font: var(--type-tv-pin-square); }
.tv-value { font: var(--type-tv-value); }
.tv-score { font: var(--type-tv-score); }
.tv-name { font: var(--type-tv-name); }
.tv-label { font: var(--type-tv-label); }
.tv-kicker { font: var(--type-tv-kicker); }
.tv-caption { font: var(--type-tv-caption); }
.lln-stinger { font: var(--type-lln-stinger); }
.lln-headline { font: var(--type-lln-headline); }
.lln-logo { font: var(--type-lln-logo); }
.lln-tab { font: var(--type-lln-tab); }
.lln-sub { font: var(--type-lln-sub); }
.lln-die { font: var(--type-lln-die); }
.lln-ticker { font: var(--type-lln-ticker); }
.lln-clock { font: var(--type-lln-clock); }
.ph-moment { font: var(--type-ph-moment); }
.ph-result { font: var(--type-ph-result); }
.ph-headline { font: var(--type-ph-headline); }
.ph-title { font: var(--type-ph-title); }
.ph-number { font: var(--type-ph-number); }
.ph-name { font: var(--type-ph-name); }
.ph-button { font: var(--type-ph-button); }
.ph-row { font: var(--type-ph-row); }
.ph-status { font: var(--type-ph-status); }
.ph-body { font: var(--type-ph-body); }
.ph-small { font: var(--type-ph-small); }
.ph-label { font: var(--type-ph-label); }
.ph-tab { font: var(--type-ph-tab); }
