:root{
  /* --- base palette --- */
  --graphite-900:#2E2A26;      /* Deep Graphite — ink */
  --graphite-950:#211E1B;      /* hover-darkened graphite (derived) */
  --graphite-600:#57524A;      /* Soft Warm Graphite — the one dark block */
  --cream-50:#F7F1E8;          /* Warm Cream */
  --cream-100:#F4ECD6;         /* Block Cream */
  --cream-150:#EAE3DA;         /* Surface Soft */
  --cream-200:#ECE3D2;         /* Hairline Soft */
  --cream-300:#E4D9C6;         /* Hairline */
  --sage-500:#8A9A7E;
  --sage-200:#C9D2C0;
  --taupe-500:#B1988D;         /* Block Taupe */
  --taupe-200:#E3D6CD;         /* Block Taupe Soft */
  --taupe-700:#7A6055;         /* Dark Taupe — single-shot promo CTA */
  --taupe-800:#654E45;         /* hover-darkened accent (derived) */
  --blush-500:#D0AA9D;         /* Block Blush */
  --blush-200:#EFDDD5;         /* Block Blush Soft */
  --green-500:#1ea64a;

  /* --- semantic: ink & canvas --- */
  --ink:var(--graphite-900);
  --ink-hover:var(--graphite-950);
  --canvas:var(--cream-50);
  --inverse-canvas:var(--graphite-600);
  --inverse-ink:var(--cream-50);
  --on-inverse-soft:var(--cream-50);
  --on-primary:var(--cream-50);

  /* --- semantic: surfaces --- */
  --surface-page:var(--cream-50);
  --surface-card:var(--cream-50);
  --surface-soft:var(--cream-150);
  --surface-soft-hover:var(--cream-200);

  /* --- semantic: story blocks --- */
  --block-cream:var(--cream-100);
  --block-sage:var(--sage-500);
  --block-sage-soft:var(--sage-200);
  --block-taupe:var(--taupe-500);
  --block-taupe-soft:var(--taupe-200);
  --block-blush:var(--blush-500);
  --block-blush-soft:var(--blush-200);
  --block-graphite:var(--graphite-600);
  /* legacy aliases — the retired terracotta tones now resolve to taupe */
  --block-terracotta:var(--taupe-500);
  --block-terracotta-soft:var(--taupe-200);

  /* --- semantic: lines --- */
  --hairline:var(--cream-300);
  --hairline-soft:var(--cream-200);
  --hairline-inverse:rgba(247,241,232,.28);

  /* --- semantic: actions --- */
  --action-primary:var(--graphite-900);
  --action-primary-hover:var(--graphite-950);
  --action-primary-label:var(--cream-50);
  --action-secondary:var(--cream-50);
  --action-secondary-hover:var(--cream-150);
  --accent-cta:var(--taupe-700);
  --accent-cta-hover:var(--taupe-800);

  /* --- semantic: text --- */
  --text-display:var(--ink);
  --text-body:var(--ink);
  --text-caption:var(--ink);
  --text-inverse:var(--inverse-ink);
  --text-link:var(--ink);

  /* --- semantic --- */
  --semantic-success:var(--green-500);
  --overlay-scrim:rgba(46,42,38,.6);

  /* --- state --- */
  --disabled-opacity:.45; /* @kind other */
  --focus-ring:var(--graphite-900);
}
