/* ============================================================
   CAPITAL ALLOCATION — DESIGN TOKENS  (v1 · Stage 2)
   Single source of truth. Every page and component reads these.
   Palette values are exact per the platform master spec.
   ============================================================ */

:root{
  /* ---------- 1 · CORE PALETTE (exact spec values) ---------- */
  --ca-bg:#0B0B0D;            /* app / page background (Blossom-inspired charcoal) */
  --ca-sidebar:#050609;       /* sidebar background (future shell) */
  --ca-deep:#0F1013;          /* main / deep surface */
  --ca-card:#141519;          /* card background */
  --ca-card-elev:#1B1C22;     /* elevated card */
  --ca-input:#121317;         /* input background */
  --ca-border:#2A2B33;        /* border */
  --ca-border-subtle:#1F2027; /* subtle border */
  --ca-text-1:#FFFFFF;        /* primary text */
  --ca-text-2:#C9CBD6;        /* secondary text */
  --ca-text-3:#8C91A3;        /* muted text */
  --ca-lavender:#635BFF;      /* primary lavender */
  --ca-violet:#5851EA;        /* deep violet */
  --ca-blue:#2F80ED;          /* electric blue */
  --ca-teal:#4DA3FF;
  --ca-lilac:#B08CFF;          /* teal / aqua */
  --ca-green:#2FD16B;         /* success green */
  --ca-pink:#F0524D;          /* danger pink/red */
  --ca-amber:#F59E0B;         /* warning amber */
  --ca-copper:#A8582F;        /* copper accent */

  /* ---------- 2 · SEMANTIC ROLES ---------- */
  --ca-accent:var(--ca-lavender);        /* brand + interactive */
  --ca-accent-deep:var(--ca-violet);     /* pressed / gradient end */
  --ca-accent-soft:rgba(99,91,255,.14);
  --ca-accent-ring:rgba(99,91,255,.16);
  --ca-info:var(--ca-blue);
  --ca-info-soft:rgba(47,128,237,.14);

  /* Financial states — never communicated by color alone */
  --ca-pos:var(--ca-green);              /* gains, growth, on-track */
  --ca-pos-soft:rgba(47,209,107,.12);
  --ca-neg:var(--ca-pink);               /* losses, shortfalls, destructive */
  --ca-neg-soft:rgba(240,82,77,.12);
  --ca-warn:var(--ca-amber);             /* caution, assumptions, limits */
  --ca-warn-soft:rgba(245,158,11,.10);
  --ca-neutral:var(--ca-text-3);         /* flat / no-change */
  --ca-milestone:var(--ca-copper);       /* milestones & markers */

  /* States */
  --ca-success:var(--ca-green);
  --ca-success-soft:var(--ca-pos-soft);
  --ca-danger:var(--ca-pink);
  --ca-danger-soft:var(--ca-neg-soft);
  --ca-warning:var(--ca-amber);
  --ca-warning-soft:var(--ca-warn-soft);
  --ca-disabled-opacity:.42;

  /* ---------- 3 · CHART SERIES (allocation + data palette) ---------- */
  /* s118: mirrors CACharts.CATEGORICAL exactly, in order. The previous slots had drifted from
     their own comments (slot 4 was labelled "green" but held lilac #B08CFF; slot 6 was labelled
     "pink" but held the loss-red) — leftovers from the s92-94 migration. Blue-dominant with earth
     accents, the way institutional data palettes run. No green, no red, no pastel. */
  /* s121: the canonical spend colour. Expenses previously rendered copper on the budget summary,
     accent purple on category rows and blue on the Spending page \u2014 three colours for one
     concept. Mirrors CACharts.COLORS.steel. */
  --ca-steel:#2F6FB5;
  /* s141: mirrors CACharts.CATEGORICAL. Brown retired (bronze and brass both read brown on a dark
     ground), and the two near-identical greys separated \u2014 minimum CIE Lab \u0394E across the set went
     from 7.7 to 15. */
  --ca-chart-1:#635BFF;  /* brand purple */
  --ca-chart-2:#4740C7;  /* indigo       */
  --ca-chart-3:#2F6FB5;  /* steel        */
  --ca-chart-4:#7FB2D4;  /* sky          */
  --ca-chart-5:#4A5A7A;  /* slate        */
  --ca-chart-6:#C9A227;  /* gold         */
  --ca-chart-7:#2C3E6B;  /* navy         */
  --ca-chart-8:#8C91A3;  /* grey         */
  --ca-chart-grid:rgba(255,255,255,.06);
  --ca-chart-hover:rgba(255,255,255,.22);
  --ca-chart-band:rgba(99,91,255,.13);          /* projection range fill */
  --ca-chart-line:var(--ca-accent);               /* primary projection line */
  --ca-chart-area-a:rgba(99,91,255,.26);        /* area gradient top */
  --ca-chart-area-b:rgba(99,91,255,0);          /* area gradient bottom */
  --ca-cmp-1:#37BFA8; --ca-cmp-2:#2F80ED; --ca-cmp-3:#A8582F; /* comparison lines */

  /* ---------- 4 · TYPOGRAPHY ---------- */
  --ca-font-display:'Space Grotesk',sans-serif;            /* headings, key figures */
  --ca-font-body:'Inter',system-ui,-apple-system,sans-serif;/* UI + reading text */
  --ca-font-data:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  /* s134: every number on the site is set in Inter with TABULAR figures. Proportional-with-tnum
     gives the column alignment a monospace gives, without the terminal register that undercuts a
     consumer finance product — which is what Fidelity (Fidelity Sans), Schwab (Charles Modern),
     Robinhood (Capsule Sans), Wise (Inter) and Stripe (Söhne + tnum) all do. Inter was ALREADY the
     body font here, so text and numbers now share one family and nothing new is downloaded.
     The slashed/dotted zero is deliberately absent: this Inter build ships no `zero` feature at
     all, and its default zero is a plain 2-contour ring. Verified against the font binary. */
  --ca-num-features:'tnum' 1; /* labels, tabular data */
  --ca-fs-xs:10.5px; --ca-fs-sm:12px; --ca-fs-md:13.5px; --ca-fs-base:14.5px;
  --ca-fs-lg:17px;  --ca-fs-xl:21px; --ca-fs-2xl:28px;
  --ca-fs-num-lg:clamp(34px,8.5vw,50px);   /* hero result figures */
  --ca-fs-num-xl:clamp(42px,10.5vw,64px);  /* page hero figure */
  --ca-lh-tight:1.15; --ca-lh-base:1.55; --ca-lh-loose:1.7;
  --ca-track-caps:.16em;                    /* uppercase label tracking */

  /* ---------- 5 · SPACING (4px base scale) ---------- */
  --ca-s1:4px; --ca-s2:8px; --ca-s3:12px; --ca-s4:16px;
  --ca-s5:20px; --ca-s6:24px; --ca-s7:32px; --ca-s8:40px; --ca-s9:56px;

  /* ---------- 6 · RADII ---------- */
  --ca-r-sm:8px; --ca-r-md:12px; --ca-r-lg:16px; --ca-r-pill:999px;

  /* ---------- 7 · BORDERS ---------- */
  --ca-line:1px solid var(--ca-border-subtle);
  --ca-line-strong:1px solid var(--ca-border);

  /* ---------- 8 · ELEVATION ---------- */
  --ca-elev-0:none;
  --ca-elev-1:0 1px 0 rgba(255,255,255,.04) inset, 0 8px 24px -14px rgba(0,0,0,.55);
  --ca-elev-2:0 1px 0 rgba(255,255,255,.045) inset, 0 10px 28px -14px rgba(0,0,0,.5), 0 26px 64px -38px rgba(0,0,0,.6);
  --ca-elev-3:0 1px 0 rgba(255,255,255,.05) inset, 0 20px 60px -24px rgba(0,0,0,.65);

  /* ---------- 9 · FOCUS ---------- */
  --ca-focus:var(--ca-blue);
  --ca-focus-ring:0 0 0 2px var(--ca-bg), 0 0 0 4px var(--ca-blue);

  /* ---------- 10 · Z-SCALE ---------- */
  --ca-z-raised:10; --ca-z-nav:30; --ca-z-mobilebar:35; --ca-z-header:36; --ca-z-sticky:40; --ca-z-scrim:44; --ca-z-drawer:45; --ca-z-modal:50; --ca-z-tip:60; --ca-z-skip:70; --ca-z-helpdrawer:80;

  color-scheme:dark;
}

/* ============================================================
   LIGHT THEME (derived — same roles, AA-checked values)
   Applies wherever a page opts in via body.light / [data-theme=light]
   ============================================================ */
body.light, [data-theme="light"]{
  --ca-bg:#F5F6FA; --ca-sidebar:#0B0D14; --ca-deep:#ECEEF4;
  --ca-card:#FFFFFF; --ca-card-elev:#FFFFFF; --ca-input:#F1F2F7;
  --ca-border:rgba(18,22,40,.18); --ca-border-subtle:rgba(18,22,40,.10);
  --ca-text-1:#14161D; --ca-text-2:#3E4354; --ca-text-3:#667085;

  --ca-accent:#5851EA; --ca-accent-deep:#5646E8;
  --ca-accent-soft:rgba(109,93,251,.12); --ca-accent-ring:rgba(109,93,251,.18);
  --ca-info:#2563EB; --ca-info-soft:rgba(37,99,235,.10);

  --ca-pos:#2E9E3F; --ca-pos-soft:rgba(46,158,63,.12);
  --ca-neg:#C42B2B; --ca-neg-soft:rgba(222,47,98,.10);
  --ca-warn:#B45309; --ca-warn-soft:rgba(180,83,9,.10);
  --ca-neutral:#667085; --ca-milestone:#A9502A;
  --ca-success:var(--ca-pos); --ca-success-soft:var(--ca-pos-soft);
  --ca-danger:var(--ca-neg);  --ca-danger-soft:var(--ca-neg-soft);
  --ca-warning:var(--ca-warn);--ca-warning-soft:var(--ca-warn-soft);

  /* s118: same institutional order, darkened for a light ground. Slot 4 was #2E9E3F (green) and
     slot 6 was #DE2F62 (pink) \u2014 both retired. */
  --ca-steel:#1D5A94;
  --ca-chart-1:#4F46E5; --ca-chart-2:#1D4ED8; --ca-chart-3:#0369A1; --ca-chart-4:#5A6675;
  --ca-chart-5:#9A6B12; --ca-chart-6:#8A4523; --ca-chart-7:#1E3A6E; --ca-chart-8:#667085;
  --ca-chart-grid:rgba(18,22,40,.08); --ca-chart-hover:rgba(18,22,40,.32);
  --ca-chart-band:rgba(109,93,251,.12); --ca-chart-line:var(--ca-accent);
  --ca-chart-area-a:rgba(109,93,251,.22); --ca-chart-area-b:rgba(109,93,251,0);
  --ca-cmp-1:#0E9488; --ca-cmp-2:#2563EB; --ca-cmp-3:#A9502A;

  --ca-elev-1:0 1px 0 rgba(255,255,255,.9) inset, 0 8px 22px -14px rgba(25,30,60,.18);
  --ca-elev-2:0 1px 0 rgba(255,255,255,.9) inset, 0 10px 26px -16px rgba(25,30,60,.16), 0 26px 56px -38px rgba(25,30,60,.14);
  --ca-elev-3:0 20px 56px -24px rgba(25,30,60,.25);
  --ca-focus-ring:0 0 0 2px var(--ca-bg), 0 0 0 4px var(--ca-focus);

  color-scheme:light;
}
