/* Liniennetz — the app's design system.
   Every module is a coloured line, every page a station. Flat midnight-enamel rail, porcelain work area,
   flat panels with hairlines, one blue for actions, state shown as pills with words.
   Theme: <html data-bs-theme="light|dark"> is set before first paint by views/partials/ln-head.ejs.
   Load order: app.css (AdminKit/Bootstrap) -> liniennetz.css -> module CSS. Module CSS uses only --ln-* tokens. */

/* ------------------------------------------------------------------ tokens */
:root,
[data-bs-theme="light"] {
  /* surfaces */
  --ln-ground: #edf0f4;
  --ln-panel: #ffffff;
  --ln-panel-2: #f6f7fa;
  --ln-panel-3: #e9ecf2;
  --ln-rail: #0f1a33;
  --ln-rail-2: #17244a;
  --ln-rail-3: #22315c;
  --ln-rail-ink: #eef2fb;
  --ln-rail-ink-2: #aab5cd;
  /* text */
  --ln-ink: #111727;
  --ln-ink-2: #434c5f;
  --ln-ink-3: #596276;
  --ln-ink-inverse: #ffffff;
  /* lines */
  --ln-line: #d8dce5;
  --ln-line-2: #c3c9d5;
  --ln-line-strong: #8e97aa;
  /* action + state */
  --ln-blue: #1d54e0;
  --ln-blue-hover: #1844b8;
  --ln-blue-ink: #1a4bc9;
  --ln-blue-soft: #e4ebfd;
  --ln-on-blue: #ffffff;
  --ln-on-accent: #ffffff;
  --ln-ink-on-amber: #1b1300;
  --ln-green: #0f8656;
  --ln-green-ink: #0b6e46;
  --ln-green-soft: #ddf3e9;
  --ln-amber: #f2a900;
  --ln-amber-ink: #835500;
  --ln-amber-soft: #fdf1d3;
  --ln-red: #d42a20;
  --ln-red-ink: #b3231b;
  --ln-red-soft: #fbe3e1;
  --ln-grey: #8a93a6;
  --ln-grey-soft: #eceef3;
  --ln-note: #fdf1d3;
  /* module lines */
  --ln-l-booking: #1d54e0;
  --ln-l-jobs: #f2a900;
  --ln-l-support: #0f8656;
  --ln-l-railway: #d42a20;
  --ln-l-ev: #0e8f8f;
  --ln-l-adac: #e8650a;
  --ln-l-car: #8a5a2b;
  --ln-l-deutschtest: #7b3fc4;
  --ln-l-adsb: #0a8bd6;
  --ln-l-admin: #6b7487;
  --ln-l-account: #6b7487;
  /* chart series (data viz reads these) */
  --ln-c1: #1d54e0;
  --ln-c2: #f2a900;
  --ln-c3: #0f8656;
  --ln-c4: #d42a20;
  --ln-c5: #7b3fc4;
  --ln-c6: #0e8f8f;
  /* type */
  --ln-font: "Atkinson Hyperlegible Next", "Segoe UI", system-ui, -apple-system, sans-serif;
  --ln-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  --ln-fs-xs: 0.75rem;     /* 12 */
  --ln-fs-sm: 0.8125rem;   /* 13 */
  --ln-fs-base: 0.9375rem; /* 15 */
  --ln-fs-md: 1rem;        /* 16 */
  --ln-fs-lg: 1.125rem;    /* 18 */
  --ln-fs-xl: 1.375rem;    /* 22 */
  --ln-fs-2xl: 1.75rem;    /* 28 */
  --ln-fs-3xl: 2.25rem;    /* 36 */
  /* space (4px grid) */
  --ln-s1: 4px; --ln-s2: 8px; --ln-s3: 12px; --ln-s4: 16px; --ln-s5: 20px; --ln-s6: 24px; --ln-s8: 32px; --ln-s10: 40px; --ln-s12: 48px;
  /* shape */
  --ln-r-sm: 4px;
  --ln-r: 6px;
  --ln-r-lg: 8px;
  --ln-r-xl: 12px;
  --ln-r-pill: 999px;
  /* elevation: only floating layers get a shadow */
  --ln-shadow-pop: 0 12px 32px rgb(10 15 30 / 0.16), 0 2px 6px rgb(10 15 30 / 0.08);
  --ln-shadow-overlay: 0 24px 60px rgb(10 15 30 / 0.28);
  --ln-scrim: rgb(10 15 30 / 0.36);
  /* motion */
  --ln-ease: cubic-bezier(0.16, 1, 0.3, 1);
  --ln-fast: 140ms;
  --ln-med: 280ms;
  /* layout */
  --ln-rail-w: 260px;
  --ln-topbar-h: 60px;
  color-scheme: light;
}

[data-bs-theme="dark"] {
  --ln-ground: #0a0f1c;
  --ln-panel: #111a2d;
  --ln-panel-2: #0d1526;
  --ln-panel-3: #18233b;
  --ln-rail: #060a14;
  --ln-rail-2: #111a30;
  --ln-rail-3: #1b2744;
  --ln-rail-ink: #eef2fb;
  --ln-rail-ink-2: #9aa6c0;
  --ln-ink: #e7ebf4;
  --ln-ink-2: #b4bdd0;
  --ln-ink-3: #94a0b8;
  --ln-ink-inverse: #08122b;
  --ln-line: #22304d;
  --ln-line-2: #2f3f62;
  --ln-line-strong: #5a6a8c;
  --ln-blue: #7aa2ff;
  --ln-blue-hover: #9ab9ff;
  --ln-blue-ink: #9ab9ff;
  --ln-blue-soft: #18264a;
  --ln-on-blue: #08122b;
  --ln-on-accent: #08122b;
  --ln-ink-on-amber: #1b1300;
  --ln-green: #45d496;
  --ln-green-ink: #5fe0a8;
  --ln-green-soft: #10291f;
  --ln-amber: #ffbf3a;
  --ln-amber-ink: #ffcf6b;
  --ln-amber-soft: #2e2512;
  --ln-red: #ff6f66;
  --ln-red-ink: #ff8d85;
  --ln-red-soft: #33171a;
  --ln-grey: #6f7a92;
  --ln-grey-soft: #1a2338;
  --ln-note: #2e2512;
  --ln-l-booking: #7aa2ff;
  --ln-l-jobs: #ffbf3a;
  --ln-l-support: #45d496;
  --ln-l-railway: #ff6f66;
  --ln-l-ev: #3fd0cc;
  --ln-l-adac: #ff9a4d;
  --ln-l-car: #c9955f;
  --ln-l-deutschtest: #b48cff;
  --ln-l-adsb: #5cc3ff;
  --ln-l-admin: #8f9ab0;
  --ln-l-account: #8f9ab0;
  --ln-c1: #7aa2ff;
  --ln-c2: #ffbf3a;
  --ln-c3: #45d496;
  --ln-c4: #ff6f66;
  --ln-c5: #b48cff;
  --ln-c6: #3fd0cc;
  --ln-shadow-pop: 0 14px 36px rgb(0 0 0 / 0.5), 0 2px 6px rgb(0 0 0 / 0.4);
  --ln-shadow-overlay: 0 24px 60px rgb(0 0 0 / 0.6);
  --ln-scrim: rgb(2 5 12 / 0.62);
  color-scheme: dark;
}

/* ---------------------------------------------- Bootstrap variable mapping */
:root,
[data-bs-theme="light"],
[data-bs-theme="dark"] {
  --bs-body-font-family: var(--ln-font);
  --bs-font-sans-serif: var(--ln-font);
  --bs-body-font-size: var(--ln-fs-base);
  --bs-body-line-height: 1.5;
  --bs-body-bg: var(--ln-ground);
  --bs-body-color: var(--ln-ink);
  --bs-emphasis-color: var(--ln-ink);
  --bs-secondary-color: var(--ln-ink-2);
  --bs-tertiary-color: var(--ln-ink-3);
  --bs-secondary-bg: var(--ln-panel-2);
  --bs-tertiary-bg: var(--ln-panel-2);
  --bs-heading-color: var(--ln-ink);
  --bs-link-color: var(--ln-blue-ink);
  --bs-link-hover-color: var(--ln-blue-hover);
  --bs-link-color-rgb: 29, 84, 224;
  --bs-border-color: var(--ln-line);
  --bs-border-color-translucent: var(--ln-line);
  --bs-border-radius: var(--ln-r);
  --bs-border-radius-sm: var(--ln-r-sm);
  --bs-border-radius-lg: var(--ln-r-lg);
  --bs-border-radius-xl: var(--ln-r-xl);
  --bs-box-shadow: none;
  --bs-box-shadow-sm: none;
  --bs-focus-ring-color: color-mix(in srgb, var(--ln-blue) 35%, transparent);
  --bs-primary: var(--ln-blue);
  --bs-success: var(--ln-green);
  --bs-warning: var(--ln-amber);
  --bs-danger: var(--ln-red);
  --bs-info: var(--ln-blue);
  --bs-secondary: var(--ln-ink-3);
  --bs-dark: var(--ln-ink);
  --bs-light: var(--ln-panel-2);
  --bs-primary-text-emphasis: var(--ln-blue-ink);
  --bs-success-text-emphasis: var(--ln-green-ink);
  --bs-warning-text-emphasis: var(--ln-amber-ink);
  --bs-danger-text-emphasis: var(--ln-red-ink);
  --bs-info-text-emphasis: var(--ln-blue-ink);
  --bs-primary-bg-subtle: var(--ln-blue-soft);
  --bs-success-bg-subtle: var(--ln-green-soft);
  --bs-warning-bg-subtle: var(--ln-amber-soft);
  --bs-danger-bg-subtle: var(--ln-red-soft);
  --bs-info-bg-subtle: var(--ln-blue-soft);
  --bs-secondary-bg-subtle: var(--ln-grey-soft);
  --bs-light-bg-subtle: var(--ln-panel-2);
  --bs-primary-border-subtle: transparent;
  --bs-success-border-subtle: transparent;
  --bs-warning-border-subtle: transparent;
  --bs-danger-border-subtle: transparent;
  --bs-info-border-subtle: transparent;
  --bs-secondary-border-subtle: transparent;
}
[data-bs-theme="light"] { --bs-primary-rgb: 29, 84, 224; --bs-success-rgb: 15, 134, 86; --bs-warning-rgb: 242, 169, 0; --bs-danger-rgb: 212, 42, 32; --bs-info-rgb: 29, 84, 224; --bs-secondary-rgb: 89, 98, 118; --bs-dark-rgb: 17, 23, 39; --bs-light-rgb: 246, 247, 250; --bs-body-color-rgb: 17, 23, 39; --bs-body-bg-rgb: 237, 240, 244; }
[data-bs-theme="dark"] { --bs-primary-rgb: 122, 162, 255; --bs-success-rgb: 69, 212, 150; --bs-warning-rgb: 255, 191, 58; --bs-danger-rgb: 255, 111, 102; --bs-info-rgb: 122, 162, 255; --bs-secondary-rgb: 148, 160, 184; --bs-dark-rgb: 231, 235, 244; --bs-light-rgb: 13, 21, 38; --bs-body-color-rgb: 231, 235, 244; --bs-body-bg-rgb: 10, 15, 28; }

/* --------------------------------------------------------------------- base */
html { -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--ln-font);
  font-size: var(--ln-fs-base);
  line-height: 1.5;
  color: var(--ln-ink);
  background: var(--ln-ground);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-variant-numeric: tabular-nums;
  overflow-x: hidden;
}
::selection { background: var(--ln-blue-soft); color: var(--ln-ink); }
[data-bs-theme="dark"] ::selection { background: #2c4483; color: #fff; }
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { color: var(--ln-ink); font-weight: 700; letter-spacing: -0.01em; line-height: 1.2; text-wrap: balance; }
h1, .h1 { font-size: var(--ln-fs-2xl); font-weight: 800; letter-spacing: -0.015em; }
h2, .h2 { font-size: var(--ln-fs-xl); }
h3, .h3 { font-size: var(--ln-fs-2xl); font-weight: 800; letter-spacing: -0.015em; }
h4, .h4 { font-size: var(--ln-fs-lg); }
h5, .h5 { font-size: var(--ln-fs-md); }
h6, .h6 { font-size: var(--ln-fs-sm); }
p { text-wrap: pretty; }
a { color: var(--ln-blue-ink); text-underline-offset: 3px; text-decoration-thickness: 1px; }
a:hover { color: var(--ln-blue-hover); }
small, .small { font-size: var(--ln-fs-sm); }
hr { border-color: var(--ln-line); opacity: 1; }
code, kbd, pre, samp { font-family: var(--ln-mono); }
code { color: var(--ln-ink-2); background: var(--ln-panel-2); padding: 1px 5px; border-radius: var(--ln-r-sm); font-size: 0.875em; }
kbd { font-family: var(--ln-font); font-size: var(--ln-fs-xs); font-weight: 600; padding: 1px 6px; color: var(--ln-ink-3); background: var(--ln-panel); border: 1px solid var(--ln-line-2); border-radius: var(--ln-r-sm); box-shadow: none; }
img, svg, video, canvas { max-width: 100%; }

:focus-visible { outline: 2px solid var(--ln-blue); outline-offset: 2px; }
.btn:focus-visible, .form-control:focus-visible, .form-select:focus-visible, .form-check-input:focus-visible, .nav-link:focus-visible, .page-link:focus-visible { outline: 2px solid var(--ln-blue); outline-offset: 2px; box-shadow: none; }

/* themed scrollbars */
* { scrollbar-width: thin; scrollbar-color: var(--ln-line-2) transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb { background: var(--ln-line-2); border-radius: 10px; border: 2px solid transparent; background-clip: padding-box; }
*::-webkit-scrollbar-thumb:hover { background-color: var(--ln-line-strong); }
*::-webkit-scrollbar-track { background: transparent; }

/* text utilities rebound to tokens */
.text-muted, .text-body-secondary, .text-secondary { color: var(--ln-ink-3) !important; }
.text-body, .text-dark, .text-black { color: var(--ln-ink) !important; }
.text-primary, .text-info { color: var(--ln-blue-ink) !important; }
.text-success { color: var(--ln-green-ink) !important; }
.text-warning { color: var(--ln-amber-ink) !important; }
.text-danger { color: var(--ln-red-ink) !important; }
.text-white { color: #fff !important; }
.bg-light, .bg-body-tertiary, .bg-body-secondary { background-color: var(--ln-panel-2) !important; color: var(--ln-ink); }
.bg-white, .bg-body { background-color: var(--ln-panel) !important; }
.bg-primary { background-color: var(--ln-blue) !important; color: var(--ln-on-blue); }
.bg-success { background-color: var(--ln-green) !important; color: #fff; }
.bg-warning { background-color: var(--ln-amber) !important; color: var(--ln-ink-on-amber); }
.bg-danger { background-color: var(--ln-red) !important; color: #fff; }
.bg-secondary { background-color: var(--ln-grey) !important; color: #fff; }
.bg-dark { background-color: var(--ln-rail) !important; color: var(--ln-rail-ink); }
.text-bg-light { background-color: var(--ln-panel-2) !important; color: var(--ln-ink) !important; }
.text-bg-primary { background-color: var(--ln-blue) !important; color: var(--ln-on-blue) !important; }
.text-bg-success { background-color: var(--ln-green-soft) !important; color: var(--ln-green-ink) !important; }
.text-bg-warning { background-color: var(--ln-amber-soft) !important; color: var(--ln-amber-ink) !important; }
.text-bg-danger { background-color: var(--ln-red-soft) !important; color: var(--ln-red-ink) !important; }
.text-bg-secondary { background-color: var(--ln-grey-soft) !important; color: var(--ln-ink-2) !important; }
.text-bg-info { background-color: var(--ln-blue-soft) !important; color: var(--ln-blue-ink) !important; }
.text-bg-dark { background-color: var(--ln-rail) !important; color: var(--ln-rail-ink) !important; }
[data-bs-theme="dark"] .bg-success, [data-bs-theme="dark"] .bg-danger, [data-bs-theme="dark"] .bg-secondary { color: #08122b; }
.border, .border-top, .border-bottom, .border-start, .border-end { border-color: var(--ln-line) !important; }
.shadow, .shadow-sm, .shadow-lg { box-shadow: none !important; }
.rounded-3, .rounded-4, .rounded-5 { border-radius: var(--ln-r-lg) !important; }
.rounded-pill { border-radius: var(--ln-r-pill) !important; }
.font-monospace { font-family: var(--ln-mono) !important; }
.fw-bold, .fw-semibold { font-weight: 700 !important; }
.tabular, .text-nowrap { font-variant-numeric: tabular-nums; }

/* -------------------------------------------------------------------- shell */
.wrapper { background: var(--ln-ground); align-items: stretch; min-height: 100vh; }
.main { background: var(--ln-ground); min-width: 0; display: flex; flex-direction: column; min-height: 100vh; overflow: visible; }
.content { padding: var(--ln-s6) var(--ln-s8) var(--ln-s12); flex: 1; width: 100%; max-width: 1600px; }
.content > .container-fluid, .container-fluid.p-0 { padding: 0 !important; }

/* rail */
.sidebar, .sidebar-content { background: var(--ln-rail); }
.sidebar { min-width: var(--ln-rail-w); max-width: var(--ln-rail-w); box-shadow: none; border-right: 1px solid color-mix(in srgb, var(--ln-rail-ink) 6%, transparent); transition: margin-left var(--ln-med) var(--ln-ease); z-index: 30; }
.sidebar.collapsed { margin-left: calc(-1 * var(--ln-rail-w)); }
.sidebar-content { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: var(--ln-s5) 0 var(--ln-s8); display: flex; flex-direction: column; scrollbar-color: var(--ln-rail-3) transparent; }
.sidebar-content::-webkit-scrollbar-thumb { background-color: var(--ln-rail-3); }
.ln-brand { display: flex; align-items: center; gap: 10px; padding: 0 var(--ln-s5) var(--ln-s5); color: var(--ln-rail-ink); font-weight: 800; font-size: var(--ln-fs-md); text-decoration: none; letter-spacing: -0.005em; }
.ln-brand:hover { color: var(--ln-rail-ink); }
.ln-brand svg { flex: none; }
.ln-rail-label { padding: var(--ln-s4) var(--ln-s5) 6px; font-size: var(--ln-fs-xs); color: var(--ln-rail-ink-2); font-weight: 600; letter-spacing: 0.02em; }
.ln-nav { list-style: none; margin: 0; padding: 0; }
.sidebar a, .ln-nav a, .ln-mod__toggle { color: var(--ln-rail-ink-2); text-decoration: none; }
.ln-home, .ln-mod__toggle { color: var(--ln-rail-ink-2); display: flex; align-items: center; gap: 10px; width: 100%; padding: 7px var(--ln-s5); font-size: 0.875rem; font-weight: 500; background: none; border: 0; text-align: left; cursor: pointer; border-radius: 0; transition: background-color var(--ln-fast) ease, color var(--ln-fast) ease; }
.ln-home svg { width: 16px; height: 16px; flex: none; }
.ln-home:hover, .ln-mod__toggle:hover { color: var(--ln-rail-ink); background: var(--ln-rail-2); }
.ln-home[aria-current="page"] { color: var(--ln-rail-ink); font-weight: 700; }
.ln-chip { width: 18px; height: 6px; border-radius: 3px; background: var(--c, var(--ln-grey)); flex: none; }
.ln-mod__toggle .ln-mod__chev { margin-left: auto; width: 14px; height: 14px; opacity: 0.6; transition: transform var(--ln-fast) ease; }
.ln-mod.is-open > .ln-mod__toggle { color: var(--ln-rail-ink); font-weight: 700; }
.ln-mod.is-open > .ln-mod__toggle .ln-mod__chev { transform: rotate(180deg); }
.ln-stations { list-style: none; margin: 0; padding: 4px 0 10px; position: relative; display: none; }
.ln-mod.is-open > .ln-stations { display: block; }
.ln-stations::before { content: ""; position: absolute; left: 27px; top: 0; bottom: 16px; width: 3px; border-radius: 2px; background: var(--c); }
.ln-stations a { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 5px var(--ln-s5) 5px 46px; font-size: var(--ln-fs-sm); color: var(--ln-rail-ink-2); line-height: 1.35; }
.ln-stations a::before { content: ""; position: absolute; left: 23px; top: 50%; width: 11px; height: 11px; margin-top: -5.5px; border-radius: 50%; background: var(--ln-rail); border: 2.5px solid var(--c); box-sizing: border-box; }
.ln-stations a:hover { color: var(--ln-rail-ink); }
.ln-stations a:hover::before { background: color-mix(in srgb, var(--c) 35%, var(--ln-rail)); }
.ln-stations a[aria-current="page"] { color: var(--ln-rail-ink); font-weight: 700; }
.ln-stations a[aria-current="page"]::before { width: 15px; height: 15px; margin-top: -7.5px; left: 21px; background: var(--ln-rail-ink); border-width: 3px; }
.ln-stations .ln-sub-label { padding: 8px var(--ln-s5) 2px 46px; font-size: var(--ln-fs-xs); color: var(--ln-rail-ink-2); opacity: 0.85; font-weight: 600; }
.ln-rail-foot { margin-top: auto; padding-top: var(--ln-s5); }

/* topbar */
.ln-topbar { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; gap: var(--ln-s3); min-height: var(--ln-topbar-h); padding: 10px var(--ln-s8); background: var(--ln-panel); border-bottom: 1px solid var(--ln-line); }
.ln-icon-btn { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: var(--ln-r); border: 1px solid transparent; background: transparent; color: var(--ln-ink-2); cursor: pointer; flex: none; transition: background-color var(--ln-fast) ease, color var(--ln-fast) ease; }
.ln-icon-btn:hover { background: var(--ln-panel-2); color: var(--ln-ink); }
.ln-icon-btn svg { width: 18px; height: 18px; }
.ln-cmd { display: flex; align-items: center; gap: 10px; flex: 1 1 220px; max-width: 440px; min-width: 0; padding: 7px 10px; border: 1px solid var(--ln-line-2); border-radius: var(--ln-r); background: var(--ln-panel-2); color: var(--ln-ink-3); font-size: 0.875rem; cursor: pointer; text-align: left; transition: border-color var(--ln-fast) ease; }
.ln-cmd:hover { border-color: var(--ln-line-strong); }
.ln-cmd svg { width: 16px; height: 16px; flex: none; }
.ln-cmd span { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ln-topbar__end { margin-left: auto; display: flex; align-items: center; gap: var(--ln-s3); min-width: 0; }
.ln-status { display: inline-flex; align-items: center; gap: 6px; font-size: var(--ln-fs-sm); color: var(--ln-ink-2); white-space: nowrap; }
.ln-status__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ln-grey); flex: none; }
.ln-status--ok .ln-status__dot { background: var(--ln-green); }
.ln-status--bad .ln-status__dot { background: var(--ln-red); }
.ln-status--warn { color: var(--ln-amber-ink); font-weight: 700; }
.ln-status--warn .ln-status__dot { background: var(--ln-amber); }
.ln-clock { font-size: var(--ln-fs-sm); color: var(--ln-ink-2); font-weight: 600; white-space: nowrap; }
.ln-theme { display: inline-flex; padding: 2px; gap: 2px; border: 1px solid var(--ln-line); border-radius: var(--ln-r); background: var(--ln-panel-2); }
.ln-theme button { display: inline-grid; place-items: center; width: 30px; height: 28px; border: 0; border-radius: var(--ln-r-sm); background: transparent; color: var(--ln-ink-3); cursor: pointer; }
.ln-theme button svg { width: 15px; height: 15px; }
.ln-theme button:hover { color: var(--ln-ink); }
.ln-theme button[aria-pressed="true"] { background: var(--ln-panel); color: var(--ln-ink); box-shadow: 0 0 0 1px var(--ln-line-2); }
.ln-avatar { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; background: var(--ln-rail); color: var(--ln-rail-ink); font-size: var(--ln-fs-xs); font-weight: 700; text-decoration: none; flex: none; }
[data-bs-theme="dark"] .ln-avatar { background: var(--ln-panel-3); }
.ln-avatar:hover { color: var(--ln-rail-ink); box-shadow: 0 0 0 2px var(--ln-blue); }
.ln-menu-btn { display: none; }

/* command palette */
.ln-palette-scrim { position: fixed; inset: 0; z-index: 1090; background: var(--ln-scrim); }
.ln-palette { position: fixed; z-index: 1091; top: max(10vh, 64px); left: 50%; transform: translateX(-50%); width: min(600px, calc(100vw - 24px)); background: var(--ln-panel); border: 1px solid var(--ln-line-2); border-radius: var(--ln-r-xl); box-shadow: var(--ln-shadow-overlay); overflow: hidden; animation: ln-pop var(--ln-med) var(--ln-ease); }
@keyframes ln-pop { from { transform: translate(-50%, -8px); opacity: 0; } }
.ln-palette__in { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--ln-line); color: var(--ln-ink-3); }
.ln-palette__in svg { width: 18px; height: 18px; flex: none; }
.ln-palette__in input { flex: 1; min-width: 0; border: 0; background: none; font-size: var(--ln-fs-md); color: var(--ln-ink); outline: none; }
.ln-palette__list { list-style: none; margin: 0; padding: 6px; max-height: min(420px, 60vh); overflow-y: auto; }
.ln-palette__h { font-size: var(--ln-fs-xs); font-weight: 600; color: var(--ln-ink-3); padding: 8px 10px 4px; }
.ln-palette__item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 0; border-radius: var(--ln-r); background: none; color: var(--ln-ink); text-align: left; text-decoration: none; font-size: 0.9rem; cursor: pointer; }
.ln-palette__item small { margin-left: auto; color: var(--ln-ink-3); font-size: var(--ln-fs-xs); white-space: nowrap; }
.ln-palette__item.is-active, .ln-palette__item:hover { background: var(--ln-blue-soft); color: var(--ln-ink); }
.ln-palette__empty { padding: 18px 12px; color: var(--ln-ink-2); font-size: 0.9rem; }
.ln-palette__foot { display: flex; gap: 14px; padding: 8px 14px; border-top: 1px solid var(--ln-line); font-size: var(--ln-fs-xs); color: var(--ln-ink-3); }


/* desktop shortcuts (same list as the phone tab bar, chosen by the user) */
.ln-quick { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; }
.ln-quick a { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: var(--ln-r); color: var(--ln-ink-2); font-size: 0.875rem; font-weight: 600; text-decoration: none; white-space: nowrap; transition: background-color var(--ln-fast) ease, color var(--ln-fast) ease; }
.ln-quick a .ln-chip { width: 14px; height: 5px; }
.ln-quick a:hover { background: var(--ln-panel-2); color: var(--ln-ink); }
.ln-quick a[aria-current="page"] { color: var(--ln-ink); background: var(--ln-panel-2); box-shadow: inset 0 -2px 0 var(--c); }
.ln-quick__edit { display: inline-grid; place-items: center; width: 30px; height: 30px; border: 1px dashed var(--ln-line-2); border-radius: var(--ln-r); background: transparent; color: var(--ln-ink-3); cursor: pointer; flex: none; }
.ln-quick__edit:hover { color: var(--ln-ink); border-color: var(--ln-line-strong); border-style: solid; }
.ln-quick__edit svg { width: 15px; height: 15px; }
@media (max-width: 1279.98px) { .ln-quick a span:not(.ln-chip) { max-width: 9ch; overflow: hidden; text-overflow: ellipsis; } }
@media (max-width: 991.98px) { .ln-quick { display: none; } }

/* shortcut picker (dialog, shares the palette frame) */
.ln-picker { display: flex; flex-direction: column; max-height: min(640px, 84vh); }
.ln-picker__head { display: flex; align-items: flex-start; gap: 12px; padding: 16px 18px 12px; border-bottom: 1px solid var(--ln-line); }
.ln-picker__head h2 { font-size: var(--ln-fs-lg); margin: 0 0 4px; }
.ln-picker__head p { margin: 0; color: var(--ln-ink-2); font-size: var(--ln-fs-sm); }
.ln-picker__head .ln-icon-btn { margin-left: auto; }
.ln-picker__list { overflow-y: auto; padding: 6px 18px 12px; }
.ln-picker__group { margin: 10px 0 0; padding: 0; border: 0; }
.ln-picker__group legend { font-size: var(--ln-fs-xs); font-weight: 700; color: var(--ln-ink-3); margin: 0 0 4px; float: none; width: auto; }
.ln-picker__item { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: var(--ln-r); cursor: pointer; font-size: 0.9rem; }
.ln-picker__item:hover { background: var(--ln-panel-2); }
.ln-picker__item .form-check-input { margin: 0; flex: none; }
.ln-picker__item.is-disabled { color: var(--ln-ink-3); cursor: not-allowed; }
.ln-picker__pos { margin-left: auto; min-width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--ln-ink); color: var(--ln-panel); font-size: var(--ln-fs-xs); }
.ln-picker__foot { display: flex; align-items: center; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--ln-line); background: var(--ln-panel-2); }
.ln-picker__count { margin-right: auto; font-size: var(--ln-fs-sm); color: var(--ln-ink-2); }

/* phone tab bar */
.ln-tabbar { display: none; }

/* page head */
.content > .alert:first-child, .content .container-fluid > .alert:first-child { margin-bottom: var(--ln-s5); }
.ln-page-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ln-s3) var(--ln-s5); margin-bottom: var(--ln-s5); }
.ln-page-head h1 { margin: 0; }
.ln-page-head__meta { margin: 2px 0 0; color: var(--ln-ink-2); font-size: 0.875rem; }
.ln-page-head__actions { margin-left: auto; display: flex; flex-wrap: wrap; gap: var(--ln-s2); }

/* footer */
.footer { background: transparent; border-top: 1px solid var(--ln-line); padding: var(--ln-s4) var(--ln-s8); color: var(--ln-ink-3); font-size: var(--ln-fs-sm); }
.footer a { color: var(--ln-ink-2); }

/* ------------------------------------------------------------ panels (card) */
.card {
  --bs-card-bg: var(--ln-panel);
  --bs-card-border-color: var(--ln-line);
  --bs-card-border-radius: var(--ln-r-lg);
  --bs-card-inner-border-radius: calc(var(--ln-r-lg) - 1px);
  --bs-card-cap-bg: transparent;
  --bs-card-spacer-y: var(--ln-s4);
  --bs-card-spacer-x: var(--ln-s5);
  --bs-card-cap-padding-y: 14px;
  --bs-card-cap-padding-x: var(--ln-s5);
  --bs-card-color: var(--ln-ink);
  --bs-card-title-color: var(--ln-ink);
  --bs-card-subtitle-color: var(--ln-ink-3);
  background: var(--ln-panel);
  color: var(--ln-ink);
  border: 1px solid var(--ln-line);
  border-radius: var(--ln-r-lg);
  box-shadow: none;
  margin-bottom: var(--ln-s5);
}
.card .card { border-color: var(--ln-line); background: var(--ln-panel-2); margin-bottom: var(--ln-s3); }
.card-header { background: transparent; border-bottom: 1px solid var(--ln-line); padding: 14px var(--ln-s5); }
.card-header:first-child { border-radius: calc(var(--ln-r-lg) - 1px) calc(var(--ln-r-lg) - 1px) 0 0; }
.card-footer { background: var(--ln-panel-2); border-top: 1px solid var(--ln-line); padding: 12px var(--ln-s5); }
.card-title, .card-header .card-title { color: var(--ln-ink); font-size: var(--ln-fs-md); font-weight: 700; margin-bottom: 0; }
.card-body > .card-title { margin-bottom: var(--ln-s3); }
.card-subtitle { color: var(--ln-ink-3) !important; font-size: var(--ln-fs-sm); font-weight: 400; margin-top: 2px !important; }
.card-body { padding: var(--ln-s4) var(--ln-s5); }
.card-icon, .stat { color: var(--ln-ink-2); background: var(--ln-panel-2) !important; border-radius: var(--ln-r) !important; }
.card.h-100 { margin-bottom: 0; }
.row > [class*="col"] > .card.h-100 { height: 100%; }

/* ----------------------------------------------------------------- buttons */
.btn {
  --bs-btn-font-family: var(--ln-font);
  --bs-btn-font-weight: 600;
  --bs-btn-font-size: 0.875rem;
  --bs-btn-padding-y: 7px;
  --bs-btn-padding-x: 13px;
  --bs-btn-border-radius: var(--ln-r);
  --bs-btn-box-shadow: none;
  --bs-btn-focus-box-shadow: none;
  --bs-btn-disabled-opacity: 0.5;
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  line-height: 1.3; white-space: nowrap; box-shadow: none !important; background-image: none !important;
  transition: background-color var(--ln-fast) ease, border-color var(--ln-fast) ease, color var(--ln-fast) ease;
}
.btn svg, .btn .feather { width: 15px; height: 15px; flex: none; }
.btn-sm { --bs-btn-padding-y: 4px; --bs-btn-padding-x: 10px; --bs-btn-font-size: var(--ln-fs-sm); --bs-btn-border-radius: var(--ln-r-sm); gap: 5px; }
.btn-lg { --bs-btn-padding-y: 10px; --bs-btn-padding-x: 18px; --bs-btn-font-size: var(--ln-fs-md); --bs-btn-border-radius: var(--ln-r); }
.btn-primary, .btn-info {
  --bs-btn-color: var(--ln-on-blue); --bs-btn-bg: var(--ln-blue); --bs-btn-border-color: var(--ln-blue);
  --bs-btn-hover-color: var(--ln-on-blue); --bs-btn-hover-bg: var(--ln-blue-hover); --bs-btn-hover-border-color: var(--ln-blue-hover);
  --bs-btn-active-color: var(--ln-on-blue); --bs-btn-active-bg: var(--ln-blue-hover); --bs-btn-active-border-color: var(--ln-blue-hover);
  --bs-btn-disabled-color: var(--ln-on-blue); --bs-btn-disabled-bg: var(--ln-blue); --bs-btn-disabled-border-color: var(--ln-blue);
}
.btn-secondary, .btn-light, .btn-outline-secondary, .btn-outline-dark, .btn-outline-light, .btn-dark {
  --bs-btn-color: var(--ln-ink); --bs-btn-bg: var(--ln-panel); --bs-btn-border-color: var(--ln-line-2);
  --bs-btn-hover-color: var(--ln-ink); --bs-btn-hover-bg: var(--ln-panel-2); --bs-btn-hover-border-color: var(--ln-line-strong);
  --bs-btn-active-color: var(--ln-ink); --bs-btn-active-bg: var(--ln-panel-3); --bs-btn-active-border-color: var(--ln-line-strong);
  --bs-btn-disabled-color: var(--ln-ink-3); --bs-btn-disabled-bg: var(--ln-panel); --bs-btn-disabled-border-color: var(--ln-line);
}
.btn-dark {
  --bs-btn-color: var(--ln-rail-ink); --bs-btn-bg: var(--ln-rail); --bs-btn-border-color: var(--ln-rail);
  --bs-btn-hover-color: var(--ln-rail-ink); --bs-btn-hover-bg: var(--ln-rail-2); --bs-btn-hover-border-color: var(--ln-rail-2);
  --bs-btn-active-color: var(--ln-rail-ink); --bs-btn-active-bg: var(--ln-rail-3); --bs-btn-active-border-color: var(--ln-rail-3);
}
[data-bs-theme="dark"] .btn-dark { --bs-btn-bg: var(--ln-panel-3); --bs-btn-border-color: var(--ln-line-2); --bs-btn-hover-bg: var(--ln-rail-3); --bs-btn-hover-border-color: var(--ln-line-strong); }
.btn-outline-primary, .btn-outline-info {
  --bs-btn-color: var(--ln-blue-ink); --bs-btn-bg: var(--ln-panel); --bs-btn-border-color: color-mix(in srgb, var(--ln-blue) 45%, var(--ln-line-2));
  --bs-btn-hover-color: var(--ln-blue-ink); --bs-btn-hover-bg: var(--ln-blue-soft); --bs-btn-hover-border-color: var(--ln-blue);
  --bs-btn-active-color: var(--ln-on-blue); --bs-btn-active-bg: var(--ln-blue); --bs-btn-active-border-color: var(--ln-blue);
  --bs-btn-disabled-color: var(--ln-blue-ink); --bs-btn-disabled-bg: transparent; --bs-btn-disabled-border-color: var(--ln-line);
}
.btn-success {
  --bs-btn-color: #fff; --bs-btn-bg: var(--ln-green); --bs-btn-border-color: var(--ln-green);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--ln-green-ink); --bs-btn-hover-border-color: var(--ln-green-ink);
  --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--ln-green-ink); --bs-btn-active-border-color: var(--ln-green-ink);
  --bs-btn-disabled-color: #fff; --bs-btn-disabled-bg: var(--ln-green); --bs-btn-disabled-border-color: var(--ln-green);
}
.btn-danger {
  --bs-btn-color: #fff; --bs-btn-bg: var(--ln-red); --bs-btn-border-color: var(--ln-red);
  --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--ln-red-ink); --bs-btn-hover-border-color: var(--ln-red-ink);
  --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--ln-red-ink); --bs-btn-active-border-color: var(--ln-red-ink);
  --bs-btn-disabled-color: #fff; --bs-btn-disabled-bg: var(--ln-red); --bs-btn-disabled-border-color: var(--ln-red);
}
.btn-warning {
  --bs-btn-color: var(--ln-ink-on-amber); --bs-btn-bg: var(--ln-amber); --bs-btn-border-color: var(--ln-amber);
  --bs-btn-hover-color: var(--ln-ink-on-amber); --bs-btn-hover-bg: color-mix(in srgb, var(--ln-amber) 85%, #000); --bs-btn-hover-border-color: color-mix(in srgb, var(--ln-amber) 85%, #000);
  --bs-btn-active-color: var(--ln-ink-on-amber); --bs-btn-active-bg: color-mix(in srgb, var(--ln-amber) 80%, #000); --bs-btn-active-border-color: color-mix(in srgb, var(--ln-amber) 80%, #000);
}
[data-bs-theme="dark"] .btn-success, [data-bs-theme="dark"] .btn-danger { --bs-btn-color: #08122b; --bs-btn-hover-color: #08122b; --bs-btn-active-color: #08122b; --bs-btn-disabled-color: #08122b; }
.btn-outline-success { --bs-btn-color: var(--ln-green-ink); --bs-btn-bg: var(--ln-panel); --bs-btn-border-color: color-mix(in srgb, var(--ln-green) 50%, var(--ln-line-2)); --bs-btn-hover-color: var(--ln-green-ink); --bs-btn-hover-bg: var(--ln-green-soft); --bs-btn-hover-border-color: var(--ln-green); --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--ln-green); --bs-btn-active-border-color: var(--ln-green); }
.btn-outline-danger { --bs-btn-color: var(--ln-red-ink); --bs-btn-bg: var(--ln-panel); --bs-btn-border-color: color-mix(in srgb, var(--ln-red) 45%, var(--ln-line-2)); --bs-btn-hover-color: var(--ln-red-ink); --bs-btn-hover-bg: var(--ln-red-soft); --bs-btn-hover-border-color: var(--ln-red); --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--ln-red); --bs-btn-active-border-color: var(--ln-red); --bs-btn-disabled-color: var(--ln-red-ink); --bs-btn-disabled-bg: transparent; --bs-btn-disabled-border-color: var(--ln-line); }
.btn-outline-warning { --bs-btn-color: var(--ln-amber-ink); --bs-btn-bg: var(--ln-panel); --bs-btn-border-color: color-mix(in srgb, var(--ln-amber) 55%, var(--ln-line-2)); --bs-btn-hover-color: var(--ln-amber-ink); --bs-btn-hover-bg: var(--ln-amber-soft); --bs-btn-hover-border-color: var(--ln-amber); --bs-btn-active-color: var(--ln-ink-on-amber); --bs-btn-active-bg: var(--ln-amber); --bs-btn-active-border-color: var(--ln-amber); }
[data-bs-theme="dark"] .btn-outline-success, [data-bs-theme="dark"] .btn-outline-danger { --bs-btn-active-color: #08122b; }
.btn-link { --bs-btn-color: var(--ln-blue-ink); --bs-btn-hover-color: var(--ln-blue-hover); --bs-btn-active-color: var(--ln-blue-hover); --bs-btn-disabled-color: var(--ln-ink-3); text-decoration: none; padding-left: 4px; padding-right: 4px; }
.btn-link:hover { text-decoration: underline; }
.btn-check:checked + .btn, .btn.active, .btn:first-child:active { box-shadow: none; }
/* AdminKit hard-codes color:#fff on button classes; bind text to each button's own colour variables so it follows the theme. */
.btn { color: var(--bs-btn-color) !important; }
.btn:hover { color: var(--bs-btn-hover-color) !important; }
.btn:active, .btn.active, .btn.show, .btn-check:checked + .btn { color: var(--bs-btn-active-color) !important; }
.btn:disabled, .btn.disabled { color: var(--bs-btn-disabled-color) !important; }
.btn-check:checked + .btn-outline-secondary, .btn-check:checked + .btn-outline-primary, .btn-check:checked + .btn-outline-dark {
  --bs-btn-active-color: var(--ln-blue-ink); --bs-btn-active-bg: var(--ln-blue-soft); --bs-btn-active-border-color: var(--ln-blue);
  background: var(--ln-blue-soft); border-color: var(--ln-blue);
}
.btn-group > .btn, .btn-group-vertical > .btn { flex: 1 1 auto; }
.btn-close { filter: none; opacity: 0.6; }
[data-bs-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }
.btn-close:hover { opacity: 1; }
.btn-close:focus { box-shadow: none; }

/* ------------------------------------------------------------------- forms */
.form-label, .col-form-label { font-size: var(--ln-fs-sm); font-weight: 600; color: var(--ln-ink-2); margin-bottom: 5px; }
.form-text { color: var(--ln-ink-3); font-size: var(--ln-fs-sm); }
.form-control, .form-select {
  font-size: 0.9rem; color: var(--ln-ink); background-color: var(--ln-panel);
  border: 1px solid var(--ln-line-2); border-radius: var(--ln-r); padding: 7px 10px; min-height: 36px; box-shadow: none;
  transition: border-color var(--ln-fast) ease, box-shadow var(--ln-fast) ease;
}
.form-select { padding-right: 32px; }
.form-control-sm, .form-select-sm { font-size: var(--ln-fs-sm); padding: 4px 8px; min-height: 30px; border-radius: var(--ln-r-sm); }
.form-select-sm { padding-right: 28px; }
.form-control-lg, .form-select-lg { font-size: var(--ln-fs-md); padding: 10px 12px; min-height: 44px; }
.form-control::placeholder { color: var(--ln-ink-3); opacity: 1; }
.form-control:hover, .form-select:hover { border-color: var(--ln-line-strong); }
.form-control:focus, .form-select:focus { color: var(--ln-ink); background-color: var(--ln-panel); border-color: var(--ln-blue); box-shadow: 0 0 0 1px var(--ln-blue); outline: none; }
.form-control:disabled, .form-select:disabled, .form-control[readonly] { background-color: var(--ln-panel-2); color: var(--ln-ink-2); }
.form-control.is-invalid, .form-select.is-invalid, .was-validated .form-control:invalid { border-color: var(--ln-red); background-image: none; padding-right: 10px; }
.form-control.is-invalid:focus { box-shadow: 0 0 0 1px var(--ln-red); }
.form-control.is-valid, .form-select.is-valid { border-color: var(--ln-green); background-image: none; padding-right: 10px; }
.invalid-feedback { color: var(--ln-red-ink); font-size: var(--ln-fs-sm); font-weight: 600; }
.valid-feedback { color: var(--ln-green-ink); font-size: var(--ln-fs-sm); }
[data-bs-theme="dark"] .form-select { --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23b4bdd0' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); }
input[type="date"], input[type="time"], input[type="datetime-local"] { font-variant-numeric: tabular-nums; }
[data-bs-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator,
[data-bs-theme="dark"] input[type="time"]::-webkit-calendar-picker-indicator,
[data-bs-theme="dark"] input[type="datetime-local"]::-webkit-calendar-picker-indicator { filter: invert(0.85); }
textarea.form-control { min-height: 90px; line-height: 1.5; }
.input-group-text { background: var(--ln-panel-2); border-color: var(--ln-line-2); color: var(--ln-ink-2); font-size: 0.875rem; }
.input-group > .form-control:focus, .input-group > .form-select:focus { z-index: 5; }
.form-check-input { width: 1.05em; height: 1.05em; margin-top: 0.22em; border: 1.5px solid var(--ln-line-strong); background-color: var(--ln-panel); }
.form-check-input:checked { background-color: var(--ln-blue); border-color: var(--ln-blue); }
.form-check-input:focus { box-shadow: none; border-color: var(--ln-blue); }
.form-check-label { color: var(--ln-ink); }
.form-switch .form-check-input { width: 2.1em; height: 1.15em; margin-top: 0.15em; }
.form-switch .form-check-input:not(:checked) { --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%238e97aa'/%3e%3c/svg%3e"); }
.form-range::-webkit-slider-thumb { background: var(--ln-blue); }
.form-range::-moz-range-thumb { background: var(--ln-blue); }
.form-range::-webkit-slider-runnable-track { background: var(--ln-line); }
fieldset legend { font-size: var(--ln-fs-md); font-weight: 700; }

/* ------------------------------------------------------------------ tables */
.table {
  --bs-table-bg: transparent;
  --bs-table-color: var(--ln-ink);
  --bs-table-border-color: var(--ln-line);
  --bs-table-striped-bg: var(--ln-panel-2);
  --bs-table-striped-color: var(--ln-ink);
  --bs-table-hover-bg: var(--ln-panel-2);
  --bs-table-hover-color: var(--ln-ink);
  --bs-table-active-bg: var(--ln-blue-soft);
  --bs-table-active-color: var(--ln-ink);
  color: var(--ln-ink); font-size: 0.875rem; margin-bottom: 0; border-color: var(--ln-line);
}
.table > :not(caption) > * > * { padding: 11px 14px; border-bottom-color: var(--ln-line); background-color: var(--bs-table-bg); box-shadow: none; }
.table-sm > :not(caption) > * > * { padding: 7px 10px; }
.table > thead > tr > th, .table thead th {
  font-size: var(--ln-fs-xs); font-weight: 700; color: var(--ln-ink-3); text-transform: none; letter-spacing: 0.01em;
  background: var(--ln-panel-2); border-bottom: 1px solid var(--ln-line); white-space: nowrap; vertical-align: bottom;
}
.table-light, .table > thead.table-light > tr > th { --bs-table-bg: var(--ln-panel-2); --bs-table-color: var(--ln-ink-3); color: var(--ln-ink-3); }
.table-dark { --bs-table-bg: var(--ln-rail); --bs-table-color: var(--ln-rail-ink); }
.table > tbody > tr:last-child > * { border-bottom-color: transparent; }
.table-hover > tbody > tr:hover > * { --bs-table-bg-state: var(--ln-panel-2); }
.table-bordered > :not(caption) > * > * { border-width: 0 0 1px; }
.table-bordered > :not(caption) > * { border-width: 0; }
.table td.text-end, .table th.text-end { font-variant-numeric: tabular-nums; }
.card > .table-responsive, .card > .table, .card-body.p-0 > .table-responsive { margin: 0; }
.card > .table-responsive:last-child, .card > .table:last-child { border-radius: 0 0 var(--ln-r-lg) var(--ln-r-lg); }
.table-responsive { -webkit-overflow-scrolling: touch; }
.table-success, .table-success > * { --bs-table-bg: var(--ln-green-soft); --bs-table-color: var(--ln-ink); }
.table-warning, .table-warning > * { --bs-table-bg: var(--ln-amber-soft); --bs-table-color: var(--ln-ink); }
.table-danger, .table-danger > * { --bs-table-bg: var(--ln-red-soft); --bs-table-color: var(--ln-ink); }
.table-info, .table-primary, .table-info > *, .table-primary > * { --bs-table-bg: var(--ln-blue-soft); --bs-table-color: var(--ln-ink); }
.table-secondary, .table-secondary > * { --bs-table-bg: var(--ln-grey-soft); --bs-table-color: var(--ln-ink); }

/* ---------------------------------------------------------- pills (badges) */
.badge {
  --bs-badge-font-size: var(--ln-fs-xs);
  --bs-badge-font-weight: 700;
  --bs-badge-padding-y: 3px;
  --bs-badge-padding-x: 8px;
  --bs-badge-border-radius: var(--ln-r-pill);
  display: inline-flex; align-items: center; gap: 4px; line-height: 1.3; letter-spacing: 0.005em; vertical-align: middle;
  background-color: var(--ln-grey-soft); color: var(--ln-ink-2);
}
.badge.bg-primary, .badge.bg-info, .badge.text-bg-primary, .badge.text-bg-info { background: var(--ln-blue-soft) !important; color: var(--ln-blue-ink) !important; }
.badge.bg-success, .badge.text-bg-success { background: var(--ln-green-soft) !important; color: var(--ln-green-ink) !important; }
.badge.bg-warning, .badge.text-bg-warning { background: var(--ln-amber-soft) !important; color: var(--ln-amber-ink) !important; }
.badge.bg-danger, .badge.text-bg-danger { background: var(--ln-red-soft) !important; color: var(--ln-red-ink) !important; }
.badge.bg-secondary, .badge.text-bg-secondary, .badge.bg-light, .badge.text-bg-light { background: var(--ln-grey-soft) !important; color: var(--ln-ink-2) !important; }
.badge.bg-dark, .badge.text-bg-dark { background: var(--ln-rail) !important; color: var(--ln-rail-ink) !important; }
[data-bs-theme="dark"] .badge.bg-dark, [data-bs-theme="dark"] .badge.text-bg-dark { background: var(--ln-panel-3) !important; }
.badge.rounded-pill { border-radius: var(--ln-r-pill); }
.badge.bg-light.text-dark, .badge.border { box-shadow: inset 0 0 0 1px var(--ln-line-2); border: 0 !important; }

/* named pills for new markup */
.ln-pill { display: inline-flex; align-items: center; gap: 6px; padding: 2px 9px; border-radius: var(--ln-r-pill); font-size: var(--ln-fs-sm); font-weight: 700; line-height: 1.4; white-space: nowrap; background: var(--ln-grey-soft); color: var(--ln-ink-2); }
.ln-pill svg { width: 13px; height: 13px; flex: none; }
.ln-pill--blue { background: var(--ln-blue-soft); color: var(--ln-blue-ink); }
.ln-pill--green { background: var(--ln-green-soft); color: var(--ln-green-ink); }
.ln-pill--amber { background: var(--ln-amber-soft); color: var(--ln-amber-ink); }
.ln-pill--red { background: var(--ln-red-soft); color: var(--ln-red-ink); }
.ln-pill--plan { background: var(--ln-panel); color: var(--ln-ink-2); box-shadow: inset 0 0 0 1px var(--ln-line-2); }

/* ------------------------------------------------------------------ alerts */
.alert {
  --bs-alert-border-radius: var(--ln-r-lg);
  --bs-alert-padding-x: var(--ln-s4);
  --bs-alert-padding-y: 12px;
  border: 0; border-radius: var(--ln-r-lg); font-size: 0.9rem; color: var(--ln-ink); background: var(--ln-panel-2);
  padding: 12px 16px; /* AdminKit zeroes alert padding */
  margin-bottom: var(--ln-s4);
  box-shadow: inset 0 0 0 1px var(--ln-line);
}
.alert-primary, .alert-info { background: var(--ln-blue-soft); box-shadow: none; color: var(--ln-ink); }
.alert-success { background: var(--ln-green-soft); box-shadow: none; color: var(--ln-ink); }
.alert-warning { background: var(--ln-amber-soft); box-shadow: none; color: var(--ln-ink); }
.alert-danger { background: var(--ln-red-soft); box-shadow: none; color: var(--ln-ink); }
.alert-secondary, .alert-light { background: var(--ln-panel-2); color: var(--ln-ink); }
.alert-dark { background: var(--ln-rail); color: var(--ln-rail-ink); box-shadow: none; }
.alert-primary .alert-heading, .alert-info .alert-heading { color: var(--ln-blue-ink); }
.alert-success .alert-heading { color: var(--ln-green-ink); }
.alert-warning .alert-heading { color: var(--ln-amber-ink); }
.alert-danger .alert-heading { color: var(--ln-red-ink); }
.alert .alert-link { color: inherit; text-decoration: underline; font-weight: 700; }
/* AdminKit alert variant with .alert-message / .alert-icon */
.alert .alert-message { padding: 0; color: inherit; }
.alert .alert-icon { background: transparent !important; color: inherit; padding: 0 10px 0 0; }

/* ---------------------------------------------------- navs, tabs, dropdowns */
.nav-tabs { --bs-nav-tabs-border-color: var(--ln-line); --bs-nav-tabs-link-active-color: var(--ln-ink); --bs-nav-tabs-link-active-bg: transparent; --bs-nav-tabs-link-active-border-color: transparent; border-bottom: 1px solid var(--ln-line); gap: var(--ln-s4); flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; }
.nav-tabs::-webkit-scrollbar { display: none; }
.nav-tabs .nav-link { border: 0; border-bottom: 2px solid transparent; border-radius: 0; margin-bottom: -1px; padding: 8px 2px; color: var(--ln-ink-3); font-weight: 600; font-size: 0.9rem; white-space: nowrap; background: none; }
.nav-tabs .nav-link:hover { color: var(--ln-ink); border-bottom-color: var(--ln-line-strong); }
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: var(--ln-ink); border-bottom-color: var(--ln-blue); background: none; }
.nav-pills { --bs-nav-pills-border-radius: var(--ln-r); gap: 2px; padding: 3px; background: var(--ln-panel-2); border: 1px solid var(--ln-line); border-radius: var(--ln-r-lg); display: inline-flex; flex-wrap: wrap; }
.nav-pills .nav-link { color: var(--ln-ink-3); font-weight: 600; font-size: var(--ln-fs-sm); padding: 5px 12px; border-radius: var(--ln-r); }
.nav-pills .nav-link:hover { color: var(--ln-ink); }
.nav-pills .nav-link.active, .nav-pills .show > .nav-link { background: var(--ln-panel); color: var(--ln-ink); box-shadow: 0 0 0 1px var(--ln-line-2); }
.nav-link { color: var(--ln-blue-ink); }
.dropdown-menu {
  --bs-dropdown-bg: var(--ln-panel); --bs-dropdown-color: var(--ln-ink); --bs-dropdown-border-color: var(--ln-line-2); --bs-dropdown-border-radius: var(--ln-r-lg);
  --bs-dropdown-link-color: var(--ln-ink); --bs-dropdown-link-hover-color: var(--ln-ink); --bs-dropdown-link-hover-bg: var(--ln-panel-2);
  --bs-dropdown-link-active-color: var(--ln-blue-ink); --bs-dropdown-link-active-bg: var(--ln-blue-soft); --bs-dropdown-divider-bg: var(--ln-line);
  --bs-dropdown-header-color: var(--ln-ink-3); --bs-dropdown-font-size: 0.875rem; --bs-dropdown-padding-y: 4px; --bs-dropdown-item-padding-y: 6px;
  box-shadow: var(--ln-shadow-pop); padding: 4px;
}
.dropdown-item { border-radius: var(--ln-r-sm); }
.breadcrumb { --bs-breadcrumb-divider-color: var(--ln-ink-3); --bs-breadcrumb-item-active-color: var(--ln-ink-2); font-size: var(--ln-fs-sm); margin-bottom: var(--ln-s2); }
.pagination { --bs-pagination-color: var(--ln-ink-2); --bs-pagination-bg: var(--ln-panel); --bs-pagination-border-color: var(--ln-line-2); --bs-pagination-hover-color: var(--ln-ink); --bs-pagination-hover-bg: var(--ln-panel-2); --bs-pagination-hover-border-color: var(--ln-line-strong); --bs-pagination-focus-box-shadow: none; --bs-pagination-active-color: var(--ln-on-blue); --bs-pagination-active-bg: var(--ln-blue); --bs-pagination-active-border-color: var(--ln-blue); --bs-pagination-disabled-color: var(--ln-ink-3); --bs-pagination-disabled-bg: var(--ln-panel-2); --bs-pagination-disabled-border-color: var(--ln-line); --bs-pagination-border-radius: var(--ln-r); --bs-pagination-font-size: var(--ln-fs-sm); gap: 4px; }
.pagination .page-link { border-radius: var(--ln-r) !important; margin-left: 0 !important; min-width: 34px; text-align: center; font-variant-numeric: tabular-nums; }
.list-group { --bs-list-group-bg: var(--ln-panel); --bs-list-group-color: var(--ln-ink); --bs-list-group-border-color: var(--ln-line); --bs-list-group-border-radius: var(--ln-r-lg); --bs-list-group-action-color: var(--ln-ink); --bs-list-group-action-hover-color: var(--ln-ink); --bs-list-group-action-hover-bg: var(--ln-panel-2); --bs-list-group-active-color: var(--ln-ink); --bs-list-group-active-bg: var(--ln-blue-soft); --bs-list-group-active-border-color: var(--ln-line); --bs-list-group-disabled-color: var(--ln-ink-3); --bs-list-group-item-padding-x: var(--ln-s4); --bs-list-group-item-padding-y: 10px; }
.list-group-flush > .list-group-item { background: transparent; }
.progress, .progress-stacked { --bs-progress-height: 8px; --bs-progress-bg: var(--ln-panel-3); --bs-progress-border-radius: var(--ln-r-pill); --bs-progress-bar-bg: var(--ln-blue); --bs-progress-box-shadow: none; }
.progress-bar { font-size: var(--ln-fs-xs); font-weight: 700; }
.progress-bar.bg-warning { color: var(--ln-ink-on-amber); }
.spinner-border { --bs-spinner-border-width: 2px; color: var(--ln-blue); }
.spinner-border-sm { --bs-spinner-border-width: 2px; }
.tooltip { --bs-tooltip-bg: var(--ln-rail); --bs-tooltip-color: var(--ln-rail-ink); --bs-tooltip-font-size: var(--ln-fs-sm); --bs-tooltip-border-radius: var(--ln-r); }
.popover { --bs-popover-bg: var(--ln-panel); --bs-popover-border-color: var(--ln-line-2); --bs-popover-header-bg: var(--ln-panel-2); --bs-popover-header-color: var(--ln-ink); --bs-popover-body-color: var(--ln-ink); --bs-popover-box-shadow: var(--ln-shadow-pop); --bs-popover-border-radius: var(--ln-r-lg); }
.toast { --bs-toast-bg: var(--ln-panel); --bs-toast-color: var(--ln-ink); --bs-toast-border-color: var(--ln-line-2); --bs-toast-header-bg: var(--ln-panel-2); --bs-toast-header-color: var(--ln-ink); --bs-toast-border-radius: var(--ln-r-lg); --bs-toast-box-shadow: var(--ln-shadow-pop); }
.accordion { --bs-accordion-bg: var(--ln-panel); --bs-accordion-color: var(--ln-ink); --bs-accordion-border-color: var(--ln-line); --bs-accordion-border-radius: var(--ln-r-lg); --bs-accordion-inner-border-radius: calc(var(--ln-r-lg) - 1px); --bs-accordion-btn-color: var(--ln-ink); --bs-accordion-btn-bg: var(--ln-panel); --bs-accordion-active-color: var(--ln-ink); --bs-accordion-active-bg: var(--ln-panel-2); --bs-accordion-btn-focus-box-shadow: none; }
.offcanvas { --bs-offcanvas-bg: var(--ln-panel); --bs-offcanvas-color: var(--ln-ink); --bs-offcanvas-border-color: var(--ln-line); }
details > summary { cursor: pointer; }

/* ------------------------------------------------------- modals and drawers */
.modal { --bs-modal-bg: var(--ln-panel); --bs-modal-color: var(--ln-ink); --bs-modal-border-color: var(--ln-line-2); --bs-modal-border-radius: var(--ln-r-xl); --bs-modal-inner-border-radius: calc(var(--ln-r-xl) - 1px); --bs-modal-box-shadow: var(--ln-shadow-overlay); --bs-modal-header-border-color: var(--ln-line); --bs-modal-footer-border-color: var(--ln-line); --bs-modal-header-padding: 16px 20px; --bs-modal-padding: 20px; }
.modal-content { box-shadow: var(--ln-shadow-overlay); }
.modal-title { font-size: var(--ln-fs-lg); font-weight: 700; }
.modal-footer { background: var(--ln-panel-2); border-radius: 0 0 calc(var(--ln-r-xl) - 1px) calc(var(--ln-r-xl) - 1px); }
.modal-backdrop { --bs-backdrop-bg: #02050c; --bs-backdrop-opacity: 0.5; }

/* the app's own modal pattern: .booking-modal + .is-open */
.booking-modal { background: var(--ln-scrim) !important; backdrop-filter: none !important; }
.booking-modal-dialog { background: var(--ln-panel) !important; color: var(--ln-ink); border: 1px solid var(--ln-line-2) !important; border-radius: var(--ln-r-xl) !important; box-shadow: var(--ln-shadow-overlay) !important; transition: transform var(--ln-med) var(--ln-ease), opacity var(--ln-med) var(--ln-ease) !important; }
.booking-modal-header { background: var(--ln-panel) !important; border-bottom: 1px solid var(--ln-line) !important; padding: 16px 20px !important; }
.booking-modal-title { color: var(--ln-ink) !important; font-size: var(--ln-fs-lg) !important; font-weight: 700 !important; }
.booking-modal-close { background: transparent !important; border: 1px solid transparent !important; color: var(--ln-ink-2) !important; border-radius: var(--ln-r) !important; box-shadow: none !important; }
.booking-modal-close:hover { background: var(--ln-panel-2) !important; color: var(--ln-ink) !important; transform: none !important; }
.booking-modal-body { color: var(--ln-ink); }
.booking-modal-body::-webkit-scrollbar-thumb { background: var(--ln-line-2) !important; }
.booking-modal-footer { background: var(--ln-panel-2) !important; border-top: 1px solid var(--ln-line) !important; }

/* tingle */
.tingle-modal { background: var(--ln-scrim) !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
.tingle-modal-box { background: var(--ln-panel) !important; color: var(--ln-ink); border-radius: var(--ln-r-xl) !important; border: 1px solid var(--ln-line-2); box-shadow: var(--ln-shadow-overlay); }
.tingle-modal-box__footer { background: var(--ln-panel-2) !important; border-top: 1px solid var(--ln-line); border-radius: 0 0 var(--ln-r-xl) var(--ln-r-xl); }
.tingle-modal__close { color: var(--ln-rail-ink) !important; }
.tingle-btn { font-family: var(--ln-font) !important; font-weight: 600 !important; border-radius: var(--ln-r) !important; padding: 8px 14px !important; box-shadow: none !important; }
.tingle-btn--primary { background: var(--ln-blue) !important; color: var(--ln-on-blue) !important; }
.tingle-btn--danger { background: var(--ln-red) !important; color: #fff !important; }
.tingle-btn--default { background: var(--ln-panel) !important; color: var(--ln-ink) !important; border: 1px solid var(--ln-line-2) !important; }

/* SweetAlert2 */
.swal2-container.swal2-backdrop-show { background: var(--ln-scrim) !important; }
.swal2-popup { font-family: var(--ln-font) !important; background: var(--ln-panel) !important; color: var(--ln-ink) !important; border: 1px solid var(--ln-line-2) !important; border-radius: var(--ln-r-xl) !important; box-shadow: var(--ln-shadow-overlay) !important; padding: 24px 22px 20px !important; }
.swal2-title { color: var(--ln-ink) !important; font-size: var(--ln-fs-xl) !important; font-weight: 800 !important; padding: 8px 8px 0 !important; }
.swal2-html-container, .swal2-content { color: var(--ln-ink-2) !important; font-size: var(--ln-fs-base) !important; }
.swal2-styled { font-family: var(--ln-font) !important; font-weight: 600 !important; font-size: 0.9rem !important; border-radius: var(--ln-r) !important; padding: 8px 16px !important; box-shadow: none !important; }
.swal2-styled.swal2-confirm { background: var(--ln-blue) !important; color: var(--ln-on-blue) !important; }
.swal2-styled.swal2-deny { background: var(--ln-red) !important; color: #fff !important; }
.swal2-styled.swal2-cancel { background: var(--ln-panel) !important; color: var(--ln-ink) !important; border: 1px solid var(--ln-line-2) !important; }
.swal2-styled:focus-visible { outline: 2px solid var(--ln-blue) !important; outline-offset: 2px !important; }
.swal2-input, .swal2-textarea, .swal2-select { font-family: var(--ln-font) !important; background: var(--ln-panel) !important; color: var(--ln-ink) !important; border: 1px solid var(--ln-line-2) !important; border-radius: var(--ln-r) !important; box-shadow: none !important; font-size: var(--ln-fs-md) !important; }
.swal2-input:focus, .swal2-textarea:focus { border-color: var(--ln-blue) !important; box-shadow: 0 0 0 1px var(--ln-blue) !important; }
.swal2-validation-message { background: var(--ln-red-soft) !important; color: var(--ln-red-ink) !important; }
.swal2-icon.swal2-success { border-color: var(--ln-green) !important; color: var(--ln-green) !important; }
.swal2-icon.swal2-success [class^="swal2-success-line"] { background-color: var(--ln-green) !important; }
.swal2-icon.swal2-success .swal2-success-ring { border-color: color-mix(in srgb, var(--ln-green) 30%, transparent) !important; }
.swal2-icon.swal2-success [class^="swal2-success-circular-line"], .swal2-icon.swal2-success .swal2-success-fix { background-color: var(--ln-panel) !important; }
.swal2-icon.swal2-error { border-color: var(--ln-red) !important; color: var(--ln-red) !important; }
.swal2-icon.swal2-error [class^="swal2-x-mark-line"] { background-color: var(--ln-red) !important; }
.swal2-icon.swal2-warning { border-color: var(--ln-amber) !important; color: var(--ln-amber) !important; }
.swal2-icon.swal2-info, .swal2-icon.swal2-question { border-color: var(--ln-blue) !important; color: var(--ln-blue) !important; }
.swal2-toast { box-shadow: var(--ln-shadow-pop) !important; }
.swal2-timer-progress-bar { background: var(--ln-blue) !important; }
.swal2-footer { border-top-color: var(--ln-line) !important; color: var(--ln-ink-3) !important; }
.swal2-close { color: var(--ln-ink-3) !important; }

/* Leaflet */
.leaflet-container { font-family: var(--ln-font); background: var(--ln-panel-2); }
.leaflet-bar a, .leaflet-control-layers, .leaflet-popup-content-wrapper, .leaflet-popup-tip { background: var(--ln-panel); color: var(--ln-ink); border-color: var(--ln-line-2); }
.leaflet-bar { border: 1px solid var(--ln-line-2) !important; box-shadow: none !important; border-radius: var(--ln-r) !important; }
.leaflet-bar a:hover { background: var(--ln-panel-2); color: var(--ln-ink); }
.leaflet-popup-content-wrapper { border-radius: var(--ln-r-lg); box-shadow: var(--ln-shadow-pop); }
.leaflet-container a.leaflet-popup-close-button { color: var(--ln-ink-3); }
.leaflet-control-attribution { background: color-mix(in srgb, var(--ln-panel) 85%, transparent) !important; color: var(--ln-ink-3); }
.leaflet-control-attribution a { color: var(--ln-ink-2); }
/* dark map: OSM tiles re-inked so the map does not glare; markers and lines keep their colours */
[data-bs-theme="dark"] .leaflet-tile-pane img[src*="openstreetmap"] { filter: invert(1) hue-rotate(180deg) brightness(0.92) contrast(0.86) saturate(0.55); }

/* ----------------------------------------------------- line diagram pieces */
/* station line, vertical: <ol class="ln-line"><li class="ln-line__stop is-passed|is-next|is-xfer">… */
.ln-line { list-style: none; margin: 0; padding: 0; position: relative; --c: var(--ln-blue); }
.ln-line__stop { position: relative; padding: 0 0 22px 34px; min-height: 26px; }
.ln-line__stop::before { content: ""; position: absolute; left: 10px; top: 14px; bottom: -6px; width: 5px; border-radius: 3px; background: var(--ln-line); }
.ln-line__stop:last-child::before { display: none; }
.ln-line__stop.is-passed::before { background: var(--c); }
.ln-line__stop::after { content: ""; position: absolute; left: 4px; top: 4px; width: 17px; height: 17px; border-radius: 50%; box-sizing: border-box; border: 4px solid var(--c); background: var(--ln-panel); }
.ln-line__stop.is-passed::after { background: var(--c); }
.ln-line__stop.is-next::after { box-shadow: 0 0 0 4px color-mix(in srgb, var(--c) 22%, transparent); }
.ln-line__stop.is-cancelled::after { border-color: var(--ln-red); background: var(--ln-panel); }
.ln-line__stop.is-xfer::after { width: 22px; height: 22px; left: 1.5px; top: 1.5px; box-shadow: 0 0 0 2px var(--ln-panel), 0 0 0 4px var(--ln-ink); }

/* horizontal pipeline: <div class="ln-pipe"><a class="ln-pipe__st">… */
.ln-pipe { --c: var(--ln-l-jobs); position: relative; display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); padding: 18px 8px 16px; }
.ln-pipe::before { content: ""; position: absolute; left: calc(100% / var(--n, 4) / 2 + 8px - 2px); right: calc(100% / var(--n, 4) / 2 + 8px - 2px); bottom: 26px; height: 6px; border-radius: 3px; background: var(--c); }
.ln-pipe__st { position: relative; display: grid; justify-items: center; gap: 2px; padding: 0 4px 0; text-decoration: none; color: var(--ln-ink); border: 0; background: none; cursor: pointer; font: inherit; }
.ln-pipe__st b { font-size: var(--ln-fs-2xl); font-weight: 800; line-height: 1.1; }
.ln-pipe__st span { font-size: var(--ln-fs-sm); color: var(--ln-ink-2); text-align: center; }
.ln-pipe__st i { width: 22px; height: 22px; border-radius: 50%; background: var(--ln-panel); border: 5px solid var(--c); margin-top: 8px; position: relative; z-index: 1; box-sizing: border-box; transition: transform var(--ln-fast) ease; }
.ln-pipe__st:hover { color: var(--ln-ink); }
.ln-pipe__st:hover i { transform: scale(1.15); }
.ln-pipe__st.is-active i, .ln-pipe__st[aria-pressed="true"] i { background: var(--ln-ink); }
.ln-pipe__st.is-active span, .ln-pipe__st[aria-pressed="true"] span { color: var(--ln-ink); font-weight: 700; }

/* Bewerbungen quick-add: on phones the link field gets the full width, actions wrap below */
@media (max-width: 575.98px) {
  .jobs-quickadd .input-group { flex-wrap: wrap; row-gap: 8px; }
  .jobs-quickadd .input-group > .input-group-text { flex: 0 0 42px; justify-content: center; }
  .jobs-quickadd .input-group > .form-control { flex: 1 1 calc(100% - 42px); min-width: 0; border-radius: 0 var(--ln-r) var(--ln-r) 0 !important; }
  .jobs-quickadd .input-group > .btn { flex: 1 1 auto; border-radius: var(--ln-r) !important; margin-left: 0 !important; }
  .jobs-quickadd .input-group > .btn + .btn { margin-left: 8px !important; }
}

/* Bewerbungen pipeline panel */
.ln-jobs-pipe { position: relative; padding: 4px 12px 10px; }
.ln-pipe__out { display: flex; justify-content: flex-end; align-items: center; gap: 8px; font-size: var(--ln-fs-sm); color: var(--ln-ink-2); padding: 0 8px; }
.ln-pipe__out::before { content: ""; width: 14px; height: 14px; border-radius: 50%; border: 4px solid var(--ln-grey); box-sizing: border-box; }
.ln-pipe__out-n { font-weight: 800; color: var(--ln-ink); }
div.ln-pipe__st { cursor: default; }

/* empty state */
.ln-empty { padding: var(--ln-s8) var(--ln-s4); text-align: center; color: var(--ln-ink-2); }
.ln-empty svg { width: 28px; height: 28px; color: var(--ln-ink-3); margin-bottom: 8px; }
.ln-empty b { display: block; color: var(--ln-ink); font-size: var(--ln-fs-md); margin-bottom: 2px; }

/* ----------------------------------------------------------------- charts */
canvas { max-width: 100%; }
.apexcharts-tooltip, .apexcharts-menu { background: var(--ln-panel) !important; color: var(--ln-ink) !important; border-color: var(--ln-line-2) !important; }

/* -------------------------------------------------------- AdminKit leftovers */
.navbar-bg { background: var(--ln-panel); }
.hamburger, .hamburger::before, .hamburger::after { background: var(--ln-ink-2); }
.stat-card, .health-gauge-card, .dashboard-hero { box-shadow: none !important; }
.simplebar-scrollbar::before { background: var(--ln-rail-3); }


/* ------------------------------------------------------------ sign-in pages */
.ln-auth-body { min-height: 100vh; background: var(--ln-ground); }
.ln-auth { display: grid; grid-template-columns: minmax(320px, 5fr) 7fr; min-height: 100vh; }
.ln-auth__rail { background: var(--ln-rail); color: var(--ln-rail-ink); padding: var(--ln-s8) var(--ln-s10); display: flex; flex-direction: column; gap: var(--ln-s8); }
.ln-auth__brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: var(--ln-fs-lg); }
.ln-auth__map { width: 100%; max-width: 440px; height: auto; margin: auto 0; }
.ln-auth__tag { color: var(--ln-rail-ink-2); font-size: var(--ln-fs-md); max-width: 32ch; margin: 0; }
.ln-auth__panel { display: grid; place-items: center; padding: var(--ln-s10) var(--ln-s6); }
.ln-auth__form { width: min(380px, 100%); }
.ln-auth__form h1 { font-size: var(--ln-fs-2xl); margin: 0 0 6px; }
.ln-auth__lead { color: var(--ln-ink-2); margin: 0 0 var(--ln-s6); }
.ln-auth__qr { display: grid; place-items: center; padding: var(--ln-s4); background: #fff; border: 1px solid var(--ln-line); border-radius: var(--ln-r-lg); }
.ln-otp-input { text-align: center; letter-spacing: 0.35em; font-weight: 700; font-size: var(--ln-fs-xl); font-variant-numeric: tabular-nums; }
@media (max-width: 860px) {
  .ln-auth { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; }
  .ln-auth__rail { padding: var(--ln-s5) var(--ln-s5) var(--ln-s4); gap: var(--ln-s3); }
  .ln-auth__map { max-width: 260px; margin: 0; }
  .ln-auth__tag { display: none; }
  .ln-auth__panel { place-items: start center; padding: var(--ln-s8) var(--ln-s5); }
}

/* -------------------------------------------------------------- responsive */
@media (max-width: 1199.98px) {
  .content { padding: var(--ln-s5) var(--ln-s5) var(--ln-s10); }
  .ln-topbar { padding: 10px var(--ln-s5); }
}
@media (max-width: 991.98px) {
  .sidebar { position: fixed; top: 0; bottom: 0; left: 0; margin-left: calc(-1 * var(--ln-rail-w)); z-index: 1045; }
  .sidebar.collapsed { margin-left: 0; box-shadow: var(--ln-shadow-overlay); }
  .ln-rail-scrim { position: fixed; inset: 0; z-index: 1040; background: var(--ln-scrim); border: 0; padding: 0; }
  .ln-menu-btn { display: inline-grid; }
  .ln-cmd { flex: 1 1 auto; }
  .ln-cmd kbd { display: none; }
  .ln-clock { display: none; }
}
@media (max-width: 767.98px) {
  html { font-size: 16px; }
  .content { padding: var(--ln-s4) var(--ln-s4) calc(84px + env(safe-area-inset-bottom, 0px)); }
  .ln-topbar { padding: 8px var(--ln-s3); gap: var(--ln-s2); min-height: 56px; }
  .ln-status__text { display: none; }
  .ln-theme { display: none; }
  h1, .h1, h3, .h3 { font-size: var(--ln-fs-xl); }
  .card-body { padding: var(--ln-s4); }
  .card-header { padding: 12px var(--ln-s4); }
  .table > :not(caption) > * > * { padding: 9px 10px; }
  .ln-page-head__actions { margin-left: 0; width: 100%; }
  .modal-dialog { margin: 12px; }
  .booking-modal-dialog { max-width: calc(100vw - 16px) !important; }
  .ln-tabbar {
    display: grid; grid-template-columns: repeat(var(--n, 4), minmax(0, 1fr));
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 1030;
    background: var(--ln-rail); padding: 6px max(4px, env(safe-area-inset-left, 0px)) calc(6px + env(safe-area-inset-bottom, 0px)) max(4px, env(safe-area-inset-right, 0px));
    border-top: 1px solid color-mix(in srgb, var(--ln-rail-ink) 8%, transparent);
  }
  .ln-tabbar a, .ln-tabbar button { position: relative; display: grid; justify-items: center; gap: 2px; padding: 4px 0; border: 0; background: none; color: var(--ln-rail-ink-2); font-size: 11.5px; font-weight: 600; text-decoration: none; cursor: pointer; min-height: 44px; }
  .ln-tabbar svg { width: 20px; height: 20px; }
  .ln-tabbar [aria-current="page"] { color: var(--ln-rail-ink); font-weight: 700; }
  .ln-tabbar [aria-current="page"]::before { content: ""; position: absolute; top: -6px; left: 28%; right: 28%; height: 3px; border-radius: 0 0 3px 3px; background: var(--c); }
  .footer { padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px)); }
}

/* ----------------------------------------------------------------- motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 1ms !important; animation-iteration-count: 1 !important; transition-duration: 1ms !important; scroll-behavior: auto !important; }
}

/* ------------------------------------------------------------------ print */
@media print {
  .sidebar, .ln-topbar, .ln-tabbar, .footer { display: none !important; }
  body, .main, .wrapper { background: #fff !important; }
  .card { border-color: #ccc; }
}
