/* Design tokens — Empowering Helpdesk
   Grounded in clinical triage: chart paper, triage-tag colours, record numbers.
   Light ground, saturated colour, hairline rules, hard offset shadows. */
:root{
  /* --- Surfaces --------------------------------------------------------- */
  --paper:#fcfcfb;        /* app ground: chart paper            */
  --surface:#ffffff;      /* panes, cards                      */
  --surface-sunk:#f3f5f4; /* inputs, tracks, inactive segments  */
  --rail:#0a3f38;         /* the one solid colour block         */
  --rail-hi:#17564d;
  --wash:#e7f2ef;         /* selected row / your-reply tint     */

  /* --- Ink -------------------------------------------------------------- */
  --ink:#16302c;          /* a true spruce-ink, not tinted black */
  --ink-2:#44605b;
  --ink-3:#5a7682;
  --on-rail:#eaf4f1;
  --on-rail-2:#9dc0b8;

  /* --- Rules ------------------------------------------------------------ */
  --line:#dde5e3;         /* hairline                           */
  --line-2:#c6d4d1;       /* control border                     */
  --line-ink:#16302c;     /* emphasis border                    */

  /* --- Brand ------------------------------------------------------------ */
  --spruce:#0e7c6b;
  --spruce-deep:#0a5a4e;

  /* --- Triage palette (validated: see note below) ----------------------- */
  --t-urgent:#b3261e;
  --t-high:#d98c00;
  --t-normal:#5a7682;
  --t-low:#1d5fe0;
  --t-urgent-wash:#fdecea;
  --t-high-wash:#fdf2df;
  --t-normal-wash:#eef2f1;
  --t-low-wash:#eaf0fe;
  /* Status reuses triage hues by meaning, never by rank. */
  --s-open:#0e7c6b;      --s-open-wash:#e7f2ef;
  --s-pending:#d98c00;   --s-pending-wash:#fdf2df;
  --s-closed:#5a7682;    --s-closed-wash:#eef2f1;
  --danger:#b3261e;

  /* Adjacent-pair CVD + normal-vision separation checked with the dataviz
     validator (light surface). Every chart mark also carries a text label and
     a value, so identity is never colour alone — which also covers amber's
     2.66:1 fill contrast. "Normal"/"Resolved" slate is deliberately low-chroma:
     a neutral state should read as neutral. */

  /* --- Type ------------------------------------------------------------- */
  --sans:'IBM Plex Sans','Segoe UI',system-ui,-apple-system,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,'Cascadia Mono',Consolas,monospace;
  --t-xs:11.5px; --t-sm:13px; --t-md:14.5px; --t-lg:17px; --t-xl:22px; --t-2xl:30px; --t-hero:64px;

  /* --- Space & shape ---------------------------------------------------- */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:22px; --s6:30px; --s7:44px;
  --r-sm:5px; --r-md:8px; --r-lg:12px;
  --hard:3px 3px 0 var(--ink);      /* crisp offset, no blur */
  --hard-sm:2px 2px 0 var(--ink);
  --focus:0 0 0 3px rgba(14,124,107,.28);
}
