/* ============================================================================
   G-Scan Plus — Design Tokens  ·  "Steel & Signal"
   ----------------------------------------------------------------------------
   The single source of truth for the web admin's palette. Mirrored in the
   Flutter guard app at lib/theme/app_colors.dart — keep the two in sync.

   Loaded by templates/base.html BEFORE base.css, so every template that
   extends base.html inherits these tokens automatically. Never hardcode a
   brand hex in a template — reach for a var() below.

   THE RULE
   --------
   The interface is blue, dark and white. Exactly ONE warm hue exists —
   --alert — and it is spent on danger and failure only: the two states a
   supervisor must catch without reading (a MISSED SCAN and an OPEN INCIDENT),
   plus transient failure feedback. It may NEVER colour a control that is
   always on screen. That reserve is the whole point; the moment a red button
   or a red badge appears somewhere harmless, red stops meaning danger.

   Everything that is merely "in progress", "pending", "offline" or "queued"
   is cool: a steel tint or slate. Status is then carried by FILL vs TINT,
   not by inventing another hue.

   Replaces the previous "Command Center" set, which ran five hues at 89-100%
   HSL saturation (electric blue, teal, amber, rose, info-blue). Four of them
   could land on one dashboard, so nothing receded and nothing stood out —
   the missed-scan count competed with three equals. Every hue here sits
   around 62-66% saturation; slate sits at 16%.
   ========================================================================= */
:root {
  /* Brand — the ink ground (headers, sidebar, app bars, splash) */
  --navy:        #0b121c;   /* ink 950 — deepest ground   */
  --navy-mid:    #101b2a;   /* ink 900 — dark surface     */
  --navy-light:  #17263a;   /* ink 800 — elevated dark    */

  /* Brand — the single accent. Steel blue: the old #1d6ef5 hue, 30 points
     of saturation removed, so it holds white text and recedes behind data. */
  --electric:      #2e6bc6;   /* steel 600 — primary action, "done", "on duty" */
  --electric-2:    #6ba3ea;   /* steel 400 — light accent, live/in-progress    */
  --electric-deep: #1e4e96;   /* steel 800 — gradient partner, dark-on-light   */

  /* Semantic status.
     Only --alert is warm, and only missed scans + open incidents may use it. */
  --secure:      #2e6bc6;   /* on-duty · synced · complete   (filled steel) */
  --warn:        #64748b;   /* round due · awaiting sync · offline  (slate) */
  --alert:       #d9485b;   /* MISSED SCAN · OPEN INCIDENT — reserved       */
  --alert-deep:  #b23a4a;   /* alert text on a light tint                   */
  --info:        #6ba3ea;   /* neutral notices · in-progress                */

  /* Tints — how "pending" is expressed without spending a hue. */
  --electric-tint: rgba(46, 107, 198, 0.10);
  --alert-tint:    rgba(217, 72, 91, 0.12);
  --slate-tint:    rgba(100, 116, 139, 0.12);

  /* Legacy aliases (kept so existing templates don't break).
     --accent is NOT a brand colour: it resolves to "secure", which is now
     steel. Brand gradients pair --electric with --electric-deep. */
  --accent:      #2e6bc6;
  --amber:       #64748b;   /* amber retired — "attention" is slate now  */
  --rose:        #d9485b;
  --violet:      #64748b;   /* violet retired — maintenance badge is slate */

  /* Cool-slate neutrals — a faint blue bias, chosen not inherited */
  --white:       #ffffff;
  --surface:     #f6f8fc;
  --surface-2:   #edf2f9;
  --border:      #e3e8f0;
  --text:        #0f1b2a;
  --text-mid:    #45566b;
  --muted:       #64748b;
  --text-on-navy:#e8eef6;

  --sidebar-w:   240px;
  --topbar-h:    64px;
  --radius:      14px;
}
