/* GENERATED by build_theme.php from dice-theme.src.css + palettes.php - edit those, not this file. */

/* ---- shared neutrals & status colours ---- */
:root {
  --dz-bg: #F6F4F1;
  --dz-surface: #FFFFFF;
  --dz-surface2: #FAF8F6;
  --dz-line: #DDD5D1;
  --dz-ink: #1B1416;
  --dz-ink2: #453A3E;
  --dz-muted: #5C4F54;
  --dz-faint: #6B5E63;
  --dz-ok: #0E7A3D;
  --dz-ok-soft: #E3F4EA;
  --dz-ok-text: #0B5F2F;
  --dz-warn: #A35F00;
  --dz-warn-soft: #FFF3D6;
  --dz-warn-text: #7A4B00;
  --dz-danger: #B3261E;
  --dz-danger-soft: #FDEAE8;
  --dz-danger-text: #8E1B15;
  --dz-info: #0B5FA5;
  --dz-info-soft: #E6F1FB;
  --dz-info-text: #084A82;
  --dz-gold: #D4AF37;
  --dz-gold-soft: #F8F0D6;
  --dz-gold-ink: #7A5C00;
  --dz-line-soft: #EBE5E2;
  --dz-n-bg: #120F11;
  --dz-n-surface: #1B171A;
  --dz-n-surface2: #221D21;
  --dz-n-line: #362B30;
  --dz-n-ink: #F3EDEF;
  --dz-n-ink2: #CFC5CA;
  --dz-n-muted: #A99EA3;
  --dz-n-faint: #93888D;
  --dz-n-ok: #4ADE80;
  --dz-n-ok-text: #86EFAC;
  --dz-n-warn: #FBBF24;
  --dz-n-warn-text: #FCD34D;
  --dz-n-danger: #F87171;
  --dz-n-danger-text: #FCA5A5;
  --dz-n-info: #7DD3FC;
  --dz-n-info-text: #BAE6FD;
}

/* ---- application palettes ---- */
[data-app="core"] {
  --dz-name: "DICE Core";
  --dz-primary-rgb: 138, 100, 0;
  --dz-primary: #8A6400;
  --dz-primary-dark: #5E4300;
  --dz-soft: #FAF1D8;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #3F3008;
  --dz-side-2: #261C03;
  --dz-side-ink: #ECEAE6;
  --dz-side-muted: #C2BFB8;
  --dz-side-group: #ADA99F;
  --dz-a-d: #B9A266;
  --dz-a-d2: #9E7E2B;
  --dz-soft-d: #382B13;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #CAB98C;
  --dz-p-50: #F7F4ED;
  --dz-p-100: #EFE9DB;
  --dz-p-300: #CAB98C;
  --dz-p-400: #AB8F47;
  --dz-p-500: #8A6400;
  --dz-p-600: #8A6400;
  --dz-p-700: #5E4300;
  --dz-p-800: #473200;
  --dz-p-900: #2F2200;
}
[data-app="birds"] {
  --dz-name: "BiRDS";
  --dz-primary-rgb: 140, 34, 51;
  --dz-primary: #8C2233;
  --dz-primary-dark: #651824;
  --dz-soft: #FAEBED;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #5E1A26;
  --dz-side-2: #3D0F16;
  --dz-side-ink: #EFE8E9;
  --dz-side-muted: #C9BCBE;
  --dz-side-group: #B5A4A6;
  --dz-a-d: #CA99A1;
  --dz-a-d2: #B46F7A;
  --dz-soft-d: #381A21;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #CB9CA3;
  --dz-p-50: #F7F0F1;
  --dz-p-100: #EFE0E2;
  --dz-p-300: #CB9CA3;
  --dz-p-400: #AC606C;
  --dz-p-500: #8C2233;
  --dz-p-600: #8C2233;
  --dz-p-700: #651824;
  --dz-p-800: #4C121B;
  --dz-p-900: #330C12;
}
[data-app="script"] {
  --dz-name: "SCRiPT";
  --dz-primary-rgb: 106, 42, 87;
  --dz-primary: #6A2A57;
  --dz-primary-dark: #4A1B3E;
  --dz-soft: #F5EAF2;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #4B1D3E;
  --dz-side-2: #2E1025;
  --dz-side-ink: #EDE8EC;
  --dz-side-muted: #C4BCC2;
  --dz-side-group: #B0A4AC;
  --dz-a-d: #BA9DB2;
  --dz-a-d2: #9E7592;
  --dz-soft-d: #301C2A;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #BC9FB3;
  --dz-p-50: #F5F0F3;
  --dz-p-100: #EAE1E7;
  --dz-p-300: #BC9FB3;
  --dz-p-400: #946686;
  --dz-p-500: #6A2A57;
  --dz-p-600: #6A2A57;
  --dz-p-700: #4A1B3E;
  --dz-p-800: #38142F;
  --dz-p-900: #250E1F;
}
[data-app="fins"] {
  --dz-name: "FiNS";
  --dz-primary-rgb: 30, 122, 79;
  --dz-primary: #1E7A4F;
  --dz-primary-dark: #14573A;
  --dz-soft: #E7F5EC;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #123F2C;
  --dz-side-2: #0A2A1E;
  --dz-side-ink: #E7ECEA;
  --dz-side-muted: #BAC3C0;
  --dz-side-group: #A2AEAA;
  --dz-a-d: #78AF95;
  --dz-a-d2: #44916D;
  --dz-soft-d: #1C3128;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #9AC3B0;
  --dz-p-50: #EFF6F3;
  --dz-p-100: #E0ECE6;
  --dz-p-300: #9AC3B0;
  --dz-p-400: #5D9F80;
  --dz-p-500: #1E7A4F;
  --dz-p-600: #1E7A4F;
  --dz-p-700: #14573A;
  --dz-p-800: #0F412C;
  --dz-p-900: #0A2C1D;
}
[data-app="accounting"] {
  --dz-name: "Accounting";
  --dz-primary-rgb: 11, 110, 124;
  --dz-primary: #0B6E7C;
  --dz-primary-dark: #084F59;
  --dz-soft: #E2F3F5;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #0B404A;
  --dz-side-2: #062B31;
  --dz-side-ink: #E7ECED;
  --dz-side-muted: #B9C4C5;
  --dz-side-group: #A0AEB1;
  --dz-a-d: #76AEB6;
  --dz-a-d2: #3E8C98;
  --dz-soft-d: #172E33;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #91BEC4;
  --dz-p-50: #EEF5F6;
  --dz-p-100: #DDEBED;
  --dz-p-300: #91BEC4;
  --dz-p-400: #4F97A1;
  --dz-p-500: #0B6E7C;
  --dz-p-600: #0B6E7C;
  --dz-p-700: #084F59;
  --dz-p-800: #063B43;
  --dz-p-900: #04282D;
}
[data-app="safeguarding"] {
  --dz-name: "Safeguarding";
  --dz-primary-rgb: 31, 85, 166;
  --dz-primary: #1F55A6;
  --dz-primary-dark: #163F7C;
  --dz-soft: #E8F0FB;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #153463;
  --dz-side-2: #0B1F3F;
  --dz-side-ink: #E8EBEF;
  --dz-side-muted: #BBC0C9;
  --dz-side-group: #A2AAB6;
  --dz-a-d: #8BA7D1;
  --dz-a-d2: #5B83BE;
  --dz-soft-d: #1C273E;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #9AB3D7;
  --dz-p-50: #EFF3F9;
  --dz-p-100: #E0E7F3;
  --dz-p-300: #9AB3D7;
  --dz-p-400: #5E85BF;
  --dz-p-500: #1F55A6;
  --dz-p-600: #1F55A6;
  --dz-p-700: #163F7C;
  --dz-p-800: #112F5D;
  --dz-p-900: #0B203E;
}
[data-app="dhrms"] {
  --dz-name: "DHRMS";
  --dz-primary-rgb: 75, 63, 176;
  --dz-primary: #4B3FB0;
  --dz-primary-dark: #362D86;
  --dz-soft: #EEECFB;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #2E2773;
  --dz-side-2: #1B164B;
  --dz-side-ink: #EAE9F1;
  --dz-side-muted: #BFBECD;
  --dz-side-group: #A8A6BB;
  --dz-a-d: #A59FD8;
  --dz-a-d2: #7F77C7;
  --dz-soft-d: #272141;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #AEA9DB;
  --dz-p-50: #F2F2F9;
  --dz-p-100: #E6E4F4;
  --dz-p-300: #AEA9DB;
  --dz-p-400: #7D75C6;
  --dz-p-500: #4B3FB0;
  --dz-p-600: #4B3FB0;
  --dz-p-700: #362D86;
  --dz-p-800: #292265;
  --dz-p-900: #1B1743;
}
[data-app="aiscans"] {
  --dz-name: "AI Scans";
  --dz-primary-rgb: 168, 70, 11;
  --dz-primary: #A8460B;
  --dz-primary-dark: #7E3408;
  --dz-soft: #FCECDF;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #6E2B07;
  --dz-side-2: #451A03;
  --dz-side-ink: #F1EAE6;
  --dz-side-muted: #CBBFB8;
  --dz-side-group: #B8A89F;
  --dz-a-d: #CE9776;
  --dz-a-d2: #BA6D3E;
  --dz-soft-d: #402316;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #D8AC91;
  --dz-p-50: #F9F2EE;
  --dz-p-100: #F3E5DD;
  --dz-p-300: #D8AC91;
  --dz-p-400: #C07A4F;
  --dz-p-500: #A8460B;
  --dz-p-600: #A8460B;
  --dz-p-700: #7E3408;
  --dz-p-800: #5F2706;
  --dz-p-900: #3F1A04;
}
[data-app="inventory"] {
  --dz-name: "Property IMS";
  --dz-primary-rgb: 90, 106, 18;
  --dz-primary: #5A6A12;
  --dz-primary-dark: #414E0D;
  --dz-soft: #F1F4DD;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #3B4510;
  --dz-side-2: #262C09;
  --dz-side-ink: #EBECE7;
  --dz-side-muted: #C2C4BA;
  --dz-side-group: #ADAFA2;
  --dz-a-d: #9FA976;
  --dz-a-d2: #7D8944;
  --dz-soft-d: #2B2D18;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #B5BC94;
  --dz-p-50: #F3F5EE;
  --dz-p-100: #E8EADE;
  --dz-p-300: #B5BC94;
  --dz-p-400: #889454;
  --dz-p-500: #5A6A12;
  --dz-p-600: #5A6A12;
  --dz-p-700: #414E0D;
  --dz-p-800: #313B0A;
  --dz-p-900: #212707;
}
[data-app="security"] {
  --dz-name: "DICE Security";
  --dz-primary-rgb: 122, 46, 158;
  --dz-primary: #7A2E9E;
  --dz-primary-dark: #571F72;
  --dz-soft: #F3EAF8;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #43195A;
  --dz-side-2: #290E38;
  --dz-side-ink: #ECE8EF;
  --dz-side-muted: #C3BCC7;
  --dz-side-group: #AEA3B3;
  --dz-a-d: #BD97CF;
  --dz-a-d2: #A36FBC;
  --dz-soft-d: #341D3C;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #C3A1D3;
  --dz-p-50: #F6F0F8;
  --dz-p-100: #ECE2F1;
  --dz-p-300: #C3A1D3;
  --dz-p-400: #9F69B9;
  --dz-p-500: #7A2E9E;
  --dz-p-600: #7A2E9E;
  --dz-p-700: #571F72;
  --dz-p-800: #411756;
  --dz-p-900: #2C1039;
}
[data-app="prompter"] {
  --dz-name: "AI Prompt Control";
  --dz-primary-rgb: 70, 72, 83;
  --dz-primary: #464853;
  --dz-primary-dark: #2E2F38;
  --dz-soft: #ECECF0;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #2B2C34;
  --dz-side-2: #17181D;
  --dz-side-ink: #EAEAEB;
  --dz-side-muted: #BEBEC0;
  --dz-side-group: #A7A7A9;
  --dz-a-d: #A3A4A9;
  --dz-a-d2: #7F8188;
  --dz-soft-d: #262429;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #ACADB2;
  --dz-p-50: #F2F2F3;
  --dz-p-100: #E5E5E7;
  --dz-p-300: #ACADB2;
  --dz-p-400: #7A7B83;
  --dz-p-500: #464853;
  --dz-p-600: #464853;
  --dz-p-700: #2E2F38;
  --dz-p-800: #23232A;
  --dz-p-900: #17181C;
}
[data-app="schools"] {
  --dz-name: "SIMS";
  --dz-primary-rgb: 20, 108, 148;
  --dz-primary: #146C94;
  --dz-primary-dark: #0F4F6E;
  --dz-soft: #E4F1F6;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #0E425C;
  --dz-side-2: #082939;
  --dz-side-ink: #E7ECEF;
  --dz-side-muted: #BAC3C8;
  --dz-side-group: #A1AEB4;
  --dz-a-d: #77AAC1;
  --dz-a-d2: #458BAA;
  --dz-soft-d: #192D3A;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #95BDCF;
  --dz-p-50: #EFF5F8;
  --dz-p-100: #DEEAF0;
  --dz-p-300: #95BDCF;
  --dz-p-400: #5695B2;
  --dz-p-500: #146C94;
  --dz-p-600: #146C94;
  --dz-p-700: #0F4F6E;
  --dz-p-800: #0B3B53;
  --dz-p-900: #082837;
}
[data-app="docjed"] {
  --dz-name: "DOC JED";
  --dz-primary-rgb: 193, 53, 102;
  --dz-primary: #C13566;
  --dz-primary-dark: #8C2549;
  --dz-soft: #FBEAF0;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #7A2140;
  --dz-side-2: #4A1427;
  --dz-side-ink: #F2E9EC;
  --dz-side-muted: #CCBDC3;
  --dz-side-group: #BAA6AD;
  --dz-a-d: #DC8EA9;
  --dz-a-d2: #CD5B83;
  --dz-soft-d: #461F2E;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #E3A4BA;
  --dz-p-50: #FBF1F4;
  --dz-p-100: #F6E3EA;
  --dz-p-300: #E3A4BA;
  --dz-p-400: #D26E91;
  --dz-p-500: #C13566;
  --dz-p-600: #C13566;
  --dz-p-700: #8C2549;
  --dz-p-800: #691C37;
  --dz-p-900: #461325;
}
[data-app="cims"] {
  --dz-name: "DCIMS";
  --dz-primary-rgb: 75, 85, 104;
  --dz-primary: #4B5568;
  --dz-primary-dark: #343C49;
  --dz-soft: #E9EBEE;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #2E3540;
  --dz-side-2: #1B2027;
  --dz-side-ink: #EAEBEC;
  --dz-side-muted: #BFC1C3;
  --dz-side-group: #A8AAAD;
  --dz-a-d: #9EA3AD;
  --dz-a-d2: #7C8391;
  --dz-soft-d: #27272E;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #AEB3BB;
  --dz-p-50: #F2F3F4;
  --dz-p-100: #E6E7EA;
  --dz-p-300: #AEB3BB;
  --dz-p-400: #7D8592;
  --dz-p-500: #4B5568;
  --dz-p-600: #4B5568;
  --dz-p-700: #343C49;
  --dz-p-800: #272D37;
  --dz-p-900: #1A1E25;
}
[data-app="aec"] {
  --dz-name: "DICE-ACE";
  --dz-primary-rgb: 44, 90, 122;
  --dz-primary: #2C5A7A;
  --dz-primary-dark: #1E4058;
  --dz-soft: #E4EEF3;
  --dz-on-primary: #FFFFFF;
  --dz-side-1: #1B3A52;
  --dz-side-2: #102030;
  --dz-side-ink: #E8EBEE;
  --dz-side-muted: #BCC1C5;
  --dz-side-group: #A4AAB0;
  --dz-a-d: #91A9BA;
  --dz-a-d2: #65879E;
  --dz-soft-d: #1F2833;
  --dz-side-active: rgba(255,255,255,.14);
  --dz-side-hover: rgba(255,255,255,.08);
  --dz-ring: 0 0 0 3px #A0B5C3;
  --dz-p-50: #F0F3F6;
  --dz-p-100: #E1E8EC;
  --dz-p-300: #A0B5C3;
  --dz-p-400: #67889F;
  --dz-p-500: #2C5A7A;
  --dz-p-600: #2C5A7A;
  --dz-p-700: #1E4058;
  --dz-p-800: #173042;
  --dz-p-900: #0F202C;
}

/* =====================================================================================================
   DICE SIGNATURE THEME
   One design system for every DICE application. Applications differ ONLY by colour (dice-theme.css builds one
   palette per app from palettes.php); type, icon size, spacing, radii, elevation, focus and component feel are shared.

   Load this file LAST in every app (after the app's own CSS) and put data-app="<key>" on <html>
   (cms/includes/theme.php does both: dice_theme_html_attrs() / dice_theme_head()).

   Rules the theme keeps (see the style guide at /cms/theme/):
     - Body text >= 7:1 (ink on any surface), secondary text >= 4.5:1, placeholders >= 4.5:1
     - White on every primary/status button >= 4.5:1, links >= 4.5:1, focus indicator >= 3:1
     - Sidebar text >= 7:1, muted sidebar text >= 4.5:1
     - One typeface (Inter, self-hosted), one scale, one icon size set, one radius set
   The theme is light-mode. Apps that ship their own night mode keep it (rules below are skipped when
   data-theme="dark"); a signature night palette is a later step.
   ===================================================================================================== */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("fonts/inter-latin-var.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 {
  /* type */
  --dz-font: "Inter", "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;
  --dz-font-mono: ui-monospace, "Cascadia Mono", "SF Mono", Consolas, Menlo, monospace;
  --dz-fs-xs: 12px;   /* captions, table meta */
  --dz-fs-sm: 13px;   /* dense tables, badges, helper text */
  --dz-fs-md: 15px;   /* body */
  --dz-fs-lg: 17px;   /* lead, card titles */
  --dz-fs-xl: 20px;   /* section titles */
  --dz-fs-2xl: 24px;  /* page titles */
  --dz-fs-3xl: 30px;  /* dashboard numbers */
  --dz-lh: 1.5;
  --dz-lh-tight: 1.25;
  --dz-fw: 400; --dz-fw-medium: 500; --dz-fw-semibold: 600; --dz-fw-bold: 700;

  /* icons: one outline family, three sizes, one stroke */
  --dz-icon-sm: 16px;
  --dz-icon-md: 20px;
  --dz-icon-lg: 24px;
  --dz-icon-stroke: 1.75;

  /* space (4px base), shape, elevation, controls */
  --dz-sp-1: 4px; --dz-sp-2: 8px; --dz-sp-3: 12px; --dz-sp-4: 16px; --dz-sp-5: 20px; --dz-sp-6: 24px; --dz-sp-8: 32px;
  --dz-r-sm: 8px;      /* inputs, buttons, chips */
  --dz-r-md: 12px;     /* cards, menus */
  --dz-r-lg: 16px;     /* panels, modals */
  --dz-r-pill: 999px;
  --dz-shadow-sm: 0 1px 2px rgba(27, 20, 22, .06);
  --dz-shadow: 0 1px 2px rgba(27, 20, 22, .05), 0 6px 18px rgba(27, 20, 22, .07);
  --dz-shadow-lg: 0 16px 44px rgba(27, 20, 22, .16);
  --dz-control-h: 38px;      /* buttons and inputs share one height */
  --dz-touch-h: 44px;        /* minimum target on touch screens */
  --dz-transition: 150ms cubic-bezier(.4, 0, .2, 1);
}

/* Base layer: wrapped in :where() so it has ZERO specificity - it sets the defaults (body font, heading scale, links)
   while any application class rule (.hero h1, .brand-text h1 ...) still wins. */
/* ---------------------------------------------------------------- base (light mode) */
:where(html[data-app]:not([data-theme="dark"])) {
  color-scheme: light;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
:where(html[data-app]) body {
  font-family: var(--dz-font);
  font-size: var(--dz-fs-md);
  line-height: var(--dz-lh);
  font-weight: var(--dz-fw);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-feature-settings: "cv11", "ss03";
}
:where(html[data-app]:not([data-theme="dark"])) body { color: var(--dz-ink); background-color: var(--dz-bg); }
:where(html[data-app]) :is(button, input, select, textarea, optgroup) { font-family: inherit; }
:where(html[data-app]) :is(h1, h2, h3, h4, h5, h6) { font-family: var(--dz-font); line-height: var(--dz-lh-tight); letter-spacing: -.01em; }
:where(html[data-app]) h1 { font-size: var(--dz-fs-2xl); font-weight: var(--dz-fw-bold); }
:where(html[data-app]) h2 { font-size: var(--dz-fs-xl); font-weight: var(--dz-fw-semibold); }
:where(html[data-app]) h3 { font-size: var(--dz-fs-lg); font-weight: var(--dz-fw-semibold); }
:where(html[data-app]) :is(h4, h5, h6) { font-size: var(--dz-fs-md); font-weight: var(--dz-fw-semibold); }
:where(html[data-app]) :is(code, kbd, samp, pre, .mono) { font-family: var(--dz-font-mono); }
:where(html[data-app]) :is(small, .small, .text-sm) { font-size: var(--dz-fs-sm); }
:where(html[data-app]) :is(td, th, .amount, .num, [class*="col-amount"]) { font-variant-numeric: tabular-nums; }
:where(html[data-app]:not([data-theme="dark"])) ::selection { background: var(--dz-p-100); color: var(--dz-ink); }

/* links: the app colour, always underlined on hover, >= 4.5:1 on every surface */
:where(html[data-app]:not([data-theme="dark"])) a:not([class]):not(:is(nav, aside, header, footer, .sidebar, #sidebar) a) { color: var(--dz-primary); text-decoration-thickness: 1px; text-underline-offset: 2px; }
:where(html[data-app]:not([data-theme="dark"])) a:not([class]):not(:is(nav, aside, header, footer, .sidebar, #sidebar) a):hover { color: var(--dz-primary-dark); text-decoration: underline; }

/* focus: visible on every control, in the app colour (3:1 against white) */
html[data-app] :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--dz-primary);
  outline-offset: 2px;
  box-shadow: 0 0 0 5px var(--dz-p-100);
}
html[data-app] :is(input, select, textarea):focus { border-color: var(--dz-primary); }
:where(html[data-app]:not([data-theme="dark"])) ::placeholder { color: var(--dz-faint); opacity: 1; }
:where(html[data-app]:not([data-theme="dark"])) :disabled { cursor: not-allowed; }

/* ---------------------------------------------------------------- icons: one size family
   Inline SVG (cms icon()) and Bootstrap Icons both follow the same three sizes and inherit text colour. */
html[data-app] svg.icon, html[data-app] .icon svg { width: var(--dz-icon-md); height: var(--dz-icon-md); stroke-width: var(--dz-icon-stroke); flex: 0 0 auto; }
html[data-app] .icon-sm, html[data-app] .icon-sm svg { width: var(--dz-icon-sm); height: var(--dz-icon-sm); font-size: var(--dz-icon-sm); }
html[data-app] .icon-lg, html[data-app] .icon-lg svg { width: var(--dz-icon-lg); height: var(--dz-icon-lg); font-size: var(--dz-icon-lg); }
html[data-app] i.bi { font-size: 1.15em; line-height: 1; vertical-align: -.16em; }
html[data-app] :is(.btn, button, .nav-link, .nav a, .sidebar a, #sidebar a) :is(svg, i.bi) { flex: 0 0 auto; }

/* ---------------------------------------------------------------- controls: shared height, radius, borders */
html[data-app]:not([data-theme="dark"]) :is(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color]), select, textarea) {
  border: 1px solid var(--dz-line);
  border-radius: var(--dz-r-sm);
  background-color: var(--dz-surface);
  color: var(--dz-ink);
  font-size: var(--dz-fs-md);
  min-height: var(--dz-control-h);
}
html[data-app]:not([data-theme="dark"]) textarea { min-height: 88px; }
html[data-app]:not([data-theme="dark"]) :is(input, select, textarea):hover:not(:disabled) { border-color: var(--dz-muted); }
html[data-app]:not([data-theme="dark"]) :is(input, select, textarea):disabled { background: var(--dz-surface2); color: var(--dz-muted); }
html[data-app]:not([data-theme="dark"]) :is(label, .form-label, .lbl) { color: var(--dz-ink2); font-size: var(--dz-fs-sm); font-weight: var(--dz-fw-semibold); }
html[data-app] :is(input[type=checkbox], input[type=radio], input[type=range], progress) { accent-color: var(--dz-primary); }

/* ---------------------------------------------------------------- buttons (Bootstrap-style and app-style classes)  */
html[data-app]:not([data-theme="dark"]) :is(.btn, .button, button.primary, button.secondary, button.ghost) {
  font-family: var(--dz-font);
  font-size: var(--dz-fs-md);
  font-weight: var(--dz-fw-semibold);
  border-radius: var(--dz-r-sm);
  min-height: var(--dz-control-h);
  transition: background-color var(--dz-transition), border-color var(--dz-transition), box-shadow var(--dz-transition);
}
html[data-app]:not([data-theme="dark"]) :is(.btn-primary, .btn.primary, .btn-brand, .button.primary, button.primary, .btn-accent) {
  --bs-btn-bg: var(--dz-primary); --bs-btn-border-color: var(--dz-primary); --bs-btn-color: var(--dz-on-primary);
  --bs-btn-hover-bg: var(--dz-primary-dark); --bs-btn-hover-border-color: var(--dz-primary-dark); --bs-btn-hover-color: var(--dz-on-primary);
  --bs-btn-active-bg: var(--dz-primary-dark); --bs-btn-active-border-color: var(--dz-primary-dark); --bs-btn-active-color: var(--dz-on-primary);
  --bs-btn-disabled-bg: var(--dz-primary); --bs-btn-disabled-border-color: var(--dz-primary);
  background-color: var(--dz-primary); border-color: var(--dz-primary); color: var(--dz-on-primary);
}
html[data-app]:not([data-theme="dark"]) :is(.btn-primary, .btn.primary, .btn-brand, .button.primary, button.primary, .btn-accent):hover:not(:disabled) {
  background-color: var(--dz-primary-dark); border-color: var(--dz-primary-dark); color: var(--dz-on-primary);
}
html[data-app]:not([data-theme="dark"]) :is(.btn-outline-primary, .btn.secondary, .btn-outline, .btn-secondary, .btn.ghost) {
  --bs-btn-color: var(--dz-primary); --bs-btn-border-color: var(--dz-primary); --bs-btn-hover-bg: var(--dz-soft); --bs-btn-hover-color: var(--dz-primary-dark); --bs-btn-hover-border-color: var(--dz-primary-dark);
  --bs-btn-bg: var(--dz-surface); --bs-btn-active-bg: var(--dz-soft); --bs-btn-active-color: var(--dz-primary-dark);
  background-color: var(--dz-surface); color: var(--dz-primary); border: 1px solid var(--dz-primary);
}
html[data-app]:not([data-theme="dark"]) :is(.btn-outline-primary, .btn.secondary, .btn-outline, .btn-secondary, .btn.ghost):hover:not(:disabled) { background-color: var(--dz-soft); color: var(--dz-primary-dark); }
html[data-app]:not([data-theme="dark"]) :is(.btn-success, .btn.ok) { background-color: var(--dz-ok); border-color: var(--dz-ok); color: #fff; }
html[data-app]:not([data-theme="dark"]) :is(.btn-danger, .btn.danger) { background-color: var(--dz-danger); border-color: var(--dz-danger); color: #fff; }
html[data-app]:not([data-theme="dark"]) :is(.btn-warning) { background-color: var(--dz-warn-soft); border-color: var(--dz-warn); color: var(--dz-warn-text); }
html[data-app]:not([data-theme="dark"]) .btn:disabled, html[data-app]:not([data-theme="dark"]) .btn.disabled { opacity: .6; }
@media (pointer: coarse) { html[data-app] :is(.btn, button, input:not([type=checkbox], [type=radio]), select) { min-height: var(--dz-touch-h); } }

/* ---------------------------------------------------------------- cards, tables, badges, alerts */
:where(html[data-app]:not([data-theme="dark"])) :is(.card, .panel, .box) { background: var(--dz-surface); border: 1px solid var(--dz-line); border-radius: var(--dz-r-md); box-shadow: var(--dz-shadow-sm); }
:where(html[data-app]:not([data-theme="dark"])) table { border-color: var(--dz-line); }
:where(html[data-app]:not([data-theme="dark"])) :is(th) { color: var(--dz-ink2); font-size: var(--dz-fs-xs); font-weight: var(--dz-fw-semibold); letter-spacing: .04em; text-transform: uppercase; }
:where(html[data-app]:not([data-theme="dark"])) :is(thead th, .table thead th) { background: var(--dz-surface2); border-bottom: 1px solid var(--dz-line); }
:where(html[data-app]:not([data-theme="dark"])) :is(td) { color: var(--dz-ink); border-color: var(--dz-line-soft); }
:where(html[data-app]:not([data-theme="dark"])) :is(tbody tr:hover > td) { background-color: var(--dz-soft); }
html[data-app]:not([data-theme="dark"]) :is(.text-muted, .muted, .hint, .help, .form-text, small.text-muted) { color: var(--dz-muted) !important; }

html[data-app]:not([data-theme="dark"]) :is(.badge, .pill, .chip, .tag) { font-family: var(--dz-font); font-size: var(--dz-fs-xs); font-weight: var(--dz-fw-semibold); border-radius: var(--dz-r-pill); }
html[data-app]:not([data-theme="dark"]) :is(.badge.ok, .badge-ok, .badge.success, .pill.ok, .pill-ok, .bg-success) { background: var(--dz-ok-soft) !important; color: var(--dz-ok-text) !important; }
html[data-app]:not([data-theme="dark"]) :is(.badge.warn, .badge-warn, .badge.warning, .pill.warn, .pill-warn, .bg-warning) { background: var(--dz-warn-soft) !important; color: var(--dz-warn-text) !important; }
html[data-app]:not([data-theme="dark"]) :is(.badge.danger, .badge-danger, .badge.err, .pill.danger, .pill-bad, .bg-danger) { background: var(--dz-danger-soft) !important; color: var(--dz-danger-text) !important; }
html[data-app]:not([data-theme="dark"]) :is(.badge.info, .badge-info, .pill.info, .bg-info) { background: var(--dz-info-soft) !important; color: var(--dz-info-text) !important; }
html[data-app]:not([data-theme="dark"]) :is(.alert-success, .alert.ok, .flash.ok, .alert-ok) { background: var(--dz-ok-soft); color: var(--dz-ok-text); border-color: var(--dz-ok); }
html[data-app]:not([data-theme="dark"]) :is(.alert-warning, .alert.warn, .flash.warn) { background: var(--dz-warn-soft); color: var(--dz-warn-text); border-color: var(--dz-warn); }
html[data-app]:not([data-theme="dark"]) :is(.alert-danger, .alert-error, .alert.err, .alert.danger, .flash.err, .flash.error) { background: var(--dz-danger-soft); color: var(--dz-danger-text); border-color: var(--dz-danger); }
html[data-app]:not([data-theme="dark"]) :is(.alert-info, .alert.info, .flash.info) { background: var(--dz-info-soft); color: var(--dz-info-text); border-color: var(--dz-info); }

/* ---------------------------------------------------------------- sidebar: same dark rail on every app, app-coloured */
html[data-app]:not([data-theme="dark"]) :is(.sidebar, aside.side, .side) { color: var(--dz-side-ink); }
html[data-app]:not([data-theme="dark"]) :is(.sidebar, #sidebar) :is(a, .nav-link) { font-family: var(--dz-font); font-size: var(--dz-fs-sm); font-weight: var(--dz-fw-medium); }

/* ---------------------------------------------------------------- Bootstrap-based apps (Accounting, AI Scans) */
html[data-app="accounting"]:not([data-theme="dark"]), html[data-app="aiscans"]:not([data-theme="dark"]) {
  --bs-primary: var(--dz-primary); --bs-primary-rgb: var(--dz-primary-rgb); --bs-link-color: var(--dz-primary); --bs-link-color-rgb: var(--dz-primary-rgb); --bs-link-hover-color-rgb: var(--dz-primary-rgb); --bs-link-hover-color: var(--dz-primary-dark);
  --bs-body-font-family: var(--dz-font); --bs-body-font-size: var(--dz-fs-md); --bs-body-color: var(--dz-ink); --bs-body-bg: var(--dz-bg);
  --bs-border-color: var(--dz-line); --bs-border-radius: var(--dz-r-sm); --bs-border-radius-lg: var(--dz-r-md);
  --bs-success: var(--dz-ok); --bs-danger: var(--dz-danger); --bs-warning: var(--dz-warn); --bs-info: var(--dz-info);
  --bs-secondary-color: var(--dz-muted); --bs-heading-color: var(--dz-ink);
}

/* ====================================================================================================
   PER-APPLICATION VARIABLE MAPS - every app's own CSS variables now resolve to the signature tokens,
   so its existing rules (which use var(--primary) etc.) recolour without touching its structure.
   ==================================================================================================== */

/* BiRDS, SCRiPT (CBA), Property IMS share one token schema */
html[data-app="birds"]:not([data-theme="dark"]), html[data-app="script"]:not([data-theme="dark"]), html[data-app="inventory"]:not([data-theme="dark"]) {
  --primary: var(--dz-primary); --primary-d: var(--dz-primary-dark); --primary-soft: var(--dz-soft);
  --accent: var(--dz-gold); --accent-soft: var(--dz-gold-soft);
  --ok: var(--dz-ok); --ok-soft: var(--dz-ok-soft); --warn: var(--dz-warn); --warn-soft: var(--dz-warn-soft);
  --danger: var(--dz-danger); --danger-soft: var(--dz-danger-soft); --info: var(--dz-primary); --info-soft: var(--dz-soft);
  --bg: var(--dz-bg); --surface: var(--dz-surface); --ink: var(--dz-ink); --mut: var(--dz-muted); --faint: var(--dz-faint);
  --line: var(--dz-line); --line2: var(--dz-line-soft);
  --side1: var(--dz-side-1); --side2: var(--dz-side-2); --side-ink: var(--dz-side-ink); --side-mut: var(--dz-side-muted);
  --radius: var(--dz-r-lg); --radius-sm: var(--dz-r-sm);
  --shadow: var(--dz-shadow); --shadow-sm: var(--dz-shadow-sm); --shadow-lg: var(--dz-shadow-lg);
}
html[data-app="inventory"]:not([data-theme="dark"]) {
  --pims-navy: var(--dz-primary-dark); --pims-blue: var(--dz-primary); --pims-gold: var(--dz-gold); --pims-ink: var(--dz-ink);
  --pims-muted: var(--dz-muted); --pims-canvas: var(--dz-bg); --pims-line: var(--dz-line); --pims-card: var(--dz-surface);
  --pims-success: var(--dz-ok); --pims-warning: var(--dz-warn); --pims-danger: var(--dz-danger);
}

/* DICE Core (dashboard, admin CRUD, login) and Prompter (runs inside the core layout) */
html[data-app="core"]:not([data-theme="dark"]), html[data-app="prompter"]:not([data-theme="dark"]) {
  --navy: var(--dz-side-1); --navy-light: var(--dz-primary); --gold: var(--dz-gold); --gold-light: #E3C568;
  --bg: var(--dz-bg); --surface: var(--dz-surface); --surface-alt: var(--dz-surface2); --border: var(--dz-line);
  --text: var(--dz-ink); --text-muted: var(--dz-muted); --radius: var(--dz-r-lg);
  --shadow: var(--dz-shadow); --shadow-lg: var(--dz-shadow-lg);
  --auth-brand: var(--dz-side-1); --auth-brand-dark: var(--dz-side-2); --auth-brand-soft: var(--dz-soft);
}
html[data-app="core"] .auth-brand-panel, html[data-app="prompter"] .auth-brand-panel {
  background: linear-gradient(160deg, var(--dz-primary) 0%, var(--dz-primary-dark) 58%, var(--dz-side-2) 100%);
}

/* DHRMS (HR_ESS) */
html[data-app="dhrms"]:not([data-theme="dark"]) {
  --primary: var(--dz-primary); --primary-600: var(--dz-primary); --primary-700: var(--dz-primary-dark);
  --accent: var(--dz-primary); --accent-ink: var(--dz-primary); --accent-hover: var(--dz-primary-dark); --accent-soft: var(--dz-soft);
  --success: var(--dz-ok); --success-soft: var(--dz-ok-soft); --warning: var(--dz-warn); --warning-soft: var(--dz-warn-soft);
  --danger: var(--dz-danger); --danger-hover: var(--dz-danger-text); --danger-soft: var(--dz-danger-soft);
  --info: var(--dz-info); --info-soft: var(--dz-info-soft);
  --bg: var(--dz-bg); --surface: var(--dz-surface); --surface-2: var(--dz-surface2); --surface-3: var(--dz-line-soft);
  --sb-bg: var(--dz-side-1); --sb-bg-2: var(--dz-side-2); --sb-text: var(--dz-side-ink); --sb-text-hover: #fff;
  --sb-active-bg: var(--dz-side-active); --sb-active-text: #fff; --sb-group: var(--dz-side-group); --sb-border: rgba(255, 255, 255, .08);
  --text: var(--dz-ink); --text-2: var(--dz-ink2); --muted: var(--dz-muted); --faint: var(--dz-faint);
  --border: var(--dz-line); --border-strong: var(--dz-muted);
  --shadow-sm: var(--dz-shadow-sm); --shadow: var(--dz-shadow); --shadow-lg: var(--dz-shadow-lg); --ring: var(--dz-ring);
  --radius-sm: var(--dz-r-sm); --radius: var(--dz-r-md); --radius-lg: var(--dz-r-lg);
  --font: var(--dz-font); --font-mono: var(--dz-font-mono);
  --fs-xs: var(--dz-fs-xs); --fs-sm: var(--dz-fs-sm); --fs-md: var(--dz-fs-md); --fs-lg: var(--dz-fs-lg); --fs-xl: var(--dz-fs-xl); --fs-2xl: var(--dz-fs-2xl);
}

/* Accounting */
html[data-app="accounting"]:not([data-theme="dark"]) {
  --brand-900: var(--dz-p-900); --brand-800: var(--dz-p-800); --brand-700: var(--dz-p-700); --brand-600: var(--dz-p-600);
  --brand-500: var(--dz-p-500); --brand-400: var(--dz-p-400); --brand-300: var(--dz-p-300); --brand-100: var(--dz-p-100); --brand-50: var(--dz-p-50);
  --sidebar-bg: var(--dz-side-1); --sidebar-hover: var(--dz-side-hover); --sidebar-active: var(--dz-side-active);
  --sidebar-text: var(--dz-side-ink); --sidebar-text-active: #fff; --sidebar-border: rgba(255, 255, 255, .08);
  --bg: var(--dz-bg); --surface: var(--dz-surface); --surface-2: var(--dz-surface2); --border: var(--dz-line); --border-light: var(--dz-line-soft);
  --text-primary: var(--dz-ink); --text-secondary: var(--dz-ink2); --text-muted: var(--dz-muted);
  --blue: var(--dz-primary); --blue-dark: var(--dz-primary-dark); --blue-light: var(--dz-soft);
  --green: var(--dz-ok); --green-light: var(--dz-ok-soft); --green-text: var(--dz-ok-text);
  --amber: var(--dz-warn); --amber-light: var(--dz-warn-soft); --amber-text: var(--dz-warn-text);
  --red: var(--dz-danger); --red-light: var(--dz-danger-soft); --red-text: var(--dz-danger-text);
  --info: var(--dz-info); --info-light: var(--dz-info-soft);
  --radius: var(--dz-r-sm); --radius-sm: 6px; --radius-lg: var(--dz-r-md);
  --shadow-sm: var(--dz-shadow-sm); --shadow: var(--dz-shadow); --shadow-lg: var(--dz-shadow-lg); --ring: var(--dz-ring);
  --font: var(--dz-font); --font-mono: var(--dz-font-mono);
}

/* FiNS (Curia and Parish) */
html[data-app="fins"]:not([data-theme="dark"]) {
  /* Curia_FiNS */
  --color-bg: var(--dz-bg); --color-surface: var(--dz-surface); --color-border: var(--dz-line);
  --color-text: var(--dz-ink); --color-text-muted: var(--dz-muted);
  --color-sidebar: var(--dz-side-1); --color-sidebar-hover: var(--dz-side-active);
  --color-accent: var(--dz-primary); --color-accent-hover: var(--dz-primary-dark);
  --color-success: var(--dz-ok); --color-success-bg: var(--dz-ok-soft); --color-success-text: var(--dz-ok-text);
  --color-danger: var(--dz-danger); --color-danger-bg: var(--dz-danger-soft); --color-danger-text: var(--dz-danger-text);
  --color-warning-bg: var(--dz-warn-soft); --color-warning-text: var(--dz-warn-text);
  --color-info-bg: var(--dz-info-soft); --color-info-text: var(--dz-info-text);
  --color-neutral-bg: var(--dz-line-soft); --color-neutral-text: var(--dz-ink2);
  --font-sans: var(--dz-font);
  /* Parish_FiNS */
  --nav: var(--dz-side-1); --green: var(--dz-primary); --gold: var(--dz-gold); --ink: var(--dz-ink);
  --muted: var(--dz-muted); --line: var(--dz-line); --bg: var(--dz-bg);
}

/* Safeguarding */
html[data-app="safeguarding"]:not([data-theme="dark"]) {
  --navy-900: var(--dz-side-2); --navy-800: var(--dz-side-1); --navy-700: var(--dz-primary-dark);
  --blue: var(--dz-primary); --blue-dark: var(--dz-primary-dark); --blue-light: var(--dz-soft);
  --red: var(--dz-danger); --red-dark: var(--dz-danger-text); --green: var(--dz-ok); --green-light: var(--dz-ok-soft);
  --amber: var(--dz-warn-text); --amber-light: var(--dz-warn-soft);
  --gray-50: var(--dz-surface2); --gray-100: var(--dz-line-soft); --gray-200: var(--dz-line); --gray-400: var(--dz-faint);
  --gray-500: var(--dz-muted); --gray-700: var(--dz-ink2);
  --border: var(--dz-line); --bg: var(--dz-bg); --text: var(--dz-ink);
  --radius-sm: var(--dz-r-sm); --radius-md: var(--dz-r-md); --radius-lg: var(--dz-r-lg);
  --font: var(--dz-font);
}

/* AI Scans */
html[data-app="aiscans"]:not([data-theme="dark"]) {
  --ccra-primary: var(--dz-side-1); --ccra-primary-dark: var(--dz-side-2); --ccra-accent: var(--dz-primary);
  --ccra-bg: var(--dz-bg); --ccra-surface: var(--dz-surface); --ccra-border: var(--dz-line);
  --ccra-text: var(--dz-ink); --ccra-muted: var(--dz-muted); --ccra-radius: var(--dz-r-md);
}

/* ---------------------------------------------------------------- shared BiRDS / SCRiPT / Property IMS shell details */
html[data-app="birds"]:not([data-theme="dark"]) .hero, html[data-app="script"]:not([data-theme="dark"]) .hero, html[data-app="inventory"]:not([data-theme="dark"]) .hero {
  background: linear-gradient(120deg, var(--dz-primary), var(--dz-primary-dark));
}
html[data-app] :is(.nav-ic, .ng-ic) { display: inline-flex; align-items: center; justify-content: center; }
html[data-app] :is(.nav-ic, .ng-ic) svg { width: var(--dz-icon-md); height: var(--dz-icon-md); }
html[data-app] .nav-submenu .nav-ic svg { width: var(--dz-icon-sm); height: var(--dz-icon-sm); }
/* ---------------------------------------------------------------- Accounting: dark sidebar text, active item, brand */
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar { color: var(--dz-side-ink); background: linear-gradient(180deg, var(--dz-side-1), var(--dz-side-2)) !important; }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar :is(.sidebar-brand-text h4, .sidebar-logo h4) { color: #fff; }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar :is(.sidebar-brand-sub, .sidebar-footer) { color: var(--dz-side-muted); }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar .sidebar-menu li a.active { background: var(--dz-side-active) !important; color: #fff !important; }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar .sidebar-menu li a.active i { color: var(--dz-gold); }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar .sidebar-menu li a.active::before { background: var(--dz-gold); }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar :is(.sidebar-group-toggle, .sidebar-chevron) { color: var(--dz-side-muted); }
html[data-app="accounting"]:not([data-theme="dark"]) #sidebar .sidebar-group-toggle:hover { color: #fff; }

/* ---------------------------------------------------------------- DICE Core / Prompter chrome details */
html[data-app="core"] .diocese-banner, html[data-app="prompter"] .diocese-banner {
  background: linear-gradient(120deg, var(--dz-side-2), var(--dz-side-1) 62%, var(--dz-primary-dark));
}
html[data-app="core"] .diocese-banner :is(.diocese-banner-subtitle) { color: #F1D98A; }
html[data-app="core"] .diocese-banner :is(.diocese-banner-office) { color: var(--dz-side-ink); }
html[data-app]:not([data-theme="dark"]) .dash-section-title { color: var(--dz-ink2); }
html[data-app]:not([data-theme="dark"]) .dash-section-title svg { color: var(--dz-warn); }
/* ====================================================================================================
   NIGHT MODE for the applications that ship one (DICE Core, DHRMS, Accounting): same neutrals, app accent.
   ==================================================================================================== */
html[data-app="dhrms"][data-theme="dark"] {
  --primary: var(--dz-primary); --primary-600: var(--dz-primary); --primary-700: var(--dz-primary-dark);
  --accent: var(--dz-primary); --accent-ink: var(--dz-a-d); --accent-hover: var(--dz-primary-dark); --accent-soft: var(--dz-soft-d);
  --bg: var(--dz-n-bg); --surface: var(--dz-n-surface); --surface-2: var(--dz-n-surface2); --surface-3: var(--dz-n-surface2);
  --sb-bg: var(--dz-side-2); --sb-bg-2: #0B0910; --sb-text: var(--dz-side-ink); --sb-text-hover: #fff; --sb-group: var(--dz-side-group);
  --sb-active-bg: rgba(255, 255, 255, .12); --sb-active-text: #fff;
  --text: var(--dz-n-ink); --text-2: var(--dz-n-ink2); --muted: var(--dz-n-muted); --faint: var(--dz-n-faint);
  --border: var(--dz-n-line); --border-strong: var(--dz-n-muted);
  --success: var(--dz-n-ok); --warning: var(--dz-n-warn); --danger: var(--dz-n-danger); --info: var(--dz-n-info);
  --ring: 0 0 0 3px var(--dz-soft-d);
}
html[data-app="accounting"][data-theme="dark"] {
  --brand-900: var(--dz-side-2); --brand-800: var(--dz-side-1); --brand-700: var(--dz-a-d); --brand-600: var(--dz-primary); --brand-500: var(--dz-primary); --brand-400: var(--dz-primary); --brand-300: var(--dz-a-d2); --brand-100: var(--dz-soft-d); --brand-50: var(--dz-soft-d);
  --sidebar-bg: var(--dz-side-2); --sidebar-hover: rgba(255, 255, 255, .08); --sidebar-active: rgba(255, 255, 255, .14);
  --sidebar-text: var(--dz-side-ink); --sidebar-text-active: #fff; --sidebar-border: rgba(255, 255, 255, .08);
  --bg: var(--dz-n-bg); --surface: var(--dz-n-surface); --surface-2: var(--dz-n-surface2); --border: var(--dz-n-line); --border-light: var(--dz-n-line);
  --text-primary: var(--dz-n-ink); --text-secondary: var(--dz-n-ink2); --text-muted: var(--dz-n-muted);
  --blue: var(--dz-primary); --blue-dark: var(--dz-a-d); --blue-light: var(--dz-soft-d);
  --green: var(--dz-n-ok); --green-text: var(--dz-n-ok-text); --amber: var(--dz-n-warn); --amber-text: var(--dz-n-warn-text);
  --red: var(--dz-n-danger); --red-text: var(--dz-n-danger-text); --info: var(--dz-n-info);
  --ring: 0 0 0 3px var(--dz-soft-d);
}
html[data-app="core"][data-theme="dark"], html[data-app="prompter"][data-theme="dark"] {
  --navy: var(--dz-side-1); --navy-light: var(--dz-primary); --gold: var(--dz-gold);
  --bg: var(--dz-n-bg); --surface: var(--dz-n-surface); --surface-alt: var(--dz-n-surface2); --border: var(--dz-n-line);
  --text: var(--dz-n-ink); --text-muted: var(--dz-n-muted);
}
html[data-app][data-theme="dark"] :is(.sidebar, aside#sidebar) { background: linear-gradient(180deg, var(--dz-side-2), #0C090B); }
html[data-app]:not([data-theme="dark"]) :is(aside.sidebar, .sidebar#sidebar) { background: linear-gradient(180deg, var(--dz-side-1), var(--dz-side-2)); }
/* status text utilities (replace inline colour literals): readable in light and night mode */
.dz-text-ok { color: var(--dz-ok-text); } .dz-text-warn { color: var(--dz-warn-text); } .dz-text-danger { color: var(--dz-danger-text); } .dz-text-muted { color: var(--dz-muted); }
html[data-theme="dark"] .dz-text-ok { color: var(--dz-n-ok-text); } html[data-theme="dark"] .dz-text-warn { color: var(--dz-n-warn-text); }
html[data-theme="dark"] .dz-text-danger { color: var(--dz-n-danger-text); } html[data-theme="dark"] .dz-text-muted { color: var(--dz-n-muted); }

html[data-app="accounting"] .page-topbar { background: var(--dz-primary-dark); }
html[data-app="accounting"]:not([data-theme="dark"]) .page-topbar { background: var(--dz-primary); }

html[data-app="accounting"] .page-topbar .ptb-where { color: rgba(255, 255, 255, .92) !important; }

/* muted text on a dark sidebar rail */
html[data-app] :is(.sidebar-foot, .sidebar .ver, aside.sidebar small) { color: var(--dz-side-muted); }

/* inputs that live on the dark rail (module search): light text, readable placeholder */
html[data-app] :is(.sidebar, #sidebar, aside) input:not([type=checkbox], [type=radio]) { color: var(--dz-side-ink); background-color: rgba(255, 255, 255, .08); border-color: rgba(255, 255, 255, .22); }
html[data-app] :is(.sidebar, #sidebar, aside) input::placeholder { color: var(--dz-side-muted); opacity: 1; }

/* sign-in / registration pages follow the app palette (core gold) instead of the old maroon */
html[data-app] body.auth-body { --auth-brand: var(--dz-side-1); --auth-brand-dark: var(--dz-side-2); background: linear-gradient(135deg, var(--dz-primary-dark), var(--dz-side-2)); }

/* ====================================================================================================
   DICE BRAND: logo, hover signature, wordmark, signature footer
   The cube spins once and zooms to 200% on mouse-over / keyboard focus, wherever it appears.
   ==================================================================================================== */
.dz-logo, .dz-bf-logo {
  position: relative; z-index: 1; display: inline-block; vertical-align: middle; cursor: pointer;
  transform-origin: 50% 50%; transition: transform .75s cubic-bezier(.2, .8, .2, 1), filter .3s ease;
  will-change: transform; filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .25));
}
.dz-logo:hover, .dz-bf-logo:hover,
:is(.brand-logo, .auth-brand-emblem, .auth-dice-badge, .auth-mobile-brand > span, .dz-brand-mark-lg):is(:hover, :focus-within) .dz-logo {
  transform: rotate(360deg) scale(2); z-index: 60; filter: drop-shadow(0 10px 18px rgba(0, 0, 0, .4));
}
.dz-logo:focus-visible, .dz-bf-logo:focus-visible { transform: rotate(360deg) scale(2); z-index: 60; }
@media (prefers-reduced-motion: reduce) {
  .dz-logo, .dz-bf-logo { transition: transform .12s linear; }
  .dz-logo:hover, .dz-bf-logo:hover, :is(.brand-logo, .auth-brand-emblem, .auth-dice-badge, .auth-mobile-brand > span):hover .dz-logo { transform: scale(2); }
}
/* a zoomed logo must never be clipped by its tile */
html[data-app] :is(.brand-logo, .auth-brand-emblem, .auth-dice-badge, .auth-mobile-brand > span, .sidebar-brand, .brand) { overflow: visible; }

/* sidebar brand block (DICE Core) */
html[data-app] .sidebar-brand { padding: 18px 16px; gap: 12px; }
html[data-app] .brand-mark.brand-logo {
  width: 44px; height: 44px; padding: 0; display: grid; place-items: center; position: relative; z-index: 2; border-radius: 12px;
  background: radial-gradient(120% 120% at 25% 15%, rgba(255, 255, 255, .26), rgba(255, 255, 255, .05) 60%);
  border: 1px solid rgba(255, 255, 255, .16); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 6px 16px rgba(0, 0, 0, .28);
}
html[data-app] .brand-mark.brand-logo img { width: 30px; height: 30px; }
html[data-app] .brand-title { font-size: 17px; font-weight: 700; letter-spacing: .08em; color: #fff; line-height: 1.1; }
html[data-app] .brand-title .dz-tm { font-size: 9px; font-weight: 600; margin-left: 2px; vertical-align: super; letter-spacing: 0; opacity: .8; }
html[data-app] .brand-subtitle { margin-top: 3px; font-size: 10.5px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--dz-side-muted); }

/* sign-in / registration brand panel */
html[data-app] .auth-brand-emblem {
  width: 76px; height: 76px; border-radius: 20px; position: relative; z-index: 2; margin-bottom: 1.5rem; display: grid; place-items: center;
  background: radial-gradient(120% 120% at 25% 15%, rgba(255, 255, 255, .3), rgba(255, 255, 255, .06) 62%);
  border: 1px solid rgba(255, 255, 255, .22); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 14px 34px rgba(0, 0, 0, .3);
}
html[data-app] .auth-brand-emblem img { width: 54px; height: 54px; }
html[data-app] .auth-brand-panel h1 { font-size: 1.85rem; line-height: 1.15; letter-spacing: .01em; }
html[data-app] .auth-brand-org { letter-spacing: .12em; font-size: .68rem; opacity: .95; }
html[data-app] .auth-mobile-brand > span { position: relative; z-index: 2; width: 42px; height: 42px; background: transparent; }

/* signature footer */
.dz-brand-footer {
  display: flex; flex-direction: column; align-items: center; gap: 3px; margin: var(--dz-sp-6) auto 0; padding: var(--dz-sp-5) var(--dz-sp-4) var(--dz-sp-6);
  max-width: 720px; text-align: center; font-size: var(--dz-fs-xs); line-height: 1.5; color: var(--dz-muted);
  position: relative;
}
.dz-brand-footer::before { content: ""; position: absolute; top: 0; left: 50%; width: 220px; height: 1px; transform: translateX(-50%); background: linear-gradient(90deg, transparent, var(--dz-gold) 50%, transparent); }
.dz-brand-footer .dz-bf-logo { width: 30px; height: 30px; margin-bottom: 6px; }
.dz-brand-footer .dz-bf-head { font-size: var(--dz-fs-sm); font-weight: var(--dz-fw-semibold); letter-spacing: .01em; color: var(--dz-ink2); }
.dz-brand-footer .dz-bf-exp { font-size: 10.5px; font-weight: var(--dz-fw-medium); letter-spacing: .08em; text-transform: uppercase; }
.dz-brand-footer .dz-bf-copy { margin-top: 0; }
.dz-brand-footer .dz-bf-owner { font-size: var(--dz-fs-sm); font-weight: var(--dz-fw-semibold); letter-spacing: .02em; color: var(--dz-ink2); margin-top: 2px; white-space: nowrap; }
.dz-brand-footer.on-dark { color: var(--dz-side-muted); margin-top: auto; padding-top: var(--dz-sp-5); }
.dz-brand-footer.on-dark .dz-bf-head, .dz-brand-footer.on-dark .dz-bf-owner { color: var(--dz-side-ink); }
html[data-theme="dark"] .dz-brand-footer:not(.on-dark) { color: var(--dz-n-muted); }
html[data-theme="dark"] .dz-brand-footer:not(.on-dark) :is(.dz-bf-head, .dz-bf-owner) { color: var(--dz-n-ink2); }
@media print { .dz-brand-footer .dz-bf-logo { filter: none; } }

/* sign-in / registration pages follow the app palette (core gold) instead of the old maroon */
html[data-app] body.auth-body { --auth-brand: var(--dz-side-1); --auth-brand-dark: var(--dz-side-2); background: linear-gradient(135deg, var(--dz-primary-dark), var(--dz-side-2)); }
html[data-app] .auth-dice-badge { background: rgba(255, 255, 255, .92); padding: 3px; }
/* ====================================================================================================
   ACTION ICONS (dice-icons.js): Save / Delete / Edit / Print ... as icons, links with leading icons
   ==================================================================================================== */
.dz-sr { position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
.dz-i { width: var(--dz-icon-md); height: var(--dz-icon-md); flex: 0 0 auto; stroke-width: var(--dz-icon-stroke); vertical-align: -.22em; }
.dz-has-ico { display: inline-flex; align-items: center; gap: .5em; }
.dz-has-ico > .dz-i-lead { width: 1.15em; height: 1.15em; opacity: .95; }
.btn.dz-has-ico, button.dz-has-ico { justify-content: center; }

/* icon-only control: square, tooltip, keyboard focus ring */
.dz-ico-btn { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 0; }
.dz-ico-btn:not(.btn):not([class*="btn-"]):not([class*="button"]) {
  width: 34px; height: 34px; padding: 0; border: 1px solid transparent; border-radius: var(--dz-r-sm); background: transparent;
  color: var(--dz-primary); cursor: pointer; text-decoration: none; line-height: 1; transition: background-color var(--dz-transition), border-color var(--dz-transition), color var(--dz-transition);
}
.dz-ico-btn:not(.btn):not([class*="btn-"]):not([class*="button"]):hover { background: var(--dz-soft); border-color: var(--dz-line); color: var(--dz-primary-dark); }
.dz-ico-btn.dz-ico-danger:not(.btn):not([class*="btn-"]):hover { background: var(--dz-danger-soft); border-color: transparent; color: var(--dz-danger-text); }
.btn.dz-ico-btn, button.dz-ico-btn[class*="btn"], .dz-ico-btn[class*="button"] { min-width: var(--dz-control-h); padding-left: 0 !important; padding-right: 0 !important; width: var(--dz-control-h); }
.dz-ico-btn > .dz-i { width: var(--dz-icon-md); height: var(--dz-icon-md); margin: 0; }
.dz-ico-btn.btn-sm, .dz-ico-btn.small, .dz-ico-btn[class*="btn-sm"] { width: 32px; min-width: 32px; }
/* light-on-dark contexts keep their own colour */
:is(.sidebar, #sidebar, aside, .topbar, header) .dz-ico-btn:not(.btn) { color: inherit; }
:is(.sidebar, #sidebar, aside) .dz-ico-btn:not(.btn):hover { background: var(--dz-side-hover); border-color: transparent; color: #fff; }

@media print { .dz-ico-btn { display: none !important; } }

/* scope chip (Property IMS hero): name + detail */
.property-scope { max-width: 260px; }
.property-scope small { display: block; margin-top: 3px; font-size: .75rem; color: rgba(255, 255, 255, .88); }

/* tooltip: floating, always above the element (flips below only when there is no room) */
.dz-tooltip {
  position: fixed; z-index: 2147483000; left: 0; top: 0; max-width: 280px; padding: 6px 10px; border-radius: 8px; pointer-events: none;
  background: var(--dz-ink); color: #fff; font: 500 12.5px/1.35 var(--dz-font); letter-spacing: 0; text-transform: none; text-align: center; white-space: normal;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .28); opacity: 0; visibility: hidden; transform: translateY(4px); transition: opacity .12s ease, transform .12s ease;
}
.dz-tooltip.is-on { opacity: 1; visibility: visible; transform: none; }
.dz-tooltip::after { content: ""; position: absolute; left: var(--dz-arrow-x, 50%); width: 10px; height: 10px; background: inherit; transform: translateX(-50%) rotate(45deg); border-radius: 2px; }
.dz-tooltip[data-pos="top"]::after { bottom: -4px; }
.dz-tooltip[data-pos="bottom"]::after { top: -4px; }
html[data-theme="dark"] .dz-tooltip { background: #F3EDEF; color: #1B1416; }
@media print { .dz-tooltip { display: none !important; } }
/* 'Digital Information & Communication Environment' never wraps (dice-icons.js shrinks the font to fit its box) */
.dz-bf-exp, .diocese-banner-subtitle, .auth-brand-org, .dio-banner-sub, .dio-print-sub, .dio-env, .cert-env, [data-dz-oneline] { white-space: nowrap !important; max-width: 100%; }
/* the copyright line never wraps: one row on every screen size */
.dz-brand-footer .dz-bf-copy { white-space: nowrap; font-size: clamp(9px, 2.55vw, 12px); }
.dz-brand-footer.is-compact { gap: 4px; }
.dz-brand-footer.is-compact .dz-bf-logo { margin-bottom: 4px; }
html[data-app] .brand-mark.brand-logo { flex: 0 0 44px; }.breadcrumb .crumb-home { display: inline-flex; align-items: center; gap: 6px; color: inherit; text-decoration: none; font-weight: var(--dz-fw-medium); }
.breadcrumb .crumb-home:hover { color: var(--dz-primary); }

/* sign-in on small screens: the brand panel is hidden, so the signature moves under the form */
.auth-mobile-signature { display: none; }
@media (max-width: 767.98px) { .auth-mobile-signature { display: block; } }
.dz-has-ico { gap: 0; }
.dz-has-ico > .dz-i-lead { margin-right: .5em; }

/* themed error / notice page (dice_error_page) */
body.dz-error-body { min-height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0; padding: var(--dz-sp-6) var(--dz-sp-4); }
.dz-error { width: 100%; max-width: 520px; text-align: center; padding: var(--dz-sp-8) var(--dz-sp-6); background: var(--dz-surface); border: 1px solid var(--dz-line); border-radius: var(--dz-r-lg); box-shadow: var(--dz-shadow); }
.dz-error .dz-logo { margin-bottom: var(--dz-sp-3); }
.dz-error-code { display: inline-block; padding: 2px 12px; margin-bottom: var(--dz-sp-3); border-radius: var(--dz-r-pill); background: var(--dz-soft); color: var(--dz-primary-dark); font-size: var(--dz-fs-xs); font-weight: var(--dz-fw-bold); letter-spacing: .1em; text-transform: uppercase; }
.dz-error h1 { margin: 0 0 var(--dz-sp-2); }
.dz-error p { margin: 0 auto var(--dz-sp-6); max-width: 42ch; color: var(--dz-ink2); }
.dz-error-actions { display: flex; gap: var(--dz-sp-3); justify-content: center; flex-wrap: wrap; }
.dz-btn { display: inline-flex; align-items: center; justify-content: center; min-height: var(--dz-control-h); padding: 0 var(--dz-sp-5); border-radius: var(--dz-r-sm); border: 1px solid var(--dz-primary); background: var(--dz-surface); color: var(--dz-primary); font-weight: var(--dz-fw-semibold); text-decoration: none; }
.dz-btn:hover { background: var(--dz-soft); color: var(--dz-primary-dark); }
.dz-btn-primary { background: var(--dz-primary); color: var(--dz-on-primary); }
.dz-btn-primary:hover { background: var(--dz-primary-dark); color: var(--dz-on-primary); }

/* CRUD tables: the actions column stays visible while the table scrolls sideways */
.crud-table th.col-actions, .crud-table td.col-actions { position: sticky; right: 0; white-space: nowrap; width: 1%; background: var(--dz-surface); box-shadow: -10px 0 10px -10px rgba(27, 20, 22, .18); }
.crud-table th.col-actions { background: var(--dz-surface2); }
.crud-table td.col-actions { display: table-cell; }
.crud-table td.col-actions > * { vertical-align: middle; }
.crud-table td.col-actions .inline-form { display: inline-block; margin: 0; }

/* BiRDS: the hidden service radios must never widen the page */
html[data-app] input.birds-service-radio { width: 1px !important; height: 1px !important; min-height: 0 !important; border: 0 !important; padding: 0 !important; }

/* Accounting: teal text that must stay readable in both modes */
html[data-app="accounting"] .fins-sub { color: var(--dz-primary); }
html[data-app="accounting"][data-theme="dark"] :is(.fins-sub, .table a, a.doc-link, .fins-mark) { color: var(--dz-a-d); }

/* filter toolbars (BiRDS / SCRiPT / Property IMS): the form had no layout rule and wrapped into three rows */
html[data-app] form.list-tools { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; margin-bottom: 1rem; }
html[data-app] form.list-tools > :is(select, input:not([type=hidden])) { margin: 0; }
html[data-app] form.list-tools .lt-actions { margin-left: 0; }

/* BiRDS request rows: room for "UNDER REVIEW  OVERDUE" so the status chips never run into the row menu */
html[data-app="birds"] .birds-workflow-card { grid-template-columns: 42px minmax(200px, 1.5fr) minmax(130px, .7fr) minmax(170px, auto) auto; }
html[data-app="birds"] .workflow-status { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
html[data-app="birds"] .workflow-go button, html[data-app="birds"] .workflow-go summary { min-width: 32px; min-height: 32px; }

/* DICE Core topbar on a phone: the search box keeps a usable width, decoration steps aside */
@media (max-width: 600px) {
  .topbar .breadcrumb, .topbar .topbar-search kbd { display: none; }
  .topbar .topbar-search { flex: 1 1 auto; min-width: 0; }
  .topbar .topbar-search input { min-width: 0; width: 100%; }
}
/* one control height family: 38px default, 32px compact */
html[data-app] :is(.btn-sm, .btn.sm, .btn.small, .btn-small) { min-height: 32px; }

/* FiNS Curia: current page in the app colour (its own rule was a hard-coded blue), readable section labels on the dark rail */
html[data-app="fins"] .nav-link.active { background: var(--dz-side-active); box-shadow: inset 3px 0 0 var(--dz-gold); }
html[data-app="fins"] .nav-link.active::before { background: var(--dz-gold); }
html[data-app="fins"] .nav-link.active:hover { background: rgba(255, 255, 255, .2); }
html[data-app="fins"] :is(.nav-section-head, .nav-pillar-head) { color: var(--dz-side-muted); }
html[data-app="fins"] :is(.nav-section[open] > .nav-section-head, .nav-pillar[open] > .nav-pillar-head) { color: #fff; }
html[data-app="fins"] .nav-pillar[open] > .nav-pillar-head .nav-pillar-icon-wrap { background: var(--dz-side-active); color: #fff; }

/* bootstrap utilities used by AI_Scans: keep them at AA on light surfaces */
html[data-app="aiscans"]:not([data-theme="dark"]) .text-danger { color: var(--dz-danger-text) !important; }
html[data-app="aiscans"]:not([data-theme="dark"]) :is(.btn-outline-secondary, code) { color: var(--dz-ink2); }
html[data-app="aiscans"]:not([data-theme="dark"]) .btn-outline-secondary { border-color: var(--dz-line-strong, var(--dz-line)); }
