/* Auto-generated by scripts/build-tokens.js. Edit functions/_lib/brand.js instead. */
:root {
    --ink-900: #0F172A; --ink-800: #1E293B; --ink-700: #334155; --ink-600: #475569;
    --muted-600: #64748B; --muted-500: #94A3B8;
    /* The muted grey as INK, derived to clear 4.5:1 on every warm ground
       rather than on the white this site never paints. --muted-600 itself is
       4.48:1 on --paper and 4.00:1 on --hairline-soft; this is #5C6B80 and
       clears 4.56:1 on the worst of them. Every rule in site.css that sets a
       text colour to the muted grey reads THIS. See brand.js bodyInkOn(). */
    --muted-ink:  #5C6B80;
    --paper:      #FAF8F3;
    --paper-soft: #F4F1EA;
    --card:       #FFFFFF;
    --card-sunken: #F6F4EE;
    --hairline:      #E7E2D6;
    --hairline-soft: #EFEBE0;
    --primary:      #2D3E50;
    --primary-dark: #1A252F;
    --primary-light: #4A5F7F;
    --accent:       #FF6B6B;
    --accent-dark:  #E85555;
    --on-accent:    #000000;
    --on-accent-dark: #000000;
    /* Not a.accentInk, which is 4.31:1 on --paper because inkAccent()
       derives against white. This site has no white ground above the fold, so
       it derives its own over WARM_GROUNDS: #AD4949, 4.61:1 on the worst. */
    --accent-ink:   #AD4949;
    --success:  #047857; --success-bg: #ECFDF5;
    --warning:  #B45309; --warning-bg: #FFFBEB;
    --danger:   #B91C1C;  --danger-bg:  #FEF2F2;
    --info:     #1E40AF;    --info-bg:    #EFF6FF;
    /* The --space-* scale left this sheet on 2026-09-02. It was measured
       and argued for all three sheets (systematisation-2026-08-31.md S7),
       adopted by form.css alone, and shipped here for a year of nothing:
       zero var(--space references in this surface's CSS or markup while the
       inline styles went on painting the off-grid values the essay condemns.
       A scale that documents intent nothing enacts teaches a reader to trust
       dead tokens. It returns by adoption — the essay and the steps live
       with the client form's tokens, the one place they are real. */
--radius-sm: 6px; --radius: 10px; --radius-lg: 14px; --radius-xl: 18px;
    /* One spelling of "pill". admin.css said 99px, form.css said 9999px
       and site.css said 50%; they are one intent and this is it. */
    --radius-pill: 999px;
    /* The boundary of a control, at SC 1.4.11's 3:1 rather than the
       decorative 1.22:1 --hairline draws. See nonTextOn above. The
       hairline is unchanged and still draws card edges and table rules. */
    --control-border: #88857E;
    /* Durations. 45 declarations carried 18 distinct values, and '.15s'
       and '150ms' -- the same duration -- were 41 of them, in two
       notations. Milliseconds only. */
    --dur-fast: 120ms;
    --dur: 150ms;
    --dur-slow: 250ms;
    --shadow-card: 0 1px 2px rgba(15,23,42,.04), 0 4px 14px rgba(15,23,42,.04);
    --shadow-pop:  0 8px 30px rgba(15,23,42,.10), 0 2px 6px rgba(15,23,42,.06);
    --font-display: 'Instrument Serif', 'Iowan Old Style', Georgia, serif;
    --font-sans: 'Geist', 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
    --font-mono: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
    --ease: cubic-bezier(.2,.7,.25,1);
    --ring: 0 0 0 3px rgba(15,23,42,.20);
    --fs-xs:   12px;
    --fs-sm:   14px;
    --fs-base: 16px;
    --fs-md:   18px;
    --fs-lg:   21px;
    --fs-d1:   28px;
    --fs-d2:   36px;
    --fs-d3:   46px;
    --fs-d4:   60px;
    --measure: 1120px;
  }
