html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

@keyframes spin { to { transform: rotate(360deg); } }
.spin-animation { animation: spin .8s linear infinite; display: inline-block; }

/* §49 (2026-06-05): Indkøbsanalysen fylder hele skærmhøjden uden magiske px-tal.
   Kæden: main (flex, ~100vh) → article.content flex-fylder main → siden flex-fylder
   article → tabellen flex-fylder siden. :has() scoper det KUN til Indkøbsanalysen,
   så alle andre sider beholder deres normale scroll. Virker uafhængigt af skærm-ratio. */
/* Fast højde-LOFT på roden, så flex har noget at fordele inden for (uden loft ville
   min-height:100vh lade indholdet vokse frit → tabellen ville ikke blive begrænset). */
.page:has(.indkoeb-fullheight) {
    height: 100vh;
    height: 100dvh;
    min-height: 0;
    overflow: hidden;
}
/* §49f (2026-06-06): KRITISK — main har flex:1 men min-width:auto, så tabellens
   intrinsiske bredde (~2500px) pressede main ud til 2500px på et 1500px-vindue →
   alt blev klippet (knapper ude af skærmen, filter-rækken wrappede ikke, tabellen
   scrollede ikke). min-width:0 lader main krympe til flex-bredden, så krymp-kæden
   (content→fullheight→card→scroll) virker og tabellen scroller vandret indeni. */
.page:has(.indkoeb-fullheight) > main {
    min-width: 0;
}
.content:has(.indkoeb-fullheight) {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
    min-width: 0;         /* lader indholdet krympe til skærmbredden i stedet for at vokse udenfor */
    overflow: hidden;
}
.indkoeb-fullheight {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
    min-width: 0;
}
.indkoeb-fullheight .indkoeb-table-card {
    flex: 1 1 auto;
    min-height: 0;        /* tillader at tabellen krymper og scroller internt */
    min-width: 0;
    display: flex;
    flex-direction: column;
}
/* §49b (2026-06-05): min-width:0 er KRITISK — uden den arver flex-itemet sit indholds
   min-bredde (~2500px) og vokser ud over skærmen, hvor article'ens overflow:hidden
   klipper det → man kan hverken se resten eller scrolle. Med min-width:0 krymper
   containeren til skærmbredden og scroller selv VANDRET (overflow:auto) + LODRET. */
.indkoeb-fullheight .indkoeb-table-scroll {
    flex: 1 1 auto;
    min-height: 0;
    min-width: 0;
    overflow: auto;       /* sticky thead klistrer til denne scroll-container */
}

/* §49e (2026-06-06): sticky header — baggrunden SKAL ligge på hver <th>-celle, ikke kun på
   <thead>. Ellers maler kun den frosne PRODUKT-celle sin baggrund (=lone "sort box"), mens
   resten af headeren bliver hvid. Dette gør hele header-rækken ensartet mørk. */
.indkoeb-table-scroll thead th {
    background: #1a1a2e;
    color: #fff;
}

/* §49c (2026-06-05): FROSSEN første kolonne (PRODUKT) — bliver stående når man scroller
   vandret, så man aldrig mister varenavnet. Kombineret med sticky thead = "fastfrosne
   ruder" som i Excel. Gør den brede tabel brugbar på smallere skærme. */
.indkoeb-table-scroll .indkoeb-sticky-col {
    position: sticky;
    left: 0;
    z-index: 3;
}
.indkoeb-table-scroll thead .indkoeb-sticky-col {
    z-index: 12;                 /* over sticky thead (10) — hjørnet skal ligge øverst */
    background: #1a1a2e;         /* matcher thead-baggrunden */
}
.indkoeb-table-scroll tbody .indkoeb-sticky-col {
    background: #fff;            /* uigennemsigtig så scrollende celler ikke skinner igennem */
}
.indkoeb-table-scroll tbody tr:hover .indkoeb-sticky-col {
    background: #f1f3f5;         /* følg hover-fremhævningen */
}

/* Leaflet leads map labels & legend */
.leads-map-label {
    background: rgba(255,255,255,.92) !important;
    border: 1px solid #0d6efd !important;
    border-radius: 4px !important;
    padding: 1px 6px !important;
    font-size: .72rem !important;
    font-weight: 600 !important;
    color: #212529 !important;
    box-shadow: 0 1px 4px rgba(0,0,0,.15) !important;
    white-space: nowrap !important;
}

.leads-map-legend {
    background: rgba(255,255,255,.92);
    border-radius: 6px;
    padding: 6px 12px;
    font-size: .78rem;
    box-shadow: 0 1px 5px rgba(0,0,0,.2);
    display: flex;
    flex-wrap: wrap;
    gap: 2px 0;
}

/* ?? Table filter dropdown ?? */
.table-filter-dropdown {
    position: absolute;
    top: 100%;
    right: 0;
    z-index: 100;
    min-width: 240px;
    max-width: 320px;
    background: var(--card-bg, #fff);
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 8px;
    margin-top: 4px;
}

.filter-items-list {
    max-height: 260px;
    overflow-y: auto;
}

.filter-item {
    cursor: pointer;
    font-size: .85rem;
    transition: background .1s;
    margin: 0;
}

.filter-item:hover {
    background: var(--hover-bg, #f0f0f0);
}

a, .btn-link {
    color: #006bb7;
}

.btn-primary {
    color: #fff;
    background-color: #1b6ec2;
    border-color: #1861ac;
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
  box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}

.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;
}

/* Copyable cell indicator */
td.copyable {
    cursor: cell;
    position: relative;
}
td.copyable:hover::after {
    content: '\f0ea';
    font-family: 'bootstrap-icons';
    position: absolute;
    right: 2px;
    top: 1px;
    font-size: .55rem;
    opacity: .35;
    pointer-events: none;
}

/* Resizable table columns */
.vana-resizable th {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.vana-resizable td {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Modern shared styles (matching Home dashboard) ── */

/* Page headers */
.page-header {
    letter-spacing: -0.5px;
    font-weight: 700;
}
.page-subheader {
    font-size: .85rem;
    color: var(--text-muted, #8898a8);
    font-weight: 500;
}

/* Modern filter dropdown */
.filter-dropdown-modern {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    z-index: 200;
    min-width: 260px;
    max-width: 340px;
    background: var(--card-bg, #fff);
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 12px;
    box-shadow: 0 8px 24px rgba(0,0,0,.12);
    animation: filterSlideIn .12s ease-out;
    overflow: hidden;
}
@keyframes filterSlideIn {
    from { opacity: 0; transform: translateY(-4px); }
    to   { opacity: 1; transform: translateY(0); }
}
.filter-dropdown-modern .filter-search {
    border: none;
    border-bottom: 1px solid var(--border-color, #eee);
    border-radius: 0;
    font-size: .82rem;
    padding: 8px 12px;
    width: 100%;
    outline: none;
    background: transparent;
    color: var(--text-color, #333);
}
.filter-dropdown-modern .filter-search:focus {
    box-shadow: none;
    border-bottom-color: #0d6efd;
}
.filter-dropdown-modern .filter-list {
    max-height: 240px;
    overflow-y: auto;
    padding: 4px 0;
}
.filter-dropdown-modern .filter-list label {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px;
    margin: 0;
    font-size: .82rem;
    cursor: pointer;
    transition: background .1s;
}
.filter-dropdown-modern .filter-list label:hover {
    background: var(--hover-bg, #f0f4ff);
}
.filter-dropdown-modern .filter-actions {
    display: flex;
    gap: 4px;
    padding: 6px 10px;
    border-top: 1px solid var(--border-color, #eee);
    font-size: .75rem;
}

/* Modern pill filter buttons */
.filter-pill {
    border-radius: 20px;
    padding: 5px 14px;
    font-weight: 500;
    font-size: .82rem;
    border: 1.5px solid var(--border-color, #dee2e6);
    background: var(--card-bg, white);
    color: var(--text-color, #495057);
    cursor: pointer;
    transition: all .15s;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    position: relative;
}
.filter-pill:hover {
    border-color: #0d6efd;
    color: #0d6efd;
}
.filter-pill.active {
    border-color: #0d6efd;
    background: rgba(13,110,253,.06);
    color: #0d6efd;
}
.filter-pill .pill-count {
    background: #0d6efd;
    color: white;
    border-radius: 10px;
    padding: 0 6px;
    font-size: .65rem;
    font-weight: 700;
    line-height: 1.4;
}

/* Modern search bar */
.search-modern {
    border-radius: 20px;
    border: 1.5px solid var(--border-color, #dee2e6);
    padding: 5px 14px 5px 32px;
    font-size: .85rem;
    transition: border-color .15s, box-shadow .15s;
    background: var(--card-bg, #fff) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='%239ca3af' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z'/%3E%3C/svg%3E") no-repeat 10px center;
}
.search-modern:focus {
    border-color: #0d6efd;
    box-shadow: 0 0 0 3px rgba(13,110,253,.1);
    outline: none;
}

/* Modern info badges */
.stat-badge {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    padding: 2px 10px;
    border-radius: 12px;
    font-size: .78rem;
    font-weight: 600;
}
.stat-badge.up { background: #e8f5e9; color: #2e7d32; }
.stat-badge.down { background: #ffebee; color: #c62828; }
.stat-badge.neutral { background: var(--hover-bg, #f5f5f5); color: #616161; }

/* Period selector buttons (shared with Home dashboard) */
.period-btn {
    border-radius: 20px;
    padding: 6px 18px;
    font-weight: 500;
    font-size: .85rem;
    border: 1.5px solid var(--border-color, #dee2e6);
    background: var(--card-bg, white);
    color: var(--text-color, #495057);
    cursor: pointer;
    transition: all .15s;
}
.period-btn:hover { border-color: #0d6efd; color: #0d6efd; }
.period-btn.active { background: #0d6efd; color: white; border-color: #0d6efd; }

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* ?? Theme variables ?? */
.light-mode {
    --bg-color: #f8f9fa;
    --topbar-bg: #ffffff;
    --text-color: #1a1a2e;
    --text-muted: #6c757d;
    --border-color: #e5e7eb;
    --hover-bg: #f0f0f0;
    --card-bg: #ffffff;
}

.dark-mode {
    --bg-color: #0f172a;
    --topbar-bg: #1e293b;
    --text-color: #e2e8f0;
    --text-muted: #94a3b8;
    --border-color: #334155;
    --hover-bg: #334155;
    --card-bg: #1e293b;
}

.light-mode main {
    background-color: var(--bg-color);
    color: var(--text-color);
}

.dark-mode main {
    background-color: var(--bg-color);
    color: var(--text-color);
}

.dark-mode .sidebar {
    background-color: #0f172a;
    border-right: 1px solid #334155;
}

/* ?? Top bar controls ?? */
.top-bar-controls {
    display: flex;
    align-items: center;
    width: 100%;
}

.burger-btn {
    background: none;
    border: none;
    cursor: pointer;
    padding: 6px;
    border-radius: 6px;
    color: var(--text-color);
    display: flex;
    align-items: center;
    transition: background .15s;
}
.burger-btn:hover {
    background-color: var(--hover-bg);
}

.theme-btn {
    background: none;
    border: 1.5px solid var(--border-color);
    cursor: pointer;
    padding: 6px 8px;
    border-radius: 8px;
    color: var(--text-muted);
    display: flex;
    align-items: center;
    transition: all .15s;
}
.theme-btn:hover {
    border-color: var(--text-muted);
    color: var(--text-color);
}

/* ── Sidebar collapse ── */
@media (min-width: 641px) {
    .sidebar-collapsed .sidebar {
        width: 0 !important;
        min-width: 0 !important;
        overflow: hidden !important;
        padding: 0 !important;
        opacity: 0;
        pointer-events: none;
    }
}

/* Mobile: sidebar is hidden by default, show it when toggled open */
@media (max-width: 640.98px) {
    .page .sidebar {
        display: none !important;
    }
    .page.sidebar-open .sidebar {
        display: block !important;
    }
    .sidebar-collapsed .sidebar {
        display: none !important;
    }
    .sidebar-overlay {
        display: none;
        position: fixed;
        inset: 0;
        background: rgba(0,0,0,.4);
        z-index: 1039;
    }
    .sidebar-open .sidebar-overlay {
        display: block;
    }
}

/* ── API Status Footer ── */
.api-status-footer {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1050;
    font-size: .75rem;
    background: var(--card-bg, #fff);
    border-top: 1px solid var(--border-color, #e5e7eb);
    box-shadow: 0 -2px 8px rgba(0,0,0,.06);
}
.api-status-footer .status-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 4px 16px;
    min-height: 28px;
}
.api-status-footer .status-details {
    padding: 4px 16px 8px;
    border-top: 1px solid var(--border-color, #eee);
}
.status-dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
}
.dot-ok { background: #22c55e; box-shadow: 0 0 4px rgba(34,197,94,.4); }
.dot-error { background: #ef4444; box-shadow: 0 0 4px rgba(239,68,68,.4); animation: pulse-dot 1.5s infinite; }
.dot-unknown { background: #9ca3af; }
@keyframes pulse-dot {
    0%, 100% { opacity: 1; }
    50% { opacity: .4; }
}
.pluk-note-blink {
    animation: pulse-dot 1.5s ease-in-out infinite;
}
@keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}
.spin { animation: spin .8s linear infinite; }

/* ── Pluk-lokation badge (prominent picking location) ── */
.pluk-lokation {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: #fff3cd;
    color: #664d03;
    border: 1.5px solid #ffca2c;
    border-radius: 6px;
    padding: 2px 8px;
    font-weight: 700;
    font-family: 'Cascadia Mono', 'Consolas', monospace;
    letter-spacing: .3px;
    white-space: nowrap;
}
.pluk-lokation i {
    font-size: .85em;
    color: #997404;
}
/* Larger variant for mobile */
.pluk-lokation-lg {
    font-size: .92rem;
    padding: 3px 10px;
}

/* ── Pakker Mobile View ── */
.pakker-mobile .list-group-item {
    -webkit-tap-highlight-color: rgba(0,0,0,.05);
    transition: background-color .15s;
}
.pakker-mobile .form-check-input {
    cursor: pointer;
}
.pakker-mobile .card-header {
    -webkit-tap-highlight-color: rgba(0,0,0,.05);
}
@media (max-width: 576px) {
    .pakker-mobile .card-footer .row {
        flex-direction: column;
    }
    .pakker-mobile .card-footer .col {
        width: 100%;
    }
}

/* ── Ny ordre badge (blinker indtil brugeren kvitterer) ── */
.ny-ordre-badge {
    animation: ny-ordre-pulse 1.2s ease-in-out infinite;
    box-shadow: 0 0 0 0 rgba(220, 53, 69, .6);
}
@keyframes ny-ordre-pulse {
    0%, 100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(220, 53, 69, .6);
    }
    50% {
        transform: scale(1.08);
        box-shadow: 0 0 0 6px rgba(220, 53, 69, 0);
    }
}

/* ════════════════════════════════════════════════════════════════════════════
   §111 (2026-08-11): PRINT-ARK på Indkøbsanalysen — "Skal købes" + "I risiko"
   samlet på ét ark med et notefelt. Skærmvisning først, print-reglerne nederst.
   ════════════════════════════════════════════════════════════════════════════ */
.print-sheet-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .55);
    z-index: 2000;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding: 3vh 1rem;
    overflow: auto;
}

.print-sheet {
    background: #fff;
    color: #212529;
    width: min(1000px, 96vw);
    border-radius: 12px;
    box-shadow: 0 10px 40px rgba(0, 0, 0, .35);
    padding: 1.5rem 1.75rem 2rem;
}

.print-toolbar {
    display: flex;
    align-items: center;
    gap: .5rem;
    margin-bottom: 1.25rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid #e9ecef;
}

.print-title {
    font-size: 1.5rem;
    font-weight: 700;
    margin: 0 0 .2rem;
}

.print-context {
    font-size: .8rem;
    color: #6c757d;
    margin-bottom: 1.1rem;
}

/* Notefelt — textarea på skærmen, skrevet tekst (eller tomme linjer) på papiret. */
.print-note-block {
    border: 1px solid #dee2e6;
    border-radius: 8px;
    padding: .7rem .85rem;
    margin-bottom: 1.4rem;
    background: #fffdf5;
}

.print-note-label {
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #856404;
    margin-bottom: .35rem;
}

.print-note-input {
    width: 100%;
    border: 1px solid #ffe066;
    border-radius: 6px;
    padding: .45rem .6rem;
    font-size: .9rem;
    resize: vertical;
    background: #fff;
}
.print-note-input:focus {
    outline: 2px solid #ffd43b;
    outline-offset: -1px;
}

.print-note-text {
    white-space: pre-wrap;
    font-size: .92rem;
    line-height: 1.5;
}

/* Tomme skrivelinjer når der ikke er skrevet noget — så arket kan udfyldes i hånden. */
.print-note-lines > div {
    border-bottom: 1px solid #d9c88a;
    height: 1.5rem;
}

.print-warning {
    background: #fff3cd;
    border: 1px solid #ffe066;
    border-radius: 6px;
    padding: .5rem .7rem;
    font-size: .82rem;
    color: #664d03;
    margin-bottom: 1.1rem;
}

.print-section {
    margin-bottom: 1.8rem;
}
.print-section:last-child {
    margin-bottom: 0;
}

.print-section-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    border-bottom: 2px solid #212529;
    padding-bottom: .25rem;
}
.print-section-head h3 {
    font-size: 1.05rem;
    font-weight: 700;
    margin: 0;
    text-transform: uppercase;
    letter-spacing: .03em;
}
.print-count {
    font-size: .8rem;
    color: #495057;
    font-weight: 600;
}

.print-section-sub {
    font-size: .74rem;
    color: #6c757d;
    margin: .35rem 0 .5rem;
    line-height: 1.4;
}

.print-empty {
    font-size: .85rem;
    color: #6c757d;
    font-style: italic;
    padding: .6rem 0;
}

.print-truncated {
    font-size: .74rem;
    color: #856404;
    background: #fff9db;
    border-left: 3px solid #ffc107;
    padding: .35rem .6rem;
    margin-top: .4rem;
}

.print-table {
    width: 100%;
    border-collapse: collapse;
    font-size: .82rem;
}
.print-table thead th {
    text-align: left;
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: #495057;
    border-bottom: 1px solid #adb5bd;
    padding: .3rem .4rem;
}
.print-table tbody td {
    border-bottom: 1px solid #e9ecef;
    padding: .4rem;
    vertical-align: top;
}
.print-table tbody tr {
    page-break-inside: avoid;
}
.print-table .c-num,
.print-table th.c-num {
    text-align: right;
    white-space: nowrap;
}
.print-table .strong {
    font-weight: 700;
}
.print-table .c-vendor,
.print-table .c-loc {
    font-size: .76rem;
    color: #495057;
}
/* §113: lokationen er første kolonne på købslisten og bærer to linjer — giv den fast plads,
   så kolonnen ikke skifter bredde fra side til side i udskriften. */
.print-table .c-loc {
    width: 19%;
}
/* Skrivefeltet: en tom rubrik man kan notere i med kuglepen. */
.print-table .c-write {
    width: 22%;
    border-left: 1px dashed #ced4da;
}
/* §113 (2026-08-12): lokationen er indgangen når arket bæres rundt på lageret — den
   primære står tydeligt, de øvrige nedtonet under, så rutens rækkefølge er entydig. */
.print-table .loc-primary {
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    letter-spacing: .02em;
    line-height: 1.25;
    color: #212529;
}
.print-table .loc-qty {
    font-weight: 500;
    color: #495057;
}
.print-table .loc-extra {
    font-size: .68rem;
    color: #868e96;
    line-height: 1.25;
}

/* §115 (2026-08-12): NEGATIV beholdning betyder at lageroptællingen ikke stemmer — det er et
   fejlsignal, ikke en detalje. Den må derfor ikke arve den grå nedtoning fra .loc-extra.
   Understregningen er med vilje: arket printes ofte i sort/hvid, hvor rød bliver til grå, og
   så er formen det eneste der er tilbage at genkende den på. */
.print-table .loc-neg {
    color: #c92a2a;
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.print-table .neg-flag {
    display: inline-block;
    margin-left: .35rem;
    padding: 0 .3rem;
    border: 1px solid #c92a2a;
    border-radius: 3px;
    font-size: .6rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: #c92a2a;
    vertical-align: middle;
    white-space: nowrap;
}

/* Hele rækken markeres i venstre kant, så et minus kan fanges ved at løbe listen igennem. */
.print-table tbody tr.row-neg td:first-child {
    box-shadow: inset 3px 0 0 #c92a2a;
}
.print-table .loc-none {
    font-size: .72rem;
    color: #868e96;
    font-style: italic;
}

.print-table .p-name {
    font-weight: 600;
    line-height: 1.25;
}
.print-table .p-sub {
    font-size: .7rem;
    color: #868e96;
    line-height: 1.25;
}

/* Kun synlig på papir. */
.print-only {
    display: none;
}

@media print {
    /* Alle reglerne herunder er scopet med :has(.print-sheet-backdrop), så de KUN gælder
       når print-arket faktisk er åbent. Et almindeligt Ctrl+P uden arket rammer dem ikke,
       og siden printer som den altid har gjort. */

    /* §49's fuldskærms-lås (height:100vh + overflow:hidden) ville klippe udskriften
       til én side — den skal ophæves før noget som helst andet virker. */
    .page:has(.print-sheet-backdrop),
    .content:has(.print-sheet-backdrop) {
        height: auto !important;
        max-height: none !important;
        overflow: visible !important;
        display: block !important;
    }

    /* §111b (2026-08-11): alt andet end arket FJERNES fra flowet.
       display:none — IKKE visibility:hidden. Et skjult element beholder sin plads, så den
       300-rækkers tabel bagved fyldte stadig papir: printeren meldte 15 ark, hvoraf de 10
       var blanke. Nu er der kun arkets egne sider tilbage. */
    .page:has(.print-sheet-backdrop) > .sidebar,
    .page:has(.print-sheet-backdrop) > .sidebar-overlay,
    .page:has(.print-sheet-backdrop) main > .top-row,
    .content:has(.print-sheet-backdrop) > *:not(.print-sheet-backdrop),
    .no-print,
    .no-print * {
        display: none !important;
    }
    .print-only {
        display: block !important;
    }

    .print-sheet-backdrop {
        position: static !important;
        inset: auto !important;
        display: block !important;
        padding: 0 !important;
        background: none !important;
        overflow: visible !important;
    }
    .print-sheet {
        width: 100% !important;
        max-width: none !important;
        margin: 0 !important;
        padding: 0 !important;
        border-radius: 0 !important;
        box-shadow: none !important;
    }

    .print-note-block {
        background: none !important;
        border-color: #adb5bd !important;
    }
    .print-section-head {
        page-break-after: avoid;
    }
    .print-table thead {
        display: table-header-group; /* gentag kolonneoverskrifter på hver side */
    }

    /* §115: minus-markeringen SKAL overleve udskriften. Browsere dropper som udgangspunkt
       baggrunde og skygger ved print, så kant-markeringen laves om til en rigtig border
       (borders printes altid), og farverne tvinges igennem for dem der printer i farve. */
    .print-table .loc-neg,
    .print-table .neg-flag {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }
    .print-table tbody tr.row-neg td:first-child {
        box-shadow: none !important;
        border-left: 3px solid #c92a2a !important;
        padding-left: calc(.4rem - 3px) !important;
    }
}
/* §286 (2026-10-20): assistenten — sidepanel, fuld side, beslutninger */
.ast-topbtn{background:#6d28d9;color:#fff;border:0;border-radius:16px;padding:3px 10px;font-size:.75rem;font-weight:600}
.ast-topbtn:hover{background:#5b21b6;color:#fff}
.ast-drawer{position:fixed;top:0;right:0;bottom:0;width:min(480px,100vw);background:#fff;border-left:1px solid #e5e7eb;box-shadow:-8px 0 28px rgba(0,0,0,.14);z-index:1080;display:flex;flex-direction:column}
.ast-drawer-hd{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #e5e7eb;flex-wrap:wrap}
.ast-chip{font-size:.72rem;border:1px solid #c4b5fd;color:#6d28d9;border-radius:12px;padding:2px 8px;white-space:nowrap}
.ast-wrap{display:flex;flex-direction:column;flex:1;min-height:0}
.ast-chat{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0}
.ast-msgs{flex:1;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:10px;background:#fafafa}
.ast-m{max-width:94%;padding:8px 11px;border-radius:10px;line-height:1.45;font-size:.9rem;overflow-wrap:anywhere}
.ast-m.u{align-self:flex-end;background:#e0e7ff}
.ast-m.a{align-self:flex-start;background:#fff;border:1px solid #e5e7eb}
.ast-src{font-size:.7rem;color:#6b7280;margin-top:6px}
.ast-src span{border:1px solid #e5e7eb;border-radius:4px;padding:1px 5px;margin:0 4px 2px 0;display:inline-block}
.ast-dec{border:1px solid #ddd6fe;background:#f5f3ff;border-radius:8px;padding:8px 10px;margin-top:8px}
.ast-dec .t{font-size:.68rem;color:#6d28d9;font-weight:700;letter-spacing:.04em}
.ast-inp{border-top:1px solid #e5e7eb;padding:10px 12px;display:flex;gap:8px;align-items:flex-end;background:#fff}
.ast-inp textarea{flex:1;resize:none;border:1px solid #e5e7eb;border-radius:8px;padding:8px 10px;font-size:.9rem;min-height:44px;max-height:160px}
.ast-mic{width:40px;height:40px;border-radius:50%;border:0;background:#6d28d9;color:#fff;font-size:1rem;flex:0 0 auto}
.ast-mic:disabled{opacity:.5}
.ast-mic.on{background:#dc2626;animation:astpulse 1s infinite}
@keyframes astpulse{0%{box-shadow:0 0 0 0 rgba(220,38,38,.5)}100%{box-shadow:0 0 0 12px rgba(220,38,38,0)}}
.ast-page{display:grid;grid-template-columns:240px minmax(0,1fr) 330px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background:#fff;height:calc(100vh - 150px);min-height:520px}
.ast-col{border-right:1px solid #e5e7eb;overflow:auto;background:#fff}
.ast-col h6{font-size:.68rem;letter-spacing:.06em;color:#6b7280;margin:12px 12px 6px;text-transform:uppercase}
.ast-conv{padding:7px 12px;font-size:.82rem;border-left:3px solid transparent;cursor:pointer;display:flex;gap:6px;align-items:flex-start}
.ast-conv:hover{background:#f9fafb}
.ast-conv.on{border-left-color:#6d28d9;background:#f5f3ff}
.ast-conv small{display:block;color:#6b7280}
.ast-dl{padding:8px 12px;border-bottom:1px solid #f3f4f6;font-size:.82rem}
.ast-st{font-size:.68rem;border-radius:10px;padding:1px 7px;display:inline-block}
.ast-st.besluttet{background:#fef3c7;color:#92400e}.ast-st.til_kodning{background:#dbeafe;color:#1e40af}.ast-st.kodet{background:#dcfce7;color:#166534}.ast-st.droppet{background:#f3f4f6;color:#6b7280}
.dark-mode .ast-drawer,.dark-mode .ast-page,.dark-mode .ast-col,.dark-mode .ast-inp,.dark-mode .ast-m.a,.dark-mode .ast-drawer-hd{background:#1f2937;color:#e5e7eb;border-color:#374151}
.dark-mode .ast-msgs{background:#111827}
.dark-mode .ast-m.u{background:#312e81;color:#e5e7eb}
.dark-mode .ast-dec{background:#2e1065;border-color:#5b21b6}
.dark-mode .ast-inp textarea{background:#111827;color:#e5e7eb;border-color:#374151}
@media (max-width:900px){.ast-page{grid-template-columns:1fr;height:auto}.ast-col{border-right:0;border-bottom:1px solid #e5e7eb;max-height:240px}}
