/* Hallmark · locked tokens · theme: custom "Moonwake" (tuned depth)
 * Palette derived from measured brand assets, not invented:
 *   guild icon ground  #0F1525 -> oklch(19.9% 0.034 268)
 *   MOTD gradient      #B5B4E2 -> oklch(78.6% 0.065 286)
 *                      #826BC2 -> oklch(58.8% 0.131 294)
 *                      #3D4468 -> oklch(39.7% 0.062 275)
 * Anchor hue 274. Accent taken from the brand's own central object (full moon)
 * rather than the violet gradient: high-chroma violet on dark canvas is the
 * purple-hero tell. Warm accent on a cool canvas.
 * Verified: gate 22 (min chroma 0.012), gate 23, gates 40-41 (APCA + WCAG).
 */
:root {
  color-scheme: dark;

  /* ---- colour ------------------------------------------------------- */
  --color-paper:       oklch(13.5% 0.019 274);
  --color-paper-2:     oklch(17.0% 0.020 274);
  --color-paper-3:     oklch(20.5% 0.020 274);
  --color-ink:         oklch(93.0% 0.013 283);
  --color-ink-2:       oklch(86.0% 0.012 283);
  --color-muted:       oklch(78.0% 0.016 281);   /* Lc 63.4 on paper */
  --color-neutral:     oklch(68.0% 0.014 281);   /* Lc 46.5 - non-body only */
  --color-rule:        oklch(30.0% 0.016 274);
  --color-rule-2:      oklch(25.0% 0.014 274);
  --color-accent:      oklch(84.0% 0.140  78);
  --color-accent-ink:  oklch(13.5% 0.019 274);
  --color-focus:       oklch(86.0% 0.130  82);

  --color-bloom:       oklch(84% 0.140 78 / 0.20);
  --color-bloom-out:   oklch(13.5% 0.019 274 / 0);
  --color-cast:        oklch(6% 0.020 274 / 0.55);
  --color-scrim:       oklch(4% 0.018 274 / 0.78);
  --color-moon-face:   oklch(95% 0.020 90);
  --color-moon-mare:   oklch(82% 0.026 88);
  --color-selection:   oklch(84% 0.140 78 / 0.28);

  /* The ground the card specimens are composited onto. This is not a Moonwake
   * value: it is the top stop of the cards' own sky, read out of the bot's
   * drawScene. The specimens keep their transparent rounded corners and the
   * clip's H.264 fallback cannot carry alpha at all, so both sit on this and
   * tools/render-cards.mjs refuses to build if the two ever disagree. */
  --color-specimen:    #0a0e21;

  /* ---- type --------------------------------------------------------- */
  --font-display: "Hahmlet", "IBM Plex Sans KR", ui-serif, serif;
  --font-body:    "IBM Plex Sans KR", ui-sans-serif, sans-serif;
  --font-mono:    "IBM Plex Mono", "IBM Plex Sans KR", ui-monospace, monospace;

  /* ratio 1.25 from 16px */
  --text-xs:      0.64rem;
  --text-sm:      0.8rem;
  --text-base:    1rem;
  --text-md:      1.25rem;
  --text-lg:      1.5625rem;
  --text-xl:      1.9531rem;
  --text-2xl:     2.4414rem;
  --text-3xl:     3.0518rem;
  --text-display:   clamp(2.1875rem, 4.4vw + 1rem, 4.25rem);
  --text-display-s: clamp(2rem, 3vw + 1rem, 3.0518rem);

  --leading-display: 1.04;
  --leading-tight:   1.2;
  --leading-body:    1.62;
  --track-display: -0.03em;
  --track-label:    0.13em;

  /* ---- space (4pt, 9 steps) ------------------------------------------ */
  --space-3xs: 0.25rem;
  --space-2xs: 0.5rem;
  --space-xs:  0.75rem;
  --space-sm:  1rem;
  --space-md:  1.5rem;
  --space-lg:  2rem;
  --space-xl:  3rem;
  --space-2xl: 4.5rem;
  --space-3xl: 7rem;

  /* ---- section rhythm ------------------------------------------------ */
  /* The air between two sections, as distinct from the scale above, which is
     what objects are built out of. Fluid because a phone screen is a third the
     width of a desktop one and the same height: the fixed 4.5rem that costs a
     1440px reader nothing costs a 390px reader a twelfth of every screen, and
     the index spent 736px — a quarter of the document — on five such gaps.
     Floors are set at the phone, ceilings at the old fixed values (the footer's
     7rem is the exception: nothing on the site needs 112px of approach).
     Monotonic at every width, so the four never cross. */
  --rhythm-tight: clamp(1.25rem, 2.4vw, 2rem);     /* 20 -> 32  (was space-lg)  */
  --rhythm:       clamp(1.5rem,  3.4vw, 3rem);     /* 24 -> 48  (was space-xl)  */
  --rhythm-open:  clamp(2rem,    4.6vw, 4.5rem);   /* 32 -> 72  (was space-2xl) */
  --rhythm-close: clamp(2.5rem,  6vw,   6rem);     /* 40 -> 96  (was space-3xl) */

  --page-gutter: clamp(1.25rem, 5vw, 4.5rem);
  /* Prose measure. Gate 25 wants 45-75ch; Korean syllable blocks advance
     ~1.3ch each, so the low end of that band is ~38 blocks per line —
     which is also where a Korean column reads best. Both hold at 48ch. */
  --measure: 62ch;
  --measure-narrow: 48ch;
  --measure-say: 54ch;
  --shell: 84rem;

  /* ---- line, radius, elevation --------------------------------------- */
  --rule-hair: 1px;
  --radius-sm:  2px;
  --radius-md:  4px;
  --radius-pill: 999px;
  --shadow-lift: 0 18px 44px -32px var(--color-cast);

  /* ---- z (named, six levels) ---------------------------------------- */
  --z-base:    0;
  --z-raised:  10;
  --z-sticky:  100;
  --z-nav:     300;
  --z-overlay: 700;
  --z-top:     900;

  /* ---- motion ------------------------------------------------------- */
  --ease-out:    cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in:     cubic-bezier(0.7, 0, 0.84, 0);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --dur-micro: 120ms;
  --dur-short: 220ms;
  --dur-long:  420ms;
}
