/* -------------------------------------------------------------
   Dilicia — designer-grade theme layer.
   Sits on top of style.css (legacy bootstrap admin starter).
   Goal: Linear/Vercel/Stripe-class polish with restraint —
   ghost gridlines, single accent, soft tints, no chunky shadows,
   disciplined spacing scale, real card-headers and toolbars.
   ------------------------------------------------------------- */

:root {
    /* surfaces — soft cream-tinted neutrals (warm complement to teal) */
    --d-bg:        #f3f7ec;          /* page bg: faint cream wash from #ECF4D6 */
    --d-bg-2:      #e9efdc;          /* slightly deeper for contrast */
    --d-surface:   #ffffff;          /* cards stay clean white */
    --d-surface-2: #f7faf0;          /* nested surfaces, faint cream */
    --d-input-bg:  #f8fbf3;          /* inputs: tinted so they pop on white card */
    --d-line:      #e1e9d2;          /* divider, soft cream-grey */
    --d-line-2:    #c9d6b3;          /* slightly stronger, more visible */

    /* text */
    --d-text:      #0f172a;
    --d-text-2:    #334155;
    --d-muted:     #64748b;
    --d-faint:     #94a3b8;

    /* brand + state — teal palette inspired by Mr Saghi (Dribbble #23141567)
       #265073 deep navy-teal · #2D9596 mid teal · #9AD0C2 mint · #ECF4D6 cream */
    --d-primary:        #2D9596;   /* mid teal — primary actions */
    --d-primary-soft:   #d6ecea;   /* tinted from #9AD0C2 — soft fills */
    --d-primary-tint:   #9AD0C2;   /* mint — borders, badges */
    --d-primary-hover:  #1F6F70;   /* darker teal for hover */
    --d-primary-deep:   #265073;   /* deep navy-teal — accent strokes / headings */
    --d-accent-cream:   #ECF4D6;   /* warm cream — pop accents, "today" indicators */
    --d-success:        #15803d;
    --d-success-soft:   #ecfdf3;
    --d-warning:        #b45309;
    --d-warning-soft:   #fffbeb;
    --d-danger:         #dc2626;
    --d-danger-soft:    #fef2f2;
    --d-accent-amber:   #f59e0b;
    --d-accent-violet:  #7c3aed;
    --d-accent-rose:    #e11d48;

    /* spacing scale */
    --s-1: 4px;
    --s-2: 8px;
    --s-3: 12px;
    --s-4: 16px;
    --s-5: 20px;
    --s-6: 24px;
    --s-7: 32px;
    --s-8: 48px;

    /* radii */
    --d-radius-sm: 6px;
    --d-radius:    8px;
    --d-radius-lg: 12px;

    /* shadows */
    --d-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04);
    --d-shadow:    0 1px 2px rgba(15, 23, 42, 0.04),
                   0 1px 3px rgba(15, 23, 42, 0.05);
    --d-shadow-lg: 0 4px 16px rgba(15, 23, 42, 0.08),
                   0 2px 4px rgba(15, 23, 42, 0.04);

    /* typography */
    --d-font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
              'Helvetica Neue', Arial, system-ui, sans-serif;

    /* layout */
    --d-sidebar-w: 232px;
    --d-header-h:  56px;
}

/* ── Base ───────────────────────────────────────────────────── */
body {
    font-family: var(--d-font) !important;
    background: var(--d-bg) !important;
    color: var(--d-text);
    font-size: 0.875rem;
    line-height: 1.5;
    font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11', 'ss01';
    -webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4, h5, h6 {
    font-family: var(--d-font);
    color: var(--d-text);
    font-weight: 700;
    letter-spacing: -0.015em;
    margin-top: 0;
}
h1 { font-size: 1.5rem; line-height: 1.2; }
h2 { font-size: 1.25rem; line-height: 1.25; }
h3 { font-size: 1.0625rem; }
h4 { font-size: 0.9375rem; font-weight: 600; }
h5 { font-size: 0.875rem; font-weight: 600; }
h6 { font-size: 0.8125rem; font-weight: 600; }
p { margin-bottom: var(--s-3); color: var(--d-text-2); }
.text-muted { color: var(--d-muted) !important; }
small { font-size: 0.8125rem; color: var(--d-muted); }
a { color: var(--d-primary); }
a:hover { color: var(--d-primary-hover); text-decoration: none; }

/* ── Layout chrome ──────────────────────────────────────────── */
.content-body { background: var(--d-bg) !important; }
.container-fluid { padding-left: var(--s-7) !important; padding-right: var(--s-7) !important; }

/* ── Top header bar (slim, quiet) ───────────────────────────── */
.header {
    background: var(--d-surface) !important;
    border-bottom: 1px solid var(--d-line-2) !important;
    box-shadow: none !important;
    height: var(--d-header-h) !important;
    min-height: var(--d-header-h) !important;
    padding: 0 var(--s-6) !important;
    /* Don't create a stacking context — dropdown needs to escape upward
       above the cockpit-topstrip (z-index 200). Forcing `position: static`
       removes the legacy z-index that style.css sets on .header. */
    position: static !important;
    z-index: auto !important;
}
.header-right, .header-content, .header-right ul, .header-right li.dropdown {
    /* Same — keep these flat in the stacking order so the dropdown
       reaches the top. */
    position: static !important;
    z-index: auto !important;
}
/* The actual dropdown menu — z-index above the cockpit-topstrip (200)
   and any other floating chrome. */
.dropdown-profile,
.header .dropdown-menu,
.header-right .dropdown-menu {
    z-index: 1500 !important;
    position: absolute;
}

/* User chip in the nav bar — shows initial avatar + username + role */
.d-user-chip {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 6px 10px 6px 6px;
    border-radius: 999px;
    border: 1px solid var(--d-line-2);
    background: var(--d-surface);
    color: var(--d-text);
    transition: background 0.1s, border-color 0.1s;
    cursor: pointer;
    user-select: none;
}
.d-user-chip:hover {
    background: var(--d-surface-2);
    border-color: var(--d-faint);
}
.d-user-chip__avatar {
    width: 30px;
    height: 30px;
    border-radius: 999px;
    background: var(--d-primary);
    color: #fff;
    font-weight: 700;
    font-size: 0.8125rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    letter-spacing: 0;
}
.d-user-chip__meta {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    min-width: 0;
}
.d-user-chip__name {
    font-size: 0.825rem;
    font-weight: 600;
    color: var(--d-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 160px;
}
.d-user-chip__role {
    font-size: 0.7rem;
    color: var(--d-muted);
    margin-top: 1px;
    white-space: nowrap;
}
.d-user-chip__caret {
    font-size: 0.65rem;
    color: var(--d-faint);
    margin-left: 2px;
}
@media (max-width: 768px) {
    .d-user-chip__meta { display: none; }
    .d-user-chip { padding: 4px; }
    .d-user-chip__caret { display: none; }
}
.header-content { height: var(--d-header-h) !important; min-height: var(--d-header-h) !important; }
/* the legacy "search dashboard" input isn't actually wired up. Hide
   for now to remove visual noise; can re-introduce as a real cmd-K
   palette later. */
.header-search,
.header-left .input-group.icons,
.header-left form,
.nav-control + form { display: none !important; }
.nav-control .hamburger,
.hamburger {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    color: var(--d-text-2) !important;
    padding: 0 var(--s-2) !important;
}
.hamburger:hover { color: var(--d-text) !important; }

/* user-avatar dropdown — keep but de-emphasise */
.header-right .dropdown > a img,
.header-right .dropdown > a .pic1 {
    width: 32px !important;
    height: 32px !important;
    border-radius: 999px !important;
    border: 1px solid var(--d-line-2);
}

/* ── Brand mark in nav-header ───────────────────────────────── */
.nav-header {
    background: var(--d-surface) !important;
    border-right: 1px solid var(--d-line) !important;
    border-bottom: 1px solid var(--d-line-2) !important;
    height: var(--d-header-h) !important;
    width: var(--d-sidebar-w) !important;
}
.nav-header .brand-logo {
    height: 100%;
    padding: 0 var(--s-5) !important;
    display: flex;
    align-items: center;
}
.d-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--d-font);
    text-decoration: none;
    color: var(--d-text) !important;
    height: 100%;
}
.d-brand:hover { color: var(--d-text) !important; text-decoration: none; }
.d-brand__mark {
    width: 30px;
    height: 30px;
    border-radius: var(--d-radius);
    background: var(--d-primary);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.d-brand__text {
    font-weight: 700;
    font-size: 1.0625rem;
    letter-spacing: -0.02em;
    color: var(--d-text);
}

/* ── Sidebar ────────────────────────────────────────────────── */
.nk-sidebar {
    background: var(--d-surface) !important;
    border-right: 1px solid var(--d-line) !important;
    width: var(--d-sidebar-w) !important;
    top: var(--d-header-h) !important;
    padding-top: var(--s-3) !important;
}
.nk-sidebar .nk-nav-scroll { padding: 0 var(--s-2); }
.nk-sidebar .metismenu { padding: 0; margin: 0; }
.nk-sidebar .metismenu > li {
    list-style: none;
    margin: 1px 0;
    position: relative;
}
.nk-sidebar .metismenu > li > a {
    color: var(--d-text-2) !important;
    border-radius: var(--d-radius-sm);
    padding: 7px 10px !important;
    font-weight: 500;
    font-size: 0.875rem;
    line-height: 1.4;
    display: flex !important;
    align-items: center;
    gap: 10px;
    transition: background 0.1s, color 0.1s;
    background: transparent;
}
.nk-sidebar .metismenu > li > a:hover,
.nk-sidebar .metismenu > li > a:focus {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
}
.nk-sidebar .metismenu > li > a > i,
.nk-sidebar .metismenu > li > a > .icon {
    flex: 0 0 18px;
    width: 18px;
    height: 18px;
    font-size: 0.95rem;
    color: var(--d-faint);
    margin: 0 !important;
    text-align: center;
    line-height: 18px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.nk-sidebar .metismenu > li > a > .nav-text { flex: 1 1 auto; }
.nk-sidebar .metismenu > li > a:after,
.nk-sidebar .metismenu > li > a > .menu-arrow {
    color: var(--d-faint);
    font-size: 0.65rem;
    border: none !important;
}
.nk-sidebar .metismenu > li:hover > a > i { color: var(--d-text-2); }
/* active item: soft tint + 3px accent bar + colored text/icon */
.nk-sidebar .metismenu > li.mm-active > a,
.nk-sidebar .metismenu > li.active > a {
    background: var(--d-primary-soft) !important;
    color: var(--d-primary) !important;
    font-weight: 600;
    box-shadow: inset 3px 0 0 var(--d-primary);
}
.nk-sidebar .metismenu > li.mm-active > a > i,
.nk-sidebar .metismenu > li.active > a > i { color: var(--d-primary) !important; }
/* Section label rows (group headings inside the sidebar) */
.nk-sidebar .metismenu > li.nav-section-label {
    list-style: none;
    color: var(--d-faint);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.7px;
    padding: 14px 14px 6px 14px;
    margin: 0;
    background: transparent !important;
    pointer-events: none;
}
.nk-sidebar .metismenu > li.nav-section-label:first-child { padding-top: 4px; }

/* sub-menu */
.nk-sidebar .metismenu .sub-menu { padding: 2px 0 var(--s-1) 28px; }
.nk-sidebar .metismenu .sub-menu li { list-style: none; margin: 1px 0; }
.nk-sidebar .metismenu .sub-menu li a {
    color: var(--d-muted) !important;
    font-size: 0.825rem;
    padding: 6px var(--s-3) !important;
    border-radius: var(--d-radius-sm);
    display: block;
    transition: background 0.1s, color 0.1s;
}
.nk-sidebar .metismenu .sub-menu li a:hover {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
}
.nk-sidebar .metismenu .sub-menu li.mm-active a,
.nk-sidebar .metismenu .sub-menu li.active a {
    color: var(--d-primary) !important;
    background: transparent !important;
    font-weight: 600;
}
/* legacy style.css already pushes .content-body via margin-left
   to clear the sidebar — don't double up. */

/* ── Collapsible sidebar (icons-only) ──────────────────────────
   Toggled by #main-wrapper.menu-toggle (custom.min.js flips this
   on .nav-control click). When collapsed, the sidebar shrinks to
   a 64px rail, only icons are visible, section labels and arrows
   are hidden, and sub-menus appear as hover flyouts. */
:root { --d-sidebar-w-collapsed: 64px; }

/* Keep #main-wrapper free of a compositing/stacking context where we can.
   NOTE: the mobile drawer no longer DEPENDS on this — the backdrop is now
   injected inside #main-wrapper (sibling of .nk-sidebar), so backdrop(1055)
   and sidebar(1060) live in the same stacking context and order by z-index
   alone. These rules remain as belt-and-suspenders (and to keep the desktop
   collapse animation clean):
   - opacity:1 !important  → kills the opacity:0→1 stacking context
   - overflow:visible !important → stops iOS Safari from creating a
     compositing layer for overflow:hidden that traps fixed children. */
#main-wrapper {
    opacity: 1 !important;
    overflow: visible !important;
}

.nk-sidebar,
.nav-header,
.header,
.content-body {
    transition: width 180ms ease, margin-left 180ms ease, padding-left 180ms ease;
}

#main-wrapper.menu-toggle .nk-sidebar,
#main-wrapper.menu-toggle .nav-header {
    width: var(--d-sidebar-w-collapsed) !important;
    overflow: visible !important;
}
#main-wrapper.menu-toggle .nk-sidebar .nk-nav-scroll { overflow: visible !important; padding: 0 6px; }

/* icons centered, labels & chevrons hidden */
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a {
    justify-content: center;
    padding: 9px 8px !important;
}
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a > .nav-text,
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a:after,
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a > .menu-arrow,
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li.nav-section-label {
    display: none !important;
}
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a > i {
    font-size: 1.05rem;
}

/* brand: only the mark, hide wordmark when collapsed */
#main-wrapper.menu-toggle .nav-header .brand-logo { padding: 0 !important; justify-content: center; }
#main-wrapper.menu-toggle .nav-header .d-brand { gap: 0; justify-content: center; width: 100%; }
#main-wrapper.menu-toggle .nav-header .d-brand__text { display: none; }

/* shift header + content-body to the new sidebar width
   (legacy uses margin-left on both — match that, with width recalc) */
#main-wrapper.menu-toggle .header {
    margin-left: var(--d-sidebar-w-collapsed) !important;
    width: calc(100% - var(--d-sidebar-w-collapsed)) !important;
}
#main-wrapper.menu-toggle .content-body { margin-left: var(--d-sidebar-w-collapsed) !important; }

/* sub-menu becomes a hover flyout */
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li > ul {
    display: none !important;
    position: absolute;
    left: var(--d-sidebar-w-collapsed);
    top: 0;
    min-width: 200px;
    background: var(--d-surface);
    border: 1px solid var(--d-line);
    border-radius: var(--d-radius);
    box-shadow: var(--d-shadow-lg);
    padding: 6px !important;
    z-index: 1001;
}
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li:hover > ul {
    display: block !important;
}
#main-wrapper.menu-toggle .nk-sidebar .metismenu > li:hover > a {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
}

/* hamburger affordance: rotate slightly when active */
/* Legacy CSS pins .nav-control with position:absolute; left:1.4375rem;
   anchored to .header. We force .header to position:static (for dropdown
   z-index reasons), so absolute positioning would climb up to <body> and
   land behind the sidebar. Flow it inline instead. */
.nav-control {
    position: static !important;
    transform: none !important;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    height: var(--d-header-h);
    margin-right: var(--s-2);
}
.nav-control .hamburger {
    position: static !important;
    top: 0 !important;
    width: auto !important;
    transition: transform 180ms ease;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px !important;
    height: 36px !important;
    border-radius: var(--d-radius-sm);
}
.nav-control .hamburger:hover { background: var(--d-surface-2) !important; }
.nav-control .hamburger .toggle-icon {
    color: var(--d-text-2) !important;
    line-height: 1 !important;
    font-size: 1.1rem !important;
}
#main-wrapper.menu-toggle .nav-control .hamburger { transform: rotate(90deg); }

/* ── Page header (kept slim — sidebar shows context, so we only
   surface a small breadcrumb + the action area). The big H1 title
   is dropped on list pages; it duplicates what the sidebar already
   says. Detail pages can opt-in via {% block page_header %}. */
.d-page-header {
    padding: var(--s-5) 0 var(--s-3) 0;
    margin: 0;
}
.d-page-header__crumb {
    font-size: 0.8125rem;
    color: var(--d-faint);
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
}
.d-page-header__crumb a { color: var(--d-faint); }
.d-page-header__crumb a:hover { color: var(--d-text-2); }
.d-page-header__crumb .is-current { color: var(--d-text); font-weight: 600; }
.d-page-header__crumb .d-crumb-sep { color: var(--d-faint); opacity: 0.6; }
.d-page-header__row { display: none; }
.d-page-header__heading { min-width: 0; }
.d-page-title { display: none; }
.d-page-subtitle { display: none; }
.d-page-header__actions { display: none; }

/* legacy `.row.page-titles` rows still sit inside some templates;
   neutralise so they don't double-stack with the new header */
.row.page-titles { display: none !important; }

/* ── List-page surface (Refine-style — no card wrapper) ─────── */
/* a clean white surface that holds toolbar + table without any
   visible card chrome. Pages that want the chrome can still use
   a `.card`. */
.d-surface {
    background: var(--d-surface);
    border: 1px solid var(--d-line);
    border-radius: var(--d-radius);
    box-shadow: var(--d-shadow-sm);
    overflow: hidden;
    margin-bottom: var(--s-5);
}

/* ── Filter bar — inline filters above a list page ──────────
   Use:
     <form class="d-filter-bar">
       <div class="d-filter-bar__field">
         <label>Route</label>
         <select class="form-control">…</select>
       </div>
       <div class="d-filter-bar__field">
         <label>Date</label>
         <input class="form-control" type="text">
       </div>
     </form>
*/
.d-filter-bar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--s-3);
    align-items: flex-end;
    padding: var(--s-3) 0 var(--s-4) 0;
}
.d-filter-bar__field { display: flex; flex-direction: column; gap: 4px; min-width: 200px; }
.d-filter-bar__field label {
    font-size: 0.75rem !important;
    font-weight: 600 !important;
    color: var(--d-muted) !important;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin: 0 !important;
}
.d-filter-bar__field .form-control,
.d-filter-bar__field .select2-container { width: auto !important; min-width: 200px; }
.d-filter-bar__field .select2-container { min-width: 220px; }
/* Make sure the form-validation override doesn't catch this */
.d-filter-bar.form-validation .form-group.row,
form.d-filter-bar { display: flex !important; }

/* ── Report filter form ────────────────────────────────────────
   Canonical layout for every /api/*_report/ filter page.
   Wraps a `.d-filter-bar` inside a card-style surface.
   Usage:
     <form class="d-report-form" method="get">
       <h3 class="d-report-form__title">Report name</h3>
       <div class="d-filter-bar">
         <div class="d-filter-bar__field">…</div>
         <div class="d-filter-bar__actions">…buttons…</div>
       </div>
     </form>
*/
.d-report-form {
    background: var(--d-surface);
    border: 1px solid var(--d-line);
    border-radius: var(--d-radius);
    box-shadow: var(--d-shadow-sm);
    padding: var(--s-5) var(--s-6);
    margin-bottom: var(--s-5);
    max-width: 1100px;
}
.d-report-form__title {
    font-size: 1.125rem;
    font-weight: 700;
    margin: 0 0 var(--s-3) 0;
    color: var(--d-text);
}
.d-report-form__subtitle {
    font-size: 0.8125rem;
    color: var(--d-muted);
    margin: 0 0 var(--s-4) 0;
}
.d-report-form .d-filter-bar {
    padding: 0;
    border-top: 1px solid var(--d-line);
    padding-top: var(--s-4);
}
.d-report-form .d-filter-bar__field { min-width: 180px; }
.d-report-form .d-filter-bar__field .form-control,
.d-report-form .d-filter-bar__field .select2-container { min-width: 180px; }
.d-report-form .d-filter-bar__field .select2-container { min-width: 220px; }
.d-filter-bar__actions {
    display: inline-flex;
    gap: var(--s-2);
    align-items: center;
    margin-left: auto;
    align-self: flex-end;
}

/* date input — calendar glyph + tuned width so it matches selects */
.d-datepicker {
    width: 160px !important;
    min-width: 160px !important;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 16 16' fill='none' stroke='%2364748b' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><rect x='2' y='3' width='12' height='11' rx='1.5'/><path d='M2 6.5h12M5 1.5v3M11 1.5v3'/></svg>");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 14px 14px;
    padding-right: 32px !important;
    cursor: pointer;
}

/* bootstrap-datepicker dropdown — re-skin to teal theme */
.datepicker.datepicker-dropdown {
    border: 1px solid var(--d-line) !important;
    border-radius: var(--d-radius) !important;
    box-shadow: var(--d-shadow-lg) !important;
    padding: 8px !important;
    font-family: var(--d-font) !important;
}
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active.disabled:hover {
    background: var(--d-primary) !important;
    border-color: var(--d-primary) !important;
    color: #fff !important;
    text-shadow: none !important;
}
.datepicker table tr td.today,
.datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:hover {
    background: var(--d-primary-soft) !important;
    color: var(--d-primary) !important;
    border-color: var(--d-primary-tint) !important;
}
.datepicker table tr td.day:hover,
.datepicker table tr td span:hover {
    background: var(--d-surface-2) !important;
}

/* ── List toolbar (above a table inside .d-surface) ─────────── */
.d-list-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-3);
    padding: var(--s-3) var(--s-4);
    background: var(--d-surface-2);
    border-bottom: 1px solid var(--d-line);
    flex-wrap: wrap;
}
.d-list-toolbar__left  { display: inline-flex; gap: var(--s-2); align-items: center; flex-wrap: wrap; }
.d-list-toolbar__right { display: inline-flex; gap: var(--s-2); align-items: center; flex-wrap: wrap; }
.d-list-search {
    position: relative;
    display: inline-flex;
    align-items: center;
}
.d-list-search input {
    height: 34px !important;
    width: 240px;
    padding: 0 var(--s-3) 0 32px !important;
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    background: var(--d-surface);
    font-size: 0.875rem;
}
.d-list-search input:focus {
    border-color: var(--d-primary) !important;
    box-shadow: 0 0 0 3px rgba(45, 149, 150, 0.18) !important;
    outline: none;
}
.d-list-search::before {
    content: "";
    position: absolute;
    left: 10px;
    top: 50%;
    transform: translateY(-50%);
    width: 14px;
    height: 14px;
    background: no-repeat center / contain
        url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%2394a3b8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg>');
}
.d-view-toggle {
    display: inline-flex;
    border: 1px solid var(--d-line-2);
    border-radius: var(--d-radius-sm);
    overflow: hidden;
}
.d-view-toggle button {
    width: 34px;
    height: 34px;
    border: none;
    background: var(--d-surface);
    color: var(--d-muted);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background 0.1s, color 0.1s;
}
.d-view-toggle button + button { border-left: 1px solid var(--d-line-2); }
.d-view-toggle button:hover { background: var(--d-surface-2); color: var(--d-text); }
.d-view-toggle button.is-active {
    background: var(--d-primary-soft);
    color: var(--d-primary);
}

/* ── Cards ──────────────────────────────────────────────────── */
.card {
    border: 1px solid var(--d-line) !important;
    border-radius: var(--d-radius) !important;
    box-shadow:
        0 1px 2px rgba(15, 23, 42, 0.04),
        0 4px 12px rgba(15, 23, 42, 0.04) !important;
    background: var(--d-surface);
    margin-bottom: var(--s-5);
    overflow: hidden;
    transition: box-shadow 0.15s ease;
}
.card:hover {
    box-shadow:
        0 1px 2px rgba(15, 23, 42, 0.04),
        0 8px 20px rgba(15, 23, 42, 0.06) !important;
}
.card-header {
    background: var(--d-surface-2) !important;
    border-bottom: 1px solid var(--d-line) !important;
    padding: var(--s-4) var(--s-5) !important;
    color: var(--d-text);
    font-weight: 600;
}
.card-body { padding: var(--s-5) !important; }
.card-body.p-0 { padding: 0 !important; }
.card-title {
    font-weight: 600 !important;
    color: var(--d-text) !important;
    font-size: 0.9375rem !important;
    margin: 0 !important;
    letter-spacing: -0.005em;
    line-height: 1.4;
}
.card-subtitle { color: var(--d-muted); font-size: 0.8125rem; }
.card-footer {
    background: var(--d-surface) !important;
    border-top: 1px solid var(--d-line) !important;
    padding: var(--s-3) var(--s-5) !important;
}

/* ── Card toolbar (title + filters) inside .card-header ─────── */
.card .card-header.d-card-toolbar,
.d-card-toolbar {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: var(--s-4);
    flex-wrap: wrap;
}
.d-card-toolbar__title { display: inline-flex; align-items: center; gap: var(--s-2); }
.d-card-toolbar__count {
    display: inline-flex;
    align-items: center;
    height: 22px;
    padding: 0 8px;
    background: var(--d-surface-2);
    color: var(--d-muted);
    border: 1px solid var(--d-line);
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    min-width: 22px;
    justify-content: center;
}
.d-card-toolbar__filters { display: inline-flex; gap: var(--s-2); align-items: center; flex-wrap: wrap; }
.d-inline-form { display: inline-flex; align-items: center; gap: 6px; }

/* ── Buttons ────────────────────────────────────────────────── */
.btn {
    height: 36px;
    padding: 0 var(--s-3) !important;
    border-radius: var(--d-radius-sm) !important;
    font-weight: 500 !important;
    font-size: 0.875rem !important;
    box-shadow: none !important;
    border-width: 1px !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 6px;
    line-height: 1;
    transition: background 0.1s, border-color 0.1s, color 0.1s;
    white-space: nowrap;
}
.btn-sm { height: 30px; padding: 0 10px !important; font-size: 0.8125rem !important; }
.btn-lg { height: 40px; padding: 0 var(--s-4) !important; font-size: 0.9375rem !important; }
.btn-primary {
    background: var(--d-primary) !important;
    border-color: var(--d-primary) !important;
    color: #fff !important;
}
.btn-primary:hover, .btn-primary:focus {
    background: var(--d-primary-hover) !important;
    border-color: var(--d-primary-hover) !important;
    color: #fff !important;
}
.btn-secondary, .btn-default, .btn-light, .btn-outline-secondary {
    background: var(--d-surface) !important;
    border-color: var(--d-line-2) !important;
    color: var(--d-text-2) !important;
}
.btn-secondary:hover, .btn-default:hover, .btn-light:hover, .btn-outline-secondary:hover {
    background: var(--d-surface-2) !important;
    border-color: var(--d-faint) !important;
    color: var(--d-text) !important;
}
.btn-success { background: var(--d-success) !important; border-color: var(--d-success) !important; color: #fff !important; }
.btn-warning { background: var(--d-warning) !important; border-color: var(--d-warning) !important; color: #fff !important; }
.btn-danger  { background: var(--d-danger)  !important; border-color: var(--d-danger)  !important; color: #fff !important; }

/* Templates often hard-code an ugly gray inline `style="background-color: #808080"`
   on action buttons (Add Product, etc). Override the inline style so they
   match the brand. */
.btn[style*="#808080"],
.btn[style*="grey"],
.btn[style*="gray"] {
    background: var(--d-primary) !important;
    border-color: var(--d-primary) !important;
    color: #fff !important;
}
.btn[style*="#808080"]:hover,
.btn[style*="grey"]:hover,
.btn[style*="gray"]:hover {
    background: var(--d-primary-hover) !important;
    border-color: var(--d-primary-hover) !important;
}
.btn-link    { background: transparent !important; border-color: transparent !important; color: var(--d-primary) !important; }
.btn-info    { background: var(--d-surface) !important; border-color: var(--d-line-2) !important; color: var(--d-text-2) !important; }
.btn-info:hover { background: var(--d-surface-2) !important; border-color: var(--d-faint) !important; color: var(--d-text) !important; }
.btn i { font-size: 0.825rem; }

/* ── Forms ──────────────────────────────────────────────────── */
.form-control,
.form-select,
input[type=text].form-control,
input[type=email].form-control,
input[type=password].form-control,
input[type=number].form-control,
input[type=date].form-control,
input[type=tel].form-control,
input[type=search].form-control,
select.form-control {
    height: 38px !important;
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    padding: 0 var(--s-3) !important;
    color: var(--d-text);
    background: var(--d-input-bg) !important;
    font-size: 0.875rem;
    box-shadow: none !important;
    transition: border-color 0.1s, box-shadow 0.1s, background 0.1s;
}
.form-control:hover, .form-select:hover { border-color: #a7c9c2 !important; }
textarea.form-control {
    height: auto !important;
    min-height: 88px;
    padding: var(--s-3) !important;
    line-height: 1.5;
}
.form-control:focus, .form-select:focus {
    border-color: var(--d-primary) !important;
    box-shadow: 0 0 0 3px rgba(45, 149, 150, 0.18) !important;
    outline: none;
}
.form-control::placeholder { color: var(--d-faint); }
.form-control[disabled], .form-control:disabled { background: var(--d-surface-2) !important; color: var(--d-muted); }
label, .form-label, .col-form-label {
    color: var(--d-text-2) !important;
    font-weight: 500 !important;
    font-size: 0.8125rem !important;
    margin-bottom: 6px !important;
    line-height: 1.5;
}
.form-group { margin-bottom: var(--s-4); }
.input-group-text {
    background: var(--d-surface-2) !important;
    border: 1px solid var(--d-line-2) !important;
    color: var(--d-muted) !important;
    border-radius: var(--d-radius-sm) !important;
    font-size: 0.875rem;
}

/* ── Tables (Refine-style: bold dark headers, no row stripes,
   no row hover bg, just the lightest divider between rows) ──── */
.table {
    background: var(--d-surface);
    border: none !important;
    margin-bottom: 0;
    color: var(--d-text);
    font-size: 0.875rem;
    width: 100%;
}
.table thead th {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
    font-size: 0.75rem !important;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-weight: 700 !important;
    border-bottom: 1px solid var(--d-line-2) !important;
    border-top: none !important;
    border-right: none !important;
    border-left: none !important;
    padding: 12px var(--s-4) !important;
    white-space: nowrap;
    vertical-align: middle;
}
.table tbody td {
    color: var(--d-text);
    border-top: 1px solid var(--d-line) !important;
    border-bottom: none !important;
    border-right: none !important;
    border-left: none !important;
    padding: 14px var(--s-4) !important;
    vertical-align: middle;
    font-variant-numeric: tabular-nums;
    font-size: 0.875rem;
    white-space: nowrap;
    font-weight: 400;
}
.table tbody tr { transition: background 0.1s ease; }
.table tbody tr:hover td,
.table-hover tbody tr:hover td {
    background: var(--d-primary-soft) !important;
}
/* Numeric / code cell types — opt-in via class on td */
.table td.num, .table td.numeric { text-align: right; font-variant-numeric: tabular-nums; font-feature-settings: 'tnum' 1; color: var(--d-text); font-weight: 500; }
.table td.code, .table td.mono {
    font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    color: var(--d-text-2);
}
/* Code/ID pill — wrap value in <span class="d-pill"> */
.d-pill {
    display: inline-flex;
    align-items: center;
    height: 22px;
    padding: 0 8px;
    background: var(--d-surface-2);
    border: 1px solid var(--d-line-2);
    color: var(--d-text-2);
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.2px;
}
.d-pill--accent { background: var(--d-primary-soft); color: var(--d-primary); border-color: var(--d-primary-tint); }
/* opt-out: long-form text cells (addresses, descriptions) */
.table tbody td.wrap, .table tbody td.text-wrap { white-space: normal; }
.table tbody tr:first-child td { border-top: none !important; }
.table tbody tr:hover td,
.table-hover tbody tr:hover td { background: transparent; }
.table-bordered, .table-bordered td, .table-bordered th { border: none !important; }
.table-bordered tbody td { border-top: 1px solid var(--d-line) !important; }
.table-striped tbody tr:nth-of-type(odd) { background: transparent; }

.table td.text-right, .table th.text-right,
.table td.text-end,   .table th.text-end { text-align: right; }
.table td.text-center, .table th.text-center { text-align: center; }

/* Action icons in table cells — small square buttons w/ hover bg */
.table td .action-icon,
.table td a.action-icon {
    color: var(--d-muted);
    font-size: 0.875rem;
    transition: color 0.1s, background 0.1s, border-color 0.1s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--d-radius-sm);
    border: 1px solid transparent;
    margin: 0 2px;
}
.table td a.action-icon:hover {
    color: var(--d-primary);
    background: var(--d-surface-2);
    border-color: var(--d-line-2);
}
.table td a.action-icon.is-danger:hover { color: var(--d-danger); }

/* Avatar pellet in name columns (small circle initial) */
.d-cell-name { display: inline-flex; align-items: center; gap: 10px; }
.d-avatar {
    width: 28px;
    height: 28px;
    border-radius: 999px;
    background: var(--d-surface-2);
    color: var(--d-muted);
    border: 1px solid var(--d-line);
    font-size: 0.7rem;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ── Badges (soft pills) ────────────────────────────────────── */
.badge {
    font-weight: 600;
    padding: 3px 8px;
    border-radius: 999px;
    font-size: 0.7rem;
    line-height: 1.4;
    display: inline-flex;
    align-items: center;
}
.badge-primary,   .bg-primary   { background: var(--d-primary-soft) !important; color: var(--d-primary) !important; }
.badge-success,   .bg-success   { background: var(--d-success-soft) !important; color: var(--d-success) !important; }
.badge-warning,   .bg-warning   { background: var(--d-warning-soft) !important; color: var(--d-warning) !important; }
.badge-danger,    .bg-danger    { background: var(--d-danger-soft)  !important; color: var(--d-danger)  !important; }
.badge-info,      .bg-info      { background: #ecfeff !important; color: #0e7490 !important; }
.badge-secondary, .bg-secondary { background: var(--d-line) !important; color: var(--d-muted) !important; }

/* ── Alerts (slim, soft) ────────────────────────────────────── */
.alert {
    border-radius: var(--d-radius-sm);
    border-width: 1px;
    border-style: solid;
    padding: 10px var(--s-4);
    font-size: 0.875rem;
    margin-bottom: var(--s-4);
}
.alert-success { background: var(--d-success-soft); border-color: #bbf7d0; color: #166534; }
.alert-warning { background: var(--d-warning-soft); border-color: #fde68a; color: var(--d-warning); }
.alert-danger  { background: var(--d-danger-soft);  border-color: #fecaca; color: #991b1b; }
.alert-info    { background: var(--d-primary-soft); border-color: #bfdbfe; color: var(--d-primary); }

/* ── DataTables (specificity-bumped to outweigh CDN sheet) ──── */
table.dataTable.dataTable thead th,
table.dataTable.dataTable thead td {
    padding: 12px var(--s-4) !important;
    border-bottom: 1px solid var(--d-line-2) !important;
    border-top: none !important;
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
    font-weight: 700 !important;
    font-size: 0.75rem !important;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    white-space: nowrap;
}
table.dataTable.dataTable tbody th,
table.dataTable.dataTable tbody td {
    padding: 12px var(--s-4) !important;
    border-top: 1px solid var(--d-line) !important;
    color: var(--d-text);
    font-size: 0.875rem;
    text-transform: none;
    letter-spacing: 0;
    font-weight: 400;
}
table.dataTable.dataTable.no-footer { border-bottom: none !important; }
table.dataTable.dataTable thead .sorting,
table.dataTable.dataTable thead .sorting_asc,
table.dataTable.dataTable thead .sorting_desc {
    background-image: none !important;
    padding-right: 22px !important;
    cursor: pointer;
}
table.dataTable.dataTable thead th.sorting::before,
table.dataTable.dataTable thead th.sorting::after,
table.dataTable.dataTable thead th.sorting_asc::before,
table.dataTable.dataTable thead th.sorting_asc::after,
table.dataTable.dataTable thead th.sorting_desc::before,
table.dataTable.dataTable thead th.sorting_desc::after {
    color: var(--d-faint) !important;
    opacity: 0.45;
    right: 6px !important;
    font-size: 0.65rem;
}
table.dataTable.dataTable thead th.sorting_asc::before,
table.dataTable.dataTable thead th.sorting_desc::after {
    color: var(--d-primary) !important;
    opacity: 1;
}
table.dataTable.dataTable.stripe tbody tr.odd,
table.dataTable.dataTable.display tbody tr.odd { background-color: transparent !important; }
table.dataTable.dataTable tbody tr:hover,
table.dataTable.dataTable.hover tbody tr:hover,
table.dataTable.dataTable.display tbody tr:hover { background-color: transparent !important; }
table.dataTable.dataTable.order-column tbody tr > .sorting_1,
table.dataTable.dataTable.order-column tbody tr > .sorting_2,
table.dataTable.dataTable.order-column tbody tr > .sorting_3,
table.dataTable.dataTable.display tbody tr > .sorting_1,
table.dataTable.dataTable.display tbody tr > .sorting_2,
table.dataTable.dataTable.display tbody tr > .sorting_3 { background-color: transparent !important; }

/* ── DataTables wrapper toolbars (custom dom layout) ────────── */
.dataTables_wrapper { padding: 0; }
.d-table-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-3);
    padding: var(--s-3) var(--s-5);
    border-bottom: 1px solid var(--d-line);
    background: var(--d-surface);
    flex-wrap: wrap;
}
.d-table-toolbar__left { display: inline-flex; gap: var(--s-2); }
.d-table-toolbar__right { display: inline-flex; gap: var(--s-2); align-items: center; }
.d-table-footbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-3);
    padding: var(--s-3) var(--s-5);
    border-top: 1px solid var(--d-line);
    background: var(--d-surface);
    flex-wrap: wrap;
}
.d-table-footbar__left { display: inline-flex; gap: var(--s-3); align-items: center; }
.d-table-footbar__right { display: inline-flex; align-items: center; }

.dt-buttons { display: inline-flex; gap: 6px; margin: 0 !important; }
.dt-buttons .btn,
.dt-buttons .dt-button {
    height: 32px !important;
    background: var(--d-surface) !important;
    border: 1px solid var(--d-line-2) !important;
    color: var(--d-text-2) !important;
    border-radius: var(--d-radius-sm) !important;
    padding: 0 10px !important;
    font-weight: 500 !important;
    font-size: 0.8125rem !important;
    box-shadow: none !important;
    margin: 0 !important;
    display: inline-flex !important;
    align-items: center;
    gap: 6px;
    line-height: 1;
}
.dt-buttons .btn:hover,
.dt-buttons .dt-button:hover {
    background: var(--d-surface-2) !important;
    border-color: var(--d-faint) !important;
    color: var(--d-text) !important;
}
.dt-buttons .btn i,
.dt-buttons .dt-button i { color: var(--d-muted); font-size: 0.825rem; }

.dataTables_wrapper .dataTables_filter { margin: 0 !important; padding: 0 !important; }
.dataTables_wrapper .dataTables_filter label { margin: 0 !important; color: var(--d-muted); display: inline-flex; align-items: center; gap: 6px; }
.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select {
    height: 32px !important;
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    padding: 0 var(--s-3) !important;
    background: var(--d-surface);
    color: var(--d-text);
    font-size: 0.8125rem;
    box-shadow: none !important;
    min-width: 220px;
    margin: 0 !important;
}
.dataTables_wrapper .dataTables_length select { min-width: 80px; padding-right: 24px !important; }
.dataTables_wrapper .dataTables_filter input:focus,
.dataTables_wrapper .dataTables_length select:focus {
    border-color: var(--d-primary) !important;
    box-shadow: 0 0 0 3px rgba(45, 149, 150, 0.18) !important;
    outline: none;
}
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_filter,
.dataTables_wrapper .dataTables_length {
    color: var(--d-muted);
    font-size: 0.8125rem;
    padding: 0 !important;
    float: none !important;
}

/* ── Pagination ─────────────────────────────────────────────── */
.pagination {
    margin: 0 !important;
    display: inline-flex;
    gap: 2px;
}
.pagination .page-link, .paginate_button {
    height: 28px !important;
    min-width: 28px !important;
    padding: 0 8px !important;
    color: var(--d-text-2) !important;
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    margin: 0 !important;
    font-size: 0.8125rem !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    background: var(--d-surface) !important;
    line-height: 1 !important;
}
.pagination .page-item.active .page-link,
.paginate_button.current,
.paginate_button.current:hover {
    background: var(--d-primary) !important;
    border-color: var(--d-primary) !important;
    color: #fff !important;
}
.pagination .page-item:not(.active):hover .page-link,
.paginate_button:hover {
    background: var(--d-primary-soft) !important;
    color: var(--d-primary) !important;
    border-color: var(--d-primary-soft) !important;
}
.paginate_button.disabled, .paginate_button.disabled:hover {
    color: var(--d-faint) !important;
    background: var(--d-surface) !important;
    border-color: var(--d-line) !important;
    cursor: not-allowed !important;
}

/* ── Select2 ────────────────────────────────────────────────── */
.select2-container--default .select2-selection--single {
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    height: 38px !important;
    background: var(--d-input-bg) !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
    line-height: 36px !important;
    color: var(--d-text);
    padding-left: var(--s-3) !important;
    font-size: 0.875rem;
}
.select2-container--default .select2-selection--single .select2-selection__placeholder { color: var(--d-faint); }
.select2-container--default .select2-selection--single .select2-selection__arrow {
    height: 34px !important;
    right: var(--s-2);
}
.select2-container--default .select2-selection--single .select2-selection__clear {
    margin-right: var(--s-3);
    color: var(--d-faint);
    font-weight: 400;
}
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--open .select2-selection--single {
    border-color: var(--d-primary) !important;
    box-shadow: 0 0 0 3px rgba(45, 149, 150, 0.18) !important;
}
.select2-dropdown {
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius) !important;
    box-shadow: var(--d-shadow-lg) !important;
    overflow: hidden;
}
.select2-search--dropdown .select2-search__field {
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    padding: 6px var(--s-3) !important;
    font-size: 0.875rem;
}
.select2-results__option {
    padding: 8px var(--s-3) !important;
    font-size: 0.875rem;
    color: var(--d-text-2);
}
.select2-results__option--highlighted[aria-selected],
.select2-results__option--highlighted {
    background: var(--d-primary) !important;
    color: #fff !important;
}
.select2-container--default .select2-selection--multiple {
    border: 1px solid var(--d-line-2) !important;
    border-radius: var(--d-radius-sm) !important;
    min-height: 36px;
}

/* ── Modals ─────────────────────────────────────────────────── */
.modal-content {
    border: 1px solid var(--d-line-2);
    border-radius: var(--d-radius-lg);
    box-shadow: var(--d-shadow-lg);
}
.modal-header {
    border-bottom: 1px solid var(--d-line);
    background: var(--d-surface);
    padding: var(--s-4) var(--s-5);
    border-radius: var(--d-radius-lg) var(--d-radius-lg) 0 0;
}
.modal-title { font-weight: 600; font-size: 1rem; color: var(--d-text); }
.modal-body { padding: var(--s-5); }
.modal-footer { border-top: 1px solid var(--d-line); padding: var(--s-3) var(--s-5); gap: var(--s-2); }
.close {
    color: var(--d-muted);
    opacity: 1;
    font-weight: 400;
    font-size: 1.25rem;
    transition: color 0.1s;
}
.close:hover { color: var(--d-text); }

/* ── Tabs ───────────────────────────────────────────────────── */
.nav-tabs {
    border-bottom: 1px solid var(--d-line-2);
    margin-bottom: var(--s-4);
}
.nav-tabs .nav-link {
    color: var(--d-muted);
    border: none;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    font-weight: 500;
    padding: 10px var(--s-4);
    font-size: 0.875rem;
    margin-bottom: -1px;
    background: transparent !important;
}
.nav-tabs .nav-link:hover { color: var(--d-text); border-color: transparent; }
.nav-tabs .nav-link.active {
    color: var(--d-primary);
    background: transparent !important;
    border-bottom-color: var(--d-primary);
}

/* ── Dropdowns ──────────────────────────────────────────────── */
.dropdown-menu {
    border: 1px solid var(--d-line-2);
    border-radius: var(--d-radius);
    box-shadow: var(--d-shadow-lg);
    padding: 4px;
    font-size: 0.875rem;
    min-width: 180px;
}
.dropdown-item {
    border-radius: var(--d-radius-sm);
    padding: 7px var(--s-3) !important;
    color: var(--d-text-2) !important;
    transition: background 0.1s;
}
.dropdown-item:hover, .dropdown-item:focus {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
}
.dropdown-divider { border-top: 1px solid var(--d-line); margin: 4px 0; }
.dropdown-profile {
    border-radius: var(--d-radius);
    border: 1px solid var(--d-line-2);
    box-shadow: var(--d-shadow-lg);
    padding: 4px;
    margin-top: 4px;
    background: var(--d-surface);
}
.dropdown-profile li a {
    border-radius: var(--d-radius-sm);
    padding: 7px var(--s-3) !important;
    color: var(--d-text-2) !important;
    font-size: 0.875rem;
    display: flex;
    align-items: center;
    gap: 8px;
}
.dropdown-profile li a:hover { background: var(--d-surface-2); color: var(--d-text) !important; }
.dropdown-profile li a i { color: var(--d-muted); }

/* ── Scrollbars (subtle) ────────────────────────────────────── */
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb { background: var(--d-line-2); border-radius: 6px; border: 2px solid var(--d-bg); }
*::-webkit-scrollbar-thumb:hover { background: var(--d-faint); }

/* ── Misc polish ────────────────────────────────────────────── */
hr { border-color: var(--d-line) !important; margin: var(--s-4) 0; }
code, pre {
    font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.825rem;
}
code { background: var(--d-surface-2); padding: 2px 6px; border-radius: var(--d-radius-sm); color: var(--d-danger); }
pre { background: var(--d-surface-2); padding: var(--s-3) var(--s-4); border-radius: var(--d-radius-sm); border: 1px solid var(--d-line); }
.form-text, .help-text, .text-help { font-size: 0.8rem; color: var(--d-muted); margin-top: 4px; }

/* dashboard stat cells */
.stat-value { font-size: 1.5rem; font-weight: 700; color: var(--d-text); letter-spacing: -0.02em; }
.stat-label { font-size: 0.75rem; color: var(--d-muted); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }

/* ── Empty state — global pattern ─────────────────────────────
   Use:
     <div class="d-empty">
       <div class="d-empty__icon"><i class="fa-solid fa-inbox"></i></div>
       <h3 class="d-empty__title">No parties yet</h3>
       <p class="d-empty__sub">Once you add a party they'll appear here.</p>
       <a href="/party/" class="btn btn-primary btn-sm d-empty__cta">+ Add party</a>
     </div>
   Variants:
     .d-empty--inline   – tighter, for dropdowns / small surfaces
     .d-empty--cell     – for inside a <td colspan> in a table
*/
.d-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: var(--s-7) var(--s-5);
    color: var(--d-muted);
    min-height: 200px;
}
.d-empty__icon {
    width: 56px;
    height: 56px;
    border-radius: 999px;
    background: var(--d-primary-soft);
    color: var(--d-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
    margin-bottom: var(--s-4);
}
.d-empty__title {
    font-size: 1rem !important;
    font-weight: 600 !important;
    color: var(--d-text) !important;
    margin: 0 0 6px 0 !important;
    letter-spacing: -0.01em;
}
.d-empty__sub {
    font-size: 0.8125rem !important;
    color: var(--d-muted);
    margin: 0 0 var(--s-4) 0 !important;
    max-width: 300px;
    line-height: 1.5;
}
.d-empty__cta { margin-top: 4px; }

.d-empty--inline { padding: var(--s-5) var(--s-4); min-height: auto; }
.d-empty--inline .d-empty__icon { width: 36px; height: 36px; font-size: 1rem; margin-bottom: var(--s-2); }
.d-empty--inline .d-empty__title { font-size: 0.875rem !important; }
.d-empty--inline .d-empty__sub { font-size: 0.75rem !important; margin-bottom: 0 !important; }

.d-empty--cell { padding: var(--s-7) var(--s-4); }

/* DataTables default "no data" cell — same visual as .d-empty */
.table tbody tr td.dataTables_empty,
table.dataTable.dataTable tbody tr td.dataTables_empty {
    text-align: center !important;
    padding: var(--s-7) var(--s-4) !important;
    color: var(--d-muted) !important;
    font-size: 0.875rem !important;
    background: transparent !important;
    border-top: 1px solid var(--d-line) !important;
}
.table tbody tr td.dataTables_empty::before,
table.dataTable.dataTable tbody tr td.dataTables_empty::before {
    content: "";
    display: block;
    width: 56px;
    height: 56px;
    border-radius: 999px;
    background: var(--d-primary-soft) no-repeat center / 22px
        url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%232d9596" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/></svg>');
    margin: 0 auto var(--s-3) auto;
}

/* Some legacy templates render an empty <tr><td colspan="N">No data</td></tr>
   with no special class. Style any tbody td that contains the text "no" + (data|rows|results|items|records) to look like an empty state. CSS can't match text content, so we provide a manual class `.d-empty-row`:
     <tr><td colspan="6" class="d-empty-row">No parties match this filter</td></tr>
*/
.table tbody td.d-empty-row,
table.dataTable.dataTable tbody td.d-empty-row {
    text-align: center;
    padding: var(--s-6) var(--s-4) !important;
    color: var(--d-muted);
    font-size: 0.875rem;
    border-top: 1px solid var(--d-line);
}

/* ── bootstrap-material-datetimepicker (.dtp) — teal theme ──── */
.dtp > .dtp-content {
    background: #fff !important;
    border-radius: var(--d-radius-lg) !important;
    box-shadow: var(--d-shadow-lg) !important;
    overflow: hidden;
    max-width: 320px;
}
.dtp .dtp-header,
.dtp .dtp-date-view header.dtp-header {
    background: var(--d-primary-hover) !important;
    color: rgba(255,255,255,0.85) !important;
    padding: 8px 14px !important;
    font-size: 0.8125rem !important;
    font-weight: 500 !important;
    letter-spacing: 0.2px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.dtp .dtp-header .dtp-actual-day { color: rgba(255,255,255,0.95) !important; }
.dtp .dtp-header .dtp-close a,
.dtp .dtp-close a { color: #fff !important; opacity: 0.85; }
.dtp .dtp-header .dtp-close a:hover { opacity: 1; }

.dtp .dtp-date-view .dtp-date,
.dtp div.dtp-date,
.dtp .dtp-date {
    background: var(--d-primary) !important;
    color: #fff !important;
    padding: 18px 14px !important;
    text-align: center;
}
.dtp .dtp-actual-month,
.dtp .dtp-actual-year { color: rgba(255,255,255,0.85) !important; font-size: 0.875rem !important; font-weight: 500 !important; }
.dtp .dtp-actual-num {
    font-size: 3.25rem !important;
    font-weight: 700 !important;
    color: #fff !important;
    line-height: 1 !important;
    margin: 6px 0 4px 0 !important;
    letter-spacing: -0.02em;
}
.dtp .dtp-select-month-before,
.dtp .dtp-select-month-after,
.dtp .dtp-select-year-before,
.dtp .dtp-select-year-after {
    color: rgba(255,255,255,0.7) !important;
}
.dtp .dtp-select-month-before:hover i,
.dtp .dtp-select-month-after:hover i,
.dtp .dtp-select-year-before:hover i,
.dtp .dtp-select-year-after:hover i { color: #fff !important; }

/* Calendar body — month label + day grid */
.dtp .dtp-picker { padding: 16px !important; }
.dtp .dtp-picker-month {
    font-size: 0.9375rem !important;
    font-weight: 600 !important;
    color: var(--d-text) !important;
    text-align: center !important;
    padding: 4px 0 12px 0 !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.dtp table.dtp-picker-days {
    width: 100% !important;
    table-layout: fixed !important;
    border-collapse: separate !important;
    border-spacing: 0 !important;
}
.dtp table.dtp-picker-days th,
.dtp table.dtp-picker-days td {
    width: 14.285% !important;
    text-align: center !important;
    padding: 0 !important;
    border: none !important;
    background: transparent !important;
    height: 36px;
}
.dtp table.dtp-picker-days th {
    color: var(--d-muted) !important;
    font-size: 0.7rem !important;
    font-weight: 600 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.4px;
    padding-bottom: 6px !important;
    border-bottom: 1px solid var(--d-line) !important;
}
.dtp table.dtp-picker-days td a,
.dtp table.dtp-picker-days td > a {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 32px !important;
    height: 32px !important;
    border-radius: 999px !important;
    color: var(--d-text) !important;
    background: transparent !important;
    font-size: 0.8125rem !important;
    font-weight: 500;
    text-decoration: none !important;
    transition: background 0.1s, color 0.1s;
    margin: 2px auto;
}
.dtp table.dtp-picker-days td a:hover {
    background: var(--d-primary-soft) !important;
    color: var(--d-primary) !important;
}
.dtp table.dtp-picker-days td a.selected,
.dtp table.dtp-picker-days td a.dtp-active {
    background: var(--d-primary) !important;
    color: #fff !important;
    font-weight: 700;
    box-shadow: 0 2px 6px rgba(45, 149, 150, 0.35);
}
.dtp table.dtp-picker-days td a.dtp-select-today,
.dtp table.dtp-picker-days td a.today {
    color: var(--d-primary) !important;
    font-weight: 700;
    box-shadow: inset 0 0 0 1px var(--d-primary-tint);
}
.dtp table.dtp-picker-days td a[disabled],
.dtp table.dtp-picker-days td a.disabled { color: var(--d-faint) !important; pointer-events: none; }

/* Bottom action buttons (Now / Clear / Cancel / OK) */
.dtp .dtp-buttons {
    padding: 8px 14px 14px 14px !important;
    display: flex;
    justify-content: flex-end;
    gap: 6px;
    border-top: 1px solid var(--d-line);
    margin-top: 4px;
}
.dtp .dtp-buttons button {
    height: 32px !important;
    padding: 0 12px !important;
    font-size: 0.8125rem !important;
    font-weight: 500 !important;
    border-radius: var(--d-radius-sm) !important;
    border: 1px solid var(--d-line-2) !important;
    background: var(--d-surface) !important;
    color: var(--d-text-2) !important;
    box-shadow: none !important;
    transition: background 0.1s, color 0.1s, border-color 0.1s;
}
.dtp .dtp-buttons button:hover {
    background: var(--d-surface-2) !important;
    color: var(--d-text) !important;
    border-color: var(--d-faint) !important;
}
.dtp .dtp-btn-ok {
    background: var(--d-primary) !important;
    border-color: var(--d-primary) !important;
    color: #fff !important;
}
.dtp .dtp-btn-ok:hover {
    background: var(--d-primary-hover) !important;
    border-color: var(--d-primary-hover) !important;
    color: #fff !important;
}
.dtp .dtp-btn-cancel { /* default neutral */ }
.dtp .dtp-btn-now,
.dtp .dtp-btn-clear { color: var(--d-muted) !important; }

/* The .dtp overlay: shrink to popover, don't dim full screen */
.dtp { background: rgba(15, 23, 42, 0.35) !important; }

/* Make focus rings visible everywhere */
*:focus-visible {
    outline: 2px solid rgba(45, 149, 150, 0.55);
    outline-offset: 2px;
    border-radius: var(--d-radius-sm);
}

/* ── Forms — elevation pass ─────────────────────────────────── */
/* Centered form-title pattern used by legacy templates (party_form,
   plant_form, orders, etc.). Convert to a left-aligned section header
   with a teal accent bar, anywhere it appears inside the content area. */
.content-body h1[style*="text-align:center"],
.content-body h2[style*="text-align:center"],
.content-body h3[style*="text-align:center"],
.content-body h4[style*="text-align:center"] {
    text-align: left !important;
    font-size: 1.25rem !important;
    font-weight: 700 !important;
    color: var(--d-text) !important;
    margin: 0 0 var(--s-5) 0 !important;
    padding: 0 0 var(--s-3) var(--s-3) !important;
    border-bottom: 1px solid var(--d-line);
    letter-spacing: -0.015em;
    position: relative;
    line-height: 1.3;
}
.content-body h1[style*="text-align:center"]::before,
.content-body h2[style*="text-align:center"]::before,
.content-body h3[style*="text-align:center"]::before,
.content-body h4[style*="text-align:center"]::before {
    content: "";
    position: absolute;
    left: 0;
    top: 2px;
    bottom: 16px;
    width: 3px;
    background: var(--d-primary);
    border-radius: 2px;
}
.card-body > br + .form-validation,
.card-body > h2 + br + .form-validation { margin-top: var(--s-5); }

/* Modern form pattern: labels stack ABOVE inputs.
   Scoped to `.form-valide` only — the convention this codebase uses for
   actual data-entry forms (party_form, plant_form, product_form, etc.).
   Filter bars use `.form-validation` (legacy class) and KEEP their
   original Bootstrap horizontal `col-lg-1 / col-lg-3` layout. */
.form-valide .form-group.row {
    display: block !important;
    margin-bottom: var(--s-4) !important;
    /* Bootstrap's .row carries margin-left/right: -15px which yanks the row
       out past .card-body's padding. Reset here so data-entry forms keep
       their gutter on every page that uses .form-valide. */
    margin-left: 0 !important;
    margin-right: 0 !important;
}
.form-valide .form-group.row > label,
.form-valide .form-group.row > .col-form-label,
.form-valide .form-group.row > [class*="col-lg-3"],
.form-valide .form-group.row > [class*="col-md-3"],
.form-valide .form-group.row > [class*="col-sm-3"],
.form-valide .form-group.row > [class*="col-lg-2"],
.form-valide .form-group.row > [class*="col-md-2"] {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    flex: none !important;
    text-align: left !important;
    color: var(--d-text-2) !important;
    font-weight: 500 !important;
    font-size: 0.8125rem !important;
    margin-bottom: 6px !important;
    padding: 0 !important;
    line-height: 1.5;
    letter-spacing: 0.1px;
}
.form-valide .form-group.row > [class*="col-"]:not(.col-form-label) {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    flex: none !important;
    padding: 0 !important;
}
/* Multi-column form grid for related short fields. Wrap two or more
   .form-group elements in `<div class="d-form-grid">` to lay them
   out in a responsive grid. */
.d-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 0 var(--s-4);
}
.d-form-grid .form-group { margin-bottom: var(--s-4); }
/* Section break inside a long form */
.d-form-section {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: var(--s-6) 0 var(--s-4) 0;
    color: var(--d-muted);
    font-size: 0.7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
}
.d-form-section::before {
    content: "";
    width: 14px;
    height: 2px;
    background: var(--d-primary);
    border-radius: 2px;
    flex-shrink: 0;
}
.d-form-section::after {
    content: "";
    flex: 1;
    height: 1px;
    background: var(--d-line);
}
.d-form-section:first-child { margin-top: 0; }

/* Native file input — replace the boxy "Choose file" with a clean
   button + visible filename. */
input[type=file].form-control,
.card input[type=file],
.form-validation input[type=file] {
    height: auto !important;
    padding: 8px 12px !important;
    background: var(--d-input-bg) !important;
    cursor: pointer;
}
input[type=file]::-webkit-file-upload-button,
input[type=file]::file-selector-button {
    background: var(--d-surface) !important;
    border: 1px solid var(--d-line-2) !important;
    color: var(--d-text-2) !important;
    border-radius: var(--d-radius-sm) !important;
    padding: 4px 12px !important;
    margin-right: var(--s-3) !important;
    font-size: 0.8125rem !important;
    font-weight: 500 !important;
    cursor: pointer;
    transition: background 0.1s, color 0.1s, border-color 0.1s;
}
input[type=file]::-webkit-file-upload-button:hover,
input[type=file]::file-selector-button:hover {
    background: var(--d-primary-soft) !important;
    color: var(--d-primary) !important;
    border-color: var(--d-primary-tint) !important;
}

/* Sticky bottom action bar inside a card-body. Use:
     <div class="d-form-actions-bar">
       <button class="btn btn-secondary">Cancel</button>
       <button type=submit class="btn btn-primary">Save</button>
     </div>
*/
.d-form-actions-bar {
    position: sticky;
    bottom: 0;
    background: var(--d-surface);
    border-top: 1px solid var(--d-line);
    margin: var(--s-6) calc(-1 * var(--s-5)) calc(-1 * var(--s-5)) calc(-1 * var(--s-5));
    padding: var(--s-3) var(--s-5);
    display: flex;
    justify-content: flex-end;
    gap: var(--s-2);
    z-index: 10;
}
/* required asterisk in red */
.form-group label sup,
.form-group label .required,
.form-group label > .text-danger,
.form-validation label sup,
form label sup { color: var(--d-danger) !important; font-weight: 700; margin-left: 2px; }
/* color the inline "*" suffix that the legacy templates use as plain text */
.form-group label,
.form-validation label { position: relative; }

/* "form-validation" / "form-valide" wrapper — give it consistent
   spacing and a subtle section divider every N fields. Not auto
   (would need template change), but at least space rows nicely. */
.form-valide, .form-validation { display: block; }
.form-valide .form-group:last-child,
.form-validation .form-group:last-child { margin-bottom: 0 !important; }

/* Field group container — opt-in via .d-fieldset for templates that
   want to group related fields with a heading and a soft surface. */
.d-fieldset {
    background: var(--d-surface-2);
    border: 1px solid var(--d-line);
    border-radius: var(--d-radius);
    padding: var(--s-5);
    margin-bottom: var(--s-5);
}
.d-fieldset__title {
    font-size: 0.75rem;
    font-weight: 700;
    color: var(--d-muted);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    margin: 0 0 var(--s-4) 0;
    display: flex;
    align-items: center;
    gap: var(--s-2);
}
.d-fieldset__title::before {
    content: "";
    display: inline-block;
    width: 14px;
    height: 2px;
    background: var(--d-primary);
    border-radius: 2px;
}
.d-fieldset__hint {
    font-size: 0.8125rem;
    color: var(--d-muted);
    margin: -8px 0 var(--s-3) 0;
}

/* Form action bar at the bottom of a card — sticky, white bg,
   subtle top border. Use class `.d-form-actions`. */
.d-form-actions {
    display: flex;
    justify-content: flex-end;
    gap: var(--s-2);
    padding: var(--s-4) 0 0 0;
    margin-top: var(--s-5);
    border-top: 1px solid var(--d-line);
}

/* Common case: <input type="checkbox"> sitting in .form-control
   wrapper (legacy markup). Make it look like a real checkbox, not
   a 40px-tall input. */
.form-control[type=checkbox],
input.form-control[type=checkbox] {
    height: 18px !important;
    width: 18px !important;
    padding: 0 !important;
    accent-color: var(--d-primary);
    box-shadow: none !important;
    border: 1px solid var(--d-line-2) !important;
    border-radius: 4px !important;
}

/* Card that holds a form — soft elevation + breathing room */
.card .card-body form,
.card .card-body .form-validation,
.card .card-body .form-valide { padding: var(--s-2) 0 0 0; }

/* Cap the width of data-entry forms so labels + inputs read at a sensible
   line length on wide screens. Filter bars (.form-validation) stay full
   width — they live above tables that *do* need the full canvas. Add
   `.form-valide-wide` on the form to opt out and span the whole card. */
.card .card-body .form-valide { max-width: 720px; margin-left: auto; margin-right: auto; }
.card .card-body .form-valide.form-valide-wide { max-width: none; }

/* Make selects (native) look like our form-control */
select.form-control {
    appearance: none;
    -webkit-appearance: none;
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="%2364748b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
    background-repeat: no-repeat;
    background-position: right 10px center;
    padding-right: 32px !important;
}

/* Form helper line below an input */
.form-help, .help-block {
    display: block;
    font-size: 0.75rem;
    color: var(--d-muted);
    margin-top: 6px;
}
.is-invalid + .help-block,
.invalid-feedback {
    color: var(--d-danger) !important;
}
.form-control.is-invalid {
    border-color: var(--d-danger) !important;
    box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.10) !important;
}

/* ════════════════════════════════════════════════════════════════
   RESPONSIVE / MOBILE  (≤ 991.98px — phones + portrait tablets)

   Everything in this block is scoped to the mobile breakpoint, so the
   desktop layout (≥ 992px) is byte-for-byte unchanged. The desktop
   shell hard-codes a 232–243px sidebar margin on .header/.content-body
   with no breakpoints, which crushes content into ~130px on a phone.
   Here we: (1) drop those margins so content is full-width, (2) turn
   the sidebar + brand into an off-canvas drawer toggled by the existing
   hamburger (see the mobile-nav JS in index.html), (3) cap the
   fixed-width controls so toolbars/forms reflow instead of overflowing.
   Wide data tables keep scrolling horizontally inside .table-responsive.
   ════════════════════════════════════════════════════════════════ */
@media (max-width: 991.98px) {

    /* ── Content reclaims the full width ─────────────────────────── */
    .header,
    #main-wrapper.menu-toggle .header {
        margin-left: 0 !important;
        width: 100% !important;
    }
    .content-body,
    #main-wrapper.menu-toggle .content-body {
        margin-left: 0 !important;
        overflow-x: hidden;   /* page never scrolls sideways; tables scroll inside .table-responsive */
    }
    .container-fluid {
        padding-left: var(--s-4) !important;
        padding-right: var(--s-4) !important;
    }

    /* ── Sidebar + brand become an off-canvas drawer ─────────────── */
    /* Off-canvas slide uses `left` (NOT transform). A non-`none` transform
       creates a stacking context, which made the sidebar panel's z-index
       behave locally and render BEHIND the backdrop on mobile. Animating
       `left` keeps .nk-sidebar/.nav-header as plain fixed elements that beat
       the backdrop (z-index 1055) by z-index alone, on every browser. */
    .nav-header,
    #main-wrapper.menu-toggle .nav-header {
        position: fixed !important;
        top: 0;
        left: calc(-1 * var(--d-sidebar-w)) !important;
        width: var(--d-sidebar-w) !important;
        height: var(--d-header-h) !important;
        transform: none !important;
        transition: left 220ms ease;
        z-index: 1060 !important;
    }
    .nk-sidebar,
    #main-wrapper.menu-toggle .nk-sidebar {
        position: fixed !important;
        top: var(--d-header-h) !important;
        left: calc(-1 * var(--d-sidebar-w)) !important;
        width: var(--d-sidebar-w) !important;
        height: calc(100% - var(--d-header-h)) !important;
        transform: none !important;
        transition: left 220ms ease !important;
        z-index: 1060 !important;
        box-shadow: var(--d-shadow-lg);
        background: var(--d-surface) !important;
    }
    /* Open state — higher specificity wins over the !important defaults above */
    #main-wrapper.mobile-nav-open .nav-header,
    #main-wrapper.mobile-nav-open .nk-sidebar {
        left: 0 !important;
    }

    /* When opened on mobile, always show the full drawer even if the
       desktop "collapsed rail" (menu-toggle) state was persisted. */
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a {
        justify-content: flex-start;
        padding: 9px 14px !important;
    }
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a > .nav-text,
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a:after,
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li > a > .menu-arrow,
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li.nav-section-label {
        display: revert !important;
    }
    #main-wrapper.menu-toggle .nav-header .d-brand__text { display: inline !important; }
    /* neutralise the desktop hover-flyout sub-menu inside the drawer */
    #main-wrapper.menu-toggle .nk-sidebar .metismenu > li > ul {
        position: static;
        box-shadow: none;
        border: 0;
        background: transparent;
        min-width: 0;
    }

    /* ── Drawer backdrop (element injected by JS) ────────────────── */
    .d-mobile-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(15, 23, 42, 0.45);
        z-index: 1055;
        opacity: 0;
        visibility: hidden;
        transition: opacity 220ms ease, visibility 220ms ease;
    }
    .d-mobile-backdrop.is-visible {
        opacity: 1;
        visibility: visible;
    }

    /* ── Toolbars / filters stack and fill width ─────────────────── */
    .d-list-toolbar {
        flex-direction: column;
        align-items: stretch;
        gap: var(--s-2);
    }
    .d-list-toolbar__left,
    .d-list-toolbar__right {
        width: 100%;
        flex-wrap: wrap;
    }
    .d-list-search,
    .d-list-search input {
        width: 100% !important;
        max-width: 100%;
    }
    .d-filter-bar { flex-direction: column; align-items: stretch; }
    .d-filter-bar__field { min-width: 0 !important; flex: 1 1 100%; width: 100%; }
    .d-datepicker { width: 100% !important; }

    /* select2 controls never exceed the viewport (route filter is 220px) */
    .select2-container { max-width: 100% !important; }
    .select2-container--default .select2-selection--single { width: 100% !important; }

    /* Page header: title + actions stack */
    .d-page-header__row { flex-direction: column; align-items: flex-start; gap: var(--s-2); }
    .d-page-header__actions { width: 100%; }

    /* ── Tables: let them scroll inside their wrapper, override any
       per-page `table { width: 100vw }` local styles ─────────────── */
    .table-responsive { -webkit-overflow-scrolling: touch; }
    .table-responsive > table,
    .table-responsive table {
        width: auto !important;
        min-width: 100% !important;
        max-width: none !important;
    }

    /* Pagination wraps instead of overflowing */
    .pagination { flex-wrap: wrap; }

    /* ── Off-screen action bars come back on-screen ──────────────── */
    .final-buttons,
    [class*="final-buttons"] {
        position: static !important;
        left: 0 !important;
        margin-left: 0 !important;
        text-align: center;
    }
    .final-buttons .btn,
    [class*="final-buttons"] .btn {
        width: auto !important;
    }
}
