:root {
    --primary-blue: #1E3884;
    --secondary-blue: #2096CB;
    --accent-orange: #FFA800;

    /* Module color tokens */
    --module-drift: #2563eb;
    --module-sager: #16a34a;
    --module-admin: #92700a;

    --primary-blue-hover: #162a63;
    --secondary-blue-hover: #1a7ba6;
    --accent-orange-hover: #e69700;

    /* ── Theme tokens (light defaults) ── */
    --bg-app: #f5f6fa;
    --bg-topbar: #f8f9fc;
    --surface: #ffffff;
    --surface-alt: #f8f9fa;
    --surface-hover: #e8ecf1;
    --text-primary: #212121;
    --text-main: #212121;
    --text-muted: #6b7280;
    --text-inverse: #ffffff;
    --border-color: #dee2e6;
    --border-strong: #d0d5e0;
    --row-alt: #f9fafc;
    --row-hover: #eef2ff;
    --shadow-card: 0 1px 4px rgba(0,0,0,0.06);
    --shadow-dialog: 0 10px 40px rgba(0,0,0,0.2);
    --kbd-bg: #f3f4f6;
    --overlay-bg: rgba(0,0,0,0.45);

    /* ── Semantic money/status colors ── */
    --color-positive: #0f5132;
    --color-negative: #b02a37;
    --color-neutral: var(--text-primary);
    --input-bg: #ffffff;

    /* ── Modal-aliases (semantiske alias til surface/tekst — for tydelighed) ── */
    --modal-bg: var(--surface);
    --modal-header-bg: var(--surface);
    --text-main: var(--text-primary);

    /* ── Form theme tokens ── */
    --form-border-color: #dee2e6;
    --form-focus-color: var(--primary-blue);
    --form-focus-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.18);
    --form-readonly-bg: #f8f9fa;
    --form-readonly-color: #495057;
}

/* ── Dark theme overrides ─────────────────────────
   Applied when <html data-theme="dark"> is set.
   Keeps accent blues/greens/reds for button semantics,
   but flips surfaces, text, borders, and rows. */
[data-theme="dark"] {
    --bg-app: #121826;
    --bg-topbar: #1a2234;
    --surface: #1e2740;
    --surface-alt: #253052;
    --surface-hover: #2d3a5e;
    --text-primary: #f5f5f5;
    --text-main: #f5f5f5;
    --text-muted: #a0aec0;
    --text-inverse: #121826;
    --border-color: #34405c;
    --border-strong: #425073;
    --row-alt: #1a2338;
    --row-hover: #2a3656;
    --shadow-card: 0 1px 4px rgba(0,0,0,0.35);
    --shadow-dialog: 0 10px 40px rgba(0,0,0,0.55);
    --kbd-bg: #2d3a5e;
    --overlay-bg: rgba(0,0,0,0.65);

    /* Semantic money/status colors — brighter for contrast on dark bg */
    --color-positive: #69F0AE;
    --color-negative: #FF5252;
    --color-neutral: var(--text-primary);
    --input-bg: #253052;

    --form-border-color: #425073;
    --form-readonly-bg: #253052;
    --form-readonly-color: #a0aec0;
    --form-focus-shadow: 0 0 0 0.2rem rgba(32, 150, 203, 0.25);

    color-scheme: dark;
}

html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    overflow-x: hidden;
    background-color: var(--bg-app);
    color: var(--text-primary);
    transition: background-color 0.3s ease, color 0.3s ease;
}

/* Smooth surface transitions on the big containers */
.detail-card, .detail-card-widget, .dialog-card, .dialog-card-wide,
.page-detail-bg, .top-bar, main, .main-content-area, .smart-grid,
table, .modal-content, .card {
    transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

a, .btn-link {
    color: var(--secondary-blue);
}

.btn-primary {
    color: #fff;
    background-color: var(--primary-blue);
    border-color: var(--primary-blue);
}

.btn-primary:hover {
    background-color: var(--primary-blue-hover);
    border-color: var(--primary-blue-hover);
}

.btn-signup {
    background-color: var(--accent-orange);
    border: none;
    color: #fff;
    font-weight: 600;
}

.btn-signup:hover {
    background-color: var(--accent-orange-hover);
    color: #fff;
}

/* ══════════════════════════════════════════════
   DARK MODE — Bootstrap & global element overrides
   ══════════════════════════════════════════════ */
[data-theme="dark"] .form-control,
[data-theme="dark"] .form-select,
[data-theme="dark"] textarea.form-control,
[data-theme="dark"] .form-floating > .form-control,
[data-theme="dark"] .form-floating > .form-select,
[data-theme="dark"] input.form-control,
[data-theme="dark"] select.form-select,
[data-theme="dark"] input[type="text"],
[data-theme="dark"] input[type="number"],
[data-theme="dark"] input[type="email"],
[data-theme="dark"] input[type="search"],
[data-theme="dark"] input[type="tel"],
[data-theme="dark"] input[type="url"],
[data-theme="dark"] textarea {
    background-color: var(--input-bg) !important;
    color: var(--text-primary) !important;
    border-color: var(--border-strong) !important;
}
[data-theme="dark"] .form-control:focus,
[data-theme="dark"] .form-select:focus,
[data-theme="dark"] textarea:focus,
[data-theme="dark"] textarea.form-control:focus {
    border-color: var(--secondary-blue) !important;
    box-shadow: 0 0 0 0.2rem rgba(32, 150, 203, 0.25) !important;
}
/* Labels for check/switch inputs must follow text-primary in dark mode */
[data-theme="dark"] .form-check-label,
[data-theme="dark"] label.form-label,
[data-theme="dark"] .form-label {
    color: var(--text-primary);
}
/* Bootstrap's text-danger/text-warning/text-success bruger meget mættede farver
   (#dc3545/#ffc107/#198754) der brænder for hårdt mod mørk baggrund. Vi dæmper
   dem til pastel-versioner i dark mode så required-asterisks, valideringstekst
   og status-badges bliver læsbare uden at "råbe". Bruges bl.a. i Styklister-
   modalens "Producent *" / "Model *" labels. */
[data-theme="dark"] .text-danger { color: #ff9a9a !important; }
[data-theme="dark"] .text-warning { color: #ffd980 !important; }
[data-theme="dark"] .text-success { color: #7ed4a3 !important; }
[data-theme="dark"] .form-control::placeholder,
[data-theme="dark"] .form-select::placeholder,
[data-theme="dark"] input::placeholder,
[data-theme="dark"] textarea::placeholder,
[data-theme="dark"] .form-floating > .form-control:focus::placeholder,
[data-theme="dark"] .form-floating > .form-control-plaintext:focus::placeholder {
    color: var(--text-primary);
}
[data-theme="dark"] .form-floating > label,
[data-theme="dark"] .form-floating > .form-control:focus ~ label,
[data-theme="dark"] .form-floating > .form-control:not(:placeholder-shown) ~ label,
[data-theme="dark"] .form-floating > .form-control:disabled ~ label,
[data-theme="dark"] .form-floating > .form-control[readonly] ~ label,
[data-theme="dark"] .form-floating > .form-select ~ label {
    color: var(--text-muted);
}
[data-theme="dark"] .form-control:disabled,
[data-theme="dark"] .form-control[readonly],
[data-theme="dark"] .form-select:disabled {
    background-color: var(--surface);
    color: var(--text-muted);
}
[data-theme="dark"] .input-group-text {
    background-color: var(--surface);
    color: var(--text-muted);
    border-color: var(--border-strong);
}
[data-theme="dark"] .modal-content,
[data-theme="dark"] .card,
[data-theme="dark"] .dropdown-menu,
[data-theme="dark"] .list-group-item {
    background-color: var(--surface);
    color: var(--text-primary);
    border-color: var(--border-color);
}
/* Bootstrap's .dropdown-item bruger #212529 som default color — bliver
   ulæselig som rødbrun mudder på vores mørke surface. Sæt eksplicit
   text-primary + hover/active-tilstande i dark mode. Bruges bl.a. i
   ProductAutocomplete's søgeforslag. */
[data-theme="dark"] .dropdown-item {
    color: var(--text-primary);
}
[data-theme="dark"] .dropdown-item:hover,
[data-theme="dark"] .dropdown-item:focus {
    background-color: var(--row-hover);
    color: var(--text-primary);
}
[data-theme="dark"] .dropdown-item.active,
[data-theme="dark"] .dropdown-item:active {
    background-color: var(--secondary-blue);
    color: #fff;
}
[data-theme="dark"] .dropdown-item.disabled,
[data-theme="dark"] .dropdown-item:disabled {
    color: var(--text-muted);
    background-color: transparent;
}
/* text-muted inde i active-item skal være læselig hvid-transparent */
[data-theme="dark"] .dropdown-item.active .text-muted,
[data-theme="dark"] .dropdown-item.active small.text-muted {
    color: rgba(255, 255, 255, 0.85);
}
/* Active/keyboard-focused list-group item — synlig tastatur-selektion både
   i light og dark mode. Bruges bl.a. i vare/materialesøg og dropdown-lister. */
.list-group-item.active,
.list-group-item-action.active,
.list-group-item-action:hover {
    background-color: var(--secondary-blue) !important;
    border-color: var(--secondary-blue) !important;
    color: #fff !important;
}
.list-group-item-action:hover:not(.active) {
    background-color: var(--row-hover) !important;
    color: var(--text-primary) !important;
    border-color: var(--border-color) !important;
}
.list-group-item.active .text-muted,
.list-group-item-action.active .text-muted,
.list-group-item-action.active small.text-muted {
    color: rgba(255, 255, 255, 0.85) !important;
}
[data-theme="dark"] .modal-header,
[data-theme="dark"] .modal-footer {
    border-color: var(--border-color);
}
[data-theme="dark"] .table {
    color: var(--text-primary);
    --bs-table-bg: var(--surface);
    --bs-table-color: var(--text-primary);
    --bs-table-striped-bg: var(--row-alt);
    --bs-table-striped-color: var(--text-primary);
    --bs-table-hover-bg: var(--row-hover);
    --bs-table-hover-color: var(--text-primary);
    --bs-table-border-color: var(--border-color);
}
/* Force light text on all table cells in dark mode (Bootstrap's per-cell
   --bs-table-color sometimes resolves to its own default). Inline styles with
   var(--color-positive)/--color-negative still win because they have higher
   specificity than this stylesheet rule (no !important here). */
[data-theme="dark"] .table > tbody > tr > td,
[data-theme="dark"] .table > tbody > tr > th,
[data-theme="dark"] .table > thead > tr > th,
[data-theme="dark"] .table > tfoot > tr > td,
[data-theme="dark"] .table > tfoot > tr > th {
    color: var(--text-primary);
}
[data-theme="dark"] .table-light,
[data-theme="dark"] .table > thead.table-light,
[data-theme="dark"] .table thead.table-light th,
[data-theme="dark"] .table-light > th,
[data-theme="dark"] .table-light > td {
    --bs-table-bg: var(--surface-alt);
    background-color: var(--surface-alt);
    color: var(--text-primary);
    border-color: var(--border-color);
}
/* Sektionsrækker (fx "Timer" / "Materialer") i faktureret/tilbud-linjer:
   Bootstrap's .table-secondary giver en lys grå der ikke ses i dark mode.
   Override til samme overflade-token så sektionen stadig er visuelt
   distinkt uden at bryde ud af temaet. */
[data-theme="dark"] .table-secondary,
[data-theme="dark"] .table-secondary > th,
[data-theme="dark"] .table-secondary > td,
[data-theme="dark"] tr.table-secondary > * {
    --bs-table-bg: var(--surface-alt);
    --bs-table-color: var(--text-primary);
    background-color: var(--surface-alt) !important;
    color: var(--text-primary) !important;
    border-color: var(--border-color);
}
/* Neutral rows in BOTH light and dark mode — Bootstrap's pale tints
   (.table-success/.table-danger/etc.) are too noisy in our economy grids.
   Use the standard surface/text color and let semantic +/- value coloring
   carry the meaning instead. */
.table-success,
.table-success > th,
.table-success > td,
.table-danger,
.table-danger > th,
.table-danger > td,
.table-warning,
.table-warning > th,
.table-warning > td,
.table-info,
.table-info > th,
.table-info > td,
.table-primary,
.table-primary > th,
.table-primary > td {
    --bs-table-bg: var(--surface) !important;
    --bs-table-color: var(--text-primary) !important;
    --bs-table-color-state: var(--text-primary) !important;
    --bs-table-bg-state: var(--surface) !important;
    background-color: var(--surface) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] hr {
    border-color: var(--border-color);
}
[data-theme="dark"] .text-muted,
[data-theme="dark"] .form-text,
[data-theme="dark"] .small.text-muted,
[data-theme="dark"] small.text-muted {
    color: var(--text-muted) !important;
}
[data-theme="dark"] .btn-outline-secondary {
    color: var(--text-primary);
    border-color: var(--border-strong);
}
[data-theme="dark"] .btn-outline-secondary:hover {
    background-color: var(--surface-hover);
    color: var(--text-primary);
    border-color: var(--border-strong);
}
[data-theme="dark"] kbd, [data-theme="dark"] .kbd {
    background-color: var(--kbd-bg);
    color: var(--text-primary);
    border-color: var(--border-strong);
}
[data-theme="dark"] .alert-info,
[data-theme="dark"] .alert-secondary {
    background-color: var(--surface-alt);
    color: var(--text-primary);
    border-color: var(--border-color);
}
[data-theme="dark"] .alert-danger {
    background-color: rgba(220, 53, 69, 0.18);
    color: var(--text-primary);
    border-color: rgba(220, 53, 69, 0.45);
}
[data-theme="dark"] .alert-warning {
    background-color: rgba(255, 193, 7, 0.15);
    color: var(--text-primary);
    border-color: rgba(255, 193, 7, 0.4);
}
[data-theme="dark"] .alert-success {
    background-color: rgba(25, 135, 84, 0.18);
    color: var(--text-primary);
    border-color: rgba(25, 135, 84, 0.45);
}
[data-theme="dark"] .alert-primary {
    background-color: rgba(13, 110, 253, 0.18);
    color: var(--text-primary);
    border-color: rgba(13, 110, 253, 0.45);
}

/* Form switch / checkbox in dark mode — Bootstrap defaults to white bg which
   disappears against dark surfaces. Use surface tokens so the track is visible. */
[data-theme="dark"] .form-check-input {
    background-color: var(--surface-alt);
    border-color: var(--border-strong);
}
[data-theme="dark"] .form-check-input:checked {
    background-color: var(--secondary-blue);
    border-color: var(--secondary-blue);
}
[data-theme="dark"] .form-switch .form-check-input {
    /* Bootstrap's switch uses an embedded SVG circle colored rgba(0,0,0,.25) — swap for a light one */
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23e5e7eb'/%3e%3c/svg%3e");
}
[data-theme="dark"] .form-switch .form-check-input:checked {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
}
[data-theme="dark"] .form-check-input:focus {
    border-color: var(--secondary-blue);
    box-shadow: 0 0 0 0.2rem rgba(32, 150, 203, 0.25);
}

/* ══════════════════════════════════════════════
   GLOBAL FORM STYLES — Bootstrap 5 foundation
   ══════════════════════════════════════════════ */

/* ── Base input & select border ── */
.form-control,
.form-select {
    border-color: var(--form-border-color);
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

/* ── Focus state: blue ring matching logo ── */
.form-control:focus,
.form-select:focus {
    border-color: var(--form-focus-color);
    box-shadow: var(--form-focus-shadow);
}

.btn:focus,
.btn:active:focus,
.btn-link.nav-link:focus,
.form-check-input:focus {
    box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem var(--secondary-blue);
}

/* ── Read-only & disabled inputs ── */
.form-control:disabled,
.form-control[readonly],
.form-select:disabled {
    background-color: var(--form-readonly-bg);
    color: var(--form-readonly-color);
    opacity: 1;
    border-color: var(--form-border-color);
}

/* ── Floating label fix: prevent overlap ── */
.form-floating > .form-control,
.form-floating > .form-select {
    height: calc(3.5rem + 2px);
    padding: 1.625rem 0.75rem 0.625rem;
}

.form-floating > label {
    padding: 1rem 0.75rem;
    pointer-events: none;
    color: #6c757d;
    transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
}

/* Label shrinks when field has value or focus */
.form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label,
.form-floating > .form-control:disabled ~ label,
.form-floating > .form-control[readonly] ~ label,
.form-floating > .form-select ~ label {
    opacity: 0.65;
    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
}

/* Kill the pseudo-element background that causes overlap on filled inputs */
.form-floating > .form-control:focus ~ label::after,
.form-floating > .form-control:not(:placeholder-shown) ~ label::after,
.form-floating > .form-control:disabled ~ label::after,
.form-floating > .form-control[readonly] ~ label::after,
.form-floating > .form-select ~ label::after {
    display: none;
}

/* ── Consistent spacing for form groups ── */
.form-floating.mb-3,
.form-floating.mb-2 {
    /* Bootstrap utility already handles this; ensure no override */
}

/* ── Lookup / action button (outline-primary style) ── */
.btn-action-lookup {
    border-color: var(--primary-blue);
    color: var(--primary-blue);
    font-weight: 600;
    white-space: nowrap;
}

.btn-action-lookup:hover {
    background-color: var(--primary-blue);
    border-color: var(--primary-blue);
    color: #fff;
}

/* ── Standard form footer: Cancel left, Save right ── */
.form-footer-actions {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: 1.5rem;
    padding-top: 1rem;
    border-top: 1px solid var(--form-border-color);
}

.form-footer-actions .btn-primary::after {
    content: " (Ctrl+S)";
    font-size: 0.75em;
    opacity: 0.7;
    font-weight: normal;
}

/* ══════════════════════════════════════════════
   END GLOBAL FORM STYLES
   ══════════════════════════════════════════════ */

.content {
    padding-top: 1.1rem;
}

h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

/* Placeholder text: hidden by default in floating-label, visible on focus */
.form-floating > .form-control::placeholder,
.form-floating > .form-control-plaintext::placeholder {
    color: transparent;
}

.form-floating > .form-control:focus::placeholder,
.form-floating > .form-control-plaintext:focus::placeholder {
    color: var(--bs-secondary-color);
}

/* ── Global dialog/modal styles ── */
.dialog-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: 1rem;
    animation: overlay-fade-in 0.2s ease-out;
}

.dialog-card {
    background: var(--surface);
    color: var(--text-primary);
    border-radius: 0.75rem;
    width: 100%;
    max-width: 520px;
    /* Scroll-sikker: header/footer holdes fast (flex:none), kun .dialog-body
       scroller. Sikrer at gem-/luk-knapper altid er synlige uanset viewport.
       (handoff "Håndværker design optimering 4" — scroll-krav for ALLE modaler.) */
    max-height: calc(100vh - 80px);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
    box-shadow: var(--shadow-dialog);
    animation: dialog-scale-in 0.2s ease-out;
}

.dialog-card-wide {
    max-width: 800px;
}

/* Padding flyttet fra .dialog-card til de tre interne sektioner så
   header/footer kan holdes fast og kun body scroller. Bevarer samme
   visuelle 2rem inset-rundt. */
.dialog-card > .dialog-header {
    flex: none;
    padding: 2rem 2rem 0;
    margin-bottom: 0;
}

.dialog-card > .dialog-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: 1rem 2rem;
}

.dialog-card > .modal-footer-actions {
    flex: none;
    padding: 1rem 2rem 1.5rem;
    background: var(--surface);
}

/* "Håndværker design optimering"-modal — bredere kort (900px), større radius,
   ingen indre padding så TaskLineModal selv kan tegne header/body/footer
   med præcis kontrol over hver sektions spacing. */
.dialog-card-wider {
    max-width: 900px;
    max-height: calc(100vh - 64px);
    border-radius: 18px;
    padding: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.dialog-card h4 {
    color: var(--primary-blue);
    font-weight: 700;
    margin-bottom: 0.5rem;
}

.dialog-header {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1rem;
    gap: 0.5rem;
}

/* ── Two-column modal grid ── */
.modal-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0 2rem;
    margin-top: 0.5rem;
}

.modal-col {
    min-width: 0;
}

.modal-footer-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 0.5rem;
    margin-top: 1rem;
    padding-top: 1rem;
    border-top: 1px solid var(--form-border-color);
}

.modal-footer-actions .btn-primary::after {
    content: " (Ctrl+S)";
    font-size: 0.75em;
    opacity: 0.7;
    font-weight: normal;
}

/* ── Modal form grid spacing ── */
.modal-grid .form-floating {
    margin-bottom: 0.75rem;
}

/* ── Animations ── */
@keyframes overlay-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes dialog-scale-in {
    from {
        opacity: 0;
        transform: scale(0.95);
    }
    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* ── Mobile ── */
@media (max-width: 768px) {
    .dialog-card,
    .dialog-card-wide {
        max-width: 100%;
    }

    .modal-grid {
        grid-template-columns: 1fr;
    }

    /* Full-screen modal on mobile */
    .dialog-overlay {
        padding: 0;
        align-items: stretch;
    }

    .dialog-card,
    .dialog-card-wide {
        max-height: 100vh;
        max-height: 100dvh;
        border-radius: 0;
        height: 100%;
    }

    /* Touch-friendly buttons: min 44px tap target */
    .btn {
        min-height: 44px;
    }

    /* Modal footer: stack buttons vertically */
    .modal-footer-actions,
    .form-footer-actions {
        flex-direction: column-reverse;
        gap: 0.5rem;
    }

    .modal-footer-actions .btn,
    .form-footer-actions .btn {
        width: 100%;
    }

    /* Responsive images */
    img {
        max-width: 100%;
        height: auto;
    }
}

.cursor-pointer { cursor: pointer; }

/* Hold-to-drag feedback: når brugeren har holdt knappen inde i 200ms på en
   task-blok eller bucket-kort, skifter cursor til grabbing for at signalere
   at drag-gestusen nu er aktiv. Matcher window.__holdToDrag i App.razor. */
.drag-ready { cursor: grabbing !important; }
.drag-ready.task-block,
.drag-ready.bucket-card,
.drag-ready.bucket-card-compact {
    box-shadow: 0 0 0 2px var(--secondary-blue), 0 4px 12px rgba(0, 0, 0, 0.25) !important;
    transition: box-shadow 0.1s;
}

/* ══════════════════════════════════════════════
   GRID ACTION MENU — shared across all list pages
   ══════════════════════════════════════════════ */

/* ── Inline action button group (inside grid row) ── */
.action-btn-group {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    white-space: nowrap;
}

.action-icon-btn {
    border: none;
    background: none;
    cursor: pointer;
    font-size: 1rem;
    padding: 0.3rem 0.4rem;
    border-radius: 4px;
    line-height: 1;
    color: var(--text-primary);
    transition: background 0.15s, color 0.15s;
}

.action-icon-btn:hover { background: var(--surface-hover); }
.action-edit-btn:hover { color: var(--primary-blue, #1E3884); background: rgba(30, 56, 132, 0.08); }
.action-copy-btn:hover { color: #198754; background: rgba(25, 135, 84, 0.08); }
.action-delete-btn:hover { color: #dc3545; background: rgba(220, 53, 69, 0.08); }
.action-more-btn:hover { color: var(--text-primary); background: var(--surface-hover); }

[data-theme="dark"] .action-edit-btn:hover { color: var(--secondary-blue); background: rgba(32, 150, 203, 0.15); }
[data-theme="dark"] .action-copy-btn:hover { color: #4ade80; background: rgba(74, 222, 128, 0.15); }
[data-theme="dark"] .action-delete-btn:hover { color: #f87171; background: rgba(248, 113, 113, 0.15); }

.action-menu-anchor {
    position: relative;
    display: inline-block;
}

.action-overlay {
    position: fixed;
    inset: 0;
    z-index: 1059;
    background: transparent;
}

.action-menu-dropdown {
    position: fixed;
    z-index: 1060;
    background: var(--surface);
    border: 1px solid var(--border-color);
    border-radius: 0.5rem;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
    min-width: 200px;
    padding: 0.25rem 0;
}

.action-menu-item {
    display: block;
    width: 100%;
    padding: 0.5rem 1rem;
    border: none;
    background: none;
    cursor: pointer;
    font-size: 0.875rem;
    color: var(--text-primary);
    text-align: left;
    white-space: nowrap;
}

.action-menu-item:hover { background: var(--row-hover); }
.action-menu-danger { color: #dc3545; }
.action-menu-danger:hover { background: rgba(220, 53, 69, 0.08); }
[data-theme="dark"] .action-menu-danger { color: #f87171; }
[data-theme="dark"] .action-menu-danger:hover { background: rgba(248, 113, 113, 0.15); }
.action-menu-separator {
    height: 1px;
    background: var(--border-color);
    margin: 4px 8px;
}

/* ── Mobile: bottom sheet action menu ── */
@media (max-width: 768px) {
    .desktop-only { display: none; }
    .action-more-btn { min-width: 44px; min-height: 44px; font-size: 1.3rem; }
    .action-menu-dropdown {
        position: fixed;
        bottom: 0; left: 0; right: 0; top: auto;
        border-radius: 1rem 1rem 0 0;
        min-width: 100%;
        padding: 0.5rem 0 env(safe-area-inset-bottom, 0.5rem);
        box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.18);
        animation: slideUp 0.2s ease-out;
    }
    .action-menu-item {
        min-height: 48px;
        display: flex;
        align-items: center;
        padding: 0.75rem 1.25rem;
        font-size: 1rem;
    }
    .action-overlay { background: rgba(0, 0, 0, 0.3); }
}

@keyframes slideUp {
    from { transform: translateY(100%); }
    to   { transform: translateY(0); }
}

/* ══════════════════════════════════════════════
   END GRID ACTION MENU
   ══════════════════════════════════════════════ */

/* ── Detail page layout (KundeDetalje / SagDetalje) ── */
.page-detail-bg {
    background: var(--bg-app);
    color: var(--text-primary);
    min-height: calc(100vh - 4rem);
    padding: 0 0 2rem;
}

/* Address textarea — form-floating with room for label + 3 lines */
.form-floating > .address-textarea {
    resize: none;
    line-height: 1.5;
    height: 7.5rem;
    padding-top: 1.75rem;
}

.form-floating > .address-textarea ~ label,
.form-floating > .address-textarea:focus ~ label,
.form-floating > .address-textarea:not(:placeholder-shown) ~ label {
    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
    opacity: 0.65;
}

.form-floating > .address-textarea ~ label::after,
.form-floating > .address-textarea:focus ~ label::after,
.form-floating > .address-textarea:not(:placeholder-shown) ~ label::after {
    display: none;
}

/* ── DAWA Autocomplete (shared) ── */
.autocomplete-dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 1050;
    background: var(--surface);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    border-radius: 0 0 0.375rem 0.375rem;
    max-height: 250px;
    overflow-y: auto;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

.autocomplete-item {
    padding: 0.5rem 0.75rem;
    cursor: pointer;
    font-size: 0.9rem;
    color: var(--text-primary);
}

.autocomplete-item:hover {
    background-color: var(--row-hover);
}

.autocomplete-item.active {
    background-color: rgba(32, 150, 203, 0.25);
    border-left: 3px solid var(--secondary-blue);
    padding-left: calc(0.75rem - 3px);
    font-weight: 500;
}

@media (max-width: 768px) {
    .autocomplete-item {
        min-height: 48px;
        padding: 0.75rem;
    }

    .autocomplete-dropdown {
        max-height: 200px;
    }
}

.detail-sticky-header {
    position: sticky;
    top: 0;
    z-index: 10;
    background: var(--surface);
    color: var(--text-primary);
    border-bottom: 1px solid var(--border-color);
    padding: 0.75rem 1.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.5rem;
}

.detail-header-left {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    min-width: 0;
}

.detail-header-left h1 {
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--primary-blue);
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.action-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    flex-shrink: 0;
}

.action-toolbar .btn {
    white-space: nowrap;
}

.action-toolbar-save {
    display: flex;
    gap: 0.5rem;
    margin-left: auto;
}

/* ── Quote-specific toolbar (TilbudDetalje) ── */
.quote-action-toolbar {
    flex-shrink: 0;
}

.quote-action-toolbar .btn {
    white-space: nowrap;
}

.detail-dashboard {
    display: grid;
    grid-template-columns: 1fr 350px;
    gap: 1.5rem;
    padding: 0 1.5rem;
    max-width: 1400px;
    min-width: 0;
}

.detail-card {
    background: var(--surface);
    color: var(--text-primary);
    border-radius: 8px;
    padding: 1.5rem 2rem;
    box-shadow: var(--shadow-card);
}

.detail-card .section-header {
    font-size: 1rem;
    font-weight: 600;
    color: var(--primary-blue);
    border-bottom: 2px solid var(--primary-blue);
    padding-bottom: 0.4rem;
    margin-bottom: 1rem;
    margin-top: 1.5rem;
}

[data-theme="dark"] .detail-card .section-header {
    color: var(--secondary-blue);
    border-bottom-color: var(--secondary-blue);
}

.detail-card .section-header:first-child {
    margin-top: 0;
}

.detail-form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem 1.5rem;
    align-items: start;
}

.detail-form-grid .full-width {
    grid-column: 1 / -1;
}

.detail-form-footer {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 0.5rem;
    padding-top: 1.5rem;
    margin-top: 1.5rem;
    border-top: 1px solid var(--form-border-color);
}

.detail-widgets {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.detail-card-widget {
    min-height: 200px;
    background: var(--surface);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    border-radius: 8px;
    padding: 1.25rem 1.5rem;
    box-shadow: var(--shadow-card);
}

[data-theme="dark"] .detail-card-widget {
    background: var(--surface);
    border-color: var(--border-color);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
}

/* ── Tab Navigation ── */
.detail-tabs {
    position: sticky;
    top: 52px; /* below sticky header */
    z-index: 9;
    background: var(--surface);
    border-bottom: 2px solid var(--border-color);
    padding: 0 1.5rem;
    display: flex;
    gap: 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}

.detail-tabs::-webkit-scrollbar {
    display: none;
}

.detail-tab {
    padding: 0.75rem 1.25rem;
    font-size: 0.9rem;
    font-weight: 500;
    color: var(--text-muted);
    background: none;
    border: none;
    border-bottom: 3px solid transparent;
    cursor: pointer;
    white-space: nowrap;
    transition: color 0.15s, border-color 0.15s;
    margin-bottom: -2px;
}

.detail-tab:hover {
    color: var(--primary-blue);
}

.detail-tab.active {
    color: var(--primary-blue);
    border-bottom-color: var(--primary-blue);
    font-weight: 600;
}

/* ── Tab content area (replaces detail-dashboard) ── */
.detail-tab-content {
    padding: 1.5rem;
    max-width: 1400px;
}

/* ── Placeholder card for future tabs ── */
.tab-placeholder {
    text-align: center;
    padding: 3rem 2rem;
    color: #999;
}

.tab-placeholder-icon {
    font-size: 3rem;
    margin-bottom: 1rem;
    opacity: 0.4;
}

.tab-placeholder h4 {
    color: #666;
    margin-bottom: 0.5rem;
}

/* ── Inline note cards (used in KundeDetalje/SagDetalje) ── */
.note-inline-card {
    border: 1px solid #e8e8e8;
    border-radius: 0.375rem;
    padding: 0.75rem 1rem;
    margin-bottom: 0.5rem;
    transition: box-shadow 0.15s;
}

.note-inline-card:hover {
    box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06);
}

.note-inline-completed {
    opacity: 0.7;
    background: #f9f9f9;
}

.note-section-divider {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin: 1rem 0 0.5rem;
    color: #999;
    font-size: 0.8rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.note-section-divider::before,
.note-section-divider::after {
    content: "";
    flex: 1;
    height: 1px;
    background: #ddd;
}

/* ── Inline Checklist (KundeDetalje / SagDetalje) ── */
.note-inline-checklist {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    margin-top: 0.35rem;
    padding-top: 0.35rem;
    border-top: 1px solid #f0f0f0;
}

.note-inline-checklist-item {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.85rem;
    cursor: pointer;
    padding: 0.1rem 0;
}

.note-inline-checklist-item.done span {
    text-decoration: line-through;
    color: #999;
}

.note-inline-checklist-item input[type="checkbox"] {
    width: 0.9rem;
    height: 0.9rem;
    flex-shrink: 0;
    accent-color: #198754;
    cursor: pointer;
}

/* ══════════════════════════════════════════════
   RESPONSIVE MASTER PLAN BLUEPRINT
   ──────────────────────────────────────────────
   Breakpoints:
     992px  → Tablet: collapse grids, shrink headers
     768px  → Mobile: full-screen modals, stack buttons, touch targets
     576px  → Small phone: hide non-essential columns, compact UI

   Patterns:
     • All grids collapse to 1fr at ≤992px
     • All tab bars use overflow-x:auto + hidden scrollbar
     • All modals go full-screen at ≤768px
     • All button groups stack vertically at ≤768px
     • Min touch target: 44×44px at ≤768px
     • Detail header wraps actions below title at ≤768px
   ══════════════════════════════════════════════ */

@media (max-width: 992px) {
    .detail-dashboard {
        grid-template-columns: 1fr;
    }

    .detail-form-grid {
        grid-template-columns: 1fr;
    }

    /* ── Responsive header: wrap buttons below title on tablet/split-screen ── */
    .detail-sticky-header {
        flex-wrap: wrap;
        gap: 0.5rem;
        padding: 0.5rem 1rem;
    }

    .detail-header-left {
        flex: 1 1 auto;
        min-width: 200px;
    }

    .action-toolbar,
    .quote-action-toolbar {
        flex: 0 1 auto;
        justify-content: flex-start;
        gap: 0.5rem;
    }

    .detail-dashboard {
        padding: 0 1rem;
    }

    .detail-header-left h1 {
        font-size: 1.1rem;
    }

    .detail-tabs {
        padding: 0 1rem;
    }

    .detail-tab {
        padding: 0.6rem 1rem;
        font-size: 0.85rem;
    }

    .detail-tab-content {
        padding: 1rem;
    }
}

@media (max-width: 768px) {
    /* ── Detail sticky header: stack title and actions ── */
    .detail-sticky-header {
        flex-wrap: wrap;
        gap: 0.5rem;
        padding: 0.5rem 0.75rem;
    }

    .detail-header-left {
        width: 100%;
    }

    .action-toolbar,
    .quote-action-toolbar {
        width: 100%;
        justify-content: flex-start;
    }

    .action-toolbar .btn,
    .quote-action-toolbar .btn {
        font-size: 0.8rem;
        padding: 0.35rem 0.65rem;
    }

    /* ── Detail card: tighter padding ── */
    .detail-card {
        padding: 1rem;
    }

    .detail-card .section-header {
        font-size: 0.9rem;
    }

    /* ── Detail footer: stack buttons ── */
    .detail-form-footer {
        flex-direction: column-reverse;
        gap: 0.5rem;
    }

    .detail-form-footer .btn {
        width: 100%;
    }
}

/* ── File thumbnails & type icons ── */
.file-thumb-cell {
    vertical-align: middle;
    text-align: center;
    padding: 0.25rem !important;
}

.file-thumbnail {
    width: 50px;
    height: 50px;
    object-fit: cover;
    border-radius: 4px;
    cursor: pointer;
    border: 1px solid #dee2e6;
    transition: transform 0.15s, box-shadow 0.15s;
}

.file-thumbnail:hover {
    transform: scale(1.1);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}

.file-type-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 50px;
    height: 50px;
    border-radius: 4px;
    background: #e9ecef;
    color: #6c757d;
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    border: 1px solid #dee2e6;
}

.file-type-icon.file-type-pdf {
    background: #fde8e8;
    color: #dc3545;
    cursor: pointer;
    transition: transform 0.15s;
}

.file-type-icon.file-type-pdf:hover {
    transform: scale(1.1);
}
/* ── Toast Notifications ── */
.toast-container-top-right {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 9999;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    pointer-events: none;
}

.toast-item {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.75rem 1.25rem;
    border-radius: 0.5rem;
    color: #fff;
    font-size: 0.9rem;
    font-weight: 500;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
    pointer-events: auto;
    animation: toast-slide-in 0.3s ease-out;
    min-width: 250px;
    max-width: 420px;
}

.toast-item.toast-removing {
    animation: toast-slide-out 0.3s ease-in forwards;
}

.toast-success {
    background: #198754;
}

.toast-error {
    background: #dc3545;
}

.toast-icon {
    display: flex;
    flex-shrink: 0;
}

.toast-message {
    flex: 1;
}

@keyframes toast-slide-in {
    from {
        opacity: 0;
        transform: translateX(100%);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes toast-slide-out {
    from {
        opacity: 1;
        transform: translateX(0);
    }
    to {
        opacity: 0;
        transform: translateX(100%);
    }
}

@media (max-width: 768px) {
    .toast-container-top-right {
        left: 1rem;
    }

    .toast-item {
        min-width: auto;
        max-width: none;
    }
}

/* ── Row flash-highlight after save ── */
@keyframes row-flash {
    0%   { background-color: #fff9c4; }
    100% { background-color: transparent; }
}
tr.row-highlight,
tr.flash-highlight {
    animation: row-flash 2s ease-out;
}

/* "Klar til faktura" på sager-listen — gul fremhævning så bogholderiet
   kan se hvilke sager der venter på faktureret. */
tr.row-ready-invoice td {
    background: rgba(255, 193, 7, 0.18) !important;
}
tr.row-ready-invoice:hover td {
    background: rgba(255, 193, 7, 0.28) !important;
}
[data-theme="dark"] tr.row-ready-invoice td {
    background: rgba(245, 158, 11, 0.18) !important;
}
[data-theme="dark"] tr.row-ready-invoice:hover td {
    background: rgba(245, 158, 11, 0.28) !important;
}

/* Afsluttede/cancelled rækker — dæmpet */
tr.row-closed td { opacity: 0.65; }

/* ── Grid row keyboard focus ── */
tr[data-grid-row]:focus {
    outline: 2px solid var(--bs-primary);
    outline-offset: -2px;
    background-color: rgba(13, 110, 253, 0.1);
    box-shadow: inset 3px 0 0 var(--bs-primary);
}

/* ── Cancel confirmation dialog ── */
.cancel-confirm-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10100;
    animation: overlay-fade-in 0.15s ease;
}

.cancel-confirm-card {
    background: var(--surface);
    color: var(--text-primary);
    border-radius: 0.75rem;
    padding: 1.5rem 2rem;
    max-width: 420px;
    width: 90%;
    box-shadow: var(--shadow-dialog);
    animation: dialog-slide-in 0.2s ease;
}

.cancel-confirm-card h5 {
    margin-bottom: 0.75rem;
    color: var(--primary-blue);
    font-weight: 700;
}

[data-theme="dark"] .cancel-confirm-card h5 {
    color: var(--secondary-blue);
}

.cancel-confirm-card p {
    margin-bottom: 1.25rem;
    color: var(--text-muted);
}

.cancel-confirm-actions {
    display: flex;
    justify-content: flex-end;
    gap: 0.75rem;
}

.cancel-confirm-actions .btn-confirm-yes {
    background-color: var(--bs-danger, #dc3545);
    color: #fff;
    border: none;
    border-radius: 0.375rem;
    padding: 0.4rem 1.25rem;
    font-weight: 600;
    cursor: pointer;
}

.cancel-confirm-actions .btn-confirm-yes:hover {
    opacity: 0.9;
}

.cancel-confirm-actions .btn-confirm-no {
    background: transparent;
    color: var(--text-primary);
    border: 1px solid var(--border-strong);
    border-radius: 0.375rem;
    padding: 0.4rem 1.25rem;
    cursor: pointer;
}

.cancel-confirm-actions .btn-confirm-no:hover {
    background: var(--surface-hover);
}

/* ── Delete confirmation dialog ── */
.delete-confirm-card {
    background: var(--surface);
    color: var(--text-primary);
    border-radius: 0.75rem;
    padding: 0;
    max-width: 420px;
    width: 90%;
    box-shadow: var(--shadow-dialog);
    animation: dialog-slide-in 0.2s ease;
    overflow: hidden;
}

.delete-confirm-stripe {
    height: 4px;
    background: var(--bs-danger, #dc3545);
    border-radius: 0.75rem 0.75rem 0 0;
}

.delete-confirm-card h5 {
    margin: 0 2rem 0.75rem;
    color: var(--bs-danger, #dc3545);
    font-weight: 700;
    font-size: 1.1rem;
}

.delete-confirm-card p {
    margin: 0 2rem 1.25rem;
    color: var(--text-primary);
    line-height: 1.45;
}

.delete-confirm-card p strong { color: var(--text-primary); font-weight: 600; }

.delete-confirm-body {
    position: relative;
    padding: 1.5rem 0 0;
}

.delete-confirm-icon {
    position: absolute;
    top: 1.2rem;
    right: 1.5rem;
    font-size: 1.4rem;
    line-height: 1;
    opacity: 0.9;
}

.delete-confirm-card .cancel-confirm-actions {
    padding: 0 2rem 1.5rem;
    align-items: center;
}

/* Tastatur-hint-badges på knapperne i delete-dialogen. Indlejret i knappen
   for at kommunikere genvejen (Enter/Esc) uden mus-hover eller tooltip. */
.cancel-confirm-actions .kbd-hint {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.1rem;
    height: 1.35rem;
    padding: 0 0.4rem;
    margin-left: 0.5rem;
    border-radius: 4px;
    border: 1px solid var(--border-color);
    background: var(--surface-alt);
    color: var(--text-muted);
    font-size: 0.7rem;
    font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    letter-spacing: 0.02em;
    line-height: 1;
    vertical-align: middle;
}

.cancel-confirm-actions .btn-confirm-yes .kbd-hint.kbd-hint-danger {
    background: rgba(255, 255, 255, 0.22);
    border-color: rgba(255, 255, 255, 0.35);
    color: #fff;
}

[data-theme="dark"] .cancel-confirm-actions .kbd-hint {
    background: rgba(255, 255, 255, 0.08);
    border-color: var(--border-color);
    color: var(--text-primary);
}

/* ── Profile flyout (collapsed sidebar) ── */
.profile-flyout {
    display: none;
    position: fixed;
    background: white;
    border-radius: 8px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.25);
    min-width: 200px;
    padding: 0.5rem 0;
    z-index: 99999;
}
.profile-flyout.show { display: block; }
.profile-flyout-header {
    padding: 0.6rem 1rem;
    border-bottom: 1px solid #e0e4e8;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.profile-flyout-item {
    display: block;
    width: 100%;
    padding: 0.5rem 1rem;
    text-decoration: none;
    color: #2d3748;
    background: none;
    border: none;
    text-align: left;
    cursor: pointer;
    font-size: 0.85rem;
}
.profile-flyout-item:hover {
    background: #f0f2f5;
    color: var(--primary-blue);
}
.profile-flyout-logout { color: #c53030; }
.profile-flyout-logout:hover { background: #fed7d7; color: #c53030; }

/* ── Settings page tabs ── */
.settings-tabs {
    display: flex;
    gap: 0;
    border-bottom: 2px solid #e0e4e8;
    margin-bottom: 1rem;
}
.settings-tab {
    background: none;
    border: none;
    padding: 10px 20px;
    font-size: 0.95rem;
    color: #6b7280;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -2px;
    transition: color 0.15s, border-color 0.15s;
}
.settings-tab:hover { color: #1E3884; }
.settings-tab.active {
    color: #1E3884;
    font-weight: 600;
    border-bottom-color: #1E3884;
}

/* ══════════════════════════════════════════
   Module Color Theming — border-top on top-bar
   Set via JS: document.body.dataset.module = "drift" | "sager" | "indstillinger"
   ══════════════════════════════════════════ */
/* Modul-farvestrege fjernet på brugerens ønske — top-bar har ingen border-top. */

/* ══════════════════════════════════════════
   PageHelpTooltip — fixed popover
   ══════════════════════════════════════════ */
.page-help-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1040;
}

.page-help-popover {
    position: fixed;
    width: 340px;
    max-width: calc(100vw - 16px);
    background: #fff;
    border-radius: 10px;
    box-shadow: 0 8px 30px rgba(0,0,0,0.18);
    z-index: 1050;
    overflow: hidden;
    animation: helpPopFadeIn 0.12s ease;
}

@keyframes helpPopFadeIn {
    from { opacity: 0; transform: translateY(-4px); }
    to { opacity: 1; transform: translateY(0); }
}

.page-help-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.65rem 1rem;
    background: #f8fafc;
    border-bottom: 1px solid #e2e8f0;
}

body[data-module="drift"] .page-help-header { border-top: 3px solid var(--module-drift); }
body[data-module="sager"] .page-help-header { border-top: 3px solid var(--module-sager); }
body[data-module="indstillinger"] .page-help-header { border-top: 3px solid var(--module-admin); }

.page-help-title {
    font-weight: 700;
    font-size: 0.9rem;
    color: #1e293b;
}

.page-help-close {
    background: none;
    border: none;
    font-size: 1.3rem;
    color: #94a3b8;
    cursor: pointer;
    line-height: 1;
    padding: 0;
}
.page-help-close:hover { color: #334155; }

.page-help-body {
    padding: 0.75rem 1rem 0.25rem;
    margin: 0;
    font-size: 0.85rem;
    color: #334155;
    line-height: 1.55;
}

.page-help-tip {
    padding: 0.35rem 1rem 0.75rem;
    margin: 0;
    font-size: 0.8rem;
    color: #64748b;
    font-style: italic;
}

/* ── Bilag/Indbakke: full-bleed desktop layout ──────────────────────────
   Escapes the default article max-width + horizontal padding so the
   three-column workspace can fill the entire viewport width. */
main:has(.bilag-layout) > article {
    max-width: none !important;
    width: 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* ── Planlægning: full-bleed + fuld viewport-højde ──────────────────────
   Kalenderen skal udnytte 100% af skærmen så bucket, medarbejderkolonne
   og tids-grid kan flex'e sig ud til siderne og til bunden af viewport. */
main:has(.planning-page) > article {
    max-width: none !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
    height: 100%;
}
main:has(.planning-page) {
    padding: 0 !important;
}

/* ── Layoutgrupper grid: full-bleed so SmartGrid uses full desktop width */
main:has(.smart-grid[data-grid-id="layout-grupper"]) > article,
main:has(#grid-layout-grupper) > article {
    max-width: none !important;
}

/* ── Grid helper: span both columns in detail-form-grid (2-col layout) */
.detail-form-grid > .grid-col-span-2 {
    grid-column: 1 / -1;
}

/* ── Keyboard focus ring for tab-level grid rows (Alt+L target) ───────
   Note cards, file rows and other sub-grids inside detail-page tabs
   become focusable via data-grid-row + tabindex="0". This ring gives
   the user a clear visual indication of where keyboard focus landed. */
[data-grid-row]:focus,
[data-grid-row]:focus-visible {
    outline: 2px solid #1E3884;
    outline-offset: 2px;
    border-radius: 6px;
}
[data-grid-row]:focus:not(:focus-visible) {
    outline: none;
}

/* ══════════════════════════════════════════════════════════════════════
   HINT MODE — toggled by pressing and releasing Alt alone.
   Single class: body.show-hints
   Badges show short keys only (O, M, S, L, 1, 2 …) since the user
   already knows they are in hint-mode.
   ══════════════════════════════════════════════════════════════════════ */

/* Top-bar confirmation indicator */
body.show-hints::before {
    position: fixed;
    top: 0; left: 0; right: 0;
    background: #111827; color: #fff;
    padding: 6px 12px; text-align: center;
    font-size: 0.78rem; font-weight: 600; letter-spacing: 0.05em;
    z-index: 99999; pointer-events: none;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
    animation: hint-fade-in 0.15s ease-out;
}
body.show-hints-ctrl::before { content: "⌨  CTRL-genveje — tryk Ctrl eller Esc for at lukke"; }
body.show-hints-alt::before  { content: "⌨  ALT-genveje — tryk Alt eller Esc for at lukke"; }

/* Suspend overflow-clipping so hint badges escape their containers */
body.show-hints .detail-tabs,
body.show-hints .detail-tab-content,
body.show-hints .detail-card,
body.show-hints .page-detail-bg,
body.show-hints main,
body.show-hints .main-content-area,
body.show-hints .modal,
body.show-hints .modal-dialog,
body.show-hints .modal-content,
body.show-hints .modal-body,
body.show-hints .dialog-card,
body.show-hints .planning-bucket,
body.show-hints .bucket-tabs,
body.show-hints .planning-toolbar,
body.show-hints .toolbar-left,
body.show-hints .toolbar-center,
body.show-hints .view-mode-group,
body.show-hints .planning-page,
body.show-hints .modal-tab-bar,
body.show-hints .reg-tab,
body.show-hints .reg-section,
body.show-hints .reg-list,
body.show-hints .reg-manual-row,
body.show-hints .reg-timer-controls,
body.show-hints .task-modal-tabs,
body.show-hints .task-modal-header,
body.show-hints .task-modal-body,
body.show-hints .dialog-card-wider,
body.show-hints .reg-pills {
    overflow: visible !important;
}

/* ── Shared badge base (both modes) ────────────────────────────────── */
.hint-badge-base {
    position: absolute;
    background: #111827;
    color: #fff;
    font-size: 0.65rem;
    font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 2px 6px;
    border-radius: 4px;
    pointer-events: none;
    white-space: nowrap;
    z-index: 99998;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
    letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}

@keyframes hint-fade-in {
    from { opacity: 0; transform: translateY(-2px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* SmartDateInput floating: lille kalender-ikon i højre side så det visuelt
   matcher native date-picker-feltet. Ikonet er dekorativt. */
.smart-date-floating {
    position: relative;
}
.smart-date-floating::after {
    content: "📅";
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 0.9rem;
    pointer-events: none;
    opacity: 0.55;
}
.smart-date-floating input {
    padding-right: 2.2rem !important;
}

/* ══ CTRL-mode: Ctrl-genveje (O, M, S, U, B, Del …) ════════════════ */
body.show-hints-ctrl [data-shortcut-create],
body.show-hints-ctrl [data-shortcut-manage],
body.show-hints-ctrl [data-shortcut-edit],
body.show-hints-ctrl [data-shortcut-unlink],
body.show-hints-ctrl [data-shortcut-hold],
body.show-hints-ctrl [data-shortcut-delete],
body.show-hints-ctrl [data-shortcut-quote],
body.show-hints-ctrl [data-shortcut-invoice],
body.show-hints-ctrl [data-shortcut-viewpdf],
body.show-hints-ctrl [data-shortcut-send],
body.show-hints-ctrl [data-shortcut-revision],
body.show-hints-ctrl [data-shortcut-expand-all],
body.show-hints-ctrl [data-shortcut-collapse-all],
body.show-hints-ctrl [data-shortcut-save-inline],
body.show-hints-ctrl [data-shortcut-cancel-inline],
body.show-hints-ctrl .detail-sticky-header .btn-primary,
body.show-hints-ctrl .modal-footer-actions .btn-primary,
body.show-hints-ctrl .grid-search-wrap {
    position: relative !important;
}
body.show-hints-alt [data-shortcut-expand-all],
body.show-hints-alt [data-shortcut-collapse-all] {
    position: relative !important;
}
body.show-hints-ctrl [data-shortcut-search] {
    position: relative !important;
}
body.show-hints-ctrl [data-shortcut-search]::after {
    content: "Ctrl+↵";
    position: absolute;
    top: -10px; right: -10px;
    background: #111827; color: #fff; font-size: 0.65rem; font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 2px 6px; border-radius: 4px; pointer-events: none;
    white-space: nowrap; z-index: 99998;
    box-shadow: 0 2px 6px rgba(0,0,0,.4); letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}

body.show-hints-ctrl [data-shortcut-create]::after,
body.show-hints-ctrl [data-shortcut-manage]::after,
body.show-hints-ctrl [data-shortcut-edit]::after,
body.show-hints-ctrl [data-shortcut-unlink]::after,
body.show-hints-ctrl [data-shortcut-hold]::after,
body.show-hints-ctrl [data-shortcut-delete]::after,
body.show-hints-ctrl [data-shortcut-quote]::after,
body.show-hints-ctrl [data-shortcut-invoice]::after,
body.show-hints-ctrl [data-shortcut-viewpdf]::after,
body.show-hints-ctrl [data-shortcut-send]::after,
body.show-hints-ctrl [data-shortcut-revision]::after,
body.show-hints-ctrl [data-shortcut-save-inline]::after,
body.show-hints-ctrl [data-shortcut-cancel-inline]::after,
body.show-hints-ctrl .detail-sticky-header .btn-primary::after,
body.show-hints-ctrl .modal-footer-actions .btn-primary::after,
body.show-hints-ctrl .grid-search-wrap::after {
    position: absolute;
    background: #111827; color: #fff; font-size: 0.65rem; font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 2px 6px; border-radius: 4px; pointer-events: none;
    white-space: nowrap; z-index: 99998;
    box-shadow: 0 2px 6px rgba(0,0,0,.4); letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}

body.show-hints-ctrl [data-shortcut-create]::after       { content: "O";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-manage]::after       { content: "M";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-edit]::after         { content: "↵";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-unlink]::after       { content: "U";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-hold]::after         { content: "B";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-delete]::after       { content: "Del"; top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-quote]::after        { content: "Q";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-invoice]::after      { content: "I";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-viewpdf]::after      { content: "L";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-send]::after         { content: "G";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-revision]::after     { content: "R";   top: -10px; right: -10px; }

/* Alt-mode badges for ekspander/kollaps (Godkend registreringer) */
body.show-hints-alt [data-shortcut-expand-all],
body.show-hints-alt [data-shortcut-collapse-all],
body.show-hints-alt [data-shortcut-link-parent],
body.show-hints-alt [data-shortcut-close-zero],
body.show-hints-alt [data-shortcut-resend] {
    position: relative !important;
}
body.show-hints-alt [data-shortcut-expand-all]::after,
body.show-hints-alt [data-shortcut-collapse-all]::after,
body.show-hints-alt [data-shortcut-link-parent]::after,
body.show-hints-alt [data-shortcut-close-zero]::after,
body.show-hints-alt [data-shortcut-resend]::after {
    position: absolute;
    background: #111827; color: #fff; font-size: 0.65rem; font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 2px 6px; border-radius: 4px; pointer-events: none;
    white-space: nowrap; z-index: 99998;
    box-shadow: 0 2px 6px rgba(0,0,0,.4); letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}
body.show-hints-alt [data-shortcut-expand-all]::after   { content: "Alt+"; top: -10px; right: -10px; }
body.show-hints-alt [data-shortcut-collapse-all]::after { content: "Alt-"; top: -10px; right: -10px; }
body.show-hints-alt [data-shortcut-link-parent]::after  { content: "P";    top: -10px; right: -10px; }
body.show-hints-alt [data-shortcut-close-zero]::after   { content: "0";    top: -10px; right: -10px; }
body.show-hints-alt [data-shortcut-resend]::after       { content: "G";    top: -10px; right: -10px; }

/* ── Generic data-hint-key support (Planlægning toolbar etc.) ──
   Any element with data-hint-key="Ctrl+X" or "Alt+X" auto-renders
   its key as a badge in the corresponding hint mode. */
body.show-hints-ctrl [data-hint-key^="Ctrl+"],
body.show-hints-alt  [data-hint-key^="Alt+"] {
    position: relative !important;
    z-index: 99997 !important;
}
body.show-hints-ctrl [data-hint-key^="Ctrl+"]::after,
body.show-hints-alt  [data-hint-key^="Alt+"]::after {
    content: attr(data-hint-key);
    position: absolute;
    top: -10px; right: -10px;
    background: rgba(17, 24, 39, 0.92); color: #fff;
    font-size: 0.62rem; font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 1px 5px; border-radius: 4px; pointer-events: none;
    white-space: nowrap; z-index: 99998;
    box-shadow: 0 2px 6px rgba(0,0,0,.35); letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}

/* ── Modal-fokus: når task-modalen er åben, skjul ALLE hint-badges i
   kalender-laget (både Ctrl+ og Alt+) så de ikke overlapper modalens
   egne tab-badges. Modalen er rendret udenfor .planning-page, så dens
   badges påvirkes ikke. */
body.task-modal-open .planning-page [data-hint-key]::after,
body.task-modal-open .planning-page [data-shortcut-toggle-panel]::after,
body.task-modal-open .planning-page [data-shortcut-create]::after,
body.task-modal-open .planning-page [data-shortcut-manage]::after,
body.task-modal-open .planning-page [data-shortcut-search]::after {
    display: none !important;
    content: none !important;
}
body.task-modal-open .planning-page [data-hint-key],
body.task-modal-open .planning-page [data-shortcut-toggle-panel],
body.task-modal-open .planning-page [data-shortcut-create] {
    z-index: auto !important;
}

/* ── Modal tab-badges: centrér under tab-tekst i stedet for i hjørnet,
   så badges ikke svæver ud over nabo-faner. */
body.show-hints-alt .modal-tab-bar .modal-tab[data-hint-key^="Alt+"]::after {
    top: auto; right: auto;
    bottom: -12px; left: 50%;
    transform: translateX(-50%);
}
body.show-hints-ctrl [data-shortcut-save-inline]::after  { content: "S";   top: -10px; right: -10px; }
body.show-hints-ctrl [data-shortcut-cancel-inline]::after { content: "Esc"; top: -10px; right: -10px; }
body.show-hints-ctrl .detail-sticky-header .btn-primary::after,
body.show-hints-ctrl .modal-footer-actions .btn-primary::after { content: "S"; top: -10px; right: -10px; }
body.show-hints-ctrl .grid-search-wrap::after            { content: "F";   top: -10px; right: -10px; }

/* ══ ALT-mode: Alt-genveje (1..N faner, L grids) ═══════════════════ */
body.show-hints-alt .detail-tabs .detail-tab,
body.show-hints-alt .quote-tabs .quote-tab,
body.show-hints-alt .send-method-tabs .send-method-tab,
body.show-hints-alt .smart-grid,
body.show-hints-alt [data-grid-scope] {
    position: relative !important;
}

body.show-hints-alt .detail-tabs .detail-tab::after,
body.show-hints-alt .quote-tabs .quote-tab::after,
body.show-hints-alt .send-method-tabs .send-method-tab::after,
body.show-hints-alt .smart-grid::after,
body.show-hints-alt [data-grid-scope]::after {
    position: absolute;
    background: #111827; color: #fff; font-size: 0.65rem; font-weight: 700;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 2px 6px; border-radius: 4px; pointer-events: none;
    white-space: nowrap; z-index: 99998;
    box-shadow: 0 2px 6px rgba(0,0,0,.4); letter-spacing: 0.02em;
    animation: hint-fade-in 0.12s ease-out;
}

/* Tab numbering (1, 2, 3 …) — detail-sider */
body.show-hints-alt .detail-tabs { counter-reset: tab-hint; }
body.show-hints-alt .detail-tabs .detail-tab { counter-increment: tab-hint; }
body.show-hints-alt .detail-tabs .detail-tab::after {
    content: counter(tab-hint);
    top: 2px; right: 2px;
    font-size: 0.58rem; padding: 1px 5px;
}

/* Tab numbering — liste-filtre (Tilbud: Igangværende/Vundne/Arkiveret) */
body.show-hints-alt .quote-tabs { counter-reset: qtab-hint; }
body.show-hints-alt .quote-tabs .quote-tab { counter-increment: qtab-hint; }
body.show-hints-alt .quote-tabs .quote-tab::after {
    content: counter(qtab-hint);
    top: 2px; right: 2px;
    font-size: 0.58rem; padding: 1px 5px;
}

/* Tab numbering — afsendelsesmetode (Klargør faktura: E-mail/EAN/Manuel) */
body.show-hints-alt .send-method-tabs { counter-reset: smtab-hint; }
body.show-hints-alt .send-method-tabs .send-method-tab { counter-increment: smtab-hint; }
body.show-hints-alt .send-method-tabs .send-method-tab::after {
    content: counter(smtab-hint);
    top: 2px; right: 4px;
    font-size: 0.58rem; padding: 1px 5px;
}

/* Grid scope: L */
body.show-hints-alt .smart-grid::after,
body.show-hints-alt [data-grid-scope]::after {
    content: "L";
    top: 4px; left: 8px;
}


/* ── form-floating wrapper for CustomerAutocomplete so it visually matches
   other form-floating dropdowns (Layout-gruppe, Betalingsbetingelse osv.).
   Bootstrap's native form-floating targets direct children .form-control/.form-select,
   but CustomerAutocomplete nests its input inside .customer-autocomplete — so we
   replicate the key rules here, matching both the empty-input state and the
   selected-customer-chip state. */
.form-floating-autocomplete {
    position: relative;
    min-height: calc(3.5rem + 2px);
}

.form-floating-autocomplete .customer-autocomplete {
    height: calc(3.5rem + 2px);
}

.form-floating-autocomplete .customer-autocomplete .form-control {
    height: calc(3.5rem + 2px);
    padding: 1.625rem 0.75rem 0.625rem;
    font-size: 1rem;
    line-height: 1.25;
}

.form-floating-autocomplete .customer-autocomplete .selected-customer-chip {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: calc(3.5rem + 2px);
    padding: 1.625rem 0.75rem 0.625rem;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    background: var(--surface);
    color: var(--text-primary);
    font-size: 1rem;
}

.form-floating-autocomplete > label {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    padding: 1rem 0.75rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    pointer-events: none;
    border: 1px solid transparent;
    transform-origin: 0 0;
    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
    opacity: 0.65;
    color: var(--text-primary);
    font-size: 1rem;
    line-height: 1.25;
    z-index: 3;
}

/* ══════════════════════════════════════════════════════════
   .series-prompt-* — delt popup-styling brugt på tværs af
   planlægning, fakturakreditering mv. Følger tema-tokens så
   dark mode virker uden yderligere overrides.
   ══════════════════════════════════════════════════════════ */
.series-prompt-backdrop {
    position: fixed;
    inset: 0;
    z-index: 10400;
    background: var(--overlay-bg, rgba(0, 0, 0, 0.45));
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
    animation: series-prompt-fade 0.12s ease-out;
}

@keyframes series-prompt-fade {
    from { opacity: 0; }
    to { opacity: 1; }
}

.series-prompt-dialog {
    background: var(--surface);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    box-shadow: var(--shadow-dialog, 0 12px 40px rgba(0, 0, 0, 0.25));
    padding: 1.5rem 1.75rem;
    max-width: 480px;
    width: 100%;
    animation: series-prompt-pop 0.14s ease-out;
}

@keyframes series-prompt-pop {
    from { opacity: 0; transform: scale(0.95); }
    to { opacity: 1; transform: scale(1); }
}

.series-prompt-header {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    margin-bottom: 0.75rem;
}

.series-prompt-header h5 {
    margin: 0;
    font-weight: 700;
    font-size: 1.05rem;
    color: var(--text-primary);
}

.series-prompt-text {
    color: var(--text-primary);
    margin-bottom: 0.5rem;
    line-height: 1.4;
}

.series-prompt-buttons {
    display: flex;
    gap: 0.5rem;
    justify-content: flex-end;
    flex-wrap: wrap;
    margin-top: 1rem;
}

.series-prompt-buttons .btn {
    min-width: 9rem;
}

/* ══════════════════════════════════════════════════════════════
   ANLÆG — dark mode-overrides for inline-style klasser i Anlaeg.razor.
   Flyttet ud af inline <style> fordi Blazors auto-rendermode ikke
   altid rehydrerer inline CSS når WASM tager over.
   ══════════════════════════════════════════════════════════════ */
[data-theme="dark"] .anlaeg-search-input {
    background: var(--input-bg, var(--surface)) !important;
    color: var(--text-primary) !important;
    border-color: var(--border-color) !important;
}
[data-theme="dark"] .anlaeg-search-input:focus {
    border-color: var(--secondary-blue) !important;
    box-shadow: 0 0 0 2px rgba(32,150,203,0.25) !important;
}
[data-theme="dark"] .anlaeg-count { color: var(--text-muted) !important; }

[data-theme="dark"] .anlaeg-col-dropdown {
    background: var(--surface) !important;
    border-color: var(--border-color) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .anlaeg-col-header {
    color: var(--secondary-blue) !important;
    border-bottom-color: var(--border-color) !important;
}
[data-theme="dark"] .anlaeg-col-item:hover { background: var(--surface-hover) !important; }

[data-theme="dark"] .anlaeg-grid-wrapper {
    background: var(--surface) !important;
    border: 1px solid var(--border-color) !important;
}
[data-theme="dark"] .anlaeg-grid-table thead th {
    background: #16306f !important;
    color: #fff !important;
    border-right-color: rgba(255,255,255,0.08) !important;
}
[data-theme="dark"] .anlaeg-grid-table th.sortable:hover { background: #1a3985 !important; }
[data-theme="dark"] .anlaeg-grid-table tbody td {
    color: var(--text-primary) !important;
    border-bottom-color: var(--border-color) !important;
}
[data-theme="dark"] .anlaeg-row:hover { background: var(--surface-hover) !important; }
[data-theme="dark"] .anlaeg-row.zebra-row { background: var(--row-alt) !important; }
[data-theme="dark"] .anlaeg-row-focused {
    background: rgba(32,150,203,0.18) !important;
    box-shadow: inset 3px 0 0 var(--secondary-blue) !important;
}

[data-theme="dark"] .anlaeg-action-btn { color: var(--text-muted) !important; }
[data-theme="dark"] .anlaeg-action-btn:hover {
    background: var(--surface-hover) !important;
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .anlaeg-action-btn.anlaeg-action-danger:hover {
    background: rgba(220,38,38,0.2) !important;
    color: #fca5a5 !important;
}
[data-theme="dark"] .customer-link { color: var(--secondary-blue) !important; }

[data-theme="dark"] .quick-menu,
[data-theme="dark"] .anlaeg-ctx-menu {
    background: var(--surface) !important;
    border-color: var(--border-color) !important;
    box-shadow: 0 8px 24px rgba(0,0,0,0.5) !important;
}
[data-theme="dark"] .quick-menu-item,
[data-theme="dark"] .anlaeg-ctx-item { color: var(--text-primary) !important; }
[data-theme="dark"] .quick-menu-item:hover,
[data-theme="dark"] .anlaeg-ctx-item:hover { background: var(--surface-hover) !important; }
[data-theme="dark"] .anlaeg-ctx-sep { background: var(--border-color) !important; }

[data-theme="dark"] .badge-overdue {
    background: rgba(220,38,38,0.22) !important; color: #fca5a5 !important;
}
[data-theme="dark"] .badge-due-soon {
    background: rgba(234,179,8,0.22) !important; color: #fde68a !important;
}
[data-theme="dark"] .badge-ok {
    background: rgba(22,163,74,0.22) !important; color: #86efac !important;
}

[data-theme="dark"] .anlaeg-detail-card {
    background: var(--surface) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .anlaeg-qr-box {
    background: var(--surface-alt) !important;
    border-color: var(--border-color) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .anlaeg-qr-box .text-muted { color: var(--text-muted) !important; }
[data-theme="dark"] .anlaeg-photo-item { border-color: var(--border-color) !important; }

/* ══════════════════════════════════════════════════════════════
   INSTALLATION LOGBOOK — dark mode-overrides for de inline stiles
   klasser i InstallationLogbook.razor (tidslinje, reservedele,
   billeder). Bruger tema-tokens + dæmpede semantiske farver.
   ══════════════════════════════════════════════════════════════ */
[data-theme="dark"] .logbook {
    background: var(--surface) !important;
    border-color: var(--border-color) !important;
    color: var(--text-primary);
}
[data-theme="dark"] .logbook-tabs {
    border-bottom-color: var(--border-color) !important;
}
[data-theme="dark"] .logbook-tab {
    color: var(--text-muted) !important;
}
[data-theme="dark"] .logbook-tab:hover {
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .logbook-tab.active {
    color: var(--secondary-blue) !important;
    border-bottom-color: var(--secondary-blue) !important;
}
[data-theme="dark"] .logbook-count {
    background: rgba(32, 150, 203, 0.25) !important;
    color: var(--secondary-blue) !important;
}

/* Timeline-liste og prikker */
[data-theme="dark"] .timeline-list::before {
    background: var(--border-color) !important;
}
[data-theme="dark"] .timeline-dot {
    border-color: var(--surface) !important;
}
[data-theme="dark"] .timeline-date {
    color: var(--text-primary) !important;
}
[data-theme="dark"] .timeline-type {
    background: var(--surface-alt) !important;
    color: var(--text-muted) !important;
}
[data-theme="dark"] .timeline-case {
    background: rgba(32, 150, 203, 0.22) !important;
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .timeline-del {
    color: var(--text-muted) !important;
}
[data-theme="dark"] .timeline-del:hover {
    color: #fca5a5 !important;
}
[data-theme="dark"] .timeline-desc {
    color: var(--text-primary) !important;
}
[data-theme="dark"] .timeline-meta {
    color: var(--text-muted) !important;
}

/* Parts-tabel */
[data-theme="dark"] .parts-table thead th {
    background: #16306f !important;
    color: #fff !important;
}
[data-theme="dark"] .parts-table tbody td {
    border-bottom-color: var(--border-color) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .parts-table tbody tr:nth-child(even) {
    background: var(--row-alt) !important;
}
[data-theme="dark"] .parts-case-link {
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .row-warranty {
    background: rgba(251, 146, 60, 0.15) !important;
}
[data-theme="dark"] .warranty-badge {
    background: rgba(251, 146, 60, 0.25) !important;
    color: #fdba74 !important;
}
[data-theme="dark"] .warranty-override-badge {
    background: rgba(234, 179, 8, 0.22) !important;
    color: #fde68a !important;
}

/* Billed-grupper */
[data-theme="dark"] .image-group {
    border-bottom-color: var(--border-color) !important;
}
[data-theme="dark"] .image-group-title {
    color: var(--text-muted) !important;
}
[data-theme="dark"] .ba-tile {
    background: var(--surface-alt) !important;
    border-color: var(--border-color) !important;
}
[data-theme="dark"] .ba-label {
    background: rgba(32, 150, 203, 0.85) !important;
}

/* Ny gruppe-prompt + pending placeholder */
[data-theme="dark"] .logbook-group-prompt {
    background: var(--surface-alt) !important;
    border-color: var(--border-color) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .image-group-pending .image-group-title {
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .ba-tile-placeholder {
    background: rgba(234, 179, 8, 0.15) !important;
    border-color: rgba(234, 179, 8, 0.5) !important;
    color: #fde68a !important;
}

/* ══════════════════════════════════════════════════════════
   Bootstrap .nav-tabs / .nav-link — dark mode
   Bruges bl.a. i Rediger medarbejder-modalen (Stamdata, Arbejdstid,
   Fravær & Saldi, Log). Standard Bootstrap giver mørke tekst-farver
   og lys border-bottom der ikke ses på dark surfaces.
   ══════════════════════════════════════════════════════════ */
[data-theme="dark"] .nav-tabs {
    border-bottom-color: var(--border-color) !important;
}
[data-theme="dark"] .nav-tabs .nav-link {
    color: var(--text-muted) !important;
    background-color: transparent !important;
    border-color: transparent !important;
}
[data-theme="dark"] .nav-tabs .nav-link:hover,
[data-theme="dark"] .nav-tabs .nav-link:focus {
    color: var(--secondary-blue) !important;
    border-color: transparent !important;
    isolation: isolate;
}
[data-theme="dark"] .nav-tabs .nav-link.active,
[data-theme="dark"] .nav-tabs .nav-item.show .nav-link {
    color: var(--secondary-blue) !important;
    background-color: var(--surface) !important;
    border-color: var(--border-color) var(--border-color) var(--surface) !important;
}
[data-theme="dark"] .nav-tabs .nav-link.disabled {
    color: var(--text-muted) !important;
    opacity: 0.5;
    background-color: transparent !important;
    border-color: transparent !important;
}

/* ══════════════════════════════════════════════════════════
   SmartGrid pager (Forrige / Næste / side-size dropdown) — global dark
   mode override. Scoped versionen i SmartGrid.razor.css taber
   nogle gange specificitets-race mod Bootstrap / base-reglerne, så
   vi dublerer her i den globale stylesheet der altid loader sidst.
   ══════════════════════════════════════════════════════════ */
[data-theme="dark"] .smart-grid-pager {
    border-top-color: var(--border-color) !important;
    color: var(--text-primary) !important;
}
[data-theme="dark"] .pager-controls button {
    background: var(--surface-alt) !important;
    color: var(--text-primary) !important;
    border: 1px solid var(--border-strong, var(--border-color)) !important;
}
[data-theme="dark"] .pager-controls button:hover:not(:disabled) {
    background: var(--surface-hover) !important;
    border-color: var(--secondary-blue) !important;
    color: var(--secondary-blue) !important;
}
[data-theme="dark"] .pager-controls button:disabled {
    opacity: 0.55 !important;
    color: var(--text-primary) !important;
    background: var(--surface-alt) !important;
    border-color: var(--border-color) !important;
}
[data-theme="dark"] .pager-size select {
    background: var(--input-bg, var(--surface)) !important;
    color: var(--text-primary) !important;
    border-color: var(--border-color) !important;
}

/* ── Kørselsliste (TaskLineModal) — global fokus-styling så Alt+L er
   visuelt tydeligt. Flyttet fra scoped razor.css fordi CSS-isolation
   ikke altid pålidelig for nestede elementer i tabeller. ── */
#tl-driving-list tr[tabindex] {
    cursor: default;
    transition: background-color 0.1s ease;
}
#tl-driving-list tr[tabindex]:focus,
#tl-driving-list tr[tabindex]:focus-visible {
    outline: 2px solid #2096cb !important;
    outline-offset: -2px !important;
    background-color: rgba(32, 150, 203, 0.28) !important;
    box-shadow: inset 4px 0 0 #2096cb !important;
}
[data-theme="dark"] #tl-driving-list tr[tabindex]:focus,
[data-theme="dark"] #tl-driving-list tr[tabindex]:focus-visible {
    outline-color: #4fc3f7 !important;
    background-color: rgba(79, 195, 247, 0.32) !important;
    box-shadow: inset 4px 0 0 #4fc3f7 !important;
}

/* ════════════════════════════════════════════════════════════════
   Kunde Detalje — redesign (handoff: "Håndværker design optimering 2")
   Tokens: kort .kd-grp, overskrift .kd-grphead, toggle-row .kd-toggle-row,
   adresse/kontakt-rækker .kd-row-card, mv. — bruges af KundeDetalje.razor.
   Layes i app.css (ikke i .razor.css) fordi Client-projektets scoped CSS-
   bundle ikke loades fra Server's App.razor — så scoped styles ville være
   usynlige indtil WASM-bootstrappen kører.
   ════════════════════════════════════════════════════════════════ */

.kd-content {
    max-width: 1100px;
    padding: 1.5rem;
}

.kd-stack {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.kd-grp {
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #eef0f4);
    border-radius: 10px;
    padding: 18px 20px;
}

.kd-grphead {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin: 0 0 14px;
    display: flex;
    align-items: center;
    gap: 8px;
}

    .kd-grphead::before {
        content: "";
        width: 4px;
        height: 14px;
        border-radius: 2px;
        background: var(--accent, #FFA800);
        flex: none;
    }

.kd-grid-2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
}

.kd-grid-4 {
    display: grid;
    grid-template-columns: 1fr 140px 1fr 200px;
    gap: 14px;
}

.kd-span-2 {
    grid-column: 1 / -1;
}

@media (max-width: 720px) {
    .kd-grid-2,
    .kd-grid-4 {
        grid-template-columns: 1fr;
    }
}

.kd-toggle-row {
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 48px;
    padding: 8px 14px;
    border: 1px solid var(--border-color, #eef0f4);
    border-radius: 8px;
    cursor: pointer;
    transition: background 0.12s, border-color 0.12s;
    background: var(--surface, #fff);
    margin: 0;
}

    .kd-toggle-row:hover {
        background: var(--surface-alt, #f8f9fa);
    }

    .kd-toggle-row.is-on {
        background: rgba(30, 56, 132, 0.06);
        border-color: rgba(30, 56, 132, 0.3);
    }

.kd-toggle-input {
    flex: none;
    width: 18px;
    height: 18px;
    margin: 0;
    accent-color: var(--primary-blue, #1E3884);
}

.kd-toggle-text {
    font-size: 15px;
    color: var(--text-primary, #212121);
}

.kd-toggle-hint {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
    margin-left: auto;
}

.kd-row-card {
    display: flex;
    align-items: center;
    gap: 14px;
    border: 1px solid var(--border-color, #eef0f4);
    border-radius: 8px;
    padding: 13px 16px;
    background: var(--surface, #fff);
    transition: border-color 0.12s;
}

    .kd-row-card:hover {
        border-color: var(--primary-blue, #1E3884);
    }

.kd-row-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.kd-row-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    background: rgba(30, 56, 132, 0.08);
    color: var(--primary-blue, #1E3884);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex: none;
}

.kd-row-main {
    flex: 1;
    min-width: 0;
}

.kd-row-title {
    font-size: 15px;
    font-weight: 700;
    color: var(--text-primary, #212121);
}

.kd-row-sub {
    font-size: 13.5px;
    color: var(--text-muted, #6b7280);
    margin-top: 2px;
}

.kd-badge-primary {
    font-size: 11px;
    font-weight: 700;
    color: #0f5132;
    background: #d1fae5;
    border-radius: 999px;
    padding: 3px 10px;
}

.kd-add-btn {
    margin-top: 14px;
    height: 46px;
    padding: 0 18px;
    border: 1px dashed #c7d2fe;
    border-radius: 8px;
    background: #f8f9ff;
    color: var(--primary-blue, #1E3884);
    font-size: 14.5px;
    font-weight: 700;
    cursor: pointer;
    width: 100%;
    transition: background 0.12s, border-color 0.12s;
}

    .kd-add-btn:hover {
        background: #eef2ff;
        border-color: var(--primary-blue, #1E3884);
    }

.kd-avatar {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 15px;
    font-weight: 700;
    flex: none;
}

.kd-avatar-primary {
    background: var(--primary-blue, #1E3884);
}

.kd-avatar-secondary {
    background: var(--secondary-blue, #2096CB);
}

.kd-case-num {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 13px;
    color: var(--text-muted, #6b7280);
    font-weight: 600;
    width: 110px;
    flex: none;
}

.kd-status-badge {
    font-size: 11px;
    font-weight: 700;
    border-radius: 999px;
    padding: 3px 10px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

    .kd-status-badge.status-blue {
        color: #2563eb;
        background: #eff6ff;
    }

    .kd-status-badge.status-green {
        color: #0f5132;
        background: #d1fae5;
    }

    .kd-status-badge.status-grey {
        color: #6b7280;
        background: #f3f4f6;
    }

.kd-row-date {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    width: 100px;
    text-align: right;
    flex: none;
}

[data-theme="dark"] .kd-grp {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .kd-toggle-row {
    background: var(--surface);
    border-color: var(--border-color);
}

    [data-theme="dark"] .kd-toggle-row:hover {
        background: var(--surface-alt);
    }

    [data-theme="dark"] .kd-toggle-row.is-on {
        background: rgba(158, 197, 255, 0.10);
        border-color: rgba(158, 197, 255, 0.35);
    }

[data-theme="dark"] .kd-row-card {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .kd-row-icon {
    background: rgba(158, 197, 255, 0.12);
    color: #9ec5ff;
}

[data-theme="dark"] .kd-add-btn {
    background: rgba(158, 197, 255, 0.08);
    border-color: rgba(158, 197, 255, 0.35);
    color: #9ec5ff;
}

/* ── KundeDetalje: scope-overrides så delte panel-komponenter
   (AttachmentsPanel, NotesPanel, CommunicationLogPanel) får samme look
   som .kd-grp uden at vi rør komponenterne selv (de bruges også af SagDetalje). */

.kd-page .detail-card {
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #eef0f4);
    border-radius: 10px;
    padding: 18px 20px;
    box-shadow: none;
}

.kd-page .detail-card .section-header {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin: 0 0 14px;
    display: flex;
    align-items: center;
    gap: 8px;
    background: transparent;
    border: 0;
    padding: 0;
}

    .kd-page .detail-card .section-header::before {
        content: "";
        width: 4px;
        height: 14px;
        border-radius: 2px;
        background: var(--accent, #FFA800);
        flex: none;
    }

/* Page-titel: navy navn med dæmpet kundenr-parentes i grå (design-handoff) */
.kd-page-title {
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--primary-blue, #1E3884);
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

.kd-page-num {
    color: var(--text-muted, #9ca3af);
    font-weight: 600;
    margin-left: 0.4rem;
}

[data-theme="dark"] .kd-page .detail-card {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .kd-page-title {
    color: #9ec5ff;
}

/* ── KundeDetalje Tab 6 (Noter): orange venstre-kant per design ── */
.kd-page .note-inline-card {
    border-left: 4px solid var(--accent, #FFA800);
    border-radius: 0.5rem;
    padding: 13px 15px;
    margin-bottom: 0.625rem;
    background: var(--surface, #fff);
}

.kd-page .note-inline-card:hover {
    box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
    border-color: rgba(255, 168, 0, 0.6);
}

.kd-page .note-section-divider {
    margin-top: 1.25rem;
    padding-top: 0.5rem;
    border-top: 1px dashed var(--border-color, #eef0f4);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-muted, #6b7280);
}

[data-theme="dark"] .kd-page .note-inline-card {
    background: var(--surface);
    border-left-color: var(--accent, #FFA800);
}

/* ── KundeDetalje Tab 7 (Beskeder): visuel polish af table-rows ── */
.kd-page .detail-card .table {
    --bs-table-bg: transparent;
}

.kd-page .detail-card .table thead.table-light th {
    background: transparent;
    color: var(--text-muted, #6b7280);
    font-size: 11.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    border-bottom: 1px solid var(--border-color, #eef0f4);
    padding: 0.5rem 0.6rem;
}

.kd-page .detail-card .table tbody tr {
    border-bottom: 1px solid var(--border-color, #eef0f4);
    transition: background 0.1s;
}

.kd-page .detail-card .table tbody tr:hover {
    background: rgba(30, 56, 132, 0.04);
}

.kd-page .detail-card .table tbody tr:last-child {
    border-bottom: 0;
}

[data-theme="dark"] .kd-page .detail-card .table tbody tr:hover {
    background: rgba(158, 197, 255, 0.06);
}

/* ════════════════════════════════════════════════════════════════
   CustomerFileGrid (Tab 5 Filer på KundeDetalje) — tile-grid + breadcrumb
   matchende TaskLineModal's filer-tab pixel-for-pixel.
   Prefix .kdf- (Kunde-Detalje-Files) for at undgå konflikt med
   TaskLineModal's scoped .file-tile-classes.
   ════════════════════════════════════════════════════════════════ */

.kdf-root {
    font-family: inherit;
}

.kdf-title {
    font-size: 13.5px;
    font-weight: 700;
    color: var(--text-primary, #212121);
    margin: 0;
}

/* ── Breadcrumb ── */
.kdf-breadcrumb {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--text-muted, #6b7280);
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.kdf-crumb {
    background: none;
    border: 0;
    color: var(--text-muted, #6b7280);
    font-size: inherit;
    cursor: pointer;
    padding: 4px 10px;
    border-radius: 8px;
    font-family: inherit;
    transition: background 0.12s, color 0.12s;
}

    .kdf-crumb:hover {
        background: rgba(30, 56, 132, 0.06);
        color: var(--primary-blue, #1E3884);
    }

    .kdf-crumb.current {
        background: rgba(30, 56, 132, 0.10);
        color: var(--primary-blue, #1E3884);
        font-weight: 700;
        cursor: default;
    }

        .kdf-crumb.current:hover {
            background: rgba(30, 56, 132, 0.10);
        }

.kdf-sep {
    color: #cbd5e1;
    font-size: 14px;
}

/* ── Drop-zone (stiplet) ── */
.kdf-dropzone {
    display: block;
    border: 2px dashed #cbd5e1;
    border-radius: 12px;
    padding: 18px;
    text-align: center;
    color: var(--text-muted, #6b7280);
    background: #f8fafc;
    margin-bottom: 14px;
    cursor: pointer;
    transition: border-color 0.12s, background 0.12s, color 0.12s;
    position: relative;
}

    .kdf-dropzone:hover,
    .kdf-dropzone.drag-active {
        border-color: var(--primary-blue, #1E3884);
        background: #eef2ff;
        color: var(--primary-blue, #1E3884);
    }

.kdf-dz-ico {
    font-size: 24px;
    display: block;
    margin-bottom: 6px;
}

.kdf-dz-lbl {
    font-size: 13.5px;
    font-weight: 500;
}

.kdf-dropzone input[type="file"] {
    position: absolute;
    inset: 0;
    opacity: 0;
    cursor: pointer;
}

/* ── Flise-grid ── */
.kdf-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 12px;
}

.kdf-tile {
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #eef1f7);
    border-radius: 12px;
    padding: 14px 12px;
    text-align: center;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    transition: border-color 0.12s, transform 0.05s, box-shadow 0.12s;
    position: relative;
    min-height: 128px;
    /* Button-reset så <button class="kdf-tile"> matcher <div class="kdf-tile"> */
    font: inherit;
    color: inherit;
    width: 100%;
    appearance: none;
    -webkit-appearance: none;
}

    .kdf-tile:hover {
        border-color: var(--primary-blue, #1E3884);
        box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
    }

    .kdf-tile:active {
        transform: scale(0.98);
    }

    .kdf-tile:focus-visible {
        outline: 2px solid var(--primary-blue, #1E3884);
        outline-offset: 2px;
    }

.kdf-tile-ico {
    font-size: 38px;
    line-height: 1;
}

.kdf-tile-name {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--text-primary, #212121);
    line-height: 1.25;
    word-break: break-word;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    width: 100%;
}

.kdf-tile-meta {
    font-size: 11.5px;
    color: var(--text-muted, #9ca3af);
    margin-top: auto;
}

.kdf-tile-count {
    font-size: 11.5px;
    color: var(--text-muted, #9ca3af);
}

.kdf-tile-actions {
    position: absolute;
    top: 4px;
    right: 4px;
    opacity: 0;
    transition: opacity 0.12s;
}

.kdf-tile:hover .kdf-tile-actions,
.kdf-tile:focus-within .kdf-tile-actions {
    opacity: 1;
}

.kdf-tile-actions .btn {
    padding: 2px 8px;
    font-size: 11px;
    line-height: 1.3;
}

/* Folder-tile har orange ikon + bold navn */
.kdf-folder .kdf-tile-ico {
    color: #f59e0b;
}

.kdf-folder .kdf-tile-name {
    font-weight: 700;
}

/* Section-header inde i grid'en */
.kdf-section-head {
    grid-column: 1 / -1;
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.04em;
    color: var(--primary-blue, #1E3884);
    text-transform: uppercase;
    padding-top: 4px;
    margin: 4px 0 2px;
    display: flex;
    align-items: center;
    gap: 6px;
}

/* Empty-state */
.kdf-empty {
    grid-column: 1 / -1;
    text-align: center;
    color: var(--text-muted, #9ca3af);
    padding: 30px;
    font-style: italic;
    font-size: 14px;
    border: 2px dashed #e5e7eb;
    border-radius: 12px;
}

/* Dark-theme */
[data-theme="dark"] .kdf-tile {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .kdf-tile:hover {
    border-color: var(--secondary-blue, #9ec5ff);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}

[data-theme="dark"] .kdf-dropzone {
    background: rgba(241, 245, 251, 0.04);
    border-color: var(--border-color);
}

[data-theme="dark"] .kdf-dropzone:hover {
    background: rgba(158, 197, 255, 0.10);
}

[data-theme="dark"] .kdf-crumb:hover {
    background: rgba(158, 197, 255, 0.10);
}

[data-theme="dark"] .kdf-crumb.current {
    background: rgba(158, 197, 255, 0.18);
    color: #9ec5ff;
}

[data-theme="dark"] .kdf-empty {
    border-color: var(--border-color);
}

/* ════════════════════════════════════════════════════════════════
   ContactPersonModal (.cpm-*) — opret/rediger kontaktperson, design
   handoff "Håndværker design optimering (3)". Wrapper SharedModal med
   custom header/body/footer for at matche pixel-design (ikon-tile,
   sechead, ERP-banner, slet-knap, Ctrl+S/Esc-hints).
   ════════════════════════════════════════════════════════════════ */

/* ── Header ── */
.cpm-header {
    padding: 20px 24px 16px;
    border-bottom: 1px solid #eef1f7;
    display: flex;
    align-items: center;
    gap: 12px;
}

.cpm-head-icon {
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: #eef2ff;
    color: var(--primary-blue, #1E3884);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    font-weight: 700;
    flex: none;
}

.cpm-head-text {
    flex: 1;
    min-width: 0;
}

.cpm-head-title {
    font-size: 19px;
    font-weight: 800;
    color: var(--primary-blue, #1E3884);
    margin: 0;
    line-height: 1.2;
}

.cpm-head-sub {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    margin-top: 2px;
}

.cpm-head-close {
    width: 36px;
    height: 36px;
    border-radius: 9px;
    background: #f1f3f7;
    color: var(--text-muted, #6b7280);
    border: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 19px;
    cursor: pointer;
    flex: none;
    transition: background 0.12s, color 0.12s;
}

    .cpm-head-close:hover {
        background: #e5e7eb;
        color: var(--text-primary, #212121);
    }

/* ── Body ── */
.cpm-body {
    padding: 22px 24px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.cpm-section {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.cpm-sechead {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin: 0 0 -2px;
}

/* ── ERP-sync banner ── */
.cpm-erp-banner {
    display: flex;
    align-items: center;
    gap: 10px;
    background: #ecfdf5;
    border: 1px solid #d1fae5;
    border-radius: 10px;
    padding: 11px 14px;
}

.cpm-erp-icon {
    font-size: 16px;
    flex: none;
}

.cpm-erp-text {
    flex: 1;
    font-size: 13px;
    color: #0f5132;
}

.cpm-erp-rowid {
    color: #475569;
}

.cpm-erp-badge {
    font-size: 11px;
    font-weight: 700;
    color: #0f5132;
    background: #d1fae5;
    border-radius: 999px;
    padding: 3px 10px;
    flex: none;
}

/* ── Felter (matcher design tokens: 48px høj, 8px radius, 15px font) ── */
.cpm-fld-wrap {
    display: block;
}

.cpm-fld-lbl {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-muted, #6b7280);
    margin-bottom: 6px;
    display: block;
}

.cpm-fld {
    width: 100%;
    height: 48px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    padding: 0 13px;
    font-size: 15px;
    font-family: inherit;
    color: var(--text-primary, #212121);
    background: var(--surface, #fff);
    outline: none;
    transition: border-color 0.12s, box-shadow 0.12s;
}

    .cpm-fld:focus {
        border-color: var(--primary-blue, #1E3884);
        box-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.18);
    }

    .cpm-fld.is-invalid {
        border-color: #dc2626;
    }

        .cpm-fld.is-invalid:focus {
            box-shadow: 0 0 0 0.2rem rgba(220, 38, 38, 0.18);
        }

.cpm-grid-2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
}

@media (max-width: 540px) {
    .cpm-grid-2 {
        grid-template-columns: 1fr;
    }
}

/* ── Dublet-advarsel ── */
.cpm-warn {
    margin-top: 8px;
    padding: 10px 14px;
    background: rgba(255, 168, 0, 0.10);
    border: 1px solid rgba(255, 168, 0, 0.45);
    border-radius: 8px;
    color: #92400e;
    font-size: 13px;
}

/* ── Footer ── */
.cpm-footer {
    padding: 14px 24px;
    border-top: 1px solid #eef1f7;
    background: #fbfcfe;
    display: flex;
    align-items: center;
    gap: 12px;
}

.cpm-del-btn {
    height: 46px;
    width: 46px;
    border: 1px solid #fecaca;
    border-radius: 9px;
    background: var(--surface, #fff);
    color: #dc2626;
    font-size: 17px;
    cursor: pointer;
    flex: none;
    transition: background 0.12s, border-color 0.12s;
}

    .cpm-del-btn:hover {
        background: #fee2e2;
        border-color: #dc2626;
    }

.cpm-kbd-hints {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.cpm-kbd {
    font-size: 11px;
    font-weight: 600;
    background: #eef1f7;
    color: var(--text-muted, #6b7280);
    padding: 2px 7px;
    border-radius: 6px;
}

.cpm-footer-spacer {
    flex: 1;
}

.cpm-cancel-btn {
    height: 46px;
    padding: 0 20px;
    border-radius: 9px;
    font-size: 15px;
    font-weight: 600;
}

.cpm-save-btn {
    height: 46px;
    padding: 0 26px;
    border: 0;
    border-radius: 9px;
    font-size: 15px;
    font-weight: 700;
}

/* SharedModal-overlap: vores custom header har egen padding, så fjern
   SharedModal's default-styling og padding rundt om dialog-card body. */
.dialog-overlay:has(.cpm-header) .dialog-card,
.dialog-overlay:has(.cpm-header) .dialog-card-wide,
.dialog-overlay:has(.cpm-header) .dialog-card-wider {
    padding: 0;
    max-width: 560px;
    border-radius: 14px;
    overflow: hidden;
    box-shadow: 0 24px 60px rgba(15, 23, 42, 0.4);
    /* Scroll-sikker: alt arvet fra .dialog-card (display:flex; flex-direction:column;
       max-height:calc(100vh - 80px)). Custom .cpm-header/.cpm-footer er flex:none
       så body wrapperen scroller alene. */
}

/* Padding-overrides for CPM-modaler — custom-header/footer bærer egen padding,
   så .dialog-body wrapperen skal ikke have de generiske 2rem. */
.dialog-overlay:has(.cpm-header) .dialog-card > .dialog-body {
    padding: 0;
    overflow: hidden; /* indre .cpm-body styrer selv overflow */
    display: flex;
    flex-direction: column;
    min-height: 0;
}

/* Fast header/footer + scrollende body — matcher design 4's scroll-krav */
.cpm-header,
.cpm-footer {
    flex: none;
}

.cpm-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
}

/* Skjul SharedModal's default error-alert i body — vi viser fejl via
   _error i body selv eller hvis du foretrækker, kan tilføje en banner her. */

/* Dark-mode varianter */
[data-theme="dark"] .cpm-head-icon {
    background: rgba(158, 197, 255, 0.18);
    color: #9ec5ff;
}

[data-theme="dark"] .cpm-head-title {
    color: #9ec5ff;
}

[data-theme="dark"] .cpm-head-close {
    background: var(--surface-alt);
    color: var(--text-muted);
}

    [data-theme="dark"] .cpm-head-close:hover {
        background: var(--border-color);
        color: var(--text-primary);
    }

[data-theme="dark"] .cpm-header,
[data-theme="dark"] .cpm-footer {
    border-color: var(--border-color);
}

[data-theme="dark"] .cpm-footer {
    background: var(--surface-alt);
}

[data-theme="dark"] .cpm-fld {
    background: var(--surface);
    border-color: var(--border-color);
    color: var(--text-primary);
}

[data-theme="dark"] .cpm-sechead {
    color: #9ec5ff;
}

[data-theme="dark"] .cpm-erp-banner {
    background: rgba(16, 185, 129, 0.10);
    border-color: rgba(16, 185, 129, 0.35);
}

[data-theme="dark"] .cpm-erp-text {
    color: #6ee7b7;
}

[data-theme="dark"] .cpm-del-btn {
    background: rgba(220, 38, 38, 0.15);
    border-color: rgba(248, 113, 113, 0.6);
    color: #fca5a5;
}

    [data-theme="dark"] .cpm-del-btn:hover {
        background: rgba(220, 38, 38, 0.35);
        border-color: #fca5a5;
        color: #fff;
    }

[data-theme="dark"] .cpm-kbd {
    background: var(--surface);
    color: var(--text-muted);
}

/* ── ContactPersonModal/DeliveryAddressModal: navy switch-toggle ──
   Matcher design "Håndværker design optimering 4": navy panel når aktiv,
   accent-color: navy på checkbox. Bruges af "⭐ Primær leveringsadresse". */
.cpm-toggle-row {
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 52px;
    padding: 8px 14px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 10px;
    cursor: pointer;
    transition: background 0.12s, border-color 0.12s;
    background: var(--surface, #fff);
    margin: 0;
}

    .cpm-toggle-row:hover {
        background: var(--surface-alt, #f8f9fa);
    }

    .cpm-toggle-row.is-on {
        background: #eef2ff;
        border-color: #c7d2fe;
    }

.cpm-toggle-input {
    flex: none;
    width: 18px;
    height: 18px;
    margin: 0;
    accent-color: var(--primary-blue, #1E3884);
    cursor: pointer;
}

.cpm-toggle-text {
    font-size: 15px;
    color: var(--text-primary, #212121);
    font-weight: 600;
}

    .cpm-toggle-row.is-on .cpm-toggle-text {
        color: #16306f;
    }

.cpm-toggle-hint {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
    margin-left: auto;
}

[data-theme="dark"] .cpm-toggle-row {
    background: var(--surface);
    border-color: var(--border-color);
}

    [data-theme="dark"] .cpm-toggle-row:hover {
        background: var(--surface-alt);
    }

    [data-theme="dark"] .cpm-toggle-row.is-on {
        background: rgba(30, 56, 132, 0.25);
        border-color: rgba(158, 197, 255, 0.5);
    }

        [data-theme="dark"] .cpm-toggle-row.is-on .cpm-toggle-text {
            color: #c7d2fe;
        }

/* Fokus-ring på kd-row-card når tab/arrow-navigeret (Alt+L → Arrow/Enter) */
.kd-row-card[tabindex]:focus-visible {
    outline: 2px solid var(--primary-blue, #1E3884);
    outline-offset: 2px;
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.15);
}

[data-theme="dark"] .kd-row-card[tabindex]:focus-visible {
    outline-color: #9ec5ff;
    border-color: #9ec5ff;
    box-shadow: 0 0 0 0.2rem rgba(158, 197, 255, 0.25);
}

/* ════════════════════════════════════════════════════════════════
   NotesPanel (.np-*) — inline note-panel, design handoff 5.
   Bruges fra både KundeDetalje og SagDetalje Noter-fanen.
   ════════════════════════════════════════════════════════════════ */

.np-panel {
    padding: 0;
}

.np-head-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 18px;
    flex-wrap: wrap;
}

.np-head-left {
    display: flex;
    align-items: center;
    gap: 10px;
}

.np-head {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin: 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

    .np-head::before {
        content: "";
        width: 4px;
        height: 14px;
        border-radius: 2px;
        background: var(--accent, #FFA800);
        flex: none;
    }

.np-counter {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
}

.np-create-btn {
    height: 40px;
    padding: 0 16px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
}

.np-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
    gap: 12px;
    align-items: start;
}

.np-card {
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #eef0f4);
    border-radius: 12px;
    padding: 15px 17px;
    transition: box-shadow 0.12s, border-color 0.12s;
    cursor: pointer;
}

    .np-card:hover {
        border-color: #dfe4ee;
        box-shadow: 0 3px 10px rgba(30, 56, 132, 0.07);
    }

    .np-card:focus-visible {
        outline: 2px solid var(--primary-blue, #1E3884);
        outline-offset: 2px;
        border-color: var(--primary-blue, #1E3884);
        box-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.18);
    }

.np-card-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
}

.np-card-title-wrap {
    min-width: 0;
    flex: 1;
}

.np-card-title {
    font-size: 15.5px;
    font-weight: 700;
    color: var(--text-primary, #212121);
}

.np-card-date {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
    margin-left: 8px;
    font-weight: normal;
}

.np-card-body {
    font-size: 13.5px;
    color: var(--text-muted, #6b7280);
    line-height: 1.5;
    margin: 6px 0 0;
}

.np-row-actions {
    display: flex;
    gap: 6px;
    flex: none;
}

.np-card {
    position: relative;
}

/* Note-picker (Enter på fokuseret kort viser handlings-menu) — bruges af både
   NotesPanel og Noter-page. Stiles globalt i app.css så den deles. */
/* Note-picker (Enter på fokuseret kort viser handlings-menu) — bruges af både
   NotesPanel (.np-card) og Noter-page (.note-card). Global så den deles. */
.note-picker {
    position: absolute;
    inset: 0;
    background: var(--surface);
    border: 2px solid var(--primary-blue, #1E3884);
    border-radius: 12px;
    padding: 12px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    z-index: 5;
    box-shadow: 0 12px 32px rgba(15, 23, 42, 0.18);
}

.note-picker-head {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin-bottom: 4px;
}

.note-picker-item {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    border: 1px solid transparent;
    background: transparent;
    color: var(--text-primary);
    padding: 8px 10px;
    border-radius: 6px;
    font-size: 14px;
    text-align: left;
    cursor: pointer;
    transition: background 0.1s, border-color 0.1s;
}

.note-picker-item:hover,
.note-picker-item.active,
.note-picker-item:focus-visible {
    background: rgba(30, 56, 132, 0.08);
    border-color: var(--primary-blue, #1E3884);
    outline: none;
}

.note-picker-ico {
    width: 22px;
    text-align: center;
    flex: none;
}

.note-picker-hint {
    margin-top: auto;
    font-size: 11px;
    color: var(--text-muted);
    text-align: center;
    padding-top: 6px;
    border-top: 1px solid var(--border-color);
}

[data-theme="dark"] .note-picker {
    background: var(--surface);
    border-color: #9ec5ff;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.5);
}

[data-theme="dark"] .note-picker-head {
    color: #9ec5ff;
}

[data-theme="dark"] .note-picker-item:hover,
[data-theme="dark"] .note-picker-item.active,
[data-theme="dark"] .note-picker-item:focus-visible {
    background: rgba(158, 197, 255, 0.14);
    border-color: #9ec5ff;
}

.np-ico-btn {
    width: 34px;
    height: 34px;
    border-radius: 8px;
    border: 1px solid var(--border-color, #dee2e6);
    background: var(--surface, #fff);
    cursor: pointer;
    font-size: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--text-muted, #6b7280);
    transition: background 0.1s, border-color 0.1s, color 0.1s;
    padding: 0;
}

    .np-ico-btn:hover {
        background: #f8fafc;
    }

.np-ico-btn-primary {
    color: var(--primary-blue, #1E3884);
    border-color: #c7d2fe;
}

    .np-ico-btn-primary:hover {
        background: #eef2ff;
    }

.np-ico-btn-success {
    color: #0f5132;
    border-color: #bbe5cc;
}

    .np-ico-btn-success:hover {
        background: #d1fae5;
    }

.np-ico-btn-danger {
    color: #dc2626;
    border-color: #fecaca;
}

    .np-ico-btn-danger:hover {
        background: #fee2e2;
    }

.np-card-checklist {
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid #f1f3f7;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.np-checklist-item {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: 13.5px;
    color: #374151;
    cursor: pointer;
    margin: 0;
}

    .np-checklist-item.done {
        color: var(--text-muted, #9ca3af);
    }

        .np-checklist-item.done span:last-child {
            text-decoration: line-through;
        }

.np-checklist-progress {
    font-size: 11.5px;
    color: var(--text-muted, #9ca3af);
    font-weight: 600;
}

.np-chk {
    width: 20px;
    height: 20px;
    border-radius: 6px;
    border: 2px solid #cbd5e1;
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    background: var(--surface, #fff);
    color: transparent;
    font-size: 12px;
    font-weight: 700;
    padding: 0;
    line-height: 1;
    transition: background 0.1s, border-color 0.1s;
}

    .np-chk.on {
        background: #1E8A5B;
        border-color: #1E8A5B;
        color: #fff;
    }

    .np-chk:hover {
        border-color: var(--primary-blue, #1E3884);
    }

.np-card-done {
    background: #fbfdfb;
    cursor: default;
}

    .np-card-done:hover {
        border-color: var(--border-color, #eef0f4);
        box-shadow: none;
    }

.np-done-check {
    color: #1E8A5B;
    margin-right: 4px;
}

.np-card-title-done {
    font-size: 15px;
    color: var(--text-muted, #9ca3af);
    text-decoration: line-through;
    font-weight: 600;
}

.np-card-date-done {
    color: #bcc3cf;
}

.np-card-body-done {
    color: #bcc3cf;
}

.np-checklist-done {
    opacity: 0.8;
}

.np-divider {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 20px 0 12px;
}

    .np-divider > span:first-child {
        font-size: 11.5px;
        font-weight: 700;
        color: var(--text-muted, #9ca3af);
        text-transform: uppercase;
        letter-spacing: 0.06em;
    }

.np-divider-line {
    flex: 1;
    height: 1px;
    background: var(--border-color, #eef0f4);
}

.np-form {
    border: 1px solid #c7d2fe;
    background: #fbfcff;
    border-radius: 12px;
    padding: 16px 17px;
    margin-bottom: 16px;
}

.np-form-head {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin-bottom: 12px;
}

.np-fld-wrap {
    display: block;
    margin-bottom: 12px;
}

.np-fld-lbl {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-muted, #6b7280);
    margin-bottom: 6px;
    display: block;
}

.np-fld {
    width: 100%;
    height: 46px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    padding: 0 13px;
    font-size: 15px;
    font-family: inherit;
    color: var(--text-primary, #212121);
    background: var(--surface, #fff);
    outline: none;
    transition: border-color 0.1s, box-shadow 0.1s;
}

    .np-fld:focus {
        border-color: var(--primary-blue, #1E3884);
        box-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.18);
    }

.np-fld-sm {
    height: 40px;
    flex: 1;
}

.np-textarea {
    height: auto;
    min-height: 74px;
    padding: 11px 13px;
    resize: vertical;
    line-height: 1.5;
}

.np-form-items {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.np-form-item-row {
    display: flex;
    align-items: center;
    gap: 9px;
}

.np-add-item-btn {
    height: 36px;
    margin-top: 10px;
    padding: 0 14px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    background: var(--surface, #fff);
    color: var(--text-primary, #374151);
    font-size: 13.5px;
    font-weight: 600;
    cursor: pointer;
}

    .np-add-item-btn:hover {
        background: #f8fafc;
        border-color: var(--primary-blue, #1E3884);
        color: var(--primary-blue, #1E3884);
    }

.np-form-actions {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
    margin-top: 4px;
}

.np-empty {
    padding: 34px;
    text-align: center;
    color: var(--text-muted, #9ca3af);
    font-size: 14px;
    border: 2px dashed #e5e7eb;
    border-radius: 12px;
}

[data-theme="dark"] .np-card {
    background: var(--surface);
    border-color: var(--border-color);
}

    [data-theme="dark"] .np-card:hover {
        border-color: var(--secondary-blue, #9ec5ff);
        box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
    }

[data-theme="dark"] .np-card-done {
    background: rgba(30, 138, 91, 0.06);
}

[data-theme="dark"] .np-form {
    background: rgba(158, 197, 255, 0.06);
    border-color: rgba(158, 197, 255, 0.35);
}

[data-theme="dark"] .np-fld {
    background: var(--surface);
    border-color: var(--border-color);
    color: var(--text-primary);
}

[data-theme="dark"] .np-ico-btn {
    background: var(--surface);
    border-color: var(--border-color);
}

    [data-theme="dark"] .np-ico-btn:hover {
        background: var(--surface-alt);
    }

/* Per-variant dark-mode farver: original navy/dark-green forsvinder på mørk bg,
   så vi bruger lysere accent-toner der popper og bevarer betydningen
   (blå=redigér, grøn=færdig, rød=slet). */
[data-theme="dark"] .np-ico-btn-primary {
    color: #9ec5ff;
    border-color: rgba(158, 197, 255, 0.4);
}

    [data-theme="dark"] .np-ico-btn-primary:hover {
        background: rgba(158, 197, 255, 0.12);
        border-color: #9ec5ff;
    }

[data-theme="dark"] .np-ico-btn-success {
    color: #6ee7b7;
    border-color: rgba(110, 231, 183, 0.4);
}

    [data-theme="dark"] .np-ico-btn-success:hover {
        background: rgba(110, 231, 183, 0.12);
        border-color: #6ee7b7;
    }

[data-theme="dark"] .np-ico-btn-danger {
    color: #fca5a5;
    border-color: rgba(248, 113, 113, 0.45);
}

    [data-theme="dark"] .np-ico-btn-danger:hover {
        background: rgba(220, 38, 38, 0.18);
        border-color: #f87171;
    }

[data-theme="dark"] .np-chk {
    background: var(--surface);
    border-color: var(--border-color);
}

    [data-theme="dark"] .np-chk.on {
        background: #1E8A5B;
        border-color: #1E8A5B;
    }

[data-theme="dark"] .np-add-item-btn {
    background: var(--surface);
    border-color: var(--border-color);
    color: var(--text-primary);
}

    [data-theme="dark"] .np-add-item-btn:hover {
        background: var(--surface-alt);
        border-color: #9ec5ff;
        color: #9ec5ff;
    }

[data-theme="dark"] .np-empty {
    border-color: var(--border-color);
    color: var(--text-muted);
}


/* ════════════════════════════════════════════════════════════════
   SagDetalje Oversigt-fanen — 2-spaltet layout (design 7).
   Brugt af /sager/* Oversigt-fanen til Sag+Kunde (venstre) og
   Ansvar+Detaljer+Fakturering (højre).
   ════════════════════════════════════════════════════════════════ */
.kd-2col-layout {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    max-width: 1100px;
}

.kd-2col-left,
.kd-2col-right {
    display: flex;
    flex-direction: column;
    gap: 16px;
    min-width: 0;
}

@media (max-width: 900px) {
    .kd-2col-layout {
        grid-template-columns: 1fr;
    }
}

/* ════════════════════════════════════════════════════════════════════
   Medarbejder-modal (design 18): tab-bar med underline-on-active og
   altid-synlige Alt-hint badges. Globalt fordi SharedModal renderer
   en separat scoped subtree der ikke kan nås med ::deep fra Medar-
   bejdere.razor.css.
   ════════════════════════════════════════════════════════════════════ */
.mb-tabs {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
    margin: 0 -0.5rem 1rem;
    padding: 0 6px;
    overflow-x: auto;
    flex-wrap: nowrap;
}

.mb-tab {
    position: relative;
    height: 46px;
    padding: 0 16px;
    border: 0;
    background: transparent;
    color: var(--text-secondary, #787b84);
    font-size: 14.5px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    transition: color .15s;
}

.mb-tab:hover {
    color: var(--primary-blue, #1E3884);
}

.mb-tab.on {
    color: var(--primary-blue, #1E3884);
}

.mb-tab.on::after {
    content: "";
    position: absolute;
    left: 12px;
    right: 12px;
    bottom: -1px;
    height: 3px;
    border-radius: 3px 3px 0 0;
    background: var(--primary-blue, #1E3884);
}

.mb-tab-kbd {
    font-size: 9.5px;
    font-weight: 800;
    background: var(--surface-alt, #f8fafc);
    color: var(--text-secondary, #787b84);
    padding: 1px 5px;
    border-radius: 5px;
    line-height: 1.6;
    letter-spacing: 0.02em;
}

.mb-tab.on .mb-tab-kbd {
    background: rgba(30, 56, 132, 0.10);
    color: var(--primary-blue, #1E3884);
}

[data-theme="dark"] .mb-tab.on {
    color: var(--secondary-blue, #2096CB);
}

[data-theme="dark"] .mb-tab.on::after {
    background: var(--secondary-blue, #2096CB);
}

[data-theme="dark"] .mb-tab.on .mb-tab-kbd {
    background: rgba(32, 150, 203, 0.15);
    color: var(--secondary-blue, #2096CB);
}

/* Sektion-headers (kd-grphead) inde i modal-grid: ensartet top-margin
   pr. søjle så første header lå pænt op til toppen. */
.modal-grid .kd-grphead {
    margin-top: 1.25rem;
}

.modal-grid .kd-grphead:first-child {
    margin-top: 0;
}

/* ════════════════════════════════════════════════════════════════════
   Lønartsgrupper (design 24): tabs med 3px brand-blå underline +
   altid-synlige Alt-hint badges. Globalt så det matcher mb-tabs.
   ════════════════════════════════════════════════════════════════════ */
.lg-tabs {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
    margin: 0 -0.5rem 1rem;
    padding: 0 6px;
    overflow-x: auto;
    flex-wrap: nowrap;
}

.lg-tab {
    position: relative;
    height: 46px;
    padding: 0 16px;
    border: 0;
    background: transparent;
    color: var(--text-secondary, #787b84);
    font-size: 14.5px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    transition: color .15s;
}

.lg-tab:hover {
    color: var(--primary-blue, #1E3884);
}

.lg-tab.on {
    color: var(--primary-blue, #1E3884);
}

.lg-tab.on::after {
    content: "";
    position: absolute;
    left: 12px;
    right: 12px;
    bottom: -1px;
    height: 3px;
    border-radius: 3px 3px 0 0;
    background: var(--primary-blue, #1E3884);
}

.lg-tab-kbd {
    font-size: 9.5px;
    font-weight: 800;
    background: var(--surface-alt, #f8fafc);
    color: var(--text-secondary, #787b84);
    padding: 1px 5px;
    border-radius: 5px;
    line-height: 1.6;
    letter-spacing: 0.02em;
}

.lg-tab.on .lg-tab-kbd {
    background: rgba(30, 56, 132, 0.10);
    color: var(--primary-blue, #1E3884);
}

[data-theme="dark"] .lg-tab.on {
    color: var(--secondary-blue, #2096CB);
}

[data-theme="dark"] .lg-tab.on::after {
    background: var(--secondary-blue, #2096CB);
}

[data-theme="dark"] .lg-tab.on .lg-tab-kbd {
    background: rgba(32, 150, 203, 0.15);
    color: var(--secondary-blue, #2096CB);
}

/* ════════════════════════════════════════════════════════════════════
   Standard Arter (design 25): centreret ~680px-shell med stackede
   felter, grupperede kort + footer med Annullér + Gem.
   ════════════════════════════════════════════════════════════════════ */
.sa-shell {
    max-width: 680px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.sa-section-hint {
    color: var(--text-muted, #6c757d);
    font-size: 13px;
    line-height: 1.5;
    margin: -8px 0 16px;
}

.sa-footer {
    display: flex;
    justify-content: flex-end;
    gap: 0.6rem;
    margin-top: 0;
}

.sa-footer .btn {
    height: 46px;
    padding: 0 22px;
    border-radius: 8px;
    font-size: 15px;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none;
    line-height: 1;
}

/* ════════════════════════════════════════════════════════════════════
   Nummerserier (design 27): 920px-shell med 4 serie-kort i 2-col grid,
   hver med icon + navn + auto-toggle, Næste + Præfiks, og live eksempel.
   ════════════════════════════════════════════════════════════════════ */
.ns-shell {
    max-width: 920px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0;
}

.ns-description {
    font-size: 13.5px;
    color: var(--text-muted, #6c757d);
    max-width: 620px;
    line-height: 1.5;
    margin: 0 0 18px;
}

.ns-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

@media (max-width: 768px) {
    .ns-grid {
        grid-template-columns: 1fr;
    }
}

.ns-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 14px;
}

.ns-card-ico {
    width: 38px;
    height: 38px;
    border-radius: 10px;
    background: var(--surface-alt, #f8fafc);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex: none;
}

.ns-card-name {
    font-size: 15px;
    font-weight: 800;
    color: var(--text-primary, #1f2937);
    flex: 1;
}

.ns-card-switch .form-check-input {
    width: 2.5em;
    height: 1.5em;
    cursor: pointer;
}

.ns-card-switch .form-check-input:checked {
    background-color: #1E8A5B;
    border-color: #1E8A5B;
}

.ns-preview-row {
    margin-top: 12px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.ns-preview-label {
    font-size: 12px;
    color: var(--text-muted, #6c757d);
}

.ns-preview-value {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13px;
    font-weight: 700;
    background: var(--surface-alt, #f8fafc);
    color: var(--primary-blue, #1E3884);
    padding: 4px 10px;
    border-radius: 6px;
    border: 1px solid var(--border-color, #dee2e6);
}

[data-theme="dark"] .ns-preview-value {
    color: var(--secondary-blue, #2096CB);
}

.ns-footer {
    margin-top: 18px;
}

/* ════════════════════════════════════════════════════════════════════
   E-Faktura (design 28): centreret-venstre shell med grupperede kort
   for virksomhedsdata, NemHandel, Peppol BIS 3 og deaktivering.
   ════════════════════════════════════════════════════════════════════ */
.ef-shell {
    max-width: 820px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.ef-subtitle {
    font-size: 13.5px;
    color: var(--text-muted, #6c757d);
    line-height: 1.5;
    margin: 0 0 8px;
    max-width: 620px;
}

.ef-mono {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 1.05rem;
    font-weight: 700;
    background: var(--surface-alt, #f8fafc);
    color: var(--primary-blue, #1E3884);
    padding: 4px 12px;
    border-radius: 6px;
    border: 1px solid var(--border-color, #dee2e6);
    display: inline-block;
}

[data-theme="dark"] .ef-mono {
    color: var(--secondary-blue, #2096CB);
}

/* ════════════════════════════════════════════════════════════════════
   Planlægningsindstillinger (design 29): grupperede kort, kategori-
   tabel med farve-swatch + ny kategori-modal med farvevælger og hex.
   ════════════════════════════════════════════════════════════════════ */
.pi-shell {
    max-width: 820px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.pi-color-swatch {
    display: inline-block;
    width: 28px;
    height: 28px;
    border-radius: 6px;
    border: 1px solid var(--border-color, #dee2e6);
    vertical-align: middle;
}

/* Ny kategori-modal: backdrop + center-positioneret modal-kort */
.pi-cat-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.5);
    z-index: 1000;
}

.pi-cat-modal {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 1001;
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 14px;
    min-width: 440px;
    max-width: 90vw;
    box-shadow: 0 24px 60px rgba(15, 23, 42, 0.4);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.pi-cat-modal-head {
    padding: 16px 22px 12px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.pi-cat-modal-head h4 {
    margin: 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary-blue, #1E3884);
}

[data-theme="dark"] .pi-cat-modal-head h4 {
    color: var(--secondary-blue, #2096CB);
}

.pi-cat-modal-close {
    width: 34px;
    height: 34px;
    border-radius: 9px;
    background: var(--surface-alt, #f8fafc);
    color: var(--text-muted, #6c757d);
    border: 1px solid var(--border-color, #dee2e6);
    cursor: pointer;
    font-size: 18px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.pi-cat-modal-close:hover {
    color: var(--text-primary, #1f2937);
}

.pi-cat-modal-body {
    padding: 18px 22px;
}

.pi-cat-modal-foot {
    padding: 13px 22px;
    border-top: 1px solid var(--border-color, #dee2e6);
    background: var(--surface-alt, #f8fafc);
    display: flex;
    justify-content: flex-end;
    gap: 0.5rem;
}

/* Swatch-række (hurtige farvevalg) */
.pi-color-swatches {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}

.pi-swatch {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    border: 2px solid transparent;
    cursor: pointer;
    padding: 0;
    transition: border-color .15s, transform .1s;
}

.pi-swatch:hover {
    transform: scale(1.08);
}

.pi-swatch.selected {
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 0 0 2px rgba(30, 56, 132, 0.18);
}

[data-theme="dark"] .pi-swatch.selected {
    border-color: var(--secondary-blue, #2096CB);
    box-shadow: 0 0 0 2px rgba(32, 150, 203, 0.25);
}

/* Custom farvevælger (system color-picker + hex-input side-by-side) */
.pi-color-custom {
    display: flex;
    align-items: center;
    gap: 10px;
}

.pi-color-input {
    width: 46px;
    height: 38px;
    padding: 2px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    cursor: pointer;
    background: var(--surface, #fff);
}

.pi-hex-input {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    text-transform: uppercase;
    max-width: 140px;
}

/* ════════════════════════════════════════════════════════════════════
   Aktivitetstyper (design 30): "Kræver godkendelse" som klikbart
   bordered card med checkbox-ikon (matcher prototypens .cbox-pattern).
   ════════════════════════════════════════════════════════════════════ */
.akt-approval-card {
    display: flex;
    align-items: center;
    gap: 11px;
    min-height: 50px;
    padding: 0 14px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 9px;
    cursor: pointer;
    background: var(--surface, #fff);
    transition: border-color .15s, background .15s;
    margin: 0;
}

.akt-approval-card:hover {
    border-color: var(--primary-blue, #1E3884);
}

.akt-approval-card.on {
    border-color: var(--primary-blue, #1E3884);
    background: rgba(30, 56, 132, 0.04);
}

.akt-approval-cbox {
    width: 22px;
    height: 22px;
    border-radius: 6px;
    border: 2px solid var(--border-color, #dee2e6);
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: transparent;
    font-size: 13px;
    font-weight: 700;
    transition: background .15s, border-color .15s, color .15s;
}

.akt-approval-card.on .akt-approval-cbox {
    background: var(--primary-blue, #1E3884);
    border-color: var(--primary-blue, #1E3884);
    color: #fff;
}

.akt-approval-label {
    font-size: 14px;
    color: var(--text-primary, #1f2937);
    user-select: none;
}

.akt-approval-hint {
    color: var(--text-muted, #6c757d);
    font-size: 12.5px;
    margin-left: 4px;
}

[data-theme="dark"] .akt-approval-card.on {
    background: rgba(58, 90, 170, 0.12);
    border-color: var(--secondary-blue, #2096CB);
}

[data-theme="dark"] .akt-approval-card.on .akt-approval-cbox {
    background: var(--secondary-blue, #2096CB);
    border-color: var(--secondary-blue, #2096CB);
}

/* Aktivitetstyper farvevælger — globalt fordi swatches renderes inde i
   SharedModal's egen scope-tree (scoped CSS i Aktivitetstyper.razor.css
   når dem ikke). */
.act-color-dot {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    vertical-align: middle;
}

.act-color-picker {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}

.act-color-swatch {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    border: 2px solid transparent;
    cursor: pointer;
    padding: 0;
    transition: border-color .1s, transform .1s;
}

.act-color-swatch:hover {
    transform: scale(1.08);
}

.act-color-swatch.selected {
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 0 0 2px rgba(30, 56, 132, 0.18);
}

[data-theme="dark"] .act-color-swatch.selected {
    border-color: var(--secondary-blue, #2096CB);
    box-shadow: 0 0 0 2px rgba(32, 150, 203, 0.25);
}

/* Egen-farve picker (system color picker + hex tekstfelt) under swatches */
.act-color-custom {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 10px;
}

.act-color-input {
    width: 46px;
    height: 38px;
    padding: 2px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    cursor: pointer;
    background: var(--surface, #fff);
}

.act-color-hex {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    text-transform: uppercase;
    max-width: 140px;
}

/* ════════════════════════════════════════════════════════════════════
   Beskedskabeloner (design 33): sprog-toggle (DA/EN) + pladsholder-
   panel med klikbare chips i modalen.
   ════════════════════════════════════════════════════════════════════ */
.bs-lang-toggle {
    display: inline-flex;
    gap: 4px;
    background: var(--surface-alt, #f8fafc);
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 9px;
    padding: 4px;
}

.bs-lang-btn {
    height: 32px;
    padding: 0 14px;
    border: 0;
    background: transparent;
    color: var(--text-muted, #6c757d);
    font-size: 13px;
    font-weight: 700;
    font-family: inherit;
    cursor: pointer;
    border-radius: 6px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    transition: background .15s, color .15s;
}

.bs-lang-btn:hover {
    color: var(--primary-blue, #1E3884);
}

.bs-lang-btn.on {
    background: var(--primary-blue, #1E3884);
    color: #fff;
}

[data-theme="dark"] .bs-lang-btn.on {
    background: var(--secondary-blue, #2096CB);
}

/* Pladsholder-panel — blå info-tone matchende design 33 */
.bs-placeholders {
    background: rgba(30, 64, 175, 0.06);
    border: 1px solid rgba(30, 64, 175, 0.25);
    border-radius: 10px;
    padding: 12px 14px;
}

[data-theme="dark"] .bs-placeholders {
    background: rgba(32, 150, 203, 0.10);
    border-color: rgba(32, 150, 203, 0.30);
}

.bs-placeholders-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
    color: var(--text-primary, #1f2937);
    font-size: 13px;
}

.bs-placeholders-hint {
    margin-left: auto;
    font-size: 11.5px;
    color: var(--text-muted, #6c757d);
    font-style: italic;
}

.bs-placeholders-list {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.bs-placeholder-chip {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 11.5px;
    font-weight: 600;
    background: var(--surface, #fff);
    color: var(--primary-blue, #1E40af);
    border: 1px solid rgba(30, 64, 175, 0.30);
    border-radius: 6px;
    padding: 3px 8px;
    cursor: pointer;
    transition: background .12s, border-color .12s, transform .1s;
}

.bs-placeholder-chip:hover {
    background: rgba(30, 64, 175, 0.10);
    border-color: rgba(30, 64, 175, 0.50);
    transform: translateY(-1px);
}

[data-theme="dark"] .bs-placeholder-chip {
    color: var(--secondary-blue, #2096CB);
    border-color: rgba(32, 150, 203, 0.30);
}

[data-theme="dark"] .bs-placeholder-chip:hover {
    background: rgba(32, 150, 203, 0.15);
}

/* ════════════════════════════════════════════════════════════════════
   Periodestyring (design 34): grupperede kort med form-rækker for
   periodelås + undtagelser + handlingslog med farve-badges.
   ════════════════════════════════════════════════════════════════════ */
.ps-shell {
    max-width: 1000px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.ps-form-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: flex-end;
}

.ps-field {
    display: flex;
    flex-direction: column;
}

.ps-field .form-label {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-muted, #6c757d);
    margin-bottom: 5px;
}

.ps-action-btn {
    height: calc(2.25rem + 2px); /* matcher form-control standard højde */
    white-space: nowrap;
}

.ps-subhead {
    font-size: 12.5px;
    font-weight: 700;
    color: var(--text-muted, #6c757d);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin: 16px 0 10px;
}

/* Aktiv lås-banner — rød tone matcher prototype */
.ps-locked-banner {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border: 1px solid rgba(185, 28, 28, 0.30);
    background: rgba(185, 28, 28, 0.08);
    color: #b91c1c;
    border-radius: 9px;
    margin-bottom: 16px;
}

[data-theme="dark"] .ps-locked-banner {
    background: rgba(220, 38, 38, 0.15);
    color: #fca5a5;
    border-color: rgba(252, 165, 165, 0.30);
}

/* Action-badges i handlingsloggen — pastel-toner pr. tilstand */
.ps-action-badge {
    display: inline-block;
    font-size: 11px;
    font-weight: 700;
    padding: 3px 9px;
    border-radius: 999px;
    line-height: 1.5;
    letter-spacing: 0.02em;
}

.ps-badge-locked {
    background: #fee2e2;
    color: #b91c1c;
}

.ps-badge-opened {
    background: #d1fae5;
    color: #0f5132;
}

.ps-badge-exception {
    background: #eff6ff;
    color: #1e40af;
}

.ps-badge-revoked {
    background: #fef3c7;
    color: #92400e;
}

.ps-badge-neutral {
    background: var(--surface-alt, #f8fafc);
    color: var(--text-muted, #6c757d);
}

[data-theme="dark"] .ps-badge-locked {
    background: rgba(220, 38, 38, 0.20);
    color: #fca5a5;
}

[data-theme="dark"] .ps-badge-opened {
    background: rgba(34, 197, 94, 0.20);
    color: #86efac;
}

[data-theme="dark"] .ps-badge-exception {
    background: rgba(59, 130, 246, 0.20);
    color: #93c5fd;
}

[data-theme="dark"] .ps-badge-revoked {
    background: rgba(217, 119, 6, 0.20);
    color: #fde68a;
}

/* ════════════════════════════════════════════════════════════════════
   Favoritvarer (design 37): 2-kolonne layout med mappe-træ (venstre)
   og vare-liste (højre). Aktiv mappe får navy fyld + hvid tekst.
   ════════════════════════════════════════════════════════════════════ */
.fav-layout {
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 16px;
    align-items: start;
}

@media (max-width: 768px) {
    .fav-layout {
        grid-template-columns: 1fr;
    }
}

.fav-tree-panel {
    padding: 0;
    overflow: hidden;
}

.fav-tree-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 18px 12px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
}

.fav-tree-body {
    max-height: 60vh;
    overflow-y: auto;
    padding: 8px 0;
}

.fav-tree-info {
    border-top: 1px solid var(--border-color, #dee2e6);
    padding: 8px 14px;
    font-size: 12px;
    color: var(--text-muted, #6c757d);
}

.fav-tree-item {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 7px 12px;
    cursor: pointer;
    font-size: 14px;
    color: var(--text-primary, #1f2937);
    border-radius: 6px;
    margin: 1px 8px;
    transition: background .12s, color .12s;
    user-select: none;
}

.fav-tree-item:hover {
    background: var(--surface-alt, #f8fafc);
}

.fav-tree-selected {
    background: var(--primary-blue, #1E3884) !important;
    color: #fff;
    font-weight: 600;
}

.fav-tree-selected:hover {
    background: var(--primary-blue-hover, #162a63) !important;
}

[data-theme="dark"] .fav-tree-selected {
    background: var(--secondary-blue, #2096CB) !important;
}

.fav-tree-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    cursor: pointer;
    color: inherit;
    flex: none;
    font-size: 11px;
}

.fav-product-panel {
    padding: 0;
    overflow: hidden;
}

.fav-product-header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 16px 18px 12px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
}

.fav-product-panel .fav-product-header + * {
    padding: 14px 18px 0;
}

.fav-product-count {
    font-size: 12px;
    background: var(--surface-alt, #f8fafc);
    color: var(--text-muted, #6c757d);
    padding: 2px 8px;
    border-radius: 999px;
    border: 1px solid var(--border-color, #dee2e6);
}

.fav-product-panel table {
    margin: 0;
}

.fav-product-panel > div[class*="position-relative"],
.fav-product-panel > table,
.fav-product-panel > .table-responsive {
    padding: 0 18px 18px;
}

/* Favoritmappe-modal (Ny/Omdøb) — center-positioneret kort */
.fav-folder-modal {
    max-width: 400px;
    padding: 20px 22px;
    background: var(--surface, #fff);
    border-radius: 14px;
    border: 1px solid var(--border-color, #dee2e6);
}

.fav-folder-modal-title {
    margin: 0 0 16px;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary-blue, #1E3884);
}

[data-theme="dark"] .fav-folder-modal-title {
    color: var(--secondary-blue, #2096CB);
}

/* ════════════════════════════════════════════════════════════════════
   Tjeklister (design 38): 2-kolonne layout med skabelon-liste til
   venstre og editor til højre. Aktiv skabelon = navy fyld + hvid tekst.
   ════════════════════════════════════════════════════════════════════ */
.tj-layout {
    display: grid;
    grid-template-columns: 260px 1fr;
    gap: 16px;
    align-items: start;
}

@media (max-width: 768px) {
    .tj-layout {
        grid-template-columns: 1fr;
    }
}

.tj-list-panel {
    padding: 0;
    overflow: hidden;
}

.tj-list-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 18px 12px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
}

.tj-list-body {
    max-height: 70vh;
    overflow-y: auto;
    padding: 8px;
}

.tj-template-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 12px;
    cursor: pointer;
    font-size: 14px;
    color: var(--text-primary, #1f2937);
    border-radius: 6px;
    margin: 1px 0;
    transition: background .12s, color .12s;
    user-select: none;
}

.tj-template-item:hover {
    background: var(--surface-alt, #f8fafc);
}

.tj-template-name {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tj-template-count {
    font-size: 12px;
    opacity: 0.7;
    flex: none;
}

.tj-template-selected {
    background: var(--primary-blue, #1E3884) !important;
    color: #fff;
    font-weight: 600;
}

.tj-template-selected:hover {
    background: var(--primary-blue-hover, #162a63) !important;
}

[data-theme="dark"] .tj-template-selected {
    background: var(--secondary-blue, #2096CB) !important;
}

.tj-template-inactive {
    opacity: 0.55;
    font-style: italic;
}

.tj-editor-panel {
    display: flex;
    flex-direction: column;
}

.tj-fields-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin-bottom: 14px;
    flex-wrap: wrap;
}

.tj-add-buttons {
    margin-left: auto;
}

.tj-add-buttons .btn {
    font-size: 12.5px;
    height: 32px;
    padding: 0 10px;
}

/* ════════════════════════════════════════════════════════════════════
   Avancetabel (designer-pattern): Eksempel-preview-boks i modalen
   med beregnet salgspris baseret på avance%.
   ════════════════════════════════════════════════════════════════════ */
.av-preview {
    background: var(--surface-alt, #f8fafc);
    border: 1px solid var(--border-color, #dee2e6);
    border-left: 4px solid var(--primary-blue, #1E3884);
    border-radius: 8px;
    padding: 12px 14px;
    margin-top: 8px;
}

[data-theme="dark"] .av-preview {
    border-left-color: var(--secondary-blue, #2096CB);
}

.av-preview-label {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--primary-blue, #1E3884);
    margin-bottom: 6px;
}

[data-theme="dark"] .av-preview-label {
    color: var(--secondary-blue, #2096CB);
}

.av-preview-formula {
    font-size: 14px;
    color: var(--text-primary, #1f2937);
    line-height: 1.5;
}

/* ════════════════════════════════════════════════════════════════════
   VareMapping (design 41): mono-cells for varenr/konto, wildcard-pille
   (gul) for ★ Alle, søge-toolbar, hover-actions.
   ════════════════════════════════════════════════════════════════════ */
.vm-toolbar {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
}

.vm-search {
    flex: 1;
    min-width: 240px;
}

.vm-table {
    font-size: 13.5px;
}

.vm-table thead th {
    background: var(--surface-alt, #f8fafc);
    font-size: 12px;
    font-weight: 700;
    color: var(--text-muted, #6c757d);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    padding: 10px 14px;
    border-bottom: 1px solid var(--border-color, #dee2e6);
}

.vm-table tbody td {
    padding: 10px 14px;
    vertical-align: middle;
    border-bottom: 1px solid var(--border-color, #dee2e6);
}

.vm-table tbody tr:last-child td {
    border-bottom: none;
}

.vm-row:hover .vm-actions {
    opacity: 1;
}

.vm-actions {
    opacity: 0.3;
    transition: opacity .12s;
    white-space: nowrap;
}

.vm-actions .btn {
    padding: 2px 8px;
}

.vm-row:hover .vm-actions .btn {
    transform: none;
}

/* Mono-celle for varenumre/konto */
.vm-code {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13px;
    background: var(--surface-alt, #f8fafc);
    color: var(--text-primary, #1f2937);
    padding: 2px 8px;
    border-radius: 5px;
    border: 1px solid var(--border-color, #dee2e6);
    display: inline-block;
}

.vm-code-brand {
    color: var(--primary-blue, #1E3884);
    font-weight: 700;
}

[data-theme="dark"] .vm-code-brand {
    color: var(--secondary-blue, #2096CB);
}

/* Wildcard-pille (★ Alle) — gul tone matcher prototype */
.vm-wildcard-pill {
    display: inline-block;
    font-size: 11.5px;
    font-weight: 700;
    background: #fef3c7;
    color: #92400e;
    padding: 3px 10px;
    border-radius: 999px;
    letter-spacing: 0.02em;
}

[data-theme="dark"] .vm-wildcard-pill {
    background: rgba(217, 119, 6, 0.20);
    color: #fde68a;
}

/* Mono-input til varenr/konto i modalen */
.vm-mono-input {
    font-family: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;
    letter-spacing: 0.02em;
}

/* Vare-søg-suggestions-dropdown */
.vm-suggestions {
    position: absolute;
    z-index: 1050;
    width: 100%;
    max-height: 220px;
    overflow-y: auto;
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 6px;
    box-shadow: 0 6px 16px rgba(15, 23, 42, 0.12);
    margin-top: 2px;
}

.vm-suggestion-item {
    padding: 8px 12px;
    cursor: pointer;
    font-size: 14px;
    color: var(--text-primary, #1f2937);
    border-bottom: 1px solid var(--border-color, #eef0f4);
    display: flex;
    align-items: center;
}

.vm-suggestion-item:last-child {
    border-bottom: none;
}

.vm-suggestion-item:hover,
.vm-suggestion-active {
    background: var(--surface-alt, #f8fafc);
}

/* ════════════════════════════════════════════════════════════════════
   Arbejdsprofiler (design 32): ugeskema-tabel med summed Ugentlig norm
   i footer. Brand-farvet sum-row i hver mode.
   ════════════════════════════════════════════════════════════════════ */
.wp-week-table tfoot .wp-week-sum td {
    border-top: 2px solid var(--border-color, #dee2e6);
    background: var(--surface-alt, #f8fafc);
    color: var(--primary-blue, #1E3884);
    padding-top: 12px;
    padding-bottom: 12px;
}

[data-theme="dark"] .wp-week-table tfoot .wp-week-sum td {
    color: var(--secondary-blue, #2096CB);
}

/* ── Label-above-felter (design 18): bruges i Medarbejder-modal samt
   andre kommende SharedModal-baserede dialoger. Globalt fordi modal-
   content renderes inde i SharedModal's egen scope. ── */
.mb-field {
    display: block;
    margin-bottom: 12px;
}

.mb-flbl {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary, #787b84);
    margin-bottom: 5px;
    display: block;
}

.mb-flbl.req::after {
    content: " *";
    color: #b02a37;
}

.mb-fld {
    width: 100%;
    height: 46px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    padding: 0 12px;
    font-size: 14.5px;
    font-family: inherit;
    color: var(--text-primary, #1f2937);
    background: var(--surface, #fff);
    outline: none;
    box-shadow: none;
    transition: border-color .15s, box-shadow .15s;
}

.mb-fld:focus {
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 0 0 0.2rem rgba(30, 56, 132, 0.18);
}

.mb-fld:disabled,
.mb-fld[readonly] {
    background: var(--surface-alt, #f8fafc);
    color: var(--text-secondary, #787b84);
}

textarea.mb-fld {
    height: auto;
    min-height: 70px;
    padding: 10px 12px;
    resize: vertical;
    line-height: 1.5;
}

select.mb-fld {
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='3'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 13px center;
    padding-right: 34px;
}

.mb-grid {
    display: grid;
    gap: 10px;
    margin-bottom: 12px;
}

.mb-grid > .mb-field {
    margin-bottom: 0;
}

/* Status-toggle (aktiv/inaktiv) som matcher design 18-prototype */
.mb-active-card {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    margin-bottom: 14px;
    background: var(--surface, #fff);
}

.mb-active-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    display: inline-block;
    flex: none;
}

.mb-active-dot.on { background: #1E8A5B; }
.mb-active-dot.off { background: #9ca3af; }

.mb-active-label {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--text-primary, #1f2937);
}

.mb-active-switch {
    margin-left: auto;
}

[data-theme="dark"] .mb-active-card {
    background: var(--surface, #1e2740);
}

/* ── Foldable checklist-cards (delt mellem TaskLineModal + ChecklistCard) ── */
.checklist-card-header {
    user-select: none;
}

.checklist-card-header:hover {
    background-color: rgba(0, 0, 0, 0.02);
}

.checklist-fold-icon {
    display: inline-block;
    font-size: 10px;
    color: #6b7280;
    transition: transform 0.15s ease;
    transform: rotate(90deg);
    width: 12px;
    text-align: center;
}

.checklist-card.collapsed .checklist-fold-icon {
    transform: rotate(0deg);
}

[data-theme="dark"] .checklist-card-header:hover {
    background-color: rgba(255, 255, 255, 0.04);
}

/* ── Light scannable list (Undersager + Beskeder per design 7) ──────────
   Flexbox row cards med subtle border — lettere visuelt end full table.
   Bruges hvor rækker er semi-strukturede + brugeren skal kunne scanne hurtigt. */
.light-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.light-row {
    display: flex;
    align-items: center;
    gap: 14px;
    border: 1px solid var(--border-color, #eef0f4);
    background: var(--surface, #fff);
    border-radius: 8px;
    padding: 13px 16px;
    cursor: pointer;
    transition: border-color 0.12s, box-shadow 0.12s, background 0.12s;
}

.light-row:hover {
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
}

.light-row:focus-visible,
.light-row:focus {
    outline: none;
    border-color: var(--primary-blue, #1E3884);
    box-shadow: 0 0 0 0.25rem rgba(30, 56, 132, 0.35);
    background: rgba(30, 56, 132, 0.04);
}

.light-row-id {
    font-family: ui-monospace, "SF Mono", Consolas, monospace;
    font-size: 13px;
    color: var(--text-muted, #6b7280);
    font-weight: 600;
    flex: none;
    min-width: 110px;
}

.light-row-main {
    flex: 1;
    min-width: 0;
}

.light-row-title {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--text-primary, #1f2937);
}

.light-row-sub {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    margin-top: 2px;
}

.light-row-amount {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    width: 90px;
    text-align: right;
    flex: none;
}

.light-row-date {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    flex: none;
    white-space: nowrap;
}

.light-row-ico {
    width: 38px;
    height: 38px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex: none;
}

.light-row-ico.ico-email {
    background: #ecfdf5;
    color: #0f5132;
}

.light-row-ico.ico-sms {
    background: #eff6ff;
    color: #2563eb;
}

[data-theme="dark"] .light-row {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .light-row:hover {
    border-color: #9ec5ff;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}

[data-theme="dark"] .light-row-id,
[data-theme="dark"] .light-row-amount,
[data-theme="dark"] .light-row-date,
[data-theme="dark"] .light-row-sub {
    color: var(--text-muted);
}

[data-theme="dark"] .light-row-title {
    color: var(--text-primary);
}

[data-theme="dark"] .light-row-ico.ico-email {
    background: rgba(15, 81, 50, 0.3);
    color: #4ade80;
}

[data-theme="dark"] .light-row-ico.ico-sms {
    background: rgba(37, 99, 235, 0.25);
    color: #60a5fa;
}

/* ── KPI nøgletal-grid (Økonomi-fanen per design 7) ─────────────────────
   4 hurtigt-scanbare cards øverst: Eget budget · Realiseret · Avance · Timer.
   Farve-coded top-border (blå/lilla/grøn/orange) der matcher prototypen. */
.kpi-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
}

.kpi-card {
    background: var(--surface, #fff);
    border: 1px solid var(--border-color, #eef0f4);
    border-top-width: 4px;
    border-top-style: solid;
    border-radius: 10px;
    padding: 14px 16px;
}

.kpi-card.kpi-budget { border-top-color: #2563eb; }
.kpi-card.kpi-real   { border-top-color: #7c3aed; }
.kpi-card.kpi-margin { border-top-color: #1E8A5B; }
.kpi-card.kpi-hours  { border-top-color: #FFA800; }

.kpi-label {
    font-size: 12.5px;
    color: var(--text-muted, #6b7280);
    margin-bottom: 4px;
}

.kpi-value {
    font-size: 26px;
    font-weight: 800;
    color: #16306f;
    line-height: 1.1;
}

.kpi-card.kpi-margin .kpi-value {
    color: #0f5132;
}

.kpi-sub {
    font-size: 12px;
    color: var(--text-muted, #9ca3af);
    margin-top: 2px;
}

@media (max-width: 768px) {
    .kpi-grid { grid-template-columns: repeat(2, 1fr); }
}

[data-theme="dark"] .kpi-card {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .kpi-value {
    color: #9ec5ff;
}

[data-theme="dark"] .kpi-card.kpi-margin .kpi-value {
    color: #6ee7b7;
}

[data-theme="dark"] .kpi-label,
[data-theme="dark"] .kpi-sub {
    color: var(--text-muted);
}

/* Rapporter-sektion mini-headers (under Rapporter-card per design 7) */
.report-sub-label {
    font-size: 11.5px;
    font-weight: 700;
    color: var(--text-muted, #6b7280);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: 10px;
}

/* ── Akkord-modal (design 8) ──────────────────────────────────────
   Polish-pass på Opret/Rediger akkord-modal: ikon-flise header,
   sektion-headers, kr-suffix, toggle-switch, slet-knap, hotkey-hint. */

.akkord-modal {
    width: 560px !important;
    max-width: 100%;
}

.akkord-header {
    display: flex;
    align-items: center;
    gap: 12px;
}

.akkord-head-ico {
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: #eef2ff;
    color: #1E3884;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    font-weight: 700;
    flex: none;
}

.akkord-head-title {
    font-size: 19px;
    font-weight: 800;
    color: #1E3884;
    margin: 0;
}

.akkord-head-sub {
    font-size: 13px;
    color: var(--text-muted, #9ca3af);
    margin-top: 2px;
}

.akkord-sechead {
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #1E3884;
    margin-bottom: 12px;
}

/* kr-suffix på beløb-inputs */
.kr-input-wrap {
    position: relative;
}

.kr-input {
    padding-right: 42px;
}

.kr-suffix {
    position: absolute;
    right: 13px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-muted, #9ca3af);
    font-size: 13px;
    pointer-events: none;
}

/* Live Total-boks */
.akkord-total {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 13px 16px;
    border-radius: 10px;
    background: #f0f3f7;
    margin-top: 8px;
}

.akkord-total-label {
    font-size: 14.5px;
    font-weight: 600;
    color: #374151;
}

.akkord-total-value {
    font-size: 20px;
    font-weight: 800;
    color: #1E3884;
    font-variant-numeric: tabular-nums;
}

/* Lukket-toggle (switch-styled checkbox) */
.akkord-closed-toggle {
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 50px;
    padding: 8px 14px;
    border: 1px solid #dee2e6;
    border-radius: 10px;
    cursor: pointer;
    background: #fff;
    margin-top: 16px;
    transition: background 0.15s, border-color 0.15s;
}

.akkord-closed-toggle.is-on {
    background: #eef2ff;
    border-color: #c7d2fe;
}

.akkord-switch {
    width: 44px;
    height: 26px;
    border-radius: 999px;
    background: #cbd5e1;
    position: relative;
    flex: none;
    transition: background 0.15s;
}

.akkord-switch::after {
    content: "";
    position: absolute;
    top: 3px;
    left: 3px;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
    transition: left 0.15s;
}

.akkord-closed-toggle.is-on .akkord-switch {
    background: #1E3884;
}

.akkord-closed-toggle.is-on .akkord-switch::after {
    left: 21px;
}

.akkord-closed-text {
    font-size: 15px;
    font-weight: 600;
    color: #212121;
}

.akkord-closed-toggle.is-on .akkord-closed-text {
    color: #16306f;
}

.akkord-closed-hint {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
}

/* Footer */
.akkord-footer {
    display: flex;
    align-items: center;
    gap: 12px;
}

.akkord-delete-btn {
    height: 46px;
    width: 46px;
    border: 1px solid #fecaca;
    border-radius: 9px;
    background: #fff;
    color: #dc2626;
    font-size: 17px;
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.akkord-delete-btn:hover {
    background: #fef2f2;
    color: #b91c1c;
    border-color: #fca5a5;
}

.akkord-hotkey-hint {
    font-size: 12.5px;
    color: var(--text-muted, #9ca3af);
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.akkord-kbd {
    font-size: 11px;
    font-weight: 600;
    background: #eef1f7;
    color: #6b7280;
    padding: 2px 7px;
    border-radius: 6px;
}

[data-theme="dark"] .akkord-head-ico {
    background: rgba(158, 197, 255, 0.18);
    color: #9ec5ff;
}

[data-theme="dark"] .akkord-head-title {
    color: #9ec5ff;
}

[data-theme="dark"] .akkord-sechead {
    color: #9ec5ff;
}

[data-theme="dark"] .akkord-total {
    background: var(--surface-alt);
}

[data-theme="dark"] .akkord-total-label {
    color: var(--text-primary);
}

[data-theme="dark"] .akkord-total-value {
    color: #9ec5ff;
}

[data-theme="dark"] .akkord-closed-toggle {
    background: var(--surface);
    border-color: var(--border-color);
}

[data-theme="dark"] .akkord-closed-toggle.is-on {
    background: rgba(30, 56, 132, 0.45);
    border-color: rgba(158, 197, 255, 0.55);
}

[data-theme="dark"] .akkord-closed-text {
    color: var(--text-primary);
}

[data-theme="dark"] .akkord-closed-toggle.is-on .akkord-closed-text {
    color: #cdd9ff;
}

[data-theme="dark"] .akkord-closed-toggle.is-on .akkord-closed-hint {
    color: rgba(205, 217, 255, 0.6);
}

[data-theme="dark"] .akkord-closed-toggle.is-on .akkord-switch {
    background: #6b9bff;
}

[data-theme="dark"] .akkord-delete-btn {
    background: rgba(220, 38, 38, 0.12);
    border-color: rgba(248, 113, 113, 0.55);
    color: #fca5a5;
}

[data-theme="dark"] .akkord-delete-btn:hover {
    background: rgba(220, 38, 38, 0.22);
    border-color: #f87171;
    color: #fecaca;
}

[data-theme="dark"] .akkord-kbd {
    background: var(--surface-alt);
    color: var(--text-muted);
}

/* ── Faktureret-page polish (design 10) ────────────────────────────────
   Læselig sticky-header der wrapper pænt 900-1280px, FAKTURERET-badge,
   read-only banner. */
.faktureret-sticky-header {
    flex-wrap: wrap;
    row-gap: 0.5rem;
}

.faktureret-header-left {
    min-width: 300px;
    flex: 1 1 360px;
    display: flex;
    align-items: center;
    gap: 0.85rem;
    min-width: 0;
}

.faktureret-title {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    margin: 0;
}

.faktureret-status-badge {
    flex: none;
    background: #d1fae5;
    color: #0f5132;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.06em;
    padding: 4px 11px;
    border-radius: 999px;
    line-height: 1;
    height: 24px;
    display: inline-flex;
    align-items: center;
    border: 1px solid rgba(15, 81, 50, 0.2);
}

[data-theme="dark"] .faktureret-status-badge {
    background: rgba(16, 185, 129, 0.18);
    color: #6ee7b7;
    border-color: rgba(110, 231, 183, 0.35);
}

.faktureret-readonly-banner {
    display: flex;
    align-items: center;
    gap: 12px;
    background: #ecfdf5;
    border: 1px solid #d1fae5;
    border-left: 4px solid #0f5132;
    border-radius: 8px;
    padding: 12px 16px;
    margin: 0 1.5rem 1rem;
    font-size: 14px;
    color: #064e3b;
}

.faktureret-lock-ico {
    font-size: 18px;
    flex: none;
}

[data-theme="dark"] .faktureret-readonly-banner {
    background: rgba(16, 185, 129, 0.10);
    border-color: rgba(110, 231, 183, 0.25);
    border-left-color: #34d399;
    color: #a7f3d0;
}
