/* ============================================================================
   Tekvwa — family design system
   ============================================================================

   One stylesheet, one design language. Every Tekvwa product ships this file
   UNCHANGED except the PER-PRODUCT BRAND block below: swap `--brand*` for that
   product's colour and its identity is done in one place.

     Tekvwa Analysis     evergreen  (this file)
     Tekvwa Pro Audit    evergreen  (its own --brand)
     Tekvwa Money        green
     Tekvwa Properties   green
     Tekvwa IT Solutions blue

   Everything else — the neutral grayscale ramp (chrome), the semantic status
   palette, the theme-transition — is identical across the family. Component
   styles live in each product's own CSS and are written against these tokens
   (`var(--brand)`, `var(--status-good)`, …), never raw hex.

   Light values sit on bare `:root`; `[data-theme="dark"]` redefines only what
   changes for the dark ground. Status colours are FIXED in both themes — a
   "good result" must not shift hue by theme.

   Mirrors `analysis/visualization.py`'s STATUS_* constants; `tests/test_status_palette.py`
   fails if the two drift. See `docs/DESIGN_SYSTEM.md`.
   ========================================================================= */

:root {
    /* --- Neutral ramp (chrome: ribbon, panels, tables, borders, body text) --- */
    --primary-black: #000000;
    --secondary-black: #1a1a1a;
    --dark-gray: #333333;
    --medium-gray: #666666;
    --light-gray: #cccccc;
    --border-gray: #e0e0e0;
    --background-white: #ffffff;
    --off-white: #f8f8f8;
    --hover-gray: #f0f0f0;

    /* ===================================================================
       PER-PRODUCT BRAND — the only lines a sibling app changes.
       Tekvwa Analysis: deep evergreen (the green half of the family, the
       analytical sibling of Pro Audit). Used sparingly — primary buttons,
       links, active tab, focus ring, logo, section-heading accents. Chrome
       stays neutral.
       =================================================================== */
    --brand: #1f4e3d;
    --brand-strong: #163a2d;   /* hover / pressed */
    --brand-contrast: #ffffff; /* text/icon on a --brand fill */
    --brand-tint: #e8f0ec;     /* pale brand wash: selected rows, callout backgrounds */
    --brand-border: #b9d2c8;   /* brand-tinted border on a light ground */
    --brand-rgb: 31, 78, 61;   /* --brand channels, for rgba() shadows: rgba(var(--brand-rgb), .2) */
    /* =================================================================== */

    /* --- Semantic status — red/amber/green for STATE, never identity. Fixed
       in both themes. --status-good is an emerald, kept distinct from the dark
       pine --brand so "good" never reads as "the brand". --- */
    --status-good: #198754;
    --status-warning: #fab219;
    --status-serious: #ec835a;
    --status-critical: #d03b3b;
    --status-neutral: #6c757d;          /* not-a-finding: no good/bad valence */
    --status-info: #3a7ca5;             /* informational: calm steel-blue, not the family blue */
    --status-warning-contrast: #212529; /* dark text on the amber / neutral fills */
    --status-warning-bg: #fff3cd;       /* empty-state bar: pale fill */
    --status-warning-bg-strong: #ffeaa7;
    --status-warning-text: #856404;

    --theme-transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

/* --- Dark ground: redefine only what changes. Status colours are NOT here. --- */
[data-theme="dark"] {
    --primary-black: #ffffff;
    --secondary-black: #e0e0e0;
    --dark-gray: #cccccc;
    --medium-gray: #999999;
    --light-gray: #444444;
    --border-gray: #444444;
    --background-white: #1a1a1a;
    --off-white: #252525;
    --hover-gray: #333333;

    /* PER-PRODUCT BRAND (dark) — lightened for contrast on the dark ground. */
    --brand: #4ea88a;
    --brand-strong: #6cbfa3;
    --brand-contrast: #0f2019;
    --brand-tint: #17322a;
    --brand-border: #2f5d4e;
    --brand-rgb: 78, 168, 138;
}
