/* Per-macro-area design tokens — D-113 (2026-10-27, replacing D-17's nine colours): every section of BlueShell wears
   the colour of the app it belongs to, and the apps keep the colours of their logos. See docs/reference-style.md §1.1.

   FIVE FAMILIES, by name (protected/components/BrandPalette.php is their ONE source):
       desk    #01a6b7  the office app      — master data and CRM, tools, settings
       deck    #4f5bd5  the moorings app    — the marina and its organisation (contracts, transits, piers)
       yard    #fc740e  the yard app        — the shipyard, boat sales, the point of sale
       pulse   #a3449a  the managers' app   — accounting and analytics
       mydock  #047cd8  the customers' app  — BlueShell's pages about the customer portal
   Each family has its variants, derived by fixed rules (BrandPalette::variants()): `--bs-<family>` the logo colour
   (decorative: borders, tints, a glyph on a dark bar), `-ink` the step that carries text and white labels (4.5:1 on
   #f7fafc, the darkest of the card / header / hover surfaces), `-strong` the pressed fill, `-soft` a selected ground,
   `-line` a border, `-muted` a disabled fill, `-ring` / `-ring-strong` the focus glows, `-dark` text in the apps' dark
   theme, `-on` what is written on a fill.

   Every page wears the family of its area (protected/config/macro-areas.php: the voice of the top bar that holds it,
   D-14), through the `--area-*` tokens every component of the kit reads: `--area-accent` (the logo colour),
   `--area-ink`, `--area-accent-dark`, the rings, `--area-soft`, `--area-line`, `--area-muted`. The block between the
   markers below is WRITTEN by `php scripts/ds-palette.php --write`: a colour changes in BrandPalette (and in the app's
   icon), never here — BrandPaletteTest fails on a hand edit, on a variant that misses its contrast, on two families
   that look alike. Use --area-ink for anything read as text or a glyph beside text and for a fill under a white label;
   --area-accent for decorative borders, shadows and tints; the ring pair for focus glows. */
:root {
    --area-primary: #2c3e50;
    --area-primary-dark: #1e2b37;

    /* ---- The privileged-session warning colour -------------------------------------------------
       NOT an area token: it does not change by macro-area, because it is not an identity — it is a
       warning. The root menu bar has been this brown for years, and until 2026-09-17 the value existed
       ONLY inside `css/bootstrap.min.css`, a customised build where `.navbar-default` was re-themed.
       That made it invisible to anyone reading the application's own CSS, and unusable by anything
       else: the flag in the bar, the support-session strip and root's destructive confirms each had to
       either repeat the hex or settle for a different colour. Naming it here is what makes the warning
       ONE colour with one meaning — "this session can do things to somebody else's data".
       Contrast: #802900 carries white at 8.5:1, so it is safe for text as well as for a band. */
    --root-warn: #802900;
    --root-warn-edge: #5f1e00;
    --root-warn-ink: #fff;
}

/* Every area block below is declared for BOTH `body.bs-area-<slug>` (the whole page, stamped by the layout from
   Controller::getMacroArea()) and the bare `.bs-area-<slug>` class, so an element of another area can wear that
   area's family on its own wrapper (D-73: the Settings hub's cards). Marina is the default (MacroAreaMap::DEFAULT_AREA),
   so its block is :root's too. */
/* ==== BEGIN BrandPalette (generated: php scripts/ds-palette.php --write; do not edit by hand) ==== */
:root {
    --bs-desk: #01a6b7;
    --bs-desk-ink: #017e8b;
    --bs-desk-strong: #016b76;
    --bs-desk-soft: #e6f6f8;
    --bs-desk-line: #a6e0e6;
    --bs-desk-muted: #a7c1c4;
    --bs-desk-ring: rgba(1, 166, 183, .15);
    --bs-desk-ring-strong: rgba(1, 166, 183, .25);
    --bs-desk-dark: #01a6b7;
    --bs-desk-on: #ffffff;
    --bs-deck: #4f5bd5;
    --bs-deck-ink: #4f5bd5;
    --bs-deck-strong: #434db5;
    --bs-deck-soft: #edeffb;
    --bs-deck-line: #c1c6f0;
    --bs-deck-muted: #c4c5d8;
    --bs-deck-ring: rgba(79, 91, 213, .15);
    --bs-deck-ring-strong: rgba(79, 91, 213, .25);
    --bs-deck-dark: #7982df;
    --bs-deck-on: #ffffff;
    --bs-yard: #fc740e;
    --bs-yard-ink: #ba560a;
    --bs-yard-strong: #9e4909;
    --bs-yard-soft: #fff1e7;
    --bs-yard-line: #feceab;
    --bs-yard-muted: #dbc5b5;
    --bs-yard-ring: rgba(252, 116, 14, .15);
    --bs-yard-ring-strong: rgba(252, 116, 14, .25);
    --bs-yard-dark: #fc740e;
    --bs-yard-on: #ffffff;
    --bs-pulse: #a3449a;
    --bs-pulse-ink: #a3449a;
    --bs-pulse-strong: #8b3a83;
    --bs-pulse-soft: #f6ecf5;
    --bs-pulse-line: #dfbedc;
    --bs-pulse-muted: #c8b9c6;
    --bs-pulse-ring: rgba(163, 68, 154, .15);
    --bs-pulse-ring-strong: rgba(163, 68, 154, .25);
    --bs-pulse-dark: #b971b2;
    --bs-pulse-on: #ffffff;
    --bs-mydock: #047cd8;
    --bs-mydock-ink: #0475cb;
    --bs-mydock-strong: #0363ad;
    --bs-mydock-soft: #e6f2fb;
    --bs-mydock-line: #a7d1f1;
    --bs-mydock-muted: #adc0ce;
    --bs-mydock-ring: rgba(4, 124, 216, .15);
    --bs-mydock-ring-strong: rgba(4, 124, 216, .25);
    --bs-mydock-dark: #278edd;
    --bs-mydock-on: #ffffff;
}
/* marina: deck */
:root,
body.bs-area-marina,
.bs-area-marina {
    --area-accent: var(--bs-deck);
    --area-accent-dark: var(--bs-deck-strong);
    --area-ink: var(--bs-deck-ink);
    --area-accent-ring: var(--bs-deck-ring);
    --area-accent-ring-strong: var(--bs-deck-ring-strong);
    --area-soft: var(--bs-deck-soft);
    --area-line: var(--bs-deck-line);
    --area-muted: var(--bs-deck-muted);
    --area-dark: var(--bs-deck-dark);
}
/* org: deck */
body.bs-area-org,
.bs-area-org {
    --area-accent: var(--bs-deck);
    --area-accent-dark: var(--bs-deck-strong);
    --area-ink: var(--bs-deck-ink);
    --area-accent-ring: var(--bs-deck-ring);
    --area-accent-ring-strong: var(--bs-deck-ring-strong);
    --area-soft: var(--bs-deck-soft);
    --area-line: var(--bs-deck-line);
    --area-muted: var(--bs-deck-muted);
    --area-dark: var(--bs-deck-dark);
}
/* master: desk */
body.bs-area-master,
.bs-area-master {
    --area-accent: var(--bs-desk);
    --area-accent-dark: var(--bs-desk-strong);
    --area-ink: var(--bs-desk-ink);
    --area-accent-ring: var(--bs-desk-ring);
    --area-accent-ring-strong: var(--bs-desk-ring-strong);
    --area-soft: var(--bs-desk-soft);
    --area-line: var(--bs-desk-line);
    --area-muted: var(--bs-desk-muted);
    --area-dark: var(--bs-desk-dark);
}
/* tools: desk */
body.bs-area-tools,
.bs-area-tools {
    --area-accent: var(--bs-desk);
    --area-accent-dark: var(--bs-desk-strong);
    --area-ink: var(--bs-desk-ink);
    --area-accent-ring: var(--bs-desk-ring);
    --area-accent-ring-strong: var(--bs-desk-ring-strong);
    --area-soft: var(--bs-desk-soft);
    --area-line: var(--bs-desk-line);
    --area-muted: var(--bs-desk-muted);
    --area-dark: var(--bs-desk-dark);
}
/* app: desk */
body.bs-area-app,
.bs-area-app {
    --area-accent: var(--bs-desk);
    --area-accent-dark: var(--bs-desk-strong);
    --area-ink: var(--bs-desk-ink);
    --area-accent-ring: var(--bs-desk-ring);
    --area-accent-ring-strong: var(--bs-desk-ring-strong);
    --area-soft: var(--bs-desk-soft);
    --area-line: var(--bs-desk-line);
    --area-muted: var(--bs-desk-muted);
    --area-dark: var(--bs-desk-dark);
}
/* yard: yard */
body.bs-area-yard,
.bs-area-yard {
    --area-accent: var(--bs-yard);
    --area-accent-dark: var(--bs-yard-strong);
    --area-ink: var(--bs-yard-ink);
    --area-accent-ring: var(--bs-yard-ring);
    --area-accent-ring-strong: var(--bs-yard-ring-strong);
    --area-soft: var(--bs-yard-soft);
    --area-line: var(--bs-yard-line);
    --area-muted: var(--bs-yard-muted);
    --area-dark: var(--bs-yard-dark);
}
/* pos: yard */
body.bs-area-pos,
.bs-area-pos {
    --area-accent: var(--bs-yard);
    --area-accent-dark: var(--bs-yard-strong);
    --area-ink: var(--bs-yard-ink);
    --area-accent-ring: var(--bs-yard-ring);
    --area-accent-ring-strong: var(--bs-yard-ring-strong);
    --area-soft: var(--bs-yard-soft);
    --area-line: var(--bs-yard-line);
    --area-muted: var(--bs-yard-muted);
    --area-dark: var(--bs-yard-dark);
}
/* accounting: pulse */
body.bs-area-accounting,
.bs-area-accounting {
    --area-accent: var(--bs-pulse);
    --area-accent-dark: var(--bs-pulse-strong);
    --area-ink: var(--bs-pulse-ink);
    --area-accent-ring: var(--bs-pulse-ring);
    --area-accent-ring-strong: var(--bs-pulse-ring-strong);
    --area-soft: var(--bs-pulse-soft);
    --area-line: var(--bs-pulse-line);
    --area-muted: var(--bs-pulse-muted);
    --area-dark: var(--bs-pulse-dark);
}
/* analytics: pulse */
body.bs-area-analytics,
.bs-area-analytics {
    --area-accent: var(--bs-pulse);
    --area-accent-dark: var(--bs-pulse-strong);
    --area-ink: var(--bs-pulse-ink);
    --area-accent-ring: var(--bs-pulse-ring);
    --area-accent-ring-strong: var(--bs-pulse-ring-strong);
    --area-soft: var(--bs-pulse-soft);
    --area-line: var(--bs-pulse-line);
    --area-muted: var(--bs-pulse-muted);
    --area-dark: var(--bs-pulse-dark);
}
/* portal: mydock */
body.bs-area-portal,
.bs-area-portal {
    --area-accent: var(--bs-mydock);
    --area-accent-dark: var(--bs-mydock-strong);
    --area-ink: var(--bs-mydock-ink);
    --area-accent-ring: var(--bs-mydock-ring);
    --area-accent-ring-strong: var(--bs-mydock-ring-strong);
    --area-soft: var(--bs-mydock-soft);
    --area-line: var(--bs-mydock-line);
    --area-muted: var(--bs-mydock-muted);
    --area-dark: var(--bs-mydock-dark);
}
/* yardapp: yard */
body.bs-area-yardapp,
.bs-area-yardapp {
    --area-accent: var(--bs-yard);
    --area-accent-dark: var(--bs-yard-strong);
    --area-ink: var(--bs-yard-ink);
    --area-accent-ring: var(--bs-yard-ring);
    --area-accent-ring-strong: var(--bs-yard-ring-strong);
    --area-soft: var(--bs-yard-soft);
    --area-line: var(--bs-yard-line);
    --area-muted: var(--bs-yard-muted);
    --area-dark: var(--bs-yard-dark);
}
/* officeapp: desk */
body.bs-area-officeapp,
.bs-area-officeapp {
    --area-accent: var(--bs-desk);
    --area-accent-dark: var(--bs-desk-strong);
    --area-ink: var(--bs-desk-ink);
    --area-accent-ring: var(--bs-desk-ring);
    --area-accent-ring-strong: var(--bs-desk-ring-strong);
    --area-soft: var(--bs-desk-soft);
    --area-line: var(--bs-desk-line);
    --area-muted: var(--bs-desk-muted);
    --area-dark: var(--bs-desk-dark);
}
/* mooringapp: deck */
body.bs-area-mooringapp,
.bs-area-mooringapp {
    --area-accent: var(--bs-deck);
    --area-accent-dark: var(--bs-deck-strong);
    --area-ink: var(--bs-deck-ink);
    --area-accent-ring: var(--bs-deck-ring);
    --area-accent-ring-strong: var(--bs-deck-ring-strong);
    --area-soft: var(--bs-deck-soft);
    --area-line: var(--bs-deck-line);
    --area-muted: var(--bs-deck-muted);
    --area-dark: var(--bs-deck-dark);
}
/* pulseapp: pulse */
body.bs-area-pulseapp,
.bs-area-pulseapp {
    --area-accent: var(--bs-pulse);
    --area-accent-dark: var(--bs-pulse-strong);
    --area-ink: var(--bs-pulse-ink);
    --area-accent-ring: var(--bs-pulse-ring);
    --area-accent-ring-strong: var(--bs-pulse-ring-strong);
    --area-soft: var(--bs-pulse-soft);
    --area-line: var(--bs-pulse-line);
    --area-muted: var(--bs-pulse-muted);
    --area-dark: var(--bs-pulse-dark);
}
/* ==== END BrandPalette ==== */
