/* Board Styles */
.board-header {
    position: relative;
    z-index: 2;
    padding: 20px 28px 16px;
    border-bottom: 1px solid var(--rule-2);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}

.board-search-wrap {
    margin-left: auto;
    position: relative;
    display: inline-flex;
    align-items: center;
}

.board-search {
    width: 280px;
    padding: 6px 30px 6px 12px;
    background: var(--ink-3, rgba(0,0,0,0.25));
    border: 1px solid var(--rule-2);
    border-radius: 6px;
    color: var(--cream);
    font-size: 13px;
    outline: none;
}

.board-search:focus {
    border-color: var(--accent);
}

/* Hide native WebKit clear-button — we render our own for consistent UX */
.board-search::-webkit-search-cancel-button,
.board-search::-webkit-search-decoration {
    -webkit-appearance: none;
    appearance: none;
}

.board-search-clear {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    width: 20px;
    height: 20px;
    display: none;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    color: var(--cream-mute);
    cursor: pointer;
    font-size: 11px;
    border-radius: 4px;
    padding: 0;
    font-family: inherit;
    line-height: 1;
}

.board-search-clear:hover {
    background: rgba(255, 255, 255, 0.08);
    color: var(--cream);
}

.board-search:not(:placeholder-shown) ~ .board-search-clear {
    display: flex;
}

.lane.no-hits {
    opacity: 0.4;
}

/* Bulk-select */
.card.selected {
    box-shadow: 0 0 0 2px var(--accent), 0 0 12px rgba(212, 92, 47, 0.4);
    background: linear-gradient(rgba(212, 92, 47, 0.12), rgba(212, 92, 47, 0.04));
}

.card:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

body.board-bulk-mode .card {
    cursor: pointer;
}

.board-bulk-toggle {
    background: transparent;
    border: 1px solid var(--rule-2);
    color: var(--cream-mute);
    border-radius: 6px;
    padding: 5px 12px;
    font-size: 12px;
    cursor: pointer;
}
.board-bulk-toggle.active {
    background: var(--accent);
    color: var(--cream);
    border-color: var(--accent);
}
.board-bulk-toggle:hover {
    color: var(--cream);
}

.board-bulk-toolbar {
    position: fixed;
    bottom: 20px;
    left: 50%;
    transform: translate(-50%, 200%);
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 14px;
    background: var(--ink-2);
    border: 1px solid var(--rule-2);
    border-radius: 12px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.45);
    transition: transform 0.25s ease;
    z-index: 500;
    max-width: 95vw;
    flex-wrap: wrap;
    justify-content: center;
}

.board-bulk-toolbar.active {
    transform: translate(-50%, 0);
}

.board-bulk-toolbar .bulk-count {
    font-size: 13px;
    font-weight: 600;
    color: var(--accent);
    padding: 0 6px 0 0;
    border-right: 1px solid var(--rule-2);
    margin-right: 4px;
}

.board-bulk-toolbar button {
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--rule-2);
    color: var(--cream);
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 12px;
    cursor: pointer;
}

.board-bulk-toolbar button:hover {
    background: rgba(255,255,255,0.10);
    border-color: var(--cream-faint);
}

.board-bulk-toolbar button.btn-danger {
    background: rgba(217, 72, 44, 0.18);
    border-color: rgba(217, 72, 44, 0.5);
    color: #ff8a6b;
}

.board-bulk-toolbar button.btn-danger:hover {
    background: rgba(217, 72, 44, 0.28);
}

.board-header h1 {
    font-family: "Fraunces", Georgia, serif;
    font-weight: 600;
    font-size: 24px;
    letter-spacing: -0.02em;
}

.board-header h1 em {
    font-style: italic;
    font-weight: 400;
    color: var(--cream-mute);
    font-size: 0.7em;
    margin-left: 6px;
}

.board-header .meta {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10.5px;
    color: var(--cream-mute);
    text-transform: uppercase;
    letter-spacing: 0.12em;
}

.board-container {
    position: relative;
    z-index: 1;
    display: flex;
    gap: 16px;
    padding: 20px 28px;
    overflow-x: auto;
    /* Fast højde (ikke min-height) + lodret klip → lanes constrainer, og hver lanes
       kort-liste scroller INTERNT. Så bliver kolonne-headeren (over listen) staaende
       i toppen naar man scroller ned. */
    overflow-y: hidden;
    height: calc(100% - 80px);
    box-sizing: border-box;
    align-items: flex-start;
}

.lane {
    flex: 0 0 260px;
    background: var(--ink-2);
    border: 1px solid var(--rule-2);
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    min-height: 200px;
    max-height: calc(100% - 40px);
    transition: border-color 0.2s ease;
}

.lane.drag-over {
    border-color: var(--accent);
    box-shadow: 0 0 0 1px var(--accent), 0 0 20px rgba(217, 72, 44, 0.15);
}

.lane-header {
    padding: 14px 16px 10px;
    border-bottom: 1px solid var(--rule);
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-shrink: 0;
    /* Bliv synlig i toppen af kolonnen når man scroller ned */
    position: sticky;
    top: 0;
    z-index: 3;
    background: var(--ink-2);
    border-radius: 14px 14px 0 0;
}

.lane-header .lane-title {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    color: var(--cream-dim);
    font-weight: 500;
}

.lane-header .lane-count {
    background: var(--ink-4);
    color: var(--cream-mute);
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10px;
    padding: 2px 8px;
    border-radius: 6px;
    letter-spacing: 0.08em;
}

.lane-header .lane-add-btn {
    background: none;
    border: 1px solid var(--ink-5);
    color: var(--cream-mute);
    width: 22px;
    height: 22px;
    border-radius: 6px;
    cursor: pointer;
    font-size: 14px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.15s;
    margin-left: 6px;
}

.lane-header .lane-add-btn:hover {
    border-color: var(--accent);
    color: var(--accent);
}

/* ── Kolonne-styring (web-admin) ── */
.lane-header .lane-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lane-header .lane-rename-btn,
.lane-header .lane-del-btn {
    background: none;
    border: 1px solid var(--ink-5);
    color: var(--cream-mute);
    width: 22px; height: 22px;
    border-radius: 6px;
    cursor: pointer;
    font-size: 12px;
    display: flex; align-items: center; justify-content: center;
    transition: all 0.15s;
    margin-left: 5px;
    flex-shrink: 0;
}
.lane-header .lane-rename-btn:hover { border-color: var(--accent); color: var(--accent); }
.lane-header .lane-del-btn:hover { border-color: var(--danger, #d9482c); color: var(--danger, #d9482c); }
.lane-header .lane-lock { margin-left: 5px; font-size: 11px; opacity: 0.55; cursor: default; flex-shrink: 0; }
.lane-header .lane-title-input {
    flex: 1; min-width: 0;
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.14em;
    color: var(--cream); background: var(--ink-4);
    border: 1px solid var(--accent); border-radius: 6px;
    padding: 3px 6px;
}

/* "+ Ny kolonne"-tile (trailing) */
.lane-add-tile {
    flex: 0 0 200px;
    border: 1px dashed var(--rule);
    background: transparent;
    align-items: center;
    justify-content: center;
}
.board-compact .lane-add-tile { flex: 0 0 150px; }
.lane-add-column-btn {
    background: none; border: none;
    color: var(--cream-mute);
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 12px; font-weight: 600;
    letter-spacing: 0.06em; cursor: pointer;
    padding: 10px 16px; border-radius: 8px;
    transition: color 0.15s;
}
.lane-add-column-btn:hover { color: var(--accent); }

/* Kolonne-drag-flyt indikatorer (Stage 2) — adskilt fra kort-drop (.lane.drag-over) */
.lane.lane-dragging { opacity: 0.5; }
.lane.lane-drop-before { box-shadow: inset 3px 0 0 var(--accent); }
.lane.lane-drop-after { box-shadow: inset -3px 0 0 var(--accent); }
.lane-header[draggable="true"] .lane-title { cursor: grab; }

/* Slet-med-kort modal */
.lane-delete-modal select { width: 100%; }

.lane-cards {
    padding: 10px 10px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    overflow-y: auto;
    flex: 1;
    min-height: 60px;
}

.card {
    background: var(--ink-3);
    border: 1px solid var(--rule-2);
    border-radius: 12px;
    padding: 12px 14px;
    cursor: grab;
    transition: all 0.2s ease;
    position: relative;
}

/* ⛔ DEFEKT — maskinen må ikke tages i brug. Eneste helkorts-markør ud over has-problem.
   Bruger ::after + HØJRE kant, fordi ::before/venstre er reserveret til has-problem-striben
   (mobile-tune.css) — en maskine kan sagtens være både defekt og have et registreret problem.
   Gælder desktop OG mobil (modsat has-problem, der kun er mobil). */
.card.is-defect {
    border-color: rgba(139, 26, 26, 0.75);
    background: linear-gradient(90deg, rgba(139, 26, 26, 0.18), var(--ink-3) 55%);
}
.card.is-defect::after {
    content: '';
    position: absolute; right: 0; top: 0; bottom: 0;
    width: 5px; background: #8b1a1a;
    border-radius: 0 12px 12px 0;
    pointer-events: none; z-index: 3;
}
.card.is-defect .asset-tag::before { content: '⛔ '; }

/* "⋮"-knap: mobil-erstatning for højreklik (åbner kontekstmenuen). Skjult på
   desktop (hvor højreklik virker), vist på touch-enheder + smalle skærme. */
.card-menu-btn {
    display: none;
    position: absolute;
    top: 5px;
    right: 5px;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 1px solid var(--rule-2, rgba(255,255,255,.15));
    border-radius: 8px;
    background: var(--ink-4, rgba(255,255,255,.06));
    color: var(--cream, #f0ece2);
    font-size: 19px;
    line-height: 1;
    cursor: pointer;
    align-items: center;
    justify-content: center;
    z-index: 4;
}
.tasks-card-menu {
    display: none;
    position: absolute;
    top: 5px;
    right: 5px;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 1px solid var(--rule-2, rgba(255,255,255,.15));
    border-radius: 8px;
    background: var(--ink-4, rgba(255,255,255,.06));
    color: var(--cream, #f0ece2);
    font-size: 19px;
    line-height: 1;
    cursor: pointer;
    align-items: center;
    justify-content: center;
    z-index: 4;
}
@media (hover: none), (max-width: 820px) {
    .card-menu-btn { display: flex; }
    .tasks-card-menu { display: flex; }
    .card .asset-tag { padding-right: 32px; }
    .tasks-card .tasks-card-tag { padding-right: 32px; }
}

.card:hover {
    background: var(--ink-4);
    border-color: var(--accent);
    transform: translateY(-1px);
}

.card.dragging {
    background: var(--accent);
    border-color: var(--accent-hot);
    color: #fff8f3;
    box-shadow: var(--shadow-lg);
    opacity: 0.9;
    cursor: grabbing;
}

.card .asset-tag {
    /* Samme font/look som login-undertitlen "Bordet fanger": Geist sans, VERSALER, spreds. */
    font-family: "Geist", system-ui, -apple-system, sans-serif;
    font-size: 15px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    line-height: 1.2;
    margin-bottom: 4px;
}

.card .model {
    font-family: "Geist", system-ui, sans-serif;
    font-size: 12px;
    color: var(--cream-dim);
    margin-bottom: 6px;
}

.card .production-label {
    font-family: "Geist", system-ui, sans-serif;
    font-size: 11px;
    font-weight: 500;
    color: #d4a34a;
    margin-bottom: 6px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.card-labels { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 6px; }
.card-label {
    font-size: 10px; font-weight: 600; color: #fff;
    padding: 2px 8px; border-radius: 4px; white-space: nowrap;
}
/* FCP-opgraderings-chip ("nu → skal") på maskiner der endnu ikke er sat op: amber = skal-gøres,
   ikke grøn "done". Signalerer at maskinen skal opgraderes til produktionens FCP ved opsætning. */
.card-label.card-label-fcp-up { background: rgba(212,163,74,.92); color: #1c1a16; font-weight: 700; }

.card-label-picker { display: flex; flex-wrap: wrap; gap: 6px; }
.card-label-picker label {
    display: flex; align-items: center; gap: 4px;
    font-size: 12px; cursor: pointer; text-transform: none;
    letter-spacing: 0; font-weight: 400; color: var(--cream-dim);
    margin: 0;
}
.card-label-swatch {
    display: inline-block; width: 12px; height: 12px; border-radius: 3px;
}

/* v0.7.53: Stilren meta-stack — locater + person på samme baseline,
   stilling på egen linje under, alle unified Geist Mono. */
.card .card-meta {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    margin-top: 8px;
}

/* Locater som lille pill på egen linje — konkurrerer aldrig med navnet */
.card .locater {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10px;
    font-weight: 600;
    color: var(--accent-hot);
    background: rgba(240, 90, 56, 0.12);
    border: 1px solid rgba(240, 90, 56, 0.28);
    padding: 1px 7px;
    border-radius: 5px;
    letter-spacing: 0.05em;
    align-self: flex-start;
}

.card .person {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 11px;
    font-weight: 500;
    color: var(--cream-dim);
    text-transform: uppercase;
    letter-spacing: 0.07em;
    line-height: 1.25;
}

.card .job-title {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 9.5px;
    font-weight: 400;
    color: var(--cream-mute);
    letter-spacing: 0.06em;
    font-style: normal;
    opacity: 1;
    margin-left: 0;
}

.deadline-label {
    display: inline-block;
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 9px;
    font-weight: 600;
    padding: 2px 8px;
    border-radius: 4px;
    margin-top: 4px;
    letter-spacing: 0.08em;
    white-space: nowrap;
}
.deadline-urgent { background: #d9482c; color: #fff; }
.deadline-soon   { background: #d4a34a; color: #fff; }
.deadline-normal { background: rgba(255,255,255,0.12); color: var(--cream-mute); }

.card.dragging .model,
.card.dragging .production-label,
.card.dragging .person {
    color: rgba(255,248,243,0.8);
}

.card.dragging .locater {
    color: #fff8f3;
}

.card-context-menu {
    position: fixed;
    z-index: 10000;
    background: #1a1816;
    border: 1px solid var(--rule-2);
    border-radius: 6px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.55);
    padding: 4px;
    min-width: 220px;
    font-size: 13px;
}
.card-context-item {
    display: block;
    width: 100%;
    background: none;
    border: none;
    color: var(--cream);
    text-align: left;
    padding: 8px 12px;
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
    font-family: inherit;
}
.card-context-item:hover:not(:disabled) {
    background: rgba(255,255,255,0.08);
}
.card-context-item.danger { color: #ff8e8e; }
.card-context-item.danger:hover { background: rgba(255, 107, 107, 0.16); }
.card-context-item.disabled,
.card-context-item:disabled {
    color: var(--cream-faint);
    cursor: not-allowed;
}
.card-context-item.italic { font-style: italic; color: var(--cream-mute); }
.card-context-sep {
    height: 1px;
    background: var(--rule-2);
    margin: 4px 6px;
}

.board-banner-link {
    color: var(--accent);
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}
.board-banner-link:hover { color: #ffb088; }

/* "+N flere" / "vis færre" toggle i banner — klikbar link */
.board-banner-more {
    color: var(--cream-dim, #ccc);
    text-decoration: underline dotted;
    text-underline-offset: 2px;
    cursor: pointer;
    font-style: italic;
}
.board-banner-more:hover { color: #fff; }

.card.card-banner-highlight {
    box-shadow: 0 0 0 3px var(--accent), 0 0 24px rgba(212, 92, 47, 0.5),
                inset 0 0 0 9999px rgba(212, 92, 47, 0.22);
    transition: box-shadow 0.3s;
}

/* Deadline-banner: setup-deadline indenfor 3 dage og card ikke klar */
.board-deadline-banner {
    background: linear-gradient(rgba(245, 200, 66, 0.16), rgba(245, 200, 66, 0.06));
    border: 1px solid rgba(245, 200, 66, 0.45);
    border-radius: 6px;
    padding: 10px 16px;
    margin: 8px 16px 0;
    color: #f4ddb3;
    font-size: 13px;
}
.board-deadline-banner strong { color: #fff0c2; font-weight: 600; margin-left: 8px; }
.board-deadline-icon { color: #f5c842; font-size: 16px; }
.board-deadline-detail {
    margin-top: 4px;
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 11px;
    color: rgba(244, 221, 179, 0.85);
    letter-spacing: 0.03em;
}

/* Akut-banner: bookings starter snart men maskine ikke i workflow */
.board-urgent-banner {
    background: linear-gradient(rgba(255, 107, 107, 0.18), rgba(255, 107, 107, 0.08));
    border: 1px solid rgba(255, 107, 107, 0.45);
    border-radius: 6px;
    padding: 10px 16px;
    margin: 12px 16px 0;
    color: #ffd0d0;
    font-size: 13px;
}
.board-urgent-banner strong {
    color: #ffe0e0;
    font-weight: 600;
    margin-left: 8px;
}
.board-urgent-icon {
    color: #ff6b6b;
    font-size: 16px;
}
.board-urgent-detail {
    margin-top: 4px;
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 11px;
    color: rgba(255, 208, 208, 0.85);
    letter-spacing: 0.03em;
}

/* Workflow-knapper (Start / Færdig / Godkend) på cards i COMING UP / I PROCES - DAVID / DONE */
.card-workflow {
    margin-top: 8px;
    display: flex;
    justify-content: flex-end;
}
.card-wf-btn {
    background: rgba(255,255,255,0.08);
    border: 1px solid var(--rule-2);
    color: var(--cream);
    font-size: 11px;
    font-weight: 600;
    padding: 4px 10px;
    border-radius: 4px;
    cursor: pointer;
    letter-spacing: 0.04em;
    transition: background 0.15s, border-color 0.15s;
}
.card-wf-btn:hover {
    background: rgba(255,255,255,0.16);
    border-color: var(--cream-mute);
}
.card-wf-done {
    background: rgba(74, 144, 217, 0.18);
    border-color: rgba(74, 144, 217, 0.55);
    color: #cfe1f7;
}
.card-wf-done:hover {
    background: rgba(74, 144, 217, 0.32);
}
.card-wf-approve {
    background: rgba(110, 199, 110, 0.18);
    border-color: rgba(110, 199, 110, 0.55);
    color: #d5f0d5;
}
.card-wf-approve:hover {
    background: rgba(110, 199, 110, 0.32);
}

/* Context Menu */
.context-menu {
    position: fixed;
    z-index: 9999;
    background: var(--ink-3);
    border: 1px solid var(--rule-2);
    border-radius: 10px;
    padding: 4px 0;
    min-width: 180px;
    box-shadow: var(--shadow-lg);
}

.context-item {
    padding: 8px 14px;
    font-family: "Geist", system-ui, sans-serif;
    font-size: 13px;
    color: var(--cream-dim);
    cursor: pointer;
    position: relative;
    transition: background 0.1s;
}

.context-item:hover {
    background: var(--ink-4);
    color: var(--cream);
}

.context-danger {
    color: var(--accent);
}

.context-danger:hover {
    background: var(--accent);
    color: #fff8f3;
}

.context-separator {
    height: 1px;
    background: var(--rule);
    margin: 4px 0;
}

.context-has-sub {
    position: relative;
}

.context-submenu {
    display: none;
    position: absolute;
    left: 100%;
    top: -4px;
    background: var(--ink-3);
    border: 1px solid var(--rule-2);
    border-radius: 10px;
    padding: 4px 0;
    min-width: 160px;
    box-shadow: var(--shadow-lg);
}

.context-has-sub:hover .context-submenu {
    display: block;
}

.empty-lane {
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10px;
    color: var(--cream-faint);
    text-transform: uppercase;
    letter-spacing: 0.14em;
    padding: 16px 6px;
    text-align: center;
}

/* ─────────────────────────────────────────────────────────────────────────
   v0.7.50 — Locater-row med input + "Vælg fra floorplan"-knap
   ───────────────────────────────────────────────────────────────────────── */
.card-form-locater-row {
    display: flex;
    gap: 6px;
    align-items: stretch;
}
.card-form-locater-row input {
    flex: 1;
    min-width: 0;
}
.card-form-locater-row button {
    white-space: nowrap;
    padding: 4px 10px;
    font-size: 12px;
    flex-shrink: 0;
}

/* Bord-autocomplete (window.attachLocaterAutocomplete) — egen dropdown i stedet for
   den upålidelige native <datalist>. Ligger på body-niveau → høj z-index over modaler. */
.loc-ac-menu {
    position: fixed;
    z-index: 8000;
    max-height: 240px;
    overflow-y: auto;
    background: var(--ink-2, #1b1f26);
    border: 1px solid var(--rule-2, rgba(255,255,255,.16));
    border-radius: 8px;
    box-shadow: 0 8px 24px rgba(0,0,0,.5);
    -webkit-overflow-scrolling: touch;
}
.loc-ac-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    cursor: pointer;
    font-size: 14px;
    color: var(--cream, #f0ece2);
    border-bottom: 1px solid rgba(255,255,255,.05);
}
.loc-ac-item:last-child { border-bottom: none; }
.loc-ac-item.active, .loc-ac-item:hover { background: var(--accent, #d9482c); color: #fff; }
.loc-ac-loc { font-weight: 600; }
.loc-ac-meta { font-size: 12px; opacity: .7; white-space: nowrap; }
.loc-ac-item.active .loc-ac-meta { opacity: .9; }
input.loc-invalid { border-color: #d9482c !important; }
.loc-ac-warn { color: #e88; font-size: 12px; margin: 4px 0 0; }

/* Asset Tag nederst + låst som standard: dæmpet felt + "Ret"-knap, så det kun
   ændres ved en bevidst handling (ikke ved et uheld). */
.card-form-assettag-label { opacity: 0.7; }
.card-form-assettag-hint {
    font-weight: 400;
    font-size: 11px;
    opacity: 0.7;
}
.card-form-assettag-row {
    display: flex;
    gap: 6px;
    align-items: stretch;
}
.card-form-assettag-row input {
    flex: 1;
    min-width: 0;
}
.card-form-assettag-row button {
    white-space: nowrap;
    padding: 4px 10px;
    font-size: 12px;
    flex-shrink: 0;
}
.card-form-assettag-row input.field-locked {
    opacity: 0.5;
    background: rgba(255, 255, 255, 0.03);
    cursor: not-allowed;
}

/* v0.7.68 — Kompakt visning: smallere lanes + kort = mere overblik, flere kolonner */
/* v0.9.120 — strammere densitet (mindre luft, kortere asset-tag) → flere kort i view */
.board-compact .lane { flex: 0 0 168px; }
.board-compact .lane-cards { gap: 5px; padding: 7px; }
.board-compact .card { padding: 6px 9px; border-radius: 9px; }
.board-compact .card .asset-tag { font-size: 12px; letter-spacing: 0.05em; margin-bottom: 1px; }
.board-compact .card .production-label { font-size: 9.5px; margin-bottom: 3px; }
.board-compact .card .model { display: none; }
.board-compact .card-labels { gap: 3px; margin-bottom: 3px; }
.board-compact .card-label { font-size: 8.5px; padding: 1px 5px; }
.board-compact .card .card-meta { margin-top: 4px; gap: 2px; }
.board-compact .card .locater { font-size: 9px; padding: 0 5px; }
.board-compact .card .person { font-size: 9.5px; letter-spacing: 0.04em; }
.board-compact .card .job-title { display: none; }
.board-compact .deadline-label { font-size: 8px; padding: 1px 5px; }
.board-compact .card-wf-btn { font-size: 9px; padding: 3px 6px; }
.board-compact .card-workflow { margin-top: 5px; }
.board-compact .lane-header { padding: 10px 12px 8px; }

/* v0.9.120 — Touch: undgå iOS tekst-callout/markering under long-press, og giv
   kortet et synligt "løft" når det er samlet op og klar til at blive trukket. */
@media (hover: none) { .card { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; } }
.card.card-lift {
    transform: scale(1.03);
    box-shadow: 0 12px 30px rgba(0,0,0,.55);
    border-color: var(--accent, #d45c2f);
    position: relative;
    z-index: 6;
    transition: transform .12s ease, box-shadow .12s ease;
}

/* v0.7.74 — Deadline-række (input + Fjern) + altid-synlig card-modal footer */
.card-form-deadline-row { display: flex; gap: 6px; align-items: stretch; }
.card-form-deadline-row input { flex: 1; min-width: 0; }
.card-form-deadline-row button { white-space: nowrap; padding: 4px 12px; font-size: 12px; flex-shrink: 0; }
.card-modal-footer { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--rule-2); }

/* v0.7.78 — Version-sektion (kan køre / kører nu) i kort-editor */
.card-form-versions { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 6px; }
.card-form-version-opt { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; white-space: nowrap; }
.card-form-version-opt input { width: auto; margin: 0; }

/* v0.7.94 — Begge version-indikatorer INDE i pillen, omringet af label-farven:
   firkant (kører nu, kun én) til VENSTRE · rund (kan køre, flere) til HØJRE.
   Native adfærd bevares (checkbox=multi, radio=single). */
.card-version-row { cursor: default; }
.card-version-row .card-label-bar {
    flex: 0 0 auto; display: flex; align-items: center; gap: 9px; padding: 6px 11px;
}
.card-version-row .card-label-bar::before { display: none !important; }   /* gammel ::before-indikator væk */
.card-version-row .vbar-text { cursor: pointer; }
/* Fælles boks-stil inde i pillen — hvid kant, popper mod farven */
.card-version-row .card-active-os,
.card-version-row input[type="checkbox"].vcap {
    appearance: none; -webkit-appearance: none;
    width: 16px; height: 16px; flex-shrink: 0; margin: 0; position: relative;
    border: 2px solid rgba(255, 255, 255, 0.8); background: rgba(0, 0, 0, 0.18);
    cursor: pointer; opacity: 1; pointer-events: auto;
    transition: background .12s, border-color .12s;
}
.card-version-row .card-active-os:hover,
.card-version-row input[type="checkbox"].vcap:hover { border-color: #fff; }
/* Kører nu = firkant (venstre) */
.card-version-row .card-active-os { border-radius: 4px; }
.card-version-row .card-active-os:checked { background: #fff; border-color: #fff; }
.card-version-row .card-active-os:checked::after {
    content: ''; position: absolute; left: 4px; top: 0;
    width: 4px; height: 9px; border: solid #7d5bd9; border-width: 0 2px 2px 0; transform: rotate(45deg);
}
/* Kan køre = LÅS (åben lås = kan køre/kan vælges · lukket lås = ikke åbnet) — hvidt, rent */
.card-version-row input[type="checkbox"].vcap {
    border: none; background: transparent; border-radius: 50%;
}
.card-version-row input[type="checkbox"].vcap::after {
    content: ''; position: absolute; inset: 0;
    background: no-repeat center / 15px url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M8%2010.5V7.5a4%204%200%200%201%208%200V10.5'%20fill='none'%20stroke='white'%20stroke-width='2.4'/%3E%3Crect%20x='4.5'%20y='10.5'%20width='15'%20height='10'%20rx='2.5'%20fill='white'/%3E%3C/svg%3E");
    transition: opacity .12s;
}
.card-version-row input[type="checkbox"].vcap:checked::after {
    background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M8%2010.5V7.5a4%204%200%200%201%208%200'%20fill='none'%20stroke='white'%20stroke-width='2.4'/%3E%3Crect%20x='4.5'%20y='10.5'%20width='15'%20height='10'%20rx='2.5'%20fill='white'/%3E%3C/svg%3E");
    opacity: 1;
}
/* Låst version (lukket lås / ikke kan-køre): nedtonet + kører-nu deaktiveret —
   man skal låse op (åben lås) FØR man kan vælge den som kører nu. */
.card-version-locked .card-label-bar { opacity: 0.5; transition: opacity .12s; }
.card-version-locked .card-label-bar:hover { opacity: 0.75; }
.card-version-row .card-active-os:disabled { cursor: not-allowed; }
.card-active-none-row { opacity: 0.85; }
.card-active-none-bar { background: transparent !important; color: var(--cream-mute, #b8b2a4) !important; font-style: italic; font-weight: 400; box-shadow: none !important; }
.card-active-none-bar .card-active-os { border-color: rgba(255, 255, 255, 0.5); background: rgba(255, 255, 255, 0.06); }
.card-labels-group-hint { font-size: 9px; color: var(--cream-faint, #8a8374); margin-left: 8px; font-style: italic; }

/* v0.7.89 — Aktiv OS-pille på kort (kører nu) — fremhævet, kan-køre skjules */
.card-label-os { border: 1px solid rgba(255,255,255,0.5); font-weight: 700; }
/* v0.8.5 — "Kan køre"-version vist på kort når ingen aktiv er valgt (fx importeret) —
   stiplet kant for at adskille fra den ⛿-aktive pille. */
.card-label-cap { border: 1px dashed rgba(255,255,255,0.45); font-weight: 700; opacity: 0.9; }

/* ── Transit-tilstand på kort: planlagt flytning (fra → til) + ønsket placering ── */
.card-meta .locater-transit {
    background: rgba(240, 176, 58, 0.16);
    border: 1px solid rgba(240, 176, 58, 0.45);
    color: #f0b03a;
    font-weight: 700;
}
.card-meta .locater-target {
    background: transparent;
    border: 1px dashed var(--rule-2, rgba(255,255,255,0.18));
    color: var(--cream-mute, #b8b2a5);
    font-style: italic;
}

/* ── Fjernstyring (Acronis) wizard ────────────────────────────────────────── */
.remote-overlay {
    position: fixed; inset: 0; z-index: 4000;
    background: rgba(0,0,0,0.55);
    display: flex; align-items: center; justify-content: center;
}
.remote-modal {
    background: var(--surface, #1c1b18);
    border: 1px solid var(--rule-2, rgba(255,255,255,0.14));
    border-radius: 10px;
    width: 460px; max-width: 92vw; max-height: 88vh; overflow-y: auto;
    padding: 20px 22px;
    box-shadow: 0 18px 50px rgba(0,0,0,0.5);
}
.remote-modal h3 { margin: 0 0 4px; font-size: 17px; color: var(--cream, #f0ece2); }
.remote-sub { margin: 0 0 14px; font-size: 12px; color: var(--cream-mute, #b8b2a5); }
.remote-sec { margin: 0 0 14px; padding: 0 0 12px; border-bottom: 1px solid var(--rule-1, rgba(255,255,255,0.07)); }
.remote-sec:last-of-type { border-bottom: none; }
.remote-info {
    font-size: 12px; color: var(--cream-mute, #b8b2a5);
    background: rgba(255,255,255,0.04); border-radius: 6px; padding: 8px 10px; border-bottom: none;
}
.remote-q { display: block; font-size: 12px; font-weight: 700; letter-spacing: .02em; color: var(--cream, #f0ece2); margin: 0 0 8px; text-transform: uppercase; }
.remote-opt { display: flex; align-items: flex-start; gap: 8px; font-size: 13px; color: var(--cream, #f0ece2); margin: 0 0 7px; cursor: pointer; line-height: 1.4; }
.remote-opt input { margin-top: 2px; flex: 0 0 auto; }
.remote-hint { color: var(--cream-mute, #b8b2a5); font-size: 11px; }
.remote-select { width: 100%; padding: 7px 8px; font-size: 13px; background: var(--surface-2, #26241f); color: var(--cream, #f0ece2); border: 1px solid var(--rule-2, rgba(255,255,255,0.14)); border-radius: 6px; }
.remote-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }

/* Route på workflow-kort: 'Hentes fra' (originLane) i COMING UP / I PROCES / DONE.
   Destinationen vises allerede via .locater-pillen + '→ skal til', så den gentages ikke. */
.card .card-origin-line {
    display: block;
    align-self: flex-start;
    font-family: "Geist Mono", ui-monospace, monospace;
    font-size: 10px;
    font-weight: 600;
    color: var(--accent, #d9482c);
    line-height: 1.3;
    margin-top: 2px;
}
.card .card-origin-label { font-weight: 400; color: var(--cream-mute, #b8b2a5); }
.board-compact .card .card-origin-line { font-size: 8px; margin-top: 1px; }

/* Nuværende labels som chips øverst på kort-modalens Detaljer-fane (klik → Labels-fane) */
.card-current-labels {
    display: flex; flex-wrap: wrap; gap: 6px;
    margin: 0 0 14px; padding: 8px 10px;
    background: rgba(255,255,255,0.03);
    border: 1px solid var(--rule-2, rgba(255,255,255,0.14));
    border-radius: 8px; cursor: pointer;
}
.card-current-labels .ccl-chip {
    font-size: 11px; font-weight: 700; color: #fff;
    padding: 3px 9px; border-radius: 10px; line-height: 1.4;
}
.card-current-labels .ccl-empty { font-size: 12px; color: var(--cream-mute, #b8b2a5); font-style: italic; }

/* ── Mobil board-layout (≤700px) ── */
@media (max-width: 700px) {
    .board-header {
        padding: 10px 12px 6px;
        flex-wrap: wrap;
        gap: 6px;
        align-items: center;
    }
    .board-header h1 {
        flex: 0 0 auto;
        /* font-size styres af global app.css mobil-regel */
    }
    .board-header h1 em { display: none; } /* "/ Computere" skjules — tydeligt af tab */
    .board-search-wrap {
        flex: 1 1 100%;   /* fyld hele rækken */
        min-width: 0;
        margin-left: 0;
        order: 10;         /* sidste → rykkes til 2. række */
    }
    .board-search { width: 100%; box-sizing: border-box; font-size: 14px; }
    .board-bulk-toggle {
        font-size: 11px;
        padding: 4px 8px;
    }

    /* Kun KOLONNE-scroll på mobil (ingen dobbelt-scroll): lås board-panelet til viewport-højden
       og lad board-container fylde resten via FLEX — robust mod header/lane-bjælke-højde. Den
       gamle height:calc(100% - 66px) tog ikke højde for lane-bjælken (41px) → board-container
       blev for høj → hele panelet scrollede OVENI kolonne-scrollen. */
    /* KUN når board-panelet er aktivt (.active) — ellers overstyrer ID-specificiteten
       .panel{display:none} og board'et ville vises paa ALLE mobil-faner (nav brudt). */
    #panel-board.active {
        display: flex;
        flex-direction: column;
        height: 100vh;
        height: 100dvh;            /* dynamisk viewport → tåler mobil browser-chrome */
        overflow: hidden;          /* ingen side/panel-scroll — kun lanes scroller */
        box-sizing: border-box;
        padding-bottom: 56px;      /* fri af den fixed bund-nav (mobil-tab-bar) */
    }
    /* Board-container: swipeable lanes — fylder resthøjden, klipper lodret (lanes scroller internt) */
    .board-container {
        padding: 10px 0 10px 12px;
        gap: 10px;
        flex: 1 1 auto;
        min-height: 0;
        height: auto;
        scroll-snap-type: x proximity;
        -webkit-overflow-scrolling: touch;
    }
    .lane {
        flex: 0 0 82vw;
        max-width: 340px;
        scroll-snap-align: start;
        border-radius: 10px;
    }
    /* Padding-spacer efter sidste lane (til at scrolle den fuld i view) */
    .board-container::after {
        content: '';
        display: block;
        flex: 0 0 12px;
        min-width: 12px;
    }

    /* v0.9.120 — Normal-tæthed på telefon: mindre luft pr. kort → ~4 kort i view
       (før kun ~2,5). Skjuler INTET — kun strammere padding/marginer/fonts. */
    .lane-cards { gap: 6px; padding: 8px; }
    .card { padding: 8px 11px; border-radius: 10px; }
    .card .asset-tag { font-size: 13.5px; letter-spacing: 0.06em; margin-bottom: 2px; line-height: 1.15; }
    .card .model { font-size: 11px; margin-bottom: 2px; }
    .card .production-label { font-size: 10.5px; margin-bottom: 3px; }
    .card-labels { gap: 4px; margin-bottom: 3px; }
    .card-label { font-size: 9.5px; padding: 1px 6px; }
    .card .card-meta { margin-top: 4px; gap: 2px; }
    .card .person { font-size: 10.5px; }
    .card .job-title { font-size: 9px; }
    .deadline-label { margin-top: 2px; font-size: 8.5px; padding: 1px 6px; }
    .card-workflow { margin-top: 4px; }
    .card-wf-btn { padding: 4px 9px; }

    /* v0.9.120 — Kompakt på telefon: vis 2 kolonner ad gangen (i stedet for én bred),
       med en anelse af den næste som hint om at man kan swipe videre. */
    .board-compact .lane { flex: 0 0 46vw; max-width: none; }

    /* v0.9.120 — Telefon-kompakt: maksimal densitet, flere kort i view (Trello-tæthed) */
    .board-compact .lane-cards { gap: 4px; padding: 6px; }
    .board-compact .card { padding: 5px 9px; border-radius: 8px; }
    .board-compact .card .asset-tag { font-size: 12px; letter-spacing: 0.04em; margin-bottom: 1px; }
    .board-compact .card .production-label { font-size: 9px; margin-bottom: 2px; }
    .board-compact .card-labels { gap: 3px; margin-bottom: 2px; }
    .board-compact .card-label { font-size: 8px; padding: 1px 4px; }
    .board-compact .card .card-meta { margin-top: 2px; gap: 1px; }
    .board-compact .card .locater { font-size: 9px; }
    .board-compact .card .person { font-size: 9px; }
    .board-compact .deadline-label { font-size: 8px; }
    .board-compact .card-workflow { margin-top: 3px; }
    .board-compact .lane-header { padding: 8px 12px 6px; }

    /* Bulk-toolbar holdes over bottom nav */
    .board-bulk-toolbar { bottom: 70px; }
}

/* ── Overbliks-tjekliste på workflow-kort (delt af board + Opgaver) ───────────────
   Skal gøres (COMING UP, amber) · Tjekliste (I PROCES) · ✓ Udført (DONE, grøn).
   Globalt indlæst, så klasserne gælder også .tasks-card i Opgaver-fanen. */
.card-checklist { margin-top: 6px; padding: 6px 9px; border-radius: 6px; font-size: 11px; line-height: 1.5;
    background: rgba(255,255,255,.035); border: 1px solid var(--rule-2, rgba(255,255,255,.1)); }
.card-checklist.todo { background: rgba(212,163,74,.10); border-color: rgba(212,163,74,.4); }
.card-checklist-title { font-weight: 700; color: var(--cream, #f0ece2); margin-bottom: 3px; letter-spacing: .02em; }
.card-checklist.todo .card-checklist-title { color: #e0b96a; }
.card-checklist .chk-count { font-weight: 600; color: var(--cream-mute, #b8b2a5); }
.card-chk-item { display: flex; align-items: baseline; gap: 5px; padding: 1px 0; }
.card-chk-item .chk-mark { font-weight: 700; width: 12px; flex-shrink: 0; text-align: center; }
.card-chk-item .chk-text { flex: 1 1 auto; min-width: 0; }   /* label+detail flyder som ÉN blok → pæn wrap */
.card-chk-item .chk-detail { color: var(--cream-mute, #b8b2a5); font-weight: 600; }
.chk-done { color: #9fe0b4; }
.chk-done .chk-mark { color: #4caf72; }
.chk-todo { color: var(--cream-dim, #cfc9bd); }
.chk-todo .chk-mark { color: var(--cream-mute, #8a8578); }
.chk-info { color: var(--cream-mute, #b8b2a5); font-style: italic; }
/* Grøn "✓ Udført"-boks (flyttet fra inline-stil i board.js) */
.card-done-summary { margin-top: 6px; padding: 5px 8px; border-radius: 6px;
    background: rgba(45,138,78,.15); border: 1px solid rgba(45,138,78,.4);
    font-size: 11px; color: #9fe0b4; line-height: 1.5; }
/* Afvist opgave ("Løst på anden vis"): ærligt IKKE-udført-signal (amber/rød, ikke grøn). */
.card-done-summary.card-done-dismissed {
    background: rgba(217,72,44,.12); border-color: rgba(217,72,44,.42); color: #f0b6a6; }
.card-done-summary.card-done-dismissed strong { color: #f4a48f; }
/* ⛔ Hvorfor defekt — status + dato/hvem + note. Kantfarve = status-farven (inline). */
.card-defect-box { margin-top: 6px; padding: 5px 8px; border-radius: 6px;
    background: rgba(185,28,28,.12); border: 1px solid rgba(185,28,28,.45);
    font-size: 11px; color: #f3c2bb; line-height: 1.45; }
.card-defect-box strong { color: #ffd2c9; }
.card-defect-box .cdb-meta { opacity: .75; }
.card-defect-box .cdb-note { margin-top: 2px; color: #ead6d2; }
.board-compact .card-defect-box { padding: 3px 6px; font-size: 10.5px; }
.board-compact .card-defect-box .cdb-note { display: none; }
/* Kompakt-tilstand (board + Opgaver): tættere bokse så de ikke stjæler højde */
.board-compact .card-checklist,
.board-compact .card-done-summary { font-size: 9.5px; padding: 4px 6px; margin-top: 4px; line-height: 1.35; }
.board-compact .card-checklist-title { font-size: 10px; margin-bottom: 2px; }
.board-compact .card-chk-item { padding: 0; gap: 4px; }
.board-compact .card-chk-item .chk-mark { width: 10px; }

/* ─── Lane-bjælke (sidelæns hurtig-navigation) — klik = board scroller hen til kolonnen ─── */
.board-lane-bar {
    display: flex; gap: 6px; overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; padding: 6px 16px; border-bottom: 1px solid var(--rule-2); flex: 0 0 auto;
}
.board-lane-bar::-webkit-scrollbar { display: none; }
.board-lane-jump {
    flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
    background: rgba(255,255,255,0.05); border: 1px solid var(--rule-2); color: var(--cream-mute);
    font-family: "Geist Mono", ui-monospace, monospace; font-size: 11px; letter-spacing: 0.05em;
    padding: 6px 12px; border-radius: 999px; cursor: pointer;
}
.board-lane-jump:hover { border-color: var(--cream-mute); color: var(--cream); }
.board-lane-jump.active { background: rgba(212,92,47,0.2); border-color: var(--accent); color: var(--cream); }
/* Kort trukket hen over pillen (drop-mål) → tydelig fyldt accent, så man ser hvor det lander. */
.board-lane-jump.drag-over { background: var(--accent, #d45c2f); border-color: var(--accent, #d45c2f); color: #fff; transform: scale(1.06); }
.board-lane-jump-n { background: rgba(255,255,255,0.10); border-radius: 999px; padding: 0 6px; font-size: 10px; }

/* Søgning: fremhæv matchende kort (board scroller til første hit — se applyBoardSearch). */
.card.card-search-hit { box-shadow: 0 0 0 2px var(--accent, #d45c2f); border-color: var(--accent, #d45c2f); }
