:root{
  /* --- base palette --- */
  --pnxt-orange:#f37021;
  --pnxt-orange-active:#c95411;
  --pnxt-orange-disabled:#e6dfd8;

  --cream-0:#faf9f5;
  --cream-1:#f5f0e8;
  --cream-2:#efe9de;
  --cream-3:#e8e0d2;
  --cream-line:#e6dfd8;
  --cream-line-soft:#ebe6df;

  --ink-0:#141413;
  --ink-1:#252523;
  --ink-2:#3d3d3a;
  --ink-3:#6c6a64;
  --ink-4:#8e8b82;

  --dark-0:#181715;
  --dark-1:#1f1e1b;
  --dark-2:#252320;

  /* --- semantic aliases --- */
  --color-primary:var(--pnxt-orange);
  --color-primary-active:var(--pnxt-orange-active);
  --color-primary-disabled:var(--pnxt-orange-disabled);

  --surface-canvas:var(--cream-0);
  --surface-soft:var(--cream-1);
  --surface-card:var(--cream-2);
  --surface-cream-strong:var(--cream-3);
  --surface-dark:var(--dark-0);
  --surface-dark-soft:var(--dark-1);
  --surface-dark-elevated:var(--dark-2);

  --hairline:var(--cream-line);
  --hairline-soft:var(--cream-line-soft);
  --hairline-dark:#332f2a;

  --text-ink:var(--ink-0);
  --text-body-strong:var(--ink-1);
  --text-body:var(--ink-2);
  --text-muted:var(--ink-3);
  --text-muted-soft:var(--ink-4);
  --text-on-primary:#ffffff;
  --text-on-dark:#faf9f5;
  --text-on-dark-soft:#a09d96;
}

/* No semantic palette. Status is carried by copy, and by the one orange:
   an invalid field takes an orange border, its message takes --text-ink. */
