/* ════════════════════════════════════════════════════
   LiteSpec Layout Tokens
   Single source of truth for layout dimensions and
   structural CSS classes. Loaded globally via base.html.
   ════════════════════════════════════════════════════ */

/* Inter is the only typeface (variable, weights 300-800), self-hosted from static/fonts (OFL.txt beside it).
   --font-sans is the single source: every other font-family in the app points to it or names Inter first. */
@font-face {
  font-family: 'Inter'; font-style: normal; font-weight: 300 800; font-display: swap;
  src: url("../fonts/inter-latin-ext.1ad231aac0a8.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter'; font-style: normal; font-weight: 300 800; font-display: swap;
  src: url("../fonts/inter-latin.260c81a4759b.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  --font-sans: 'Inter', sans-serif;
  --font-mono: var(--font-sans);
  --topbar-height: 84px;
  --sidebar-width: 220px;
  --sidebar-width-collapsed: 52px;
  --secondary-sidebar-width: 300px;
  --secondary-sidebar-width-collapsed: 42px;
  --sidebar-bg: linear-gradient(180deg, #3a1f6e 0%, #2e1860 50%, #271357 100%);
  --secondary-sidebar-bg: #f8f7f7;
  --secondary-sidebar-border: #ddd6f0;
}

/* ── Theme: Light mode (default) ── */
:root:not([data-theme="dark"]) {
  --topbar-bg: #f8f7f7;
  --topbar-shadow: 0 2px 20px rgba(0, 0, 0, .08);
  --sidebar-bg: linear-gradient(180deg, #3a1f6e 0%, #2e1860 50%, #271357 100%);
  --sidebar-text-primary: #2e1860;
  --sidebar-text-secondary: #2e1860;
  --sidebar-hover-bg: rgba(255, 255, 255, 0.1);
  --secondary-sidebar-bg: #f7f7f7;
  --secondary-sidebar-text: #262626;
  --secondary-sidebar-border: #ebebeb;
  --body-bg: #f5f3ff;
}

/* ── Theme: Dark mode ── */
:root[data-theme="dark"] {
  --topbar-bg: linear-gradient(135deg, #221248 0%, #371b7a 100%);
  --topbar-shadow: 0 4px 12px rgba(0, 0, 0, .4);
  --sidebar-bg: linear-gradient(180deg, #1a0f3a 0%, #140925 50%, #0f0820 100%);
  --sidebar-text-primary: #e5e7eb;
  --sidebar-text-secondary: rgba(229, 231, 235, 0.6);
  --sidebar-hover-bg: rgba(255, 255, 255, 0.08);
  --secondary-sidebar-bg: #131826;
  --secondary-sidebar-text: #ffffff;
  --secondary-sidebar-border: #2d3748;
  --body-bg: #111827;
  color-scheme: dark;
}

/* ── App shell layout ── */
.ls-app-body {
  display: flex;
  flex: 1;
  min-height: calc(100vh - var(--topbar-offset, var(--topbar-height)));
}

/* ── Topbar ── */
.ls-topbar {
  height: auto;
  min-height: var(--topbar-height);
  position: sticky;
  top: 0;
  z-index: 40;
  width: 100%;
  background: var(--topbar-bg);
  box-shadow: var(--topbar-shadow);
}

.ls-topbar--plain {
  background: var(--topbar-bg);
  box-shadow: var(--topbar-shadow);
}

/* ── Primary sidebar outer wrapper (Alpine :class controlled) ── */
.ls-sidebar-outer {
  flex-shrink: 0;
  transition: width .2s ease;
  position: sticky;
  top: var(--topbar-offset, var(--topbar-height));
  align-self: flex-start;
  height: calc(100vh - var(--topbar-offset, var(--topbar-height)));
  z-index: 35;
  width: var(--sidebar-width);
}

.ls-sidebar-outer.ls-sidebar-collapsed {
  width: var(--sidebar-width-collapsed);
}

/* ── Primary sidebar inner panel ── */
.ls-sidebar-inner {
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
  background: var(--sidebar-bg);
}

/* ── primary-table column resize handle ── */
.ws-col-resizer {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  width: 8px;
  cursor: col-resize;
  z-index: 1;
  border-right: 2px solid #c9b8e8;
  transition: border-color .15s;
}
.ws-col-resizer:hover,
.ws-col-resizer:active {
  border-right-color: #764ba2;
  border-right-width: 3px;
}

/* ── Status tokens (UI kit) ──────────────────────────────────────
   One soft palette for every pass / warn / fail / info / neutral
   surface: app-badge, .cell-util, status-pill, alerts, toasts.
   Read these; never hard-code the hex pairs in a page.
   ──────────────────────────────────────────────────────────────── */
:root {
  --pass-bg: #d1fae5;     --pass-fg: #065f46;     --pass-border: #a7f3d0;
  --warn-bg: #fef3c7;     --warn-fg: #92400e;     --warn-border: #fcd34d;
  --fail-bg: #fee2e2;     --fail-fg: #991b1b;     --fail-border: #fca5a5;
  --info-bg: #dbeafe;     --info-fg: #1e40af;     --info-border: #93c5fd;
  --neutral-bg: #f3f4f6;  --neutral-fg: #6b7280;  --neutral-border: #d1d5db;
}
/* ── Theme tokens: neutral ramp (light values equal the hex they replace) ──
   Every neutral surface, text, line and accent colour used by the UI kit and
   page CSS reads one of these. Dark values sit in the screen-only block below,
   so print and PDF stay light. Add a token here (light + dark) before using a
   new colour in a template or stylesheet; never hard-code #fff / #f9fafb / #6b7280.
   ──────────────────────────────────────────────────────────────── */
:root {
  /* surfaces */
  --surface-raised:      #ffffff;   /* popovers, menus, modals above --surface */
  --surface-sunken:      #f9fafb;   /* inset wells, zebra rows, quiet panels */
  --surface-tint:        #f5f3ff;   /* table heads, hover, brand wash */
  --surface-tint-2:      #faf9ff;
  --surface-accent:      #ede9fe;   /* selected rows, active chips */
  --surface-accent-2:    #ddd6fe;
  /* text */
  --text:                #1f2937;   /* default body text */
  --text-strong:         #1f2937;
  --text-ink:            #111827;
  --text-body:           #374151;
  --text-body-2:         #4b5563;
  --text-muted:          #6b7280;
  --text-faint:          #9ca3af;
  --accent-text:         #7c3aed;
  --accent-text-strong:  #6d28d9;
  --accent-text-deep:    #5b21b6;
  --accent-text-ink:     #4c1d95;
  --danger-text:         #dc2626;
  --danger-text-2:       #b91c1c;
  --accent:              #7c3aed;
  /* lines */
  --line:                #e5e7eb;
  --line-strong:         #d1d5db;
  --line-faint:          #f3f4f6;
  --accent-line:         #c4b5fd;
  --accent-line-soft:    #ddd6fe;
  --accent-line-faint:   #ece8f8;
  /* soft status washes */
  --fail-bg-soft:        #fef2f2;
  --info-bg-soft:        #eff6ff;
  color-scheme: light;
}

@media screen {
  :root[data-theme="dark"] {
    --bg:                #111827;
    --surface:           #1f2937;
    --surface-2:         #1a2231;
    --surface-raised:    #263244;
    --surface-sunken:    #182030;
    --surface-tint:      #262046;
    --surface-tint-2:    #211d3d;
    --surface-accent:    #352d62;
    --surface-accent-2:  #433975;
    --brand-light:       #2d2650;
    --brand-mid:         #a78bfa;
    --border:            rgba(167, 139, 250, 0.18);
    --border-strong:     rgba(167, 139, 250, 0.32);
    --text-primary:      #f3f4f6;
    --text-secondary:    #b4bccb;
    --text-tertiary:     #8e98aa;
    --text:              #f3f4f6;
    --text-strong:       #f3f4f6;
    --text-ink:          #f9fafb;
    --text-body:         #d1d5db;
    --text-body-2:       #bcc4d0;
    --text-muted:        #a3acba;
    --text-faint:        #8e98aa;
    --accent-text:       #a78bfa;
    --accent-text-strong:#b7a3fb;
    --accent-text-deep:  #c4b5fd;
    --accent-text-ink:   #ddd6fe;
    --danger-text:       #f87171;
    --danger-text-2:     #fca5a5;
    --accent:            #8b5cf6;
    --line:              #374151;
    --line-strong:       #4b5563;
    --line-faint:        #2b3544;
    --accent-line:       #5b4a9a;
    --accent-line-soft:  #453b7a;
    --accent-line-faint: #3a3260;
    --fail-bg-soft:      rgba(239, 68, 68, .10);
    --info-bg-soft:      rgba(59, 130, 246, .10);
    /* status palette */
    --pass-bg: rgba(16, 185, 129, .16);  --pass-fg: #6ee7b7;  --pass-border: rgba(16, 185, 129, .35);
    --warn-bg: rgba(245, 158, 11, .16);  --warn-fg: #fcd34d;  --warn-border: rgba(245, 158, 11, .35);
    --fail-bg: rgba(239, 68, 68, .16);   --fail-fg: #fca5a5;  --fail-border: rgba(239, 68, 68, .35);
    --info-bg: rgba(59, 130, 246, .16);  --info-fg: #93c5fd;  --info-border: rgba(59, 130, 246, .35);
    --neutral-bg: rgba(156, 163, 175, .14); --neutral-fg: #d1d5db; --neutral-border: rgba(156, 163, 175, .3);
    /* table kit */
    --tbl-head-bg: #262046;  --tbl-head-color: #f3f4f6;  --tbl-head-border: #453b7a;
    --tbl-cell-color: #d1d5db;  --tbl-border: #2b3544;
    --tbl-row-hover: #2a2548;  --tbl-row-selected: #352d62;  --tbl-head-hover-bg: #352d62;
    --wds-border: #374151;  --wds-border-subtle: #2b3544;  --wds-surface: #1f2937;  --wds-surface-2: #1a2231;
    --shadow-xs: 0 1px 2px rgba(0, 0, 0, .4);
    --shadow-sm: 0 1px 3px rgba(0, 0, 0, .45), 0 1px 2px rgba(0, 0, 0, .3);
    --shadow-md: 0 4px 12px rgba(0, 0, 0, .5);
    --shadow-lg: 0 12px 32px rgba(0, 0, 0, .6);
    --sq-surface: #1f2937;  --sq-line: #374151;  --sq-ink: #f3f4f6;  --sq-ink-2: #d1d5db;  --sq-ink-3: #a3acba;
    --sq-hover: #2a2548;  --sq-on-bg: #352d62;  --sq-on-ink: #c4b5fd;  --sq-on-line: #453b7a;
    --sq-tag-bg: rgba(167, 139, 250, .18);  --sq-area: rgba(167, 139, 250, .16);
  }
}

/* ── Generated ramp tokens (legacy hex literals) ─────────────────
   One token per light hex that page CSS used to hard-code, so light mode
   renders exactly as before and dark mode gets a derived value (lightness
   inverted, hue kept). Prefer the named tokens above for new work. Name:
   --c-<bg|text|border>-<hex>.
   ─────────────────────────────────────────────────────────────── */
:root {
  --c-bg-bbf7d0: #bbf7d0;
  --c-bg-bfdbfe: #bfdbfe;
  --c-bg-c4b5fd: #c4b5fd;
  --c-bg-cffafe: #cffafe;
  --c-bg-d7d9e0: #d7d9e0;
  --c-bg-d8b4fe: #d8b4fe;
  --c-bg-dce4ec: #dce4ec;
  --c-bg-dcfce7: #dcfce7;
  --c-bg-ddd6f4: #ddd6f4;
  --c-bg-dddddd: #dddddd;
  --c-bg-e0f2fe: #e0f2fe;
  --c-bg-e2e6ea: #e2e6ea;
  --c-bg-e5e0f2: #e5e0f2;
  --c-bg-e5e7eb: #e5e7eb;
  --c-bg-e6defb: #e6defb;
  --c-bg-e6e1f6: #e6e1f6;
  --c-bg-e8f1fb: #e8f1fb;
  --c-bg-e9e3f8: #e9e3f8;
  --c-bg-e9e7e2: #e9e7e2;
  --c-bg-ece9f7: #ece9f7;
  --c-bg-ecfdf5: #ecfdf5;
  --c-bg-ecfeff: #ecfeff;
  --c-bg-ede9fc: #ede9fc;
  --c-bg-eee8f9: #eee8f9;
  --c-bg-eef2f7: #eef2f7;
  --c-bg-eef2ff: #eef2ff;
  --c-bg-f0ebfe: #f0ebfe;
  --c-bg-f0ebff: #f0ebff;
  --c-bg-f0f4f8: #f0f4f8;
  --c-bg-f0fdf4: #f0fdf4;
  --c-bg-f0fdf7: #f0fdf7;
  --c-bg-f1ecfe: #f1ecfe;
  --c-bg-f1eefb: #f1eefb;
  --c-bg-f1eefc: #f1eefc;
  --c-bg-f1f4f8: #f1f4f8;
  --c-bg-f1f5f9: #f1f5f9;
  --c-bg-f2f4f8: #f2f4f8;
  --c-bg-f3effb: #f3effb;
  --c-bg-f3f0fa: #f3f0fa;
  --c-bg-f3f0fb: #f3f0fb;
  --c-bg-f3f0fd: #f3f0fd;
  --c-bg-f3f0ff: #f3f0ff;
  --c-bg-f4f5f8: #f4f5f8;
  --c-bg-f5f0ff: #f5f0ff;
  --c-bg-f5f2ff: #f5f2ff;
  --c-bg-f5f5f5: #f5f5f5;
  --c-bg-f6f4fb: #f6f4fb;
  --c-bg-f6f4fd: #f6f4fd;
  --c-bg-f6f5f5: #f6f5f5;
  --c-bg-f6f7f9: #f6f7f9;
  --c-bg-f7f5fd: #f7f5fd;
  --c-bg-f7f7fa: #f7f7fa;
  --c-bg-f8f7f7: #f8f7f7;
  --c-bg-f8f7fa: #f8f7fa;
  --c-bg-f8f7fc: #f8f7fc;
  --c-bg-f8f7ff: #f8f7ff;
  --c-bg-f8f9fa: #f8f9fa;
  --c-bg-f8fafc: #f8fafc;
  --c-bg-f9f6fe: #f9f6fe;
  --c-bg-f9f6ff: #f9f6ff;
  --c-bg-f9f7ff: #f9f7ff;
  --c-bg-f9f8ff: #f9f8ff;
  --c-bg-faf5ff: #faf5ff;
  --c-bg-faf8fe: #faf8fe;
  --c-bg-faf8ff: #faf8ff;
  --c-bg-faf9fc: #faf9fc;
  --c-bg-faf9fd: #faf9fd;
  --c-bg-faf9fe: #faf9fe;
  --c-bg-fafafa: #fafafa;
  --c-bg-fafafe: #fafafe;
  --c-bg-fafbff: #fafbff;
  --c-bg-fbfafd: #fbfafd;
  --c-bg-fbfafe: #fbfafe;
  --c-bg-fbfaff: #fbfaff;
  --c-bg-fbfbfd: #fbfbfd;
  --c-bg-fbfbfe: #fbfbfe;
  --c-bg-fcfbff: #fcfbff;
  --c-bg-fcfcfe: #fcfcfe;
  --c-bg-fdf3e0: #fdf3e0;
  --c-bg-fdfaff: #fdfaff;
  --c-bg-fdfcff: #fdfcff;
  --c-bg-fecaca: #fecaca;
  --c-bg-fef9c3: #fef9c3;
  --c-bg-fefce8: #fefce8;
  --c-bg-fff1f2: #fff1f2;
  --c-bg-fff5f5: #fff5f5;
  --c-bg-fff7ed: #fff7ed;
  --c-bg-fffbeb: #fffbeb;
  --c-bg-fffdf7: #fffdf7;
  --c-border-bbf7d0: #bbf7d0;
  --c-border-bfdbfe: #bfdbfe;
  --c-border-c2b8e8: #c2b8e8;
  --c-border-c2c2c2: #c2c2c2;
  --c-border-c4b8e4: #c4b8e4;
  --c-border-c7d2fe: #c7d2fe;
  --c-border-c8bcee: #c8bcee;
  --c-border-c9bbee: #c9bbee;
  --c-border-c9bbef: #c9bbef;
  --c-border-cbd5e1: #cbd5e1;
  --c-border-cccccc: #cccccc;
  --c-border-cfc6ea: #cfc6ea;
  --c-border-cfc9e3: #cfc9e3;
  --c-border-d2d2d2: #d2d2d2;
  --c-border-d4d2cf: #d4d2cf;
  --c-border-d6cbef: #d6cbef;
  --c-border-d8ccee: #d8ccee;
  --c-border-d9cff0: #d9cff0;
  --c-border-dccdfb: #dccdfb;
  --c-border-ddd4f3: #ddd4f3;
  --c-border-ddd6f0: #ddd6f0;
  --c-border-ddd6f4: #ddd6f4;
  --c-border-dedede: #dedede;
  --c-border-e0d4f7: #e0d4f7;
  --c-border-e0d9f7: #e0d9f7;
  --c-border-e1ddeb: #e1ddeb;
  --c-border-e2d9f3: #e2d9f3;
  --c-border-e2d9fb: #e2d9fb;
  --c-border-e2e8f0: #e2e8f0;
  --c-border-e3e6ea: #e3e6ea;
  --c-border-e5d9ff: #e5d9ff;
  --c-border-e5e0f2: #e5e0f2;
  --c-border-e6e1f5: #e6e1f5;
  --c-border-e6e3f0: #e6e3f0;
  --c-border-e7e0f5: #e7e0f5;
  --c-border-e7e5ef: #e7e5ef;
  --c-border-e8e3f5: #e8e3f5;
  --c-border-e8e6e1: #e8e6e1;
  --c-border-e8eaee: #e8eaee;
  --c-border-e9d5ff: #e9d5ff;
  --c-border-e9e3f7: #e9e3f7;
  --c-border-e9e4f5: #e9e4f5;
  --c-border-e9e4ff: #e9e4ff;
  --c-border-e9e5f5: #e9e5f5;
  --c-border-e9e7fc: #e9e7fc;
  --c-border-e9e9f0: #e9e9f0;
  --c-border-e9eaef: #e9eaef;
  --c-border-e9ebf0: #e9ebf0;
  --c-border-ece7f7: #ece7f7;
  --c-border-ece8f5: #ece8f5;
  --c-border-ece8f6: #ece8f6;
  --c-border-ececec: #ececec;
  --c-border-ececf2: #ececf2;
  --c-border-ede9fe: #ede9fe;
  --c-border-eee9f7: #eee9f7;
  --c-border-eeeeee: #eeeeee;
  --c-border-eef0f3: #eef0f3;
  --c-border-eef0f4: #eef0f4;
  --c-border-eef2f7: #eef2f7;
  --c-border-eef2ff: #eef2ff;
  --c-border-efeafa: #efeafa;
  --c-border-f0ebff: #f0ebff;
  --c-border-f0eef5: #f0eef5;
  --c-border-f0eef7: #f0eef7;
  --c-border-f0f0f0: #f0f0f0;
  --c-border-f0f0f5: #f0f0f5;
  --c-border-f0f1f5: #f0f1f5;
  --c-border-f1edfa: #f1edfa;
  --c-border-f1eefb: #f1eefb;
  --c-border-f1eff6: #f1eff6;
  --c-border-f1eff8: #f1eff8;
  --c-border-f1f5f9: #f1f5f9;
  --c-border-f3e8ff: #f3e8ff;
  --c-border-f3f0fd: #f3f0fd;
  --c-border-f3f0ff: #f3f0ff;
  --c-border-f3f2f9: #f3f2f9;
  --c-border-f8f7f7: #f8f7f7;
  --c-border-fde68a: #fde68a;
  --c-border-fecaca: #fecaca;
  --c-border-fecdd3: #fecdd3;
  --c-border-fed7aa: #fed7aa;
  --c-text-1a1b2e: #1a1b2e;
  --c-text-1e293b: #1e293b;
  --c-text-222222: #222222;
  --c-text-231d45: #231d45;
  --c-text-24170a: #24170a;
  --c-text-2b2550: #2b2550;
  --c-text-2d2d2b: #2d2d2b;
  --c-text-2d3748: #2d3748;
  --c-text-312e81: #312e81;
  --c-text-334155: #334155;
  --c-text-3b3561: #3b3561;
  --c-text-444441: #444441;
  --c-text-475569: #475569;
  --c-text-495057: #495057;
  --c-text-4a5568: #4a5568;
  --c-text-4b4769: #4b4769;
  --c-text-4e4e4e: #4e4e4e;
  --c-text-555555: #555555;
}

@media screen {
  :root[data-theme="dark"] {
    --c-bg-bbf7d0: #205533;
    --c-bg-bfdbfe: #1e3450;
    --c-bg-c4b5fd: #2b2055;
    --c-bg-cffafe: #1c4549;
    --c-bg-d7d9e0: #323540;
    --c-bg-d8b4fe: #3a2055;
    --c-bg-dce4ec: #253443;
    --c-bg-dcfce7: #1a4428;
    --c-bg-ddd6f4: #271c4a;
    --c-bg-dddddd: #383838;
    --c-bg-e0f2fe: #193142;
    --c-bg-e2e6ea: #2b333b;
    --c-bg-e5e0f2: #281d45;
    --c-bg-e5e7eb: #2b2f38;
    --c-bg-e6defb: #251a44;
    --c-bg-e6e1f6: #241a45;
    --c-bg-e8f1fb: #182b40;
    --c-bg-e9e3f8: #251943;
    --c-bg-e9e7e2: #3a362c;
    --c-bg-ece9f7: #211941;
    --c-bg-ecfdf5: #173d2b;
    --c-bg-ecfeff: #173a3c;
    --c-bg-ede9fc: #20183f;
    --c-bg-eee8f9: #271840;
    --c-bg-eef2f7: #1c293b;
    --c-bg-eef2ff: #161f3b;
    --c-bg-f0ebfe: #21173d;
    --c-bg-f0ebff: #20173c;
    --c-bg-f0f4f8: #1b2a3a;
    --c-bg-f0fdf4: #163b22;
    --c-bg-f0fdf7: #163b2a;
    --c-bg-f1ecfe: #21173c;
    --c-bg-f1eefb: #20173d;
    --c-bg-f1eefc: #1f173c;
    --c-bg-f1f4f8: #1c2838;
    --c-bg-f1f5f9: #192a3a;
    --c-bg-f2f4f8: #1d2636;
    --c-bg-f3effb: #23173c;
    --c-bg-f3f0fa: #22173c;
    --c-bg-f3f0fb: #21173c;
    --c-bg-f3f0fd: #1f163b;
    --c-bg-f3f0ff: #1d163a;
    --c-bg-f4f5f8: #202532;
    --c-bg-f5f0ff: #22163a;
    --c-bg-f5f2ff: #1e1639;
    --c-bg-f5f5f5: #2a2a2a;
    --c-bg-f6f4fb: #20163a;
    --c-bg-f6f4fd: #1e1639;
    --c-bg-f6f5f5: #2c2727;
    --c-bg-f6f7f9: #202630;
    --c-bg-f7f5fd: #1e1639;
    --c-bg-f7f7fa: #1e1e31;
    --c-bg-f8f7f7: #2b2626;
    --c-bg-f8f7fa: #251e31;
    --c-bg-f8f7fc: #1c1539;
    --c-bg-f8f7ff: #191537;
    --c-bg-f8f9fa: #21272e;
    --c-bg-f8fafc: #172736;
    --c-bg-f9f6fe: #221538;
    --c-bg-f9f6ff: #211538;
    --c-bg-f9f7ff: #1e1537;
    --c-bg-f9f8ff: #1a1537;
    --c-bg-faf5ff: #271538;
    --c-bg-faf8fe: #201537;
    --c-bg-faf8ff: #1f1537;
    --c-bg-faf9fc: #221a33;
    --c-bg-faf9fd: #1e1537;
    --c-bg-faf9fe: #1c1537;
    --c-bg-fafafa: #272727;
    --c-bg-fafafe: #151536;
    --c-bg-fafbff: #141b36;
    --c-bg-fbfafd: #201636;
    --c-bg-fbfafe: #1d1536;
    --c-bg-fbfaff: #1b1436;
    --c-bg-fbfbfd: #191932;
    --c-bg-fbfbfe: #141436;
    --c-bg-fcfbff: #1d1436;
    --c-bg-fcfcfe: #141436;
    --c-bg-fdf3e0: #423419;
    --c-bg-fdfaff: #291436;
    --c-bg-fdfcff: #1f1435;
    --c-bg-fecaca: #4b1d1d;
    --c-bg-fef9c3: #4e4a1e;
    --c-bg-fefce8: #3e3b18;
    --c-bg-fff1f2: #3a1619;
    --c-bg-fff5f5: #381515;
    --c-bg-fff7ed: #3c2b17;
    --c-bg-fffbeb: #3c3517;
    --c-bg-fffdf7: #372f15;
    --c-border-bbf7d0: #296b40;
    --c-border-bfdbfe: #274366;
    --c-border-c2b8e8: #3a2c73;
    --c-border-c2c2c2: #585858;
    --c-border-c4b8e4: #402c74;
    --c-border-c7d2fe: #253263;
    --c-border-c8bcee: #3a2a6e;
    --c-border-c9bbee: #3d2a6f;
    --c-border-c9bbef: #3c2a6e;
    --c-border-cbd5e1: #374a60;
    --c-border-cccccc: #525252;
    --c-border-cfc6ea: #3a296c;
    --c-border-cfc9e3: #3f3464;
    --c-border-d2d2d2: #4e4e4e;
    --c-border-d4d2cf: #534f4a;
    --c-border-d6cbef: #3b2768;
    --c-border-d8ccee: #3e2768;
    --c-border-d9cff0: #3a2665;
    --c-border-dccdfb: #392561;
    --c-border-ddd4f3: #372562;
    --c-border-ddd6f0: #362562;
    --c-border-ddd6f4: #332561;
    --c-border-dedede: #474747;
    --c-border-e0d4f7: #392460;
    --c-border-e0d9f7: #31245e;
    --c-border-e1ddeb: #3c3255;
    --c-border-e2d9f3: #392460;
    --c-border-e2d9fb: #32235c;
    --c-border-e2e8f0: #2c3d55;
    --c-border-e3e6ea: #38404b;
    --c-border-e5d9ff: #34225a;
    --c-border-e5e0f2: #35265a;
    --c-border-e6e1f5: #31235b;
    --c-border-e6e3f0: #352d53;
    --c-border-e7e0f5: #36235c;
    --c-border-e7e5ef: #37304f;
    --c-border-e8e3f5: #32225a;
    --c-border-e8e6e1: #4c473a;
    --c-border-e8eaee: #363c48;
    --c-border-e9d5ff: #3e235c;
    --c-border-e9e3f7: #33225a;
    --c-border-e9e4f5: #33225a;
    --c-border-e9e4ff: #2a2156;
    --c-border-e9e5f5: #302259;
    --c-border-e9e7fc: #262156;
    --c-border-e9e9f0: #32324a;
    --c-border-e9eaef: #353848;
    --c-border-e9ebf0: #32394a;
    --c-border-ece7f7: #322158;
    --c-border-ece8f5: #342555;
    --c-border-ece8f6: #312257;
    --c-border-ececec: #3e3e3e;
    --c-border-ececf2: #313148;
    --c-border-ede9fe: #2a2054;
    --c-border-eee9f7: #342157;
    --c-border-eeeeee: #3d3d3d;
    --c-border-eef0f3: #313a46;
    --c-border-eef0f4: #2f3748;
    --c-border-eef2f7: #253850;
    --c-border-eef2ff: #1f2b51;
    --c-border-efeafa: #312055;
    --c-border-f0ebff: #2c1f53;
    --c-border-f0eef5: #352c4a;
    --c-border-f0eef7: #2f2550;
    --c-border-f0f0f0: #3c3c3c;
    --c-border-f0f0f5: #2f2f46;
    --c-border-f0f1f5: #2f3346;
    --c-border-f1edfa: #302054;
    --c-border-f1eefb: #2b2053;
    --c-border-f1eff6: #332a4b;
    --c-border-f1eff8: #2d2351;
    --c-border-f1f5f9: #223950;
    --c-border-f3e8ff: #392054;
    --c-border-f3f0fd: #2b1f51;
    --c-border-f3f0ff: #291f50;
    --c-border-f3f2f9: #2a244e;
    --c-border-f8f7f7: #3b3434;
    --c-border-fde68a: #7e6e30;
    --c-border-fecaca: #612525;
    --c-border-fecdd3: #60242c;
    --c-border-fed7aa: #6f4f2a;
    --c-text-1a1b2e: #c5c7de;
    --c-text-1e293b: #b9c6db;
    --c-text-222222: #d4d4d4;
    --c-text-231d45: #b6afdd;
    --c-text-24170a: #eddece;
    --c-text-2b2550: #aca6d6;
    --c-text-2d2d2b: #ccccc9;
    --c-text-2d3748: #afbacd;
    --c-text-312e81: #9290d5;
    --c-text-334155: #a3b2c8;
    --c-text-3b3561: #a39cc9;
    --c-text-444441: #b8b8b5;
    --c-text-475569: #a4b0c1;
    --c-text-495057: #acb2b9;
    --c-text-4a5568: #a6afbf;
    --c-text-4b4769: #a7a4c1;
    --c-text-4e4e4e: #b2b2b2;
    --c-text-555555: #b2b2b2;
  }
}

/* ── Page palettes in dark ───────────────────────────────────────
   Page stylesheets define their own local colour variables (--ss-*, --la-*,
   --wc-*, --calc-* ...). Their dark values live here so every theme value is
   in one file; light values stay where they are defined. Neutral and tint
   colours are lightness-inverted, accent and band colours are untouched.
   ─────────────────────────────────────────────────────────────── */
@media screen {
  :root[data-theme="dark"] .calcs {
    --calc-bad-bg: #411919;
    --calc-card: #242424;
    --calc-line: #362562;
    --calc-muted: #acb0b9;
    --calc-ok-bg: #1c4a32;
  }
  :root[data-theme="dark"] #grid.calc-grid--banded {
    --gr-a: #1c1639;
    --gr-a-line: #2d235c;
    --gr-b: #21173d;
    --gr-head: #141436;
    --gr-head-line: #2d235c;
    --gr-ink: #c7c4e4;
    --gr-ink-band: var(--accent-text-deep);
    --gr-row-line: #313741;
    --gr-selected: #1f1537;
    --gr-sep-a: #1e1639;
    --gr-sep-wind: #402d18;
    --gr-wind: #3e2b17;
    --gr-wind-head: #392a16;
    --gr-wind-ink: #d5a190;
    --gr-wind-line: #6f4f2a;
  }
  :root[data-theme="dark"] .calc-result-overlay,
  :root[data-theme="dark"] .calc-workings-overlay {
    --calc-line: #362562;
    --calc-muted: #acb0b9;
    --rm-ink: #c7c4e4;
    --rm-track: #313a46;
  }
  :root[data-theme="dark"] .ds-scan {
    --ds-head-bg: #201538;
    --ds-line: #2a2054;
    --ds-tint: #1f1537;
    --ds-tint-2: #1c1639;
  }
  :root[data-theme="dark"] .ds-scan--ceiling {
    --ds-head-bg: #162c3a;
    --ds-line: #285269;
    --ds-tint: #162c3a;
    --ds-tint-2: #173a3c;
  }
  :root[data-theme="dark"] {
    --la-accent-ink: #ab90d5;
    --la-accent-line: #2d235c;
    --la-accent-mid: #2b2055;
    --la-accent-soft: #1f173e;
    --la-accent-wash: #1c1639;
    /* Text-role palette: points at the lightened neutral and accent text tokens.
       --la-c-3b3561 and --la-c-5b4ea0 stay dark on purpose: the 3D scene labels and
       the sector rose draw them over light fills that do not change with the theme. */
    --la-ok: var(--pass-fg);
    --la-seis-ink: var(--warn-fg);
    --la-seis-deep: var(--warn-fg);
    --la-c-111827: var(--text-ink);
    --la-c-1e293b: var(--c-text-1e293b);
    --la-c-2b2550: var(--c-text-2b2550);
    --la-c-4b4769: var(--c-text-4b4769);
    --la-c-4b5563: var(--text-body-2);
    --la-c-7354af: var(--accent-text);
    --la-c-78350f: var(--warn-fg);
    --la-c-7b76a0: var(--text-muted);
    --la-c-7c5fb3: var(--accent-text);
    --la-c-8a84ad: var(--text-muted);
    --la-c-a16207: var(--warn-fg);
    --la-c-b91c1c: var(--danger-text);
    --la-c-cbd5e1: #374a60;
    --la-c-d1d5db: #424a55;
    --la-c-d9d4ea: #2d244a;
    --la-c-e4ddf6: #271b46;
    --la-c-e6e1f5: #251a45;
    --la-c-e9e4fb: #221941;
    --la-c-ece8f8: #231941;
    --la-c-eeedf5: #231f39;
    --la-c-eef0ff: #161b3b;
    --la-c-f1eef9: #22173e;
    --la-c-f3effd: #21173c;
    --la-c-f3f0fd: #1f163b;
    --la-c-f3f1fb: #1e173c;
    --la-c-f3f4f6: #242830;
    --la-c-f6f4fd: #1e1639;
    --la-c-f7f5fd: #1e1639;
    --la-c-f8f6ff: #1d1538;
    --la-c-f8f7ff: #191537;
    --la-c-faf5ff: #271538;
    --la-c-faf9ff: #1a1536;
    --la-c-fecaca: #4b1d1d;
    --la-c-fee2e2: #411919;
    --la-c-fef2f2: #3a1616;
    --la-c-fef9c3: #4e4a1e;
    --la-ink: #bdc9da;
    --la-ink-2: #a7b2c3;
    --la-ink-3: #acb0b9;
    --la-ok-ink: #9cdab4;
    --la-ok-soft: #1a4428;
    --la-rule: #383e49;
    --la-seis-line: #7e6e30;
    --la-seis-tile: #3a2716;
    --la-seis-tile-line: #5d3e23;
    --la-seis-wash: #3c3517;
    --ls3-zone-gen-ink: #90d5a6;
    --ss-amber-200: #7e6e30;
    --ss-amber-50: #3c3517;
    --ss-blue-200: #1e3450;
    --ss-blue-50: #16263b;
    --ss-blue-700: #90a2d5;
    --ss-gray-600: #a8b1bd;
    --ss-gray-900: #cad4e8;
    --ss-green-100: #1a4428;
    --ss-green-50: #163b22;
    --ss-green-600: #90d5a9;
    --ss-green-700: #90d5aa;
    --ss-green-800: #9cdab4;
    --ss-red-50: #3a1616;
    --ss-red-700: #d59090;
    --ss-slate-100: #192a3a;
    --ss-slate-200: #212f40;
    --ss-slate-300: #374a60;
    --ss-slate-50: #172736;
    --ss-slate-500: var(--text-muted);
    --ss-slate-600: #a4b0c1;
    --ss-slate-700: #a3b2c8;
    --ss-slate-800: #b9c6db;
    --ss-slate-900: #c7d2ea;
    --ss-violet-300: #2b2055;
    --ss-violet-600: #a78bfa;
    --ss-violet-700: #b7a3fb;
    --ss-violet-800: #c4b5fd;
    --ss-violet-900: #ddd6fe;
  }
  :root[data-theme="dark"] .theme-wc,
  :root[data-theme="dark"] .adm-page,
  :root[data-theme="dark"] .wso,
  :root[data-theme="dark"] .wsr,
  :root[data-theme="dark"] .wsai,
  :root[data-theme="dark"] .wsr-head {
    --wc-bg: #211d36;
    --wc-body: #aaa7be;
    --wc-border: #362e54;
    --wc-chip-bg: #211840;
    --wc-chip-fg: #9f94d1;
    --wc-chip-hover: #251b48;
    --wc-divider: #352c4a;
    --wc-free-bg: #221840;
    --wc-free-fg: #a390d5;
    --wc-ink: #c7c3e1;
    --wc-label: #adabba;
    --wc-outline: #3f3464;
    --wc-pro-bg: #231a43;
    --wc-pro-fg: #b6afdd;
    --wc-surface: #242424;
  }
}
