:root {
  /* ---- base palette ---- */
  --wovn-green: #1E874F;        /* Grove Green — primary */
  --wovn-green-deep: #14603A;   /* Deep Green */
  --wovn-chartreuse: #C7EA46;   /* Chartreuse — accent spark */
  --wovn-mint: #7FCF9C;         /* Mint — greens on dark */
  --wovn-ink: #16211C;          /* Ink — text & dark fields */
  --wovn-ink-raised: #2A352F;   /* raised panel on ink */
  --wovn-paper: #F7F5EF;        /* Paper — default background */
  --wovn-white: #FFFFFF;
  --wovn-wash: #EEF6DC;         /* Wash — pale chartreuse tint */
  --wovn-rule: #E3DFD3;         /* hairline / border */
  --wovn-slate: #4A4A45;        /* body text, softened */
  --wovn-muted: #6B6B60;        /* muted text */
  --wovn-faint: #8A8578;        /* metadata, captions */
  --wovn-on-dark: #B8C4BC;      /* body text on ink */
  --wovn-caution: #B06A6A;      /* "never / don't" only */
  --wovn-caution-rule: #D6B0B0;

  /* ---- semantic surfaces ---- */
  --surface-page: var(--wovn-paper);
  --surface-card: var(--wovn-white);
  --surface-sunken: var(--wovn-wash);
  --surface-inverse: var(--wovn-ink);
  --surface-inverse-raised: var(--wovn-ink-raised);
  --surface-accent: var(--wovn-chartreuse);

  /* ---- semantic text ---- */
  --text-strong: var(--wovn-ink);
  --text-body: var(--wovn-slate);
  --text-muted: var(--wovn-muted);
  --text-faint: var(--wovn-faint);
  --text-accent: var(--wovn-green);
  --text-on-inverse: var(--wovn-paper);
  --text-on-inverse-muted: var(--wovn-on-dark);
  --text-on-inverse-accent: var(--wovn-chartreuse);
  --text-link: var(--wovn-green);
  --text-link-hover: var(--wovn-green-deep);

  /* ---- semantic lines & interaction ---- */
  --border-hairline: var(--wovn-rule);
  --border-strong: var(--wovn-ink);
  --border-accent: var(--wovn-green);
  --action-primary: var(--wovn-green);
  --action-primary-hover: var(--wovn-green-deep);
  --action-accent: var(--wovn-chartreuse);
  --focus-ring: var(--wovn-green);
}
