/* Hallmark · tokens · kelwing.dev
 * theme: Midnight (oxide anchor) · genre: editorial
 * axes: paper-band=dark · display-style=mono · accent-hue=warm
 *
 * Anchor hue is 40 (oxidised iron). Every neutral carries a trace of that
 * chroma so the warm accent and the greys agree — a warm accent over cool
 * greys is the mismatch most people feel but can't name.
 */

:root {
  /* ---- Colour -------------------------------------------------------- */
  /* Dark recipe: paper L 12–18 %, ink L 92–96 %, elevation via lightness. */
  --color-paper: oklch(15% 0.01 40); /* warm near-black — never #000 */
  --color-paper-2: oklch(19% 0.012 40); /* raised surface, +4 % L         */
  --color-rule: oklch(32% 0.01 40); /* hairline                       */
  --color-ink: oklch(94% 0.006 50); /* primary text — never #fff      */
  --color-ink-2: oklch(70% 0.008 40); /* secondary text, 6.4:1 on paper */
  --color-accent: oklch(64% 0.155 42); /* rust oxide, 5.6:1 on paper     */
  --color-accent-ink: oklch(15% 0.01 40); /* ink for use on accent fills    */
  --color-focus: oklch(72% 0.15 45); /* focus ring — never animated    */
  --color-selection: oklch(40% 0.09 42); /* opaque; alpha is not a palette */

  /* ---- Type ---------------------------------------------------------- */
  /* Two families. Mono carries the display + label register, sans the
   * prose. Mono-as-display says "systems" without drawing a terminal. */
  --font-display:
    "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --font-body: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;

  /* 1.25 major third, 16 px base */
  --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-lede: clamp(1.5625rem, 2.4vw + 0.9rem, 2.4414rem);

  --tracking-mark: 0.16em; /* wordmark   */
  --tracking-label: 0.14em; /* small caps */
  --tracking-body: 0em;

  /* ---- Space --------------------------------------------------------- */
  /* 4 pt base, named by role. */
  --space-3xs: 0.125rem;
  --space-2xs: 0.25rem;
  --space-xs: 0.5rem;
  --space-sm: 0.75rem;
  --space-md: 1rem;
  --space-lg: 1.5rem;
  --space-xl: 2.5rem;
  --space-2xl: 4rem;
  --space-3xl: 6rem;
  --space-4xl: 9rem;

  --page-gutter: clamp(1.25rem, 5vw, 4rem);
  --measure: 30ch;

  /* ---- Rules --------------------------------------------------------- */
  --rule-hair: 1px;
  --rule-thick: 2px;

  /* ---- 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;

  /* ---- Depth --------------------------------------------------------- */
  --z-base: 1;
}

/* No --radius-* tokens: this page has no boxes. Hairlines and type carry
 * the structure, so there is no corner to round. That absence is the
 * design, not an omission. */
