/* Theme tokens. Override values here per app; never rewrite selectors in app.css. */

:root {
  --color-bg: #140d09;
  --color-surface: #241812;
  --color-border: #3a2418;
  /* Amber, despite the name. app.css references --color-accent-blue by name in
     .btn and :focus-visible, so renaming it here would mean editing selectors in
     app.css — the one thing this file exists to avoid. A misleading name is the
     lesser evil. */
  --color-accent-blue: #e07a2f;
  --color-accent-green: #5ad24a;
  --color-text: #f5ece0;
  --color-text-dim: #a08a76;
  --color-danger: #ff5470;

  --font-data: 'IBM Plex Mono', ui-monospace, monospace;
  --font-prose: 'DM Sans', system-ui, sans-serif;

  --safe-top: env(safe-area-inset-top);
  --safe-bottom: env(safe-area-inset-bottom);
  --safe-left: env(safe-area-inset-left);
  --safe-right: env(safe-area-inset-right);

  --radius: 10px;
  --tap: 44px;              /* minimum touch target */
  --gap: 0.75rem;

  /* Game palette. Read once at boot by view.js via getComputedStyle, so this
     file stays the only place the app is themed — canvas included. The five
     dirt bands are the scoring depth tiers, so they must stay distinguishable
     from each other AND get colder as they go, or depth stops reading. */
  --sky: #1d3a5c;
  --cave: #0d0805;
  --wall: #1a1008;          /* the shaft side wall, in the gutters */
  --dirt-1: #9c6531;
  --dirt-2: #7a4b23;
  --dirt-3: #5c3619;
  --dirt-4: #412510;
  --dirt-5: #2a1a3a;
  --ore: #7fe3ff;
  --air: #8fd4ff;
  --player: #f5f0e6;
  --player-accent: #e07a2f;
  --pooka: #ff6b4a;
  --pooka-eye: #f5ece0;
  --fygar: #46c85a;
  --fygar-belly: #d8f0a0;
  --rock: #8d8a86;
  --rock-shade: #55524e;
  --harpoon: #ffd88a;
  --fire: #ff8c2b;

  /* The surface camp. A --camp-* namespace read by src/basecamp.js, for the same
     reason the game palette above is read by view.js: tokens.css stays the one
     place this app is themed, canvas included. It is a SEPARATE namespace
     because the camp is a night-time exterior and the shaft is not — a lamp-lit
     timber yard needs warm browns and a dusk sky that would be wrong on every
     other surface in the game, and nothing here may change what the playfield
     draws.

     The light in the camp comes from two places and only two, and every face in
     basecamp.js is shaded against them: cool moonlight down from the upper
     LEFT, and warm lamplight up from the yard. Adding a third hue here without
     picking a side is how a procedural scene stops reading as a place. */
  --camp-sky-top: #0a1226;
  --camp-sky-mid: #1c2246;
  --camp-sky-low: #4a3350;
  --camp-glow: #d8763a;         /* the last of the light, sitting on the horizon */
  --camp-star: #cdd8ff;
  --camp-hill-far: #1a1a33;
  --camp-hill-near: #14121f;

  --camp-timber: #7a5334;       /* sawn props and cladding */
  --camp-timber-lit: #a3743f;
  --camp-timber-dark: #40291a;
  --camp-iron: #767a86;         /* headgear, rails, tanks */
  --camp-iron-dark: #383b45;
  --camp-roof: #454f61;         /* corrugated sheet, cold under the moon */
  --camp-canvas: #9c8f7a;       /* tent duck and awnings */
  --camp-lamp: #ffca6e;         /* every lit window and every flame */
  --camp-ember: #ff7a2f;
  --camp-yard: #3d2a1a;         /* trodden ground in front of the buildings */

  /* Bestiary tints. A separate --beast-* namespace on purpose: view.js reads the
     game palette above by name at boot, and a kind added to the menu must never
     be able to change what the canvas draws. These are only ever seen when the
     sprite sheet has not arrived — src/bestiary.js falls back to a lettered tile
     in the kind's colour, so a cold offline launch still gets seven readable
     rows instead of seven empty boxes. */
  --beast-pooka: #ff6b4a;
  --beast-fygar: #46c85a;
  --beast-mite: #ffd166;
  --beast-sapper: #ff8c2b;
  --beast-warden: #9d9a94;
  --beast-geode: #7fe3ff;
  --beast-grub: #c98af0;
}
