/* ==========================================================================
   dosefree — design tokens (source: research/04-design-system.md §7.1)
   This file and theme.json are the ONLY places raw hex values may appear.
   Everything else references --ds-* or --wp--preset--* variables.
   ========================================================================== */

:root {
  /* ---- primitives ------------------------------------------------------ */
  --ds-sage-50:#F3F7F2;--ds-sage-100:#E3ECDF;--ds-sage-200:#C7D9C0;--ds-sage-300:#A6C19E;--ds-sage-400:#86A87E;--ds-sage-500:#6B8F63;--ds-sage-600:#547A4E;--ds-sage-700:#42613E;--ds-sage-800:#334B31;--ds-sage-900:#243524;
  --ds-navy-50:#EEF2F7;--ds-navy-100:#D9E1EC;--ds-navy-200:#B4C3D8;--ds-navy-300:#8BA2BF;--ds-navy-400:#6482A5;--ds-navy-500:#46678B;--ds-navy-600:#34526F;--ds-navy-700:#263F57;--ds-navy-800:#1B2E41;--ds-navy-900:#111F2E;
  --ds-sand-50:#FCFAF6;--ds-sand-100:#F6F1E8;--ds-sand-200:#ECE3D3;--ds-sand-300:#DDD0B8;--ds-sand-400:#C9B894;--ds-sand-500:#B39E74;--ds-sand-600:#957F58;--ds-sand-700:#756344;--ds-sand-800:#564933;--ds-sand-900:#3A3123;
  --ds-clay-50:#FAF4F1;--ds-clay-100:#F3E5DE;--ds-clay-200:#E6CBBE;--ds-clay-300:#D5AA97;--ds-clay-400:#C18A72;--ds-clay-500:#A96E55;--ds-clay-600:#8C5743;--ds-clay-700:#6F4535;--ds-clay-800:#533428;--ds-clay-900:#38231B;
  --ds-stone-50:#F7F6F3;--ds-stone-100:#ECEAE5;--ds-stone-200:#DBD8D0;--ds-stone-300:#C2BEB3;--ds-stone-400:#A39E91;--ds-stone-500:#857F72;--ds-stone-600:#6A655A;--ds-stone-700:#524E45;--ds-stone-800:#3B3832;--ds-stone-900:#262420;
  --ds-wgray-50:#F8F7F6;--ds-wgray-100:#EEECEA;--ds-wgray-200:#DEDBD7;--ds-wgray-300:#C4C0BA;--ds-wgray-400:#A29D95;--ds-wgray-500:#807B73;--ds-wgray-600:#65615A;--ds-wgray-700:#4D4A44;--ds-wgray-800:#35332F;--ds-wgray-900:#211F1C;
  --ds-white:#FFFFFF;

  /* ---- semantic — light ------------------------------------------------ */
  --ds-color-bg:var(--ds-sand-50);--ds-color-bg-subtle:var(--ds-sand-100);--ds-color-surface:var(--ds-white);--ds-color-surface-raised:var(--ds-sand-50);
  --ds-color-text:var(--ds-wgray-900);--ds-color-text-secondary:var(--ds-wgray-700);--ds-color-text-muted:var(--ds-wgray-600);--ds-color-text-inverse:var(--ds-sand-50);--ds-color-heading:var(--ds-navy-800);
  --ds-color-primary:var(--ds-sage-700);--ds-color-primary-hover:var(--ds-sage-800);--ds-color-primary-subtle:var(--ds-sage-100);--ds-color-on-primary:var(--ds-sand-50);
  --ds-color-secondary:var(--ds-navy-700);--ds-color-secondary-hover:var(--ds-navy-800);--ds-color-on-secondary:var(--ds-sand-50);
  --ds-color-accent:var(--ds-clay-500);--ds-color-accent-text:var(--ds-clay-700);--ds-color-accent-subtle:var(--ds-clay-100);
  --ds-color-success:#2F7A4A;--ds-color-success-bg:var(--ds-sage-50);--ds-color-warning:#9A6A14;--ds-color-warning-bg:var(--ds-sand-100);--ds-color-danger:#B3362F;--ds-color-danger-bg:var(--ds-clay-100);--ds-color-info:#2F5F9E;--ds-color-info-bg:var(--ds-navy-50);
  --ds-color-focus:#3B6FA0;--ds-color-border:var(--ds-stone-200);--ds-color-border-input:var(--ds-wgray-500);--ds-color-border-strong:var(--ds-stone-400);
  /* fixed-contrast bands (navy CTA band + footer) — same recipe light & dark */
  --ds-color-band-bg:var(--ds-navy-800);--ds-color-band-text:var(--ds-sand-50);--ds-color-band-text-muted:var(--ds-stone-300);--ds-color-band-primary:var(--ds-sage-300);--ds-color-band-primary-hover:var(--ds-sage-200);--ds-color-on-band-primary:var(--ds-navy-900);--ds-color-band-border:var(--ds-navy-600);--ds-color-band-focus:#9BC4F0;
  --ds-color-footer-bg:var(--ds-navy-900);--ds-color-footer-text:var(--ds-sand-200);--ds-color-footer-text-muted:var(--ds-stone-300);--ds-color-footer-border:var(--ds-navy-700);
  --ds-color-header-bg:rgb(252 250 246 / .9);
  --ds-color-overlay:rgb(17 31 46 / .5);

  /* ---- type ------------------------------------------------------------ */
  --ds-font-heading:"Fraunces",Georgia,"Times New Roman",serif;--ds-font-body:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --ds-fs-display:clamp(2.5rem,1.8rem + 3vw,4.25rem);--ds-fs-h1:clamp(2rem,1.5rem + 2.2vw,3.25rem);--ds-fs-h2:clamp(1.625rem,1.3rem + 1.4vw,2.375rem);--ds-fs-h3:clamp(1.375rem,1.2rem + .8vw,1.75rem);--ds-fs-h4:clamp(1.125rem,1.05rem + .4vw,1.375rem);
  --ds-fs-body-lg:clamp(1.0625rem,1rem + .3vw,1.1875rem);--ds-fs-body:1rem;--ds-fs-sm:.875rem;--ds-fs-caption:.8125rem;--ds-fs-overline:.75rem;--ds-fs-numeric:clamp(2rem,1.5rem + 3vw,3.5rem);
  --ds-lh-tight:1.1;--ds-lh-snug:1.25;--ds-lh-body:1.6;--ds-lh-ui:1.4;

  /* ---- space / radius / shadow / motion / layout ----------------------- */
  --ds-space-1:4px;--ds-space-2:8px;--ds-space-3:12px;--ds-space-4:16px;--ds-space-5:20px;--ds-space-6:24px;--ds-space-8:32px;--ds-space-10:40px;--ds-space-12:48px;--ds-space-16:64px;--ds-space-20:80px;--ds-space-24:96px;--ds-space-32:128px;
  --ds-space-section:clamp(3rem,8vw,6rem);
  --ds-radius-xs:4px;--ds-radius-sm:6px;--ds-radius-md:10px;--ds-radius-lg:16px;--ds-radius-xl:24px;--ds-radius-full:9999px;
  --ds-shadow-sm:0 1px 2px rgb(17 31 46/.06);--ds-shadow-md:0 2px 8px rgb(17 31 46/.08),0 1px 2px rgb(17 31 46/.04);--ds-shadow-lg:0 8px 24px rgb(17 31 46/.10);--ds-shadow-xl:0 16px 48px rgb(17 31 46/.14);
  --ds-dur-fast:120ms;--ds-dur-base:200ms;--ds-dur-slow:320ms;--ds-ease:cubic-bezier(.2,.7,.2,1);--ds-ease-in:cubic-bezier(.4,0,1,1);
  --ds-container-sm:640px;--ds-container-md:768px;--ds-container-lg:1024px;--ds-container-xl:1200px;--ds-container-wide:1440px;--ds-gutter:24px;--ds-target-min:44px;
  --ds-header-height:72px;
  color-scheme:light dark;
}

/* ==========================================================================
   Dark mode — full remap (not inversion). Two triggers:
   1. explicit  <html data-theme="dark">  (theme toggle, persisted in localStorage)
   2. system    prefers-color-scheme: dark, unless <html data-theme="light">
   Both also remap the WordPress preset variables so core blocks that picked a
   palette colour in the editor follow the theme without extra markup.
   ========================================================================== */
:root[data-theme="dark"] {
  --ds-color-bg:var(--ds-navy-900);--ds-color-bg-subtle:var(--ds-navy-800);--ds-color-surface:var(--ds-navy-800);--ds-color-surface-raised:var(--ds-navy-700);
  --ds-color-text:var(--ds-sand-100);--ds-color-text-secondary:var(--ds-stone-300);--ds-color-text-muted:var(--ds-stone-400);--ds-color-text-inverse:var(--ds-navy-900);--ds-color-heading:var(--ds-sand-200);
  --ds-color-primary:var(--ds-sage-300);--ds-color-primary-hover:var(--ds-sage-200);--ds-color-primary-subtle:var(--ds-sage-900);--ds-color-on-primary:var(--ds-navy-900);
  --ds-color-secondary:var(--ds-navy-200);--ds-color-secondary-hover:var(--ds-navy-100);--ds-color-on-secondary:var(--ds-navy-900);
  --ds-color-accent:var(--ds-clay-400);--ds-color-accent-text:var(--ds-clay-300);--ds-color-accent-subtle:var(--ds-clay-900);
  --ds-color-success:#7FC89A;--ds-color-success-bg:var(--ds-sage-900);--ds-color-warning:#E2B45A;--ds-color-warning-bg:var(--ds-sand-900);--ds-color-danger:#F08A80;--ds-color-danger-bg:var(--ds-clay-900);--ds-color-info:#8DB6EA;--ds-color-info-bg:var(--ds-navy-700);
  --ds-color-focus:#9BC4F0;--ds-color-border:var(--ds-navy-600);--ds-color-border-input:var(--ds-stone-500);--ds-color-border-strong:var(--ds-stone-400);
  --ds-color-band-bg:var(--ds-navy-700);--ds-color-footer-bg:var(--ds-navy-900);--ds-color-footer-border:var(--ds-navy-700);
  --ds-color-header-bg:rgb(17 31 46 / .88);
  --ds-shadow-sm:none;--ds-shadow-md:0 0 0 1px var(--ds-navy-600);--ds-shadow-lg:0 0 0 1px var(--ds-navy-600),0 8px 24px rgb(0 0 0/.4);--ds-shadow-xl:0 0 0 1px var(--ds-navy-600),0 16px 48px rgb(0 0 0/.5);

  --wp--preset--color--base:var(--ds-navy-900);--wp--preset--color--base-2:var(--ds-navy-800);--wp--preset--color--surface:var(--ds-navy-800);
  --wp--preset--color--contrast:var(--ds-sand-100);--wp--preset--color--contrast-2:var(--ds-stone-300);--wp--preset--color--contrast-3:var(--ds-stone-400);--wp--preset--color--heading:var(--ds-sand-200);
  --wp--preset--color--primary:var(--ds-sage-300);--wp--preset--color--primary-hover:var(--ds-sage-200);--wp--preset--color--primary-subtle:var(--ds-sage-900);
  --wp--preset--color--secondary:var(--ds-navy-200);--wp--preset--color--accent:var(--ds-clay-400);--wp--preset--color--accent-text:var(--ds-clay-300);--wp--preset--color--accent-subtle:var(--ds-clay-900);
  --wp--preset--color--border:var(--ds-navy-600);--wp--preset--color--success:#7FC89A;--wp--preset--color--warning:#E2B45A;--wp--preset--color--danger:#F08A80;--wp--preset--color--info:#8DB6EA;
  --wp--preset--gradient--hero:linear-gradient(160deg,var(--ds-navy-800) 0%,var(--ds-navy-900) 70%);
  --wp--custom--color--on-primary:var(--ds-navy-900);--wp--custom--color--on-secondary:var(--ds-navy-900);--wp--custom--color--text-inverse:var(--ds-navy-900);--wp--custom--color--surface-raised:var(--ds-navy-700);
  --wp--custom--color--border-input:var(--ds-stone-500);--wp--custom--color--border-strong:var(--ds-stone-400);
  --wp--custom--color--success-bg:var(--ds-sage-900);--wp--custom--color--warning-bg:var(--ds-sand-900);--wp--custom--color--danger-bg:var(--ds-clay-900);--wp--custom--color--info-bg:var(--ds-navy-700);
  --wp--custom--focus--color:#9BC4F0;--wp--custom--focus--ring:2px solid #9BC4F0;
  --wp--preset--shadow--sm:none;--wp--preset--shadow--md:0 0 0 1px var(--ds-navy-600);--wp--preset--shadow--lg:0 0 0 1px var(--ds-navy-600),0 8px 24px rgb(0 0 0/.4);--wp--preset--shadow--xl:0 0 0 1px var(--ds-navy-600),0 16px 48px rgb(0 0 0/.5);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ds-color-bg:var(--ds-navy-900);--ds-color-bg-subtle:var(--ds-navy-800);--ds-color-surface:var(--ds-navy-800);--ds-color-surface-raised:var(--ds-navy-700);
    --ds-color-text:var(--ds-sand-100);--ds-color-text-secondary:var(--ds-stone-300);--ds-color-text-muted:var(--ds-stone-400);--ds-color-text-inverse:var(--ds-navy-900);--ds-color-heading:var(--ds-sand-200);
    --ds-color-primary:var(--ds-sage-300);--ds-color-primary-hover:var(--ds-sage-200);--ds-color-primary-subtle:var(--ds-sage-900);--ds-color-on-primary:var(--ds-navy-900);
    --ds-color-secondary:var(--ds-navy-200);--ds-color-secondary-hover:var(--ds-navy-100);--ds-color-on-secondary:var(--ds-navy-900);
    --ds-color-accent:var(--ds-clay-400);--ds-color-accent-text:var(--ds-clay-300);--ds-color-accent-subtle:var(--ds-clay-900);
    --ds-color-success:#7FC89A;--ds-color-success-bg:var(--ds-sage-900);--ds-color-warning:#E2B45A;--ds-color-warning-bg:var(--ds-sand-900);--ds-color-danger:#F08A80;--ds-color-danger-bg:var(--ds-clay-900);--ds-color-info:#8DB6EA;--ds-color-info-bg:var(--ds-navy-700);
    --ds-color-focus:#9BC4F0;--ds-color-border:var(--ds-navy-600);--ds-color-border-input:var(--ds-stone-500);--ds-color-border-strong:var(--ds-stone-400);
    --ds-color-band-bg:var(--ds-navy-700);--ds-color-footer-bg:var(--ds-navy-900);--ds-color-footer-border:var(--ds-navy-700);
    --ds-color-header-bg:rgb(17 31 46 / .88);
    --ds-shadow-sm:none;--ds-shadow-md:0 0 0 1px var(--ds-navy-600);--ds-shadow-lg:0 0 0 1px var(--ds-navy-600),0 8px 24px rgb(0 0 0/.4);--ds-shadow-xl:0 0 0 1px var(--ds-navy-600),0 16px 48px rgb(0 0 0/.5);

    --wp--preset--color--base:var(--ds-navy-900);--wp--preset--color--base-2:var(--ds-navy-800);--wp--preset--color--surface:var(--ds-navy-800);
    --wp--preset--color--contrast:var(--ds-sand-100);--wp--preset--color--contrast-2:var(--ds-stone-300);--wp--preset--color--contrast-3:var(--ds-stone-400);--wp--preset--color--heading:var(--ds-sand-200);
    --wp--preset--color--primary:var(--ds-sage-300);--wp--preset--color--primary-hover:var(--ds-sage-200);--wp--preset--color--primary-subtle:var(--ds-sage-900);
    --wp--preset--color--secondary:var(--ds-navy-200);--wp--preset--color--accent:var(--ds-clay-400);--wp--preset--color--accent-text:var(--ds-clay-300);--wp--preset--color--accent-subtle:var(--ds-clay-900);
    --wp--preset--color--border:var(--ds-navy-600);--wp--preset--color--success:#7FC89A;--wp--preset--color--warning:#E2B45A;--wp--preset--color--danger:#F08A80;--wp--preset--color--info:#8DB6EA;
    --wp--preset--gradient--hero:linear-gradient(160deg,var(--ds-navy-800) 0%,var(--ds-navy-900) 70%);
    --wp--custom--color--on-primary:var(--ds-navy-900);--wp--custom--color--on-secondary:var(--ds-navy-900);--wp--custom--color--text-inverse:var(--ds-navy-900);--wp--custom--color--surface-raised:var(--ds-navy-700);
    --wp--custom--color--border-input:var(--ds-stone-500);--wp--custom--color--border-strong:var(--ds-stone-400);
    --wp--custom--color--success-bg:var(--ds-sage-900);--wp--custom--color--warning-bg:var(--ds-sand-900);--wp--custom--color--danger-bg:var(--ds-clay-900);--wp--custom--color--info-bg:var(--ds-navy-700);
    --wp--custom--focus--color:#9BC4F0;--wp--custom--focus--ring:2px solid #9BC4F0;
    --wp--preset--shadow--sm:none;--wp--preset--shadow--md:0 0 0 1px var(--ds-navy-600);--wp--preset--shadow--lg:0 0 0 1px var(--ds-navy-600),0 8px 24px rgb(0 0 0/.4);--wp--preset--shadow--xl:0 0 0 1px var(--ds-navy-600),0 16px 48px rgb(0 0 0/.5);
  }
}

/* High-contrast preference: raise decorative borders to warm-gray-700 */
@media (prefers-contrast: more) {
  :root { --ds-color-border:var(--ds-wgray-700); --ds-color-border-input:var(--ds-wgray-700); --wp--preset--color--border:var(--ds-wgray-700); }
}

/* Reduced motion: collapse all durations (transforms are removed in theme.css) */
@media (prefers-reduced-motion: reduce) {
  :root { --ds-dur-fast:0.01ms; --ds-dur-base:0.01ms; --ds-dur-slow:0.01ms; }
}
