/*
 * Mörkt läge.
 *
 * Bygger på Bootstrap 5.3:s egna färglägen: när <html> bär data-bs-theme="dark" byter Bootstrap
 * själv kort, tabeller, formulär, dropdowns och modaler. Den här filen tar hand om resten -
 * Star Admin-temat (assets/css/vertical/style.css och assets/css/shared/style-bs5.css) skrevs
 * före den mekanismen och har ljusa färger hårdkodade.
 *
 * TVÅ ATTRIBUT, MED FLIT:
 *   data-bs-theme  Bootstraps eget. Styr allt som kommer ur biblioteket.
 *   data-theme     Vårt. Styr de här reglerna och sidornas egna tokens (t.ex. .stat-root i
 *                  rapportörens statistik), och används av sidor som ritar egen grafik.
 * Båda sätts på samma ställe: serversidan när användaren valt ljust eller mörkt, annars av
 * theme_boot.jsp efter datorns inställning. Sätts de av vanlig JS i body hinner sidan målas
 * ljus först, och varje sidbyte blinkar vitt.
 *
 * REGELN FÖR NYA FÄRGER: skriv dem som var(--tid-*) nedan i stället för en hex-kod i sidfilen.
 * En hex-kod i en sidfil syns bara i mörkt läge, alltså långt efter att den skrevs.
 */

:root[data-theme="dark"] {
    --tid-bg: #16181c;              /* sidans botten, bakom korten */
    --tid-surface: #1e2126;         /* kort, paneler, sidomeny */
    --tid-surface-2: #262a31;       /* upphöjt: tabellrubrik, hover */
    --tid-border: #333941;
    --tid-ink: #d7dade;             /* brödtext */
    --tid-ink-muted: #9aa1ab;
}

/* ── Sidans ytor ────────────────────────────────────────────────────────── */

:root[data-theme="dark"] body,
:root[data-theme="dark"] .content-wrapper {
    background: var(--tid-bg);
    color: var(--tid-ink);
}

/* Bastextfärgen måste sättas på KORTET också, inte bara på body. Temat ger .card och .card-body
   en egen mörk färg, och allt inuti ärver den - inklusive fetstil som satts till inherit. Det
   var därför "(90 st.)" och "Planering för perioden" blev osynliga: de ärvde rätt, men det de
   ärvde var fel. */
:root[data-theme="dark"] .card,
:root[data-theme="dark"] .card-body,
/* card-header och -footer har egna ljusa bakgrunder i temat och missades när bara .card och
   .card-body mörklades - rubrikraden på ett kort blev då en ljus remsa med ljus text. */
:root[data-theme="dark"] .card-header,
:root[data-theme="dark"] .card-footer,
:root[data-theme="dark"] .card-header h1,
:root[data-theme="dark"] .card-header h2,
:root[data-theme="dark"] .card-header h3,
:root[data-theme="dark"] .card-header h4,
:root[data-theme="dark"] .card-header h5,
:root[data-theme="dark"] .card-header h6,
:root[data-theme="dark"] .card-body p,
:root[data-theme="dark"] .content-wrapper p,
:root[data-theme="dark"] .content-wrapper li,
:root[data-theme="dark"] .content-wrapper span:not([class*="badge"]):not([class*="text-"]) {
    color: var(--tid-ink);
}

:root[data-theme="dark"] .card {
    /* Skuggan från temat är svart mot vitt och blir en smutsig ram mot mörkt. */
    box-shadow: none;
    border: 1px solid var(--tid-border);
}

:root[data-theme="dark"] .card-header,
:root[data-theme="dark"] .card-footer {
    background-color: var(--tid-surface-2) !important;
    border-color: var(--tid-border) !important;
}

:root[data-theme="dark"] .sidebar,
:root[data-theme="dark"] .footer,
:root[data-theme="dark"] #right-sidebar,
:root[data-theme="dark"] #theme-settings {
    background: var(--tid-surface);
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

/*
 * Logotypytan uppe till vänster BEHÅLLER sin ljusa botten i mörkt läge. Det är medvetet, och
 * det är mätt: de 214 kundlogotyperna i img/customerlogos fördelar sig så här.
 *
 *   150 (70 %)  egen VIT botten      - en mörk yta bakom dem ger ändå en vit rektangel, bara
 *                                      med en kant runt. Mot ljus yta smälter de sömlöst in.
 *    55 (26 %)  GENOMSKINLIGA        - varav 48 har mörkt motiv och mäter under 3:1 mot mörk
 *                                      botten. De blir oläsliga; generationsnickarna.png når
 *                                      1.02, alltså i praktiken osynlig.
 *     8         färgad botten        - syns mot ljust.
 *     1         mörk botten          - syns mot ljust.
 *
 * Kundens logotyp är en uppladdad fil vi inte valt och inte kan räkna med. Det enda vi VET är
 * att den fungerar mot vitt, eftersom ytan är vit i ljust läge - därför är ljus yta det enda
 * valet som är säkert för alla 214 utan att någon behöver ladda upp en ny bild.
 *
 * Den enda som tappar något är jordkullen.png (ljust motiv, genomskinlig), och den ser exakt
 * likadan ut i ljust läge idag - ingen försämring, men värt att veta om kunden hör av sig.
 *
 * Kanten är det som gör skillnaden mot hur det såg ut innan: utan den läste ytan som en glipa
 * där mörkret inte gått fram. Med den läser den som logotypzonen.
 */
:root[data-theme="dark"] .navbar.default-layout .navbar-brand-wrapper,
:root[data-theme="dark"] .navbar .navbar-brand-wrapper {
    background: #ffffff !important;
    border-right: 1px solid var(--tid-border);
    border-bottom: 1px solid var(--tid-border);
}

:root[data-theme="dark"] .sidebar .nav .nav-item .nav-link,
:root[data-theme="dark"] .sidebar .nav .nav-item .nav-link .menu-title,
:root[data-theme="dark"] .sidebar .nav .nav-item .nav-link i {
    color: var(--tid-ink);
}

:root[data-theme="dark"] .sidebar .nav .nav-item:hover > .nav-link,
:root[data-theme="dark"] .sidebar .nav .nav-item.active > .nav-link {
    background: var(--tid-surface-2);
}

/* Sidomenyns profilrad och rubriker */
:root[data-theme="dark"] .sidebar .nav .nav-item.nav-profile .nav-link,
:root[data-theme="dark"] .sidebar .nav .nav-category {
    color: var(--tid-ink-muted);
}

/* Temapanelens egna rubriker. .settings-heading har en hårdkodad mörk färg i temat, så
   "Utseende", "Sidomeny", "Toppmeny" och "Startsida" blev osynliga mot den mörka panelen -
   man såg reglagen men inte vad de hette. */
:root[data-theme="dark"] #theme-settings,
:root[data-theme="dark"] #theme-settings .settings-heading,
:root[data-theme="dark"] #theme-settings .sidebar-bg-options,
:root[data-theme="dark"] #theme-settings .form-check-label,
:root[data-theme="dark"] #theme-settings .form-text,
:root[data-theme="dark"] .settings-close {
    color: var(--tid-ink);
}

:root[data-theme="dark"] #theme-settings .sidebar-bg-options {
    border-color: var(--tid-border);
}

/*
 * Ringen för "Följ datorn" är delad på mitten - halvt ljust, halvt mörkt - så att raden visar
 * vad valet gör i stället för att bara påstå det. Regeln står utanför dark-blocken eftersom
 * ringen ska se likadan ut i båda lägena; det är samma val som beskrivs.
 */
#theme-settings .tid-swatch-system {
    background: linear-gradient(90deg, #ffffff 0%, #ffffff 50%, #2b3038 50%, #2b3038 100%);
}

/*
 * Sidomenyns FÄRGVAL gäller bara i ljust läge - men det DÖLJS INTE i mörkt.
 *
 * Panelen hade två val som båda hette "ljus/mörk" bredvid varandra - ett läge för hela
 * gränssnittet och en färg på sidomenyn - och det gick inte att gissa vilket som var vilket.
 * Rubrikerna säger nu vad de är, och i mörkt läge står skälet utskrivet ovanför valet.
 *
 * Första försöket dolde valet helt i mörkt läge. Det var fel av två skäl: ett reglage som
 * försvinner läses som en bugg (samma regel som ERP-guidens steg, som gråas med sitt skäl
 * i stället för att tas bort), och den som kör mörkt läge måste ändå kunna ställa in hur
 * menyn ska se ut i ljust. Doldes valet fick man växla till ljust, ändra, och växla tillbaka.
 *
 * Tonat men fullt klickbart: raderna sparar som vanligt, och markeringen visar vilket val
 * som gäller. De två inställningarna är oberoende - det är bara den ena som saknar verkan
 * i det ena läget.
 */
:root[data-theme="dark"] .theme-sidebar-colors { opacity: .72; }
:root:not([data-theme="dark"]) .theme-sidebar-locked { display: none; }

/* ── Text som temat låser till nästan svart ─────────────────────────────── */

:root[data-theme="dark"] .text-dark,
:root[data-theme="dark"] .text-black,
:root[data-theme="dark"] h1, :root[data-theme="dark"] h2, :root[data-theme="dark"] h3,
:root[data-theme="dark"] h4, :root[data-theme="dark"] h5, :root[data-theme="dark"] h6 {
    color: var(--tid-ink) !important;
}

:root[data-theme="dark"] .text-muted {
    color: var(--tid-ink-muted) !important;
}

/* ── Tabeller ───────────────────────────────────────────────────────────── */

:root[data-theme="dark"] .table {
    --bs-table-color: var(--tid-ink);
    --bs-table-bg: transparent;
    --bs-table-border-color: var(--tid-border);
    --bs-table-striped-bg: rgba(255, 255, 255, 0.03);
    --bs-table-striped-color: var(--tid-ink);
    --bs-table-hover-bg: rgba(255, 255, 255, 0.06);
    --bs-table-hover-color: var(--tid-ink);
}

/*
 * Variablerna ovan räcker INTE. Star Admin-temat sätter färgen direkt på cellen
 * (style-bs5.css: ".table td, .jsgrid .jsgrid-table td { color: #212529 }") och laddas efter
 * Bootstrap, så den regeln vinner över --bs-table-color. Följden var att radtexten fick exakt
 * kortets mörka bakgrundsfärg och blev osynlig - tabellen såg tom ut.
 * Samma sak för rubrikraden, som dessutom har en ljus bakgrund satt på .adminTable.
 */
:root[data-theme="dark"] .table td,
:root[data-theme="dark"] .table th,
:root[data-theme="dark"] .jsgrid .jsgrid-table td,
:root[data-theme="dark"] .jsgrid .jsgrid-table th,
:root[data-theme="dark"] .table thead th,
:root[data-theme="dark"] .adminTable thead th,
:root[data-theme="dark"] .adminTable tbody td {
    color: var(--tid-ink);
}

:root[data-theme="dark"] .table > thead,
:root[data-theme="dark"] .adminTable thead th {
    background: var(--tid-surface-2);
    border-bottom-color: var(--tid-border);
}

:root[data-theme="dark"] .adminTable tbody td {
    border-bottom-color: var(--tid-border);
}

:root[data-theme="dark"] .adminTable tbody tr:hover {
    background-color: var(--tid-surface-2);
}

/* DataTables ritar sina egna kontroller utanför .table. */
:root[data-theme="dark"] .dt-container,
:root[data-theme="dark"] .dataTables_wrapper {
    color: var(--tid-ink);
}

:root[data-theme="dark"] .dt-paging .page-link {
    background: var(--tid-surface);
    border-color: var(--tid-border);
    color: var(--tid-ink);
}

:root[data-theme="dark"] .dt-paging .page-item.active .page-link {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
}

/* ── Sidomenyns undermeny och flikraden ─────────────────────────────────── */

/* Undermenyn (Byt Lösenord, Projekt, Statistik) har en nästan vit bakgrund i temat, så den
   ljusa menytexten försvann helt när sidomenyn blev mörk. */
:root[data-theme="dark"] .sidebar .nav.sub-menu,
:root[data-theme="dark"] .sidebar .nav .nav-item .collapse,
:root[data-theme="dark"] .sidebar .nav .nav-item .collapsing {
    background: var(--tid-surface-2);
}

:root[data-theme="dark"] .sidebar .nav.sub-menu .nav-item .nav-link {
    color: var(--tid-ink-muted);
}

:root[data-theme="dark"] .sidebar .nav.sub-menu .nav-item .nav-link.active,
:root[data-theme="dark"] .sidebar .nav.sub-menu .nav-item .nav-link:hover {
    color: var(--tid-ink);
}

/* Flikarna (nav-tabs): temat låser färgen till nästan svart, alltså osynlig mot mörkt kort. */
:root[data-theme="dark"] .nav-tabs .nav-link {
    color: var(--tid-ink-muted);
    border-color: transparent;
}

:root[data-theme="dark"] .nav-tabs .nav-link.active {
    color: var(--tid-ink);
    background: var(--tid-surface-2);
    border-color: var(--tid-border) var(--tid-border) transparent;
}

:root[data-theme="dark"] .nav-tabs {
    border-bottom-color: var(--tid-border);
}

/* ── Knappar, etiketter och fetstil ─────────────────────────────────────── */

/* btn-outline-secondary får halvtransparent svart text ur temat - läsbar mot vitt, osynlig
   mot mörkt. Den används överallt: verktygsrader, filterknappar, A−/A+, Rensa, Verktyg. */
:root[data-theme="dark"] .btn-outline-secondary,
:root[data-theme="dark"] .btn-outline-dark {
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

:root[data-theme="dark"] .btn-outline-secondary:hover,
:root[data-theme="dark"] .btn-outline-dark:hover {
    background: var(--tid-surface-2);
    border-color: var(--tid-border);
    color: var(--tid-ink);
}

:root[data-theme="dark"] #theme-settings .btn-check:checked + .btn-outline-secondary {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
}

/* Fetstil ÄRVER inte i det här temat - den har en egen mörk färg och blev osynlig mitt i en
   ljus mening ("(90 st.)", "Planering för perioden", "Meny" i namn-menyn). inherit i stället
   för en fast färg, så att .text-danger strong och liknande behåller sin mening. Gäller hela
   sidan, inte bara innehållsytan: de mörka fetstilarna fanns även i sidhuvudets dropdowns. */
/* !important med flit. Den här filen är ett ÖVERLAGRINGSLAGER ovanpå ett tema som skriver
   färger direkt på elementen, ofta med id-selektorer (#pageName strong) som vinner över vilken
   klassregel som helst. Att jaga varje sådan selektor vore ett arbete som aldrig blir klart och
   som går sönder nästa gång temat rörs; inherit-värdet är dessutom ofarligt - det gör bara att
   fetstilen får sin omgivnings färg, vilket är vad man vill i båda lägena. */
:root[data-theme="dark"] strong,
:root[data-theme="dark"] b {
    color: inherit !important;
}

/* Fältetiketter. Både Bootstraps .form-label och sidornas egna klasser har en fast grå. */
/* Samma skäl till !important som för fetstilen ovan: vyerna sätter sina egna gråa på
   etiketterna, ibland via id-selektorer. */
:root[data-theme="dark"] .form-label,
:root[data-theme="dark"] .col-form-label,
:root[data-theme="dark"] .ta-filter-label,
:root[data-theme="dark"] .pt-search-label,
:root[data-theme="dark"] .pt-visa-label,
:root[data-theme="dark"] .form-check-label {
    color: var(--tid-ink) !important;
}

/* Flikar som är <button> (Rapport-admin, Projekt-Tid) träffas inte av .nav-tabs .nav-link
   ovan när de saknar den klassen på rätt nivå. */
:root[data-theme="dark"] button.nav-link {
    color: var(--tid-ink-muted) !important;
}

:root[data-theme="dark"] button.nav-link.active {
    color: var(--tid-ink) !important;
    background: var(--tid-surface-2);
}

/* DataTables kolumnrubriker: BAKGRUNDEN är problemet - rubrikcellen i Projekt-Tid och
   Rapport-admin är ljus, så den ljusa rubriktexten hamnar ljust mot ljust. */
:root[data-theme="dark"] .dt-column-title {
    color: var(--tid-ink);
}

:root[data-theme="dark"] table.dataTable > thead > tr > th,
:root[data-theme="dark"] table.dataTable > thead > tr > td,
:root[data-theme="dark"] .dt-scroll-head,
:root[data-theme="dark"] .dt-scroll-headInner table > thead > tr > th {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

:root[data-theme="dark"] .table-light,
:root[data-theme="dark"] .table-light > td,
:root[data-theme="dark"] .table-light > th {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
}

/*
 * Den SORTERADE kolumnen. DataTables 2 färgar den inte med background-color utan med en
 * inset box-shadow som täcker hela cellen (0 0 0 9999px). Skuggan är en SVART tonad yta,
 * gjord för ljusa tabeller; mot en mörk tabell blir den ett mörkare band som ser ut som en
 * skugga eller ett fel snarare än en markering. Samma yta, men ljus och lika svag.
 */
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_1,
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_2,
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_3,
:root[data-theme="dark"] table.dataTable > tbody > tr > .dt-ordering-asc,
:root[data-theme="dark"] table.dataTable > tbody > tr > .dt-ordering-desc,
:root[data-theme="dark"] table.dataTable > thead > tr > .dt-ordering-asc,
:root[data-theme="dark"] table.dataTable > thead > tr > .dt-ordering-desc {
    box-shadow: inset 0 0 0 9999px rgba(255, 255, 255, 0.045) !important;
    color: var(--tid-ink);
}

/* Projekt-Tid och Rapport-admin har egna, ljusa kolumnbakgrunder (#eef1f5) på de frysta
   kolumnerna och summeringsraden. De ligger kvar ljusa medan texten blivit ljus, alltså
   ljust mot ljust. */
:root[data-theme="dark"] .pt-id-col,
:root[data-theme="dark"] .pt-control-col,
:root[data-theme="dark"] .pt-name-col,
:root[data-theme="dark"] .pt-total-overlay,
:root[data-theme="dark"] .ta-sticky-col,
:root[data-theme="dark"] th.pt-id-col,
:root[data-theme="dark"] th.pt-control-col {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
}

/* Ljus/Mörk-raderna för sidomenyn har vit bakgrund i temat. */
:root[data-theme="dark"] #theme-settings .sidebar-bg-options {
    background: var(--tid-surface-2);
}

:root[data-theme="dark"] #theme-settings .sidebar-bg-options.selected {
    background: var(--tid-border);
}

/* ── Modaler ────────────────────────────────────────────────────────────── */
/*
 * Star Admin sätter .modal .modal-dialog .modal-content till vitt, vilket vinner över
 * Bootstraps --bs-modal-bg. EN regel gav 95 fall av osynlig text: allt inuti modalen ärvde
 * den ljusa texten och målades mot vitt.
 *
 * Modaler ligger DOLDA i DOM:en tills de öppnas, så ett svep som bara läser sidan går rakt
 * förbi dem - de måste öppnas för att kunna mätas. Det var därför de överlevde de tidigare
 * genomgångarna.
 */
:root[data-theme="dark"] .modal .modal-dialog .modal-content,
:root[data-theme="dark"] .modal-content,
:root[data-theme="dark"] .modal-header,
:root[data-theme="dark"] .modal-body,
:root[data-theme="dark"] .modal-footer {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

:root[data-theme="dark"] .modal-header,
:root[data-theme="dark"] .modal-footer {
    border-color: var(--tid-border) !important;
}

/* Ljusa ytor INUTI modaler: dokumentvisaren, snabbmenyns förhandsvisning, multirapportens
   kropp, den fastnålade tabellrubriken i kostnadsdialogen och todo-listans sektioner. */
:root[data-theme="dark"] #documentViewerModal .modal-body,
:root[data-theme="dark"] .modal .border.rounded,
:root[data-theme="dark"] .qm-preview,
:root[data-theme="dark"] .todo-section,
:root[data-theme="dark"] .modal .bg-white,
:root[data-theme="dark"] .modal .bg-light,
:root[data-theme="dark"] .modal fieldset.border,
:root[data-theme="dark"] thead.bg-white,
:root[data-theme="dark"] thead.sticky-top {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

/* Hjälptexten under ett fält är medvetet svag; mot mörkt behöver den den dämpade tonen,
   inte den ljusa grå som är gjord för vitt. */
:root[data-theme="dark"] .form-text {
    color: var(--tid-ink-muted) !important;
}

/* En <legend> ligger ovanpå fältgruppens ram och får därför en egen ogenomskinlig bakgrund
   (ofta inline) för att "klippa" ramen bakom sig. Den måste följa ytan den ligger på. */
:root[data-theme="dark"] legend,
:root[data-theme="dark"] .modal legend {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink);
}

/* Länkar i snabbmenyns förhandsvisning ärver dokumentets länkfärg, som är gjord för vitt. */
:root[data-theme="dark"] .qm-preview a {
    color: var(--tid-ink) !important;
}

/* ── Offcanvas (Ny användare, Nytt projekt, Ny nyhet, Ny artikel …) ─────── */
/*
 * .admin-offcanvas har ett åttiotal egna regler i tidrapport.css, alla med ljusa hex-värden.
 * Att överstyra dem en och en vore ohållbart och skulle gå sönder vid nästa ändring där; i
 * stället mörkläggs de BÄRANDE ytorna - panelen, dess tre delar, flikarna och fälten. Resten
 * ärver.
 */
:root[data-theme="dark"] .offcanvas,
:root[data-theme="dark"] .admin-offcanvas,
:root[data-theme="dark"] .admin-offcanvas .offcanvas-header,
:root[data-theme="dark"] .admin-offcanvas .offcanvas-body,
:root[data-theme="dark"] .admin-offcanvas .offcanvas-footer,
:root[data-theme="dark"] .admin-offcanvas .tab-content,
:root[data-theme="dark"] .admin-offcanvas .tab-pane,
:root[data-theme="dark"] .admin-offcanvas .form-group {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

:root[data-theme="dark"] .offcanvas-title,
:root[data-theme="dark"] .admin-offcanvas .offcanvas-title,
:root[data-theme="dark"] .admin-offcanvas label {
    color: var(--tid-ink) !important;
}

:root[data-theme="dark"] .admin-offcanvas .nav-tabs {
    background-color: var(--tid-surface-2) !important;
    border-bottom-color: var(--tid-border);
}

:root[data-theme="dark"] .admin-offcanvas .nav-tabs .nav-link {
    color: var(--tid-ink-muted) !important;
    background-color: transparent;
    border-color: transparent;
}

:root[data-theme="dark"] .admin-offcanvas .nav-tabs .nav-link.active {
    color: var(--tid-ink) !important;
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) var(--tid-border) transparent !important;
}

/* Formulärfälten i panelen (och överallt annars där temat låser dem ljusa). */
:root[data-theme="dark"] .form-control,
:root[data-theme="dark"] .form-select,
:root[data-theme="dark"] .admin-offcanvas .form-control,
:root[data-theme="dark"] .admin-offcanvas .form-select {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}

:root[data-theme="dark"] .form-control::placeholder {
    color: var(--tid-ink-muted);
}

/* Native <option> ritas av operativsystemet och ärver inte selectens färger i alla
   webbläsare - utan den här raden blev svart text mot en mörk lista. */
:root[data-theme="dark"] option {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
}

/* ── Badges ─────────────────────────────────────────────────────────────── */
/*
 * De ljusa badge-färgerna (info, warning, light) kombineras på flera håll med vit text, vilket
 * ger under 2:1 i kontrast - svårläst i båda lägena men mest påtagligt mot en mörk sida.
 * Ljus botten ska ha mörk text; det är samma regel som Bootstraps egna text-bg-*.
 */
:root[data-theme="dark"] .badge.bg-info,
:root[data-theme="dark"] .badge.bg-warning,
:root[data-theme="dark"] .badge.bg-light,
:root[data-theme="dark"] .badge.badge-info,
:root[data-theme="dark"] .badge.badge-warning,
:root[data-theme="dark"] .badge.badge-light {
    color: #16181c !important;
}

/* ── Popup-ytor som ligger utanför Bootstrap ────────────────────────────── */

/* Kalendrarnas högerklicksmeny (style/tidrapportfullcalender.css) */
:root[data-theme="dark"] .cal-daymenu {
    background: var(--tid-surface);
    border-color: var(--tid-border);
    color: var(--tid-ink);
}

:root[data-theme="dark"] .cal-daymenu-item:hover {
    background: var(--tid-surface-2);
}

/* flatpickr */
:root[data-theme="dark"] .flatpickr-calendar {
    background: var(--tid-surface);
    color: var(--tid-ink);
    box-shadow: 0 3px 13px rgba(0, 0, 0, .5);
}

:root[data-theme="dark"] .flatpickr-day {
    color: var(--tid-ink);
}

:root[data-theme="dark"] .flatpickr-day:hover {
    background: var(--tid-surface-2);
    border-color: var(--tid-surface-2);
}

:root[data-theme="dark"] .flatpickr-months .flatpickr-month,
:root[data-theme="dark"] .flatpickr-weekdays,
:root[data-theme="dark"] span.flatpickr-weekday {
    background: var(--tid-surface);
    color: var(--tid-ink-muted);
    fill: var(--tid-ink-muted);
}

/* FullCalendar. Variablerna räcker inte: dagnummer, veckodagsrubriker och veckonummer är
   <a>-element som får sin färg av .fc-col-header-cell-cushion m.fl., inte av --fc-*. Utan de
   här raderna var kalendern en mörk yta där varken datum eller veckodag gick att läsa. */
:root[data-theme="dark"] .fc {
    --fc-page-bg-color: var(--tid-surface);
    --fc-neutral-bg-color: var(--tid-surface-2);
    --fc-border-color: var(--tid-border);
    --fc-today-bg-color: rgba(255, 255, 255, .05);
    color: var(--tid-ink);
}

:root[data-theme="dark"] .fc a,
:root[data-theme="dark"] .fc .fc-col-header-cell-cushion,
:root[data-theme="dark"] .fc .fc-daygrid-day-number,
:root[data-theme="dark"] .fc .fc-daygrid-week-number,
:root[data-theme="dark"] .fc .fc-list-day-text,
:root[data-theme="dark"] .fc .fc-timegrid-axis-cushion,
:root[data-theme="dark"] .fc .fc-timegrid-slot-label-cushion,
/* Resurstidslinjen (Scheduler) i planeringens schemavyer sätter svart på sina
   datum- och veckoetiketter - egna klasser som inte träffas av raderna ovan. */
:root[data-theme="dark"] .fc .fc-timeline-slot-cushion,
:root[data-theme="dark"] .fc .fc-datagrid-cell-cushion,
:root[data-theme="dark"] .fc .fc-datagrid-cell-main,
:root[data-theme="dark"] .fc .fc-timeline-header-row a {
    color: var(--tid-ink) !important;
}

:root[data-theme="dark"] .fc .fc-daygrid-week-number {
    background: var(--tid-surface-2);
}

/* Knapparna i kalenderns verktygsrad ritas av FullCalendar, inte av Bootstrap. */
:root[data-theme="dark"] .fc .fc-button-primary:disabled,
:root[data-theme="dark"] .fc .fc-button-primary {
    background-color: var(--tid-surface-2);
    border-color: var(--tid-border);
    color: var(--tid-ink);
}

/* Planeringskalendern har egna, mörkare färger ovanpå FullCalendars (tidrapportfullcalender.css
   och plancalendar-CSS:en) - de sätter svart direkt på veckodagar och veckonummer. */
:root[data-theme="dark"] .fc .fc-toolbar-title,
:root[data-theme="dark"] .fc-toolbar-title,
:root[data-theme="dark"] .plan-title,
:root[data-theme="dark"] .fc-scrollgrid-sync-inner a,
:root[data-theme="dark"] .fc-resource-cell,
:root[data-theme="dark"] .fc-datagrid-cell-main {
    color: var(--tid-ink) !important;
}

/* ── Projekt-Tid och planeringskalendern ────────────────────────────────── */
/*
 * Båda vyerna har sin CSS i ett <style>-block i JSP:n, som laddas EFTER den här filen. Vid
 * samma specificitet vinner de därför alltid. Selektorerna nedan är medvetet ett steg mer
 * specifika än originalen (:root[data-theme="dark"] respektive body.sidebar-fixed) - det är
 * skälet till att de ser överdrivna ut.
 *
 * Alternativet vore att göra JSP:ernas inline-CSS temamedveten. Det är renare men rör två av
 * appens känsligaste vyer; ett överlagringslager håller allt mörkt-läge-relaterat på ett ställe
 * och går att ta bort i ett svep.
 *
 * Det som INTE rörs, med flit: planeringens händelsefärger (satta per händelse ur databasen),
 * temapanelens färgrutor och logotypytan - de är färgval, inte tema.
 */

/* Zebrarandningen är vit varannan rad. */
:root[data-theme="dark"] #projectTimeTable tbody tr:nth-child(2n+1) {
    background-color: rgba(255, 255, 255, 0.03);
}

/* Markeringen för interna rader. */
:root[data-theme="dark"] #projectTimeTable .pt-internal {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
}

/* Summeringsraden längst ned. */
:root[data-theme="dark"] #projectTimeTable tfoot td,
:root[data-theme="dark"] #projectTimeTable tfoot th {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

/* Planeringskalenderns verktygsrad (månad/vecka, framåt/bakåt) är vit i sidans egen CSS. */
:root[data-theme="dark"] body.sidebar-fixed .fc-header-toolbar,
:root[data-theme="dark"] .fc-header-toolbar {
    background-color: var(--tid-surface) !important;
}

/* Den utfällda menyposten i sidomenyn får en nästan vit bakgrund ur temat - gäller alla
   sidor, inte bara de här två, men syns tydligast där menyn står öppen. */
:root[data-theme="dark"] .sidebar .nav .nav-item .nav-link[aria-expanded="true"] {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
}

/* ── Modulernas egna ljusa ytor ─────────────────────────────────────────── */
/*
 * Varje större vy har en egen CSS-fil med ljusa ytor: verktygsrader, tabellrubriker,
 * zebrarader, kort och chips. De är rätt mot vitt och lyser mot mörkt, och den ljusa texten
 * ovanpå blir då oläsbar - alltså två fel av samma orsak. Grupperat per fil så att det går att
 * se vad som hör ihop med vad.
 *
 * Bakgrunden sätts, inte texten: när ytan blir mörk läser sig texten av sig själv.
 */

/* Gemensamt: kryssrutor och radioknappar. Flera vy-CSS:er tvingar dem vita, vilket ger en
   lysande fyrkant per rad i en mörk tabell. !important: vy-filerna laddas efter den här. */
:root[data-theme="dark"] .form-check-input,
:root[data-theme="dark"] .kma-page .form-check-input {
    background-color: var(--tid-surface-2) !important;
    border-color: var(--tid-border) !important;
}

:root[data-theme="dark"] .form-check-input:checked {
    background-color: var(--bs-primary) !important;
    border-color: var(--bs-primary) !important;
}

/* Gemensamt: tabellrubriker och zebrarader i modulernas egna tabeller. */
:root[data-theme="dark"] #costsTable thead th,
:root[data-theme="dark"] #invoicesTable thead th,
:root[data-theme="dark"] #pendingInvoicesTable thead th,
:root[data-theme="dark"] #searchResultsTable thead th,
:root[data-theme="dark"] #approvedInvoicesTable thead th,
:root[data-theme="dark"] #paidInvoicesTable thead th,
:root[data-theme="dark"] #rejectedInvoicesTable thead th,
:root[data-theme="dark"] .si-sum,
:root[data-theme="dark"] .si-sum strong,
:root[data-theme="dark"] .matrix-table th,
:root[data-theme="dark"] .matrix-table td:first-child,
/*
 * BARA rubrikraden. Den här stod en gång som ".table > :not(caption) > * > *", vilket träffar
 * VARJE cell i varje tabell - och målade därmed över all färgkodning i raderna. I fakturavyerna
 * försvann skillnaden mellan blockerad, förfallen och betald helt: allt blev enhetligt mörkt.
 * En regel som sätter bakgrund på alla celler kan aldrig vara rätt.
 */
:root[data-theme="dark"] .table > thead > tr > th,
:root[data-theme="dark"] .table > thead > tr > td {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
}

/*
 * Bootstraps kontextfärgade rader (table-danger, -warning, -success ...) är pasteller gjorda
 * för vitt. Mot mörkt behöver de samma behandling som prioritetsraderna: kulören kvar, men som
 * en mörk ton. Färgen är information - "blockerad" ska synas som blockerad.
 */
:root[data-theme="dark"] .table-danger,
:root[data-theme="dark"] .table-danger > td,
:root[data-theme="dark"] .table-danger > th { background-color: rgba(220, 53, 69, 0.16) !important; color: var(--tid-ink) !important; }
:root[data-theme="dark"] .table-warning,
:root[data-theme="dark"] .table-warning > td,
:root[data-theme="dark"] .table-warning > th { background-color: rgba(255, 193, 7, 0.15) !important; color: var(--tid-ink) !important; }
:root[data-theme="dark"] .table-success,
:root[data-theme="dark"] .table-success > td,
:root[data-theme="dark"] .table-success > th { background-color: rgba(25, 135, 84, 0.15) !important; color: var(--tid-ink) !important; }
:root[data-theme="dark"] .table-info,
:root[data-theme="dark"] .table-info > td,
:root[data-theme="dark"] .table-info > th { background-color: rgba(13, 202, 240, 0.14) !important; color: var(--tid-ink) !important; }
:root[data-theme="dark"] .table-primary,
:root[data-theme="dark"] .table-primary > td,
:root[data-theme="dark"] .table-primary > th { background-color: rgba(13, 110, 253, 0.15) !important; color: var(--tid-ink) !important; }
:root[data-theme="dark"] .table-secondary,
:root[data-theme="dark"] .table-secondary > td,
:root[data-theme="dark"] .table-secondary > th { background-color: rgba(148, 158, 170, 0.15) !important; color: var(--tid-ink) !important; }

/*
 * Hover på en kontextfärgad rad. Bakgrunds-!important:en ovan hjälper inte här: Bootstrap 5.3
 * målar hovern som inset box-shadow med --bs-table-hover-bg OVANPÅ cellens bakgrund, och
 * .table-danger m.fl. sätter själva den variabeln till sin ljusa pastell (+ --bs-table-hover-color
 * till svart). Resultatet i mörkt läge: ljus pastellrad med ljus text vid hover. Skriv därför om
 * variablerna per klass — samma kulör som viloläget, ett steg starkare, och behåll ljus text.
 * Striped/active får samma behandling; de går genom exakt samma box-shadow-mekanik.
 */
:root[data-theme="dark"] .table-danger {
    --bs-table-hover-bg: rgba(220, 53, 69, 0.30); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(220, 53, 69, 0.20); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(220, 53, 69, 0.36); --bs-table-active-color: var(--tid-ink);
}
:root[data-theme="dark"] .table-warning {
    --bs-table-hover-bg: rgba(255, 193, 7, 0.26); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(255, 193, 7, 0.19); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(255, 193, 7, 0.32); --bs-table-active-color: var(--tid-ink);
}
:root[data-theme="dark"] .table-success {
    --bs-table-hover-bg: rgba(25, 135, 84, 0.28); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(25, 135, 84, 0.19); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(25, 135, 84, 0.34); --bs-table-active-color: var(--tid-ink);
}
:root[data-theme="dark"] .table-info {
    --bs-table-hover-bg: rgba(13, 202, 240, 0.26); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(13, 202, 240, 0.18); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(13, 202, 240, 0.32); --bs-table-active-color: var(--tid-ink);
}
:root[data-theme="dark"] .table-primary {
    --bs-table-hover-bg: rgba(13, 110, 253, 0.30); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(13, 110, 253, 0.20); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(13, 110, 253, 0.36); --bs-table-active-color: var(--tid-ink);
}
:root[data-theme="dark"] .table-secondary {
    --bs-table-hover-bg: rgba(148, 158, 170, 0.28); --bs-table-hover-color: var(--tid-ink);
    --bs-table-striped-bg: rgba(148, 158, 170, 0.19); --bs-table-striped-color: var(--tid-ink);
    --bs-table-active-bg: rgba(148, 158, 170, 0.34); --bs-table-active-color: var(--tid-ink);
}

/* Sorteringslänkarna i de KLASSISKA tabellhuvudena har style="color:black" skrivet i JSP:n
   (projecttime.jsp och syskonvyerna). Inline-stil slås bara av !important. Att rensa de tjugotal
   attributen i en gammal vy är mer risk än nytta - regeln nedan gör samma sak på ett ställe. */
:root[data-theme="dark"] th a,
:root[data-theme="dark"] thead a,
:root[data-theme="dark"] th a[style],
:root[data-theme="dark"] thead a[style] {
    color: var(--tid-ink) !important;
}

:root[data-theme="dark"] #costsTable tbody tr:nth-child(2n+1),
:root[data-theme="dark"] #projectTimeTable tbody tr:nth-child(2n+1) {
    background-color: rgba(255, 255, 255, 0.03);
}

/* Jämna rader hade sin egen ljusa färg - lätt att missa när man bara tittar på den udda. */
:root[data-theme="dark"] #costsTable tbody tr:nth-child(2n),
:root[data-theme="dark"] #projectTimeTable tbody tr:nth-child(2n) {
    background-color: transparent;
}

/* Leverantörsfakturor och Rapport-admin: verktygsrad och flikräknare. */
:root[data-theme="dark"] .si-toolbar,
:root[data-theme="dark"] #taTabs .ta-tab-count,
:root[data-theme="dark"] .tab-content,
:root[data-theme="dark"] .input-group-append,
:root[data-theme="dark"] .input-group-prepend,
:root[data-theme="dark"] .input-group-text {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

/* SMS-vyn är byggd som en meddelandeapp med egna ljusa ytor hela vägen. */
:root[data-theme="dark"] .sms-list,
:root[data-theme="dark"] .sms-preview,
:root[data-theme="dark"] .sms-summary,
:root[data-theme="dark"] .sms-bubble.is-empty,
:root[data-theme="dark"] .sms-avatar {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

:root[data-theme="dark"] .sms-contact-name,
:root[data-theme="dark"] .sms-contact-sub {
    color: var(--tid-ink) !important;
}

/* Filuppladdningen (lönebesked) och den inlånade login-rutan på materialavvikelse.
   .form kommer från login.css och ligger inte alltid under .content-wrapper. */
:root[data-theme="dark"] .dropzone,
:root[data-theme="dark"] .dropzone .dz-message,
:root[data-theme="dark"] div.form {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border);
}

/* btn-light är en ljus knapp - mot mörkt ska den vara en mörk knapp med ljus text. */
:root[data-theme="dark"] .btn-light {
    background-color: var(--tid-surface-2);
    border-color: var(--tid-border);
    color: var(--tid-ink);
}

/* ── Superadmin ─────────────────────────────────────────────────────────── */
/*
 * superadmin.css har en egen ljus palett rakt igenom: kort, diagramrutor, filtersektioner,
 * kodrutor och prioritetsfärgade rader. Samma mönster som modulerna ovan - sätt bakgrunden,
 * så läser sig texten av sig själv.
 */
:root[data-theme="dark"] .stat-card,
:root[data-theme="dark"] .chart-container,
:root[data-theme="dark"] .chart-section,
:root[data-theme="dark"] .export-section,
:root[data-theme="dark"] .date-filter-section,
:root[data-theme="dark"] .customer-header,
:root[data-theme="dark"] .project-table th,
:root[data-theme="dark"] .accordion .card .card-header a,
:root[data-theme="dark"] ul.nav-tabs[style] {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border);
}

/* Informationsrutan är ljusblå; behåll den blå men mörk, färgen säger "det här är en upplysning". */
:root[data-theme="dark"] .info-box {
    background-color: rgba(13, 110, 253, 0.12) !important;
    color: var(--tid-ink);
    border-color: rgba(13, 110, 253, 0.35);
}

:root[data-theme="dark"] .info-box h4,
:root[data-theme="dark"] .info-box p {
    color: var(--tid-ink) !important;
}

/* Kod- och tangentrutor. */
:root[data-theme="dark"] code,
:root[data-theme="dark"] kbd,
:root[data-theme="dark"] pre {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
}

/* Stapeldiagrammen i appversioner och vy-användning ritas som tomma grå spår. */
:root[data-theme="dark"] .av-row .av-bar,
:root[data-theme="dark"] .vu-bar {
    background-color: var(--tid-surface-2) !important;
}

/*
 * Prioritetsraderna i att-göra-listan är färgkodade och färgen BÄR betydelsen. Behåll kulören
 * men som en mörk ton i stället för en pastell - annars försvinner informationen, och en ljus
 * rad mitt i en mörk tabell lyser som ett fel.
 */
:root[data-theme="dark"] tr.prio-1 { background-color: rgba(220, 53, 69, 0.16) !important; }
:root[data-theme="dark"] tr.prio-2 { background-color: rgba(253, 126, 20, 0.14) !important; }
:root[data-theme="dark"] tr.prio-3 { background-color: rgba(255, 193, 7, 0.13) !important; }
:root[data-theme="dark"] tr.prio-4 { background-color: rgba(25, 135, 84, 0.13) !important; }
:root[data-theme="dark"] tr.prio-5 { background-color: rgba(13, 110, 253, 0.13) !important; }

:root[data-theme="dark"] tr[class*="prio-"] td,
:root[data-theme="dark"] tr[class*="prio-"] th {
    background-color: transparent !important;
    color: var(--tid-ink);
}

/* Ljusa knapp- och märkesfärger med vit text: gult och ljusblått bär för lite kontrast mot
   vitt. Ljus botten får mörk text - samma regel som badgesen längre upp. */
:root[data-theme="dark"] .btn-warning,
:root[data-theme="dark"] .btn.btn-warning,
:root[data-theme="dark"] .btn-info,
:root[data-theme="dark"] .btn.btn-info,
:root[data-theme="dark"] .badge-prio-2,
:root[data-theme="dark"] .badge-prio-3,
:root[data-theme="dark"] .badge.badge-warning {
    color: #16181c !important;
}

/* ── KMA ────────────────────────────────────────────────────────────────── */
/* KMA-sidorna har en egen mörkblå palett (kma.css) som är läsbar mot vitt men inte mot mörkt. */
:root[data-theme="dark"] .section-title,
:root[data-theme="dark"] .doc-num,
:root[data-theme="dark"] .kma-page h1,
:root[data-theme="dark"] .kma-page h2,
:root[data-theme="dark"] .kma-page h3,
:root[data-theme="dark"] .kma-dash .ctitle,
/* Etiketterna i filterkorten och dokumentrutorna. */
:root[data-theme="dark"] .gd-label,
:root[data-theme="dark"] .filter-card .form-label,
:root[data-theme="dark"] .risk-filter .lbl,
:root[data-theme="dark"] .kma-chip-bar-label,
:root[data-theme="dark"] .doc-meta-grid .lbl,
:root[data-theme="dark"] .meta-panel .form-label,
:root[data-theme="dark"] .doc-toc .toc-title,
:root[data-theme="dark"] .sec-title,
:root[data-theme="dark"] .clause,
:root[data-theme="dark"] .kma-field-label {
    color: var(--tid-ink) !important;
}

/* KMA:s ljusa ytor: filterkort, personchips och de färgade K/M/A-märkena. */
:root[data-theme="dark"] .risk-filter,
:root[data-theme="dark"] .filter-card,
:root[data-theme="dark"] .person-chip,
:root[data-theme="dark"] .kma-chip-bar {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border);
}

/* K/M/A-märkena (gt-*) är ljusa tonade plattor med ljus text i mörkt läge - texten måste bli
   mörk, för plattornas färg BÄR betydelsen (kvalitet, miljö, arbetsmiljö) och ska vara kvar.
   Attributselektorn tar alla varianter på en gång, även gt-other och kommande. */
:root[data-theme="dark"] [class*="gt-"],
:root[data-theme="dark"] .gt,
:root[data-theme="dark"] .goal-type {
    color: #16181c !important;
}

/* KMA:s dokumentlista och flikar: temat låser texten till nästan svart via selektorer som är
   mer specifika än de generella nav-reglerna längre upp. */
:root[data-theme="dark"] .list-group-item,
:root[data-theme="dark"] .nav-pills .nav-item .nav-link,
:root[data-theme="dark"] .nav-tabs .nav-item .nav-link {
    color: var(--tid-ink-muted) !important;
    background-color: transparent;
}

:root[data-theme="dark"] .nav-pills .nav-item .nav-link.active,
:root[data-theme="dark"] .nav-tabs .nav-item .nav-link.active,
:root[data-theme="dark"] .list-group-item.active {
    color: var(--tid-ink) !important;
    background-color: var(--tid-surface-2) !important;
}

/* Informationsrutan i miljöaspektregistret är ljusgrön; behåll den grön men mörk. */
:root[data-theme="dark"] .ma-threshold-note {
    background-color: rgba(25, 135, 84, 0.12) !important;
    color: var(--tid-ink);
    border-color: rgba(25, 135, 84, 0.35);
}

/* ── Rapportörens statistik ─────────────────────────────────────────────── */
/* Sidan bär sina egna tokens på .stat-root och hade tidigare bara en
   prefers-color-scheme-variant. Med ett uttryckligt val ska den följa valet. */
:root[data-theme="dark"] .stat-root {
    --stat-surface: var(--tid-surface);
    --stat-series: #3987e5;
    --stat-series-soft: rgba(57, 135, 229, 0.22);
    --stat-grid: var(--tid-border);
    --stat-ink: var(--tid-ink-muted);
}

/* ============================================================================
 * SVEPET 2026-08-26: sidornas EGNA ytor
 *
 * Ett svep över hela systemet - nio roller, 311 sidmätningar - visade att nästan all
 * osynlig text var en FÖLJD av en ljus yta, inte ett eget fel. En sida sätter en vit
 * bakgrund i sin egen CSS-fil, det mörka läget gör texten ljus, och resultatet är ljust
 * mot ljust. Därför står ytorna först här och texten knappt alls: blir ytan mörk läser
 * sig texten av sig själv.
 *
 * !important behövs eftersom sidornas egna filer (superadmin.css, kma/css/*.css) laddas
 * EFTER theme-dark.css - kma.css på rad 190 i adm_includes.jsp mot theme-dark på rad 49.
 * ========================================================================= */

/* --- Kortytor: rent vita paneler som bär innehåll ------------------------- */
:root[data-theme="dark"] .chat-wrapper,
:root[data-theme="dark"] .file-explorer,
:root[data-theme="dark"] .cloud-card,
:root[data-theme="dark"] .dashboard-widget,
:root[data-theme="dark"] #document-container,
:root[data-theme="dark"] .kma-page .evt-card,
:root[data-theme="dark"] .kma-page .impr-card,
:root[data-theme="dark"] .kma-page .task-card,
:root[data-theme="dark"] .kma-page .org-node,
:root[data-theme="dark"] .memory-card,
:root[data-theme="dark"] .container-custom,
:root[data-theme="dark"] .logo-option,
:root[data-theme="dark"] .time-table,
:root[data-theme="dark"] .onb-card {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink);
    border-color: var(--tid-border) !important;
}

/* --- Sekundära ytor: rubrikrader, remsor och zebrarader ------------------- */
:root[data-theme="dark"] .chat-thread,
:root[data-theme="dark"] .breadcrumb-path,
:root[data-theme="dark"] .logo-preview-panel,
:root[data-theme="dark"] .status-box,
:root[data-theme="dark"] .switch-row,
:root[data-theme="dark"] .onb-summary-card,
:root[data-theme="dark"] .kma-page .machine-group-hdr,
:root[data-theme="dark"] .form-table .section-header td,
:root[data-theme="dark"] .time-table tbody tr:nth-child(2n),
:root[data-theme="dark"] .time-table thead th {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}

/* Mätarna: spåret var ljusgrått, och den vita procentsiffran låg ovanpå det. */
:root[data-theme="dark"] .progress-bar,
:root[data-theme="dark"] .toggle-slider {
    background-color: var(--tid-surface-2) !important;
}
:root[data-theme="dark"] .progress-fill {
    color: #ffffff;
}

/* --- Ytor som BÄR betydelse ----------------------------------------------
 * Färgen är information (frånkopplad, väntar, importerad) och ska vara kvar. Den
 * mörkas till en ton av samma kulör i stället för att bli neutralt grå, och texten
 * blir ljus - samma princip som tabellernas .table-danger/-warning.
 * ------------------------------------------------------------------------- */
:root[data-theme="dark"] .disconnected,
:root[data-theme="dark"] .status-badge.status-DISCONNECTED,
:root[data-theme="dark"] .onb-pill-help,
:root[data-theme="dark"] .onb-check-overdue {
    background-color: rgba(220, 53, 69, 0.18) !important;
    color: var(--tid-ink) !important;
    border-color: rgba(220, 53, 69, 0.35) !important;
}
:root[data-theme="dark"] .onb-pill-wait,
:root[data-theme="dark"] .invoice-info {
    background-color: rgba(255, 193, 7, 0.16) !important;
    color: var(--tid-ink) !important;
    border-color: rgba(255, 193, 7, 0.32) !important;
}
:root[data-theme="dark"] .onb-pill-ok,
:root[data-theme="dark"] .onb-check-pass,
:root[data-theme="dark"] .kma-page tr.imp-IMPORTERAD,
:root[data-theme="dark"] .kma-page tr.imp-IMPORTERAD > td {
    background-color: rgba(25, 135, 84, 0.16) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .onb-check-infoon {
    background-color: rgba(13, 110, 253, 0.16) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .onb-check-pending,
:root[data-theme="dark"] .onb-check-infooff {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* --- Bootstraps egna ljusa varianter -------------------------------------- */
:root[data-theme="dark"] .bg-light,
:root[data-theme="dark"] .badge.bg-light {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/*
 * UNDANTAG: temapanelens färgprover.
 *
 * Ringarna som visar "Ljust" och "Mörkt" är byggda av .bg-light och .bg-dark, och regeln
 * ovan mörkade den ljusa ringen som vilken yta som helst. Resultatet var att båda ringarna
 * blev mörka i mörkt läge - alltså gick det inte att se skillnad på de två valen, i just
 * den ruta som finns till för att välja mellan dem.
 *
 * Det är samma kategori som mina generatorer redan undantar: ett färgprov visar en FÄRG,
 * och då är färgen innehållet, inte en yta att anpassa. Den regeln gällde bara inte det
 * här stället, för det var handskrivet.
 */
:root[data-theme="dark"] #theme-settings .img-ss.bg-light,
:root[data-theme="dark"] .settings-panel .img-ss.bg-light {
    background-color: #ffffff !important;
}
:root[data-theme="dark"] #theme-settings .img-ss.bg-dark,
:root[data-theme="dark"] .settings-panel .img-ss.bg-dark {
    background-color: #2b3038 !important;
}
/* Ringarna behöver en tydlig kant mot panelen, annars flyter den mörka ihop med botten. */
:root[data-theme="dark"] #theme-settings .img-ss.rounded-circle,
:root[data-theme="dark"] .settings-panel .img-ss.rounded-circle {
    border-color: var(--tid-ink-muted) !important;
}
/* select utan klass ärver inget från Bootstrap och blev en vit ruta i formulären. */
:root[data-theme="dark"] select:not([class]),
:root[data-theme="dark"] input:not([class]):not([type="checkbox"]):not([type="radio"]),
:root[data-theme="dark"] textarea:not([class]) {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border: 1px solid var(--tid-border) !important;
}
/*
 * Gult BEHÅLLER sin färg - den betyder varning och syns lika illa i ljust läge om den
 * tas bort. Det som fattades var att texten på gult måste vara mörk, inte ljus.
 */
:root[data-theme="dark"] .bg-warning,
:root[data-theme="dark"] .badge.bg-warning,
:root[data-theme="dark"] .badge-warning,
:root[data-theme="dark"] .btn-warning {
    color: #16181c !important;
}

/*
 * Alerts: Bootstrap ger dem en ljus pastellbotten som ligger kvar i mörkt läge, och våra
 * egna regler gjorde texten ljus ovanpå den. Det gav de allra sämsta mätvärdena i hela
 * svepet (1.05:1 - i praktiken osynligt). Botten mörkas till en ton av samma kulör så
 * att alertens innebörd är kvar, och ALLT inuti ärver den ljusa texten.
 */
:root[data-theme="dark"] .alert-info,
:root[data-theme="dark"] .alert-primary { background-color: rgba(13, 110, 253, 0.14) !important; }
:root[data-theme="dark"] .alert-success { background-color: rgba(25, 135, 84, 0.16) !important; }
:root[data-theme="dark"] .alert-warning { background-color: rgba(255, 193, 7, 0.16) !important; }
:root[data-theme="dark"] .alert-danger  { background-color: rgba(220, 53, 69, 0.16) !important; }
:root[data-theme="dark"] .alert-secondary,
:root[data-theme="dark"] .alert-light   { background-color: var(--tid-surface-2) !important; }
:root[data-theme="dark"] .alert,
:root[data-theme="dark"] .alert *,
:root[data-theme="dark"] .alert strong,
:root[data-theme="dark"] .alert b,
:root[data-theme="dark"] .alert p,
:root[data-theme="dark"] .alert li {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .alert {
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .alert a {
    color: #8ab4f8 !important;
}

/*
 * Neutrala statusmärken (Ej bedömd, Utkast, Ej startad) låg på #adb5bd med vit text -
 * 2.07:1, alltså för svagt även i LJUST läge. Här mörkas plattan så den vita texten
 * får den kontrast den alltid borde haft.
 */
:root[data-theme="dark"] .kma-page .res-EJ,
:root[data-theme="dark"] .kma-page .status-badge.UTKAST,
:root[data-theme="dark"] .kma-page .status-ejstartad,
:root[data-theme="dark"] .kma-page .prio-NORMAL {
    background-color: #4a5058 !important;
    color: #ffffff !important;
}

/*
 * Sidornas egna rubriker och etiketter som satts i en egen CSS-fil med en mörk hex.
 * De sitter på ytor som nu är mörka, så färgen måste följa med.
 */
:root[data-theme="dark"] .kma-page .ch-title,
:root[data-theme="dark"] .kma-page .impr-section strong,
:root[data-theme="dark"] .kma-page .ftype,
:root[data-theme="dark"] .fact-text,
:root[data-theme="dark"] .fact-text strong,
:root[data-theme="dark"] .stat-label,
:root[data-theme="dark"] .stat-value,
:root[data-theme="dark"] .memory-card h4,
:root[data-theme="dark"] .logo-preview-panel h6 {
    color: var(--tid-ink) !important;
}

/* --- Andra svepet: rapportpopuparna och det som blev kvar ------------------
 * Popuparna följer temat sedan de fick data-theme (decorators/partials/popup_html.jsp),
 * men deras EGNA ytor var fortfarande vita. Det är rapportörens vanligaste dialoger -
 * utlägg, material och traktamente - så de är värda att få rätt.
 * ------------------------------------------------------------------------- */
:root[data-theme="dark"] .rp-card,
:root[data-theme="dark"] .rp-thumb,
:root[data-theme="dark"] .worker-picker {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .rp-table > thead > tr > th,
:root[data-theme="dark"] .rp-drop,
:root[data-theme="dark"] .sp-replacer {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .rp-form .form-label,
:root[data-theme="dark"] .rp-labelgrid label,
:root[data-theme="dark"] .pf-row > label,
:root[data-theme="dark"] .pf-label,
:root[data-theme="dark"] .task-desc,
:root[data-theme="dark"] .container-custom .form-group label,
:root[data-theme="dark"] .time-table td,
:root[data-theme="dark"] .time-table td:first-child,
:root[data-theme="dark"] .time-table td:last-child {
    color: var(--tid-ink) !important;
}

/* gpspicker ritar sitt eget sidhuvud och sidfot i en inline-style; filen har ingen
   dekoratör, så de måste pekas ut här. */
:root[data-theme="dark"] .header.border-bottom,
:root[data-theme="dark"] .footer.border-top {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}

/* Kategorichippen: den ljusblå "av"-tonen bar mörk text och blev en ljus fläck. Färgen
   skiljer på/av och behålls därför som en mörkare ton av samma blå. */
:root[data-theme="dark"] .cat-chip.off {
    background-color: rgba(13, 110, 253, 0.14) !important;
    color: var(--tid-ink) !important;
    border-color: rgba(13, 110, 253, 0.3) !important;
}

/* --- Aktivitetsskalan (ActivityRecency) ----------------------------------
 * Skalan går från FRAMTRÄDANDE till BORTONAD: grönt = kunden lever, sedan svart, grått,
 * ljusgrått ju tystare det blir. I ljust läge tonar nästan svart INTE bort - men i mörkt
 * läge är det tvärtom: #212529 mot sidans botten mätte 1:1, alltså helt osynligt, medan
 * ljusgrått stack ut mest av allt. Skalan vänds därför här, med samma gränser och samma
 * betydelse - bara riktningen på "framträdande" byter håll.
 *
 * Färgerna kommer som var(--tid-recency-*, #hex) ur se.itendi.tools.ActivityRecency, så
 * ljust läge använder hex-koderna och är oförändrat.
 * ------------------------------------------------------------------------- */
:root[data-theme="dark"] {
    --tid-recency-active: #4ade80;    /* grönt bär betydelse - ljusare för mörk botten */
    --tid-recency-near: #d7dade;      /* i år: mest framträdande */
    --tid-recency-normal: #9aa1ab;    /* i fjol */
    --tid-recency-dormant: #6b727c;   /* tyst länge: tonar bort */
}

/* --- Tredje svepet: de sista fyra ----------------------------------------- */

/*
 * KMA:s tomma läge (KmaUI.empty) hämtar sin färg ur --kma-grey-fg, som är satt för ljus
 * botten. "Inga revisioner ännu" mätte 1,89:1 - och just den texten är hela poängen med
 * tomläget: en lista utan rader ska SÄGA att den är tom, annars läses den som trasig.
 */
:root[data-theme="dark"] .kma-empty,
:root[data-theme="dark"] .kma-empty-title,
:root[data-theme="dark"] .kma-empty-text,
:root[data-theme="dark"] .kma-empty i {
    color: var(--tid-ink-muted) !important;
}

/* Kvittorutans uppmaning i utläggspopupen - egen grå ur report-popup.css. */
:root[data-theme="dark"] .rp-drop .rp-drop-text,
:root[data-theme="dark"] .rp-drop-hint {
    color: var(--tid-ink-muted) !important;
}

/* Utbildningsmatrisens "saknas"-ruta använder --bs-light rakt av. */
:root[data-theme="dark"] .cell-saknas {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink-muted) !important;
}

/*
 * FullCalendar: händelsernas text lämnas åt JavaScript.
 *
 * Jag tvingade först mörk text på alla händelser, med motiveringen att användarens färger
 * är mättade kulörer där svart är det säkra valet. Det var fel: färgerna väljs fritt och
 * flera är MÖRKA (darkblue, Purple), och där blev svart text oläslig.
 *
 * itendicalhelper.js räknar redan ut textfärgen ur bakgrundens luminans och sätter den
 * inline — alltså gör den redan rätt, för varje färg. Min regel skrev bara över ett korrekt
 * beslut med ett sämre. Enda undantaget är summeringsraden, där bakgrunden är en var() som
 * JS inte kan räkna på; den har en egen regel längre ned.
 */

/*
 * Helgcellernas dagnummer i kalendern lämnas LJUSA, trots att de mäter 2,1:1 mot den
 * tomatröda helgfärgen. Ett försök att göra dem mörka gjorde det värre: färgen sätts som
 * inline-stil per cell och sitter bara på vissa helger (i rapportkalendern de passerade).
 * En omärkt helgcell är mörk som resten av kalendern, och mörk text på den mätte 1,1:1 -
 * alltså sämre än det den skulle laga.
 *
 * CSS kan inte se vilken bakgrund en cell fått inline, så det finns inget val som är rätt
 * för båda. Ljus text är läsbar mot tomatrött och korrekt mot den mörka cellen; mörk text
 * är bara rätt i det ena fallet. Lämnas som ett känt gränsfall.
 */

/* ============================================================================
 * ANDRA OMGÅNGEN, rapporterad vid genomgång 2026-08-27.
 *
 * Gemensamt för allt här: det syns bara när något HÄNDER. En öppnad kalender, en vald
 * rad, en klickad flik, en tabell med rader i, en popover som fällts ut. Sidsvepet läser
 * sidan som den laddas och gick därför rakt förbi - en tom fakturalista har inga randiga
 * rader att mäta, och en stängd datumväljare finns inte i DOM:en.
 *
 * Lärdomen är inte att svepet var fel, utan att det mäter ETT tillstånd av flera.
 * ========================================================================= */

/* --- flatpickr: Idag-knappen --------------------------------------------
 * Byggs av TidUtil.addTodayButton, inte av flatpickr, och hade därför ingen mörk
 * motsvarighet någonstans. De röda och oranga dagarna bor i scripts/tid-flatpickr.js
 * (specificitetsskäl, se kommentaren där).
 */
:root[data-theme="dark"] .flatpickr-today-button {
    background: var(--tid-surface-2);
    color: var(--tid-ink);
    border-color: var(--tid-border);
}
:root[data-theme="dark"] .flatpickr-today-button:hover {
    background: var(--tid-border);
    color: var(--tid-ink);
}

/* --- Bootstrap-popovers (hjälptexterna) ---------------------------------
 * Popovern renderas i <body>, utanför kortet, och ärver därför ingenting av det vi
 * mörkat. Rubrikraden har dessutom en egen ljus botten i Bootstrap, vilket var det som
 * gjorde rubriken otydlig - inte textfärgen. Pilen är ett eget element och måste med,
 * annars pekar en vit tagg ut ur en mörk ruta.
 */
:root[data-theme="dark"] .popover {
    background-color: var(--tid-surface);
    border-color: var(--tid-border);
}
:root[data-theme="dark"] .popover .popover-header {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
    border-bottom-color: var(--tid-border);
}
:root[data-theme="dark"] .popover .popover-body,
:root[data-theme="dark"] .popover .popover-body * {
    color: var(--tid-ink);
}
:root[data-theme="dark"] .popover .popover-arrow::before { border-color: transparent; }
:root[data-theme="dark"] .bs-popover-top > .popover-arrow::after,
:root[data-theme="dark"] .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after {
    border-top-color: var(--tid-surface);
}
:root[data-theme="dark"] .bs-popover-bottom > .popover-arrow::after,
:root[data-theme="dark"] .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after {
    border-bottom-color: var(--tid-surface-2);
}
:root[data-theme="dark"] .bs-popover-start > .popover-arrow::after,
:root[data-theme="dark"] .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after {
    border-left-color: var(--tid-surface);
}
:root[data-theme="dark"] .bs-popover-end > .popover-arrow::after,
:root[data-theme="dark"] .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after {
    border-right-color: var(--tid-surface);
}
/* Tooltips renderas på samma sätt, utanför allt annat. */
:root[data-theme="dark"] .tooltip-inner {
    background-color: var(--tid-surface-2);
    color: var(--tid-ink);
}

/* --- Leverantörsfakturor: egen randning på ID-selektorer -----------------
 * supplierinvoices.css randar själv med #f8f9fa på #invoicesTable m.fl. i stället för
 * att låta .table-striped göra det. ID-selektorer slår allt annat, så den
 * --bs-table-striped-bg som redan var satt hade ingen verkan alls: raden blev nästan
 * vit och den ljusa texten försvann i den. Det var det rapporterade felet.
 */
:root[data-theme="dark"] #invoicesTable tbody tr:nth-child(even),
:root[data-theme="dark"] #pendingInvoicesTable tbody tr:nth-child(even),
:root[data-theme="dark"] #searchResultsTable tbody tr:nth-child(even),
:root[data-theme="dark"] #approvedInvoicesTable tbody tr:nth-child(even),
:root[data-theme="dark"] #paidInvoicesTable tbody tr:nth-child(even),
:root[data-theme="dark"] #rejectedInvoicesTable tbody tr:nth-child(even) {
    background-color: rgba(255, 255, 255, 0.035) !important;
}
:root[data-theme="dark"] #invoicesTable tbody tr:hover,
:root[data-theme="dark"] #pendingInvoicesTable tbody tr:hover,
:root[data-theme="dark"] #searchResultsTable tbody tr:hover,
:root[data-theme="dark"] #approvedInvoicesTable tbody tr:hover,
:root[data-theme="dark"] #paidInvoicesTable tbody tr:hover,
:root[data-theme="dark"] #rejectedInvoicesTable tbody tr:hover {
    background-color: rgba(110, 168, 254, 0.14) !important;
}
:root[data-theme="dark"] #invoicesTable thead th,
:root[data-theme="dark"] #pendingInvoicesTable thead th,
:root[data-theme="dark"] #searchResultsTable thead th,
:root[data-theme="dark"] #approvedInvoicesTable thead th,
:root[data-theme="dark"] #paidInvoicesTable thead th,
:root[data-theme="dark"] #rejectedInvoicesTable thead th,
:root[data-theme="dark"] .si-toolbar,
:root[data-theme="dark"] .upload-drop-zone,
:root[data-theme="dark"] #uploadedInvoiceForm fieldset,
:root[data-theme="dark"] #uploadedInvoiceForm fieldset legend {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .upload-drop-zone:hover,
:root[data-theme="dark"] .upload-drop-zone.dragover,
:root[data-theme="dark"] #linkProjectDropdown .link-project-option:hover {
    background-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .si-sum {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .inline-attestant-select {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* --- SMS-vyn: hela smsadmin.css saknade mörkt läge ----------------------
 * Rollmärkena (.sms-avatar) låg som ljusa plattor i en mörk lista och drog blicken till
 * sig mer än namnen. Den valda raden (.sms-contact.is-selected) var ljusblå.
 */
:root[data-theme="dark"] .sms-list,
:root[data-theme="dark"] .sms-summary,
:root[data-theme="dark"] .sms-preview {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .sms-contact:hover {
    background: var(--tid-surface-2) !important;
}
/* Vald mottagare: blått bär betydelse (markering) och behålls som en mörk ton av samma
   kulör, plus en kantlinje - så valet syns även för den som inte skiljer på nyanser. */
:root[data-theme="dark"] .sms-contact.is-selected {
    background: rgba(110, 168, 254, 0.16) !important;
    box-shadow: inset 3px 0 0 #6ea8fe;
}
:root[data-theme="dark"] .sms-avatar {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .sms-contact-name,
:root[data-theme="dark"] .sms-summary-item strong,
:root[data-theme="dark"] .sms-history .sms-history-text {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .sms-chip {
    background: rgba(110, 168, 254, 0.16) !important;
    color: #9ec5fe !important;
    border-color: rgba(110, 168, 254, 0.3) !important;
}
:root[data-theme="dark"] .sms-bubble.is-empty {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink-muted) !important;
}

/* --- Formulärens mappvy (customforms.jsp) ------------------------------- */
:root[data-theme="dark"] .form-tree-hierarchy .tree-folder-item {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .form-tree-hierarchy .tree-folder-item:hover {
    background: var(--tid-border) !important;
}

/* --- Hemmets genvägskort (fliken Flikar/funktioner) ---------------------
 * .fact-card har en ljus GRADIENT, alltså background-image - att sätta
 * background-color biter inte, hela background måste skrivas om.
 */
:root[data-theme="dark"] .shortcut-card,
:root[data-theme="dark"] .fact-card {
    background: var(--tid-surface-2) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .shortcut-title {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .shortcut-desc,
:root[data-theme="dark"] .welcome-reminder {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .fact-skeleton {
    background: linear-gradient(90deg, var(--tid-surface-2), var(--tid-border),
                                var(--tid-surface-2)) !important;
}

/* --- KMA-dokument: läsvyn och redigeraren ------------------------------
 * ProseMirror-ytan ÄR dokumentet - en vit sida mitt i ett mörkt gränssnitt. Att mörka
 * den är ett medvetet val: dokumenten läses på skärm, utskriften har sin egen CSS
 * (doc-print.js), och en lysande vit sida är precis vad den som valt mörkt läge ville
 * slippa.
 */
:root[data-theme="dark"] .kma-page .ProseMirror,
:root[data-theme="dark"] .kma-page .ed-topbar.ed-fixed,
:root[data-theme="dark"] .table-grid-pop,
:root[data-theme="dark"] #imgSizeBar,
:root[data-theme="dark"] #tableBar {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .kma-page .ProseMirror th,
:root[data-theme="dark"] .table-grid-pop .tg-grid span,
:root[data-theme="dark"] .kma-page .doc-toc a:hover,
:root[data-theme="dark"] #imgSizeBar button:hover,
:root[data-theme="dark"] #tableBar button:hover {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-page .ProseMirror blockquote,
:root[data-theme="dark"] .kma-page .ProseMirror code.winpath {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .kma-page .doc-toc a,
:root[data-theme="dark"] .table-grid-pop .tg-label,
:root[data-theme="dark"] #imgSizeBar button,
:root[data-theme="dark"] #tableBar button {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-page .doc-toc a.active {
    background: rgba(110, 168, 254, 0.16) !important;
    color: var(--tid-ink) !important;
}
/* Referenser i dokumentet: färgen skiljer dokumentlänk från formulärlänk och behålls. */
:root[data-theme="dark"] .kma-page .ProseMirror a[data-doc-ref] {
    background: rgba(110, 168, 254, 0.16) !important;
    color: #9ec5fe !important;
}
:root[data-theme="dark"] .kma-page .ProseMirror a[data-form-ref] {
    background: rgba(25, 135, 84, 0.18) !important;
    color: #75d6a3 !important;
}
:root[data-theme="dark"] .kma-page .ed-color-black { color: var(--tid-ink) !important; }
:root[data-theme="dark"] .kma-page .ed-color-red   { color: #ff8087 !important; }
:root[data-theme="dark"] .kma-page .ed-presence    { color: #ffd97a !important; }
:root[data-theme="dark"] .table-grid-pop .tg-grid span.on { background: #6ea8fe !important; }
:root[data-theme="dark"] #tableBar button.tb-del { color: #ff8087 !important; }
:root[data-theme="dark"] #tableBar button.tb-del:hover {
    background: rgba(220, 53, 69, 0.18) !important;
}

/* --- KMA-uppgifter: statistikkorten ------------------------------------
 * Fyra pastellkort där färgen skiljer nyckeltalen åt. Kulören behålls som en mörk ton.
 */
:root[data-theme="dark"] .kma-stat-card.blue   { background: rgba(13, 110, 253, 0.16) !important; }
:root[data-theme="dark"] .kma-stat-card.red    { background: rgba(220, 53, 69, 0.16) !important; }
:root[data-theme="dark"] .kma-stat-card.orange { background: rgba(255, 193, 7, 0.16) !important; }
:root[data-theme="dark"] .kma-stat-card.green  { background: rgba(25, 135, 84, 0.16) !important; }
:root[data-theme="dark"] .kma-stat-card,
:root[data-theme="dark"] .kma-stat-label {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .chain-item.current {
    background: rgba(110, 168, 254, 0.16) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .overdue-row,
:root[data-theme="dark"] .overdue-row > td {
    background: rgba(220, 53, 69, 0.14) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-page #recurringSettings,
:root[data-theme="dark"] #calendarView .fc .fc-toolbar {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .prio-AKUT { color: #ff8087 !important; }
:root[data-theme="dark"] .prio-LAG  { color: #9ccc65 !important; }

/* --- Aktiv menypost -----------------------------------------------------
 * Star Admin markerar aktiv post med BLÅ TEXT (#2196f3), inte med en bakgrund. Mina
 * mörka regler gjorde två fel samtidigt: textfärgen skrevs över av den generella
 * .nav-link-regeln, och markeringen ersattes av en bakgrund som dessutom var identisk
 * med hover. Aktiv post och muspekare såg alltså likadana ut, och ingen av dem stack ut
 * mot menyn - man kunde inte se var man var.
 *
 * Här återställs principen: färgad text som i ljust läge, en ljusare blå som fungerar
 * mot mörkt, plus en kantlinje till vänster så att markeringen syns även i ögonvrån och
 * för den som inte skiljer blått från grått.
 */
:root[data-theme="dark"] .sidebar .nav .nav-item.active > .nav-link,
:root[data-theme="dark"] .sidebar .nav .nav-item.active > .nav-link .menu-title,
:root[data-theme="dark"] .sidebar .nav .nav-item.active > .nav-link i {
    color: #6ea8fe !important;
}
:root[data-theme="dark"] .sidebar .nav .nav-item.active > .nav-link {
    background: rgba(110, 168, 254, 0.12);
    box-shadow: inset 3px 0 0 #6ea8fe;
}
/* Hover måste vara TYDLIGT svagare än aktiv, annars är skillnaden borta igen. */
:root[data-theme="dark"] .sidebar .nav .nav-item:not(.active):hover > .nav-link {
    background: var(--tid-surface-2);
    box-shadow: none;
}
/* Undermenyns aktiva post följer samma princip. */
:root[data-theme="dark"] .sidebar .nav.sub-menu .nav-item .nav-link.active {
    color: #6ea8fe !important;
    background: rgba(110, 168, 254, 0.10) !important;
}

/* --- KMA: expanderad detaljrad -----------------------------------------
 * --kma-detail-bg är #fbfcfe, alltså i praktiken vit. Variabeln delas av KmaUI.detailRow
 * och TOC-panelen, så den används av lagefterlevnad, miljöaspekter, mål, ansvar och alla
 * andra register som bygger sina detaljrader med KmaUI - att sätta om variabeln räcker
 * därför för allihop i stället för en regel per sida.
 */
/*
 * HELA KMA:s tokenuppsättning, inte bara två av dem.
 *
 * Modulen bygger på tio variabler i kma/css/kma.css, och sidfilerna läser dem i stället
 * för att skriva egna hexkoder - det är precis rätt byggt. Konsekvensen är att mörkt läge
 * ska sättas HÄR och ingen annanstans: en enda omsättning täcker varje registersida,
 * varje detaljrad och varje panel i modulen.
 *
 * Det var också därför generatorn missade radhovern: hover-regeln läser var(--kma-hover),
 * och en generator som letar efter hexkoder i själva regeln ser ingenting.
 */
:root[data-theme="dark"],
:root[data-theme="dark"] .kma-page,
:root[data-theme="dark"] .kma-dash {
    --kma-heading: #d7dade;      /* rubriker och dokumentnummer */
    --kma-muted: #9aa1ab;
    --kma-label: #9aa1ab;        /* dämpade etiketter */
    --kma-grey-bg: #262a31;
    --kma-grey-fg: #d7dade;
    --kma-panel-bg: #262a31;     /* tonade paneler: metakort, verktygsrad, KPI-rutor */
    --kma-panel-border: #333941;
    --kma-hover: rgba(255, 255, 255, 0.07);   /* radhover i klickbara tabeller */
    --kma-detail-bg: #262a31;    /* expanderad detaljrad + TOC-panelen */
    --kma-border: #333941;
    --kma-red-fg: #ff8087;       /* varningstext - kulören bär betydelse, tonen är ljusare */
}
:root[data-theme="dark"] .kma-detail-row > td {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-detail-row .gd-label,
:root[data-theme="dark"] .kma-detail-row .kma-field-label {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .kma-detail-row .kma-field-value,
:root[data-theme="dark"] .kma-expand-btn {
    color: var(--tid-ink) !important;
}

/* --- KMA-dashboard: "Ditt ansvar i ledningssystemet" --------------------
 * Dokumentnummer och kapiteltitlar hämtar sin färg ur --kma-heading (#344563), en mörkblå
 * rubrikfärg. Den sätts om ovan, men sidfilerna använder den också direkt.
 */
:root[data-theme="dark"] .kma-dash .doc-num,
:root[data-theme="dark"] .kma-dash .ctitle,
:root[data-theme="dark"] .kma-page .doc-num {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-dash .muted,
:root[data-theme="dark"] .kma-page .muted {
    color: var(--tid-ink-muted) !important;
}

/* --- Rapportörens fakturaattest: filterraden ---------------------------
 * .ia-toolbar är samma ljusa remsa som .si-toolbar i adminvyn - den ena fick mörkt läge
 * i förra omgången, den andra inte, eftersom den ligger i ett inline-block i JSP:n i
 * stället för i en CSS-fil.
 */
:root[data-theme="dark"] .ia-toolbar,
:root[data-theme="dark"] .ia-filterbar {
    background-color: var(--tid-surface-2) !important;
    border-color: var(--tid-border) !important;
    color: var(--tid-ink) !important;
}

/* --- Markeringar som BÄR betydelse -------------------------------------
 * Står här, alltså FÖRE det genererade blocket nedan, för att generatorn hoppar över
 * selektorer som redan nämns i den här filen. En sökträff eller en dragplats måste synas
 * som en markering; blir den neutralt mörk har den tappat hela sin funktion.
 */
:root[data-theme="dark"] .cfg-search-highlight td {
    background-color: rgba(255, 193, 7, 0.20) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .ui-state-highlight {
    background-color: rgba(110, 168, 254, 0.18) !important;
    border-color: rgba(110, 168, 254, 0.35) !important;
}

/* ============================================================================
 * INLINE-CSS I JSP-FILERNA — genererat 2026-08-27.
 *
 * Ett fyrtiotal sidor har sitt eget <style>-block i JSP:n i stället för en .css-fil.
 * Både sidsvepet och granskningen av .css-filerna gick förbi dem: svepet mätte bara
 * renderade tillstånd, CSS-granskningen läste bara .css-filer. Det är därför de sista
 * rapporterna (superonboarding, superglobalconfigure, superdiskusage, invoiceattest,
 * customforms) alla låg just där.
 *
 * Reglerna är GENERERADE ur de blocken, efter tre mönster som återkommer överallt:
 *   ljus bakgrund  -> --tid-surface (nästan vit yta) eller --tid-surface-2 (ljusgrå)
 *   mörk text      -> --tid-ink
 *   ljus ram       -> --tid-border
 *
 * !important behövs eftersom ett inline-block i JSP:n laddas efter den här filen.
 * Selektorer som redan står handskrivna ovan hoppas över — de är genomtänkta och ska
 * inte skrivas över av en generator. Färgprover, diagram och händelsefärger är
 * undantagna helt: där ÄR färgen innehållet.
 *
 * Rätta gärna en enskild rad för hand om den blir fel — men lägg den då OVANFÖR det här
 * blocket, annars skrivs den över nästa gång generatorn körs.
 * ========================================================================= */

/* admin/chat.jsp */
:root[data-theme="dark"] .chat-conv:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/chat.jsp */
:root[data-theme="dark"] .chat-conv-preview {
    color: var(--tid-ink) !important;
}

/* admin/chat.jsp */
:root[data-theme="dark"] .bubble-row.theirs .bubble {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/chat.jsp */
:root[data-theme="dark"] .chat-pending-chip {
    background-color: var(--tid-surface-2) !important;
    border-color: var(--tid-border) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .ui-state-default {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .ui-state-default:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .ui-state-highlight {
    background-color: var(--tid-surface) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] #sortableCols,
:root[data-theme="dark"] #sortableAdminHomeTabs {
    background-color: var(--tid-surface) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-search-highlight td {
    background-color: var(--tid-surface) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-matrix > thead > tr > th {
    color: var(--tid-ink) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-matrix > tbody > tr.cfg-group > td {
    color: var(--tid-ink) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-matrix > tbody > tr:not(.cfg-group):hover > td {
    background-color: var(--tid-surface) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-hint {
    color: var(--tid-ink) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .qm-icon-opt {
    color: var(--tid-ink) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .qm-icon-opt:hover {
    background-color: var(--tid-surface-2) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .qm-empty {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-impact {
    border-color: var(--tid-border) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-impact-head .mdi-chart-box-outline {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-impact-info {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-impact-help {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-chip {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .ov-chip.warn {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .palette-section-title {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] #formRowsContainer {
    border-color: var(--tid-border) !important;
    background-color: var(--tid-surface) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .sortable-ghost {
    background-color: var(--tid-surface-2) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .builder-actions {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] #answersFormTitle {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .mandatory::after {
    color: var(--tid-ink) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .settings-section-title {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .folder-item:hover,
:root[data-theme="dark"] .file-item:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-item:active {
    background-color: var(--tid-surface-2) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .folder-count {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-size {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-meta {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .thumbnail-meta {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn:hover {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn.preview:hover {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn.download:hover {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn.delete:hover {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .empty-folder {
    color: var(--tid-ink) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .hierarchy-root > .folder-item {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .hierarchy-root > .folder-item:hover {
    background-color: var(--tid-surface-2) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .thumbnail-item {
    background-color: var(--tid-surface-2) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .table-thumb-card {
    background-color: var(--tid-surface-2) !important;
}

/* admin/emailbounces.jsp, superadmin/superbounces.jsp */
:root[data-theme="dark"] .eb-kpi {
    border-color: var(--tid-border) !important;
}

/* admin/emailbounces.jsp, superadmin/superbounces.jsp */
:root[data-theme="dark"] .eb-kpi .eb-lbl {
    color: var(--tid-ink) !important;
}

/* admin/emailbounces.jsp, superadmin/superbounces.jsp */
:root[data-theme="dark"] .eb-diag {
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .status-linked {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .status-unlinked {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .status-conflict {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .status-inactive {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .connected {
    background-color: var(--tid-surface-2) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .log-level-ERROR {
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .log-level-INFO {
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .preview-row {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .preview-total {
    background-color: var(--tid-surface-2) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .validation-error {
    color: var(--tid-ink) !important;
}

/* admin/integration/blintegration.jsp */
:root[data-theme="dark"] .validation-ok {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .file-table tr:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .file-icon-file {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .file-name-link {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .file-name-link:hover {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .empty-state {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-toast.warning {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-thumb-item {
    background-color: var(--tid-surface-2) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-thumb-folder-icon {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-thumb-file-icon {
    color: var(--tid-ink) !important;
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-ctx-menu {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-ctx-item:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-ctx-item.danger {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-selection-bar {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-thumb-item.cf-selected {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .status-CONNECTED {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .status-ERROR {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .status-NEEDS_REAUTH {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .folder-picker {
    border-color: var(--tid-border) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .folder-item:hover {
    background-color: var(--tid-surface-2) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .info-label {
    color: var(--tid-ink) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .breadcrumb-cloud {
    background-color: var(--tid-surface) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .breadcrumb-cloud a {
    color: var(--tid-ink) !important;
}

/* admin/plancalendar.jsp, admin/planschedule.jsp */
:root[data-theme="dark"] .search-result-item:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/plancalendar.jsp, admin/planschedule.jsp */
:root[data-theme="dark"] .search-no-results,
:root[data-theme="dark"] .search-error {
    color: var(--tid-ink) !important;
}

/* admin/plancalendar.jsp, admin/planschedule.jsp */
:root[data-theme="dark"] .search-error {
    color: var(--tid-ink) !important;
}

/* admin/popups/graphcategorydraw.jsp, emp/popups/draw.jsp */
:root[data-theme="dark"] .loading {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-static {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-hint {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-heading {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-resource {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-resource .bi {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .pf-table thead th {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-picker-count {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-chip {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-chip-x:hover {
    color: var(--tid-ink) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-list {
    border-color: var(--tid-border) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-item:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-empty {
    color: var(--tid-ink) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] .details-table th {
    background-color: var(--tid-surface) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] .pd-note-card {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] #pdNotesTable tbody tr:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] #pdNotesTable tbody tr.pd-note-active {
    background-color: var(--tid-surface-2) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] #projectTimeTable_wrapper div.dt-processing {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item:hover {
    background-color: var(--tid-surface) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-name {
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-desc {
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-note {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item-collapsed {
    background-color: var(--tid-surface) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item-collapsed:hover {
    background-color: var(--tid-surface-2) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item-collapsed .pt-colvis-name {
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-badge {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-search .pt-visa-label-second {
    color: var(--tid-ink) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-budget-meter {
    background-color: var(--tid-surface-2) !important;
}

/* admin/resourceadminjson.jsp */
:root[data-theme="dark"] #resourceStatusTable select.res-assign {
    color: var(--tid-ink) !important;
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #timeReportTable thead th,
:root[data-theme="dark"] #timeReportTable tbody td {
    border-color: var(--tid-border) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #timeReportTable thead th {
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #filterForm #pid.pid-expanded {
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-card {
    border-color: var(--tid-border) !important;
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-avatar {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-name {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-levels {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-levels .ok {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ta-attest-levels .nok {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #selCount {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #taLoading .ta-loading-box {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #taLoading .ta-loading-inner {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] tr.editing {
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] tr.editing .ta-ro {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] input.ce-pop {
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] .ce.ta-invalid {
    background-color: var(--tid-surface) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #taPopupModal .ta-popup-sub {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #taPopupModal .ta-popup-help {
    color: var(--tid-ink) !important;
}

/* admin/timeadminnew.jsp */
:root[data-theme="dark"] #taPopupModal .ta-popup-help:hover {
    color: var(--tid-ink) !important;
}

/* drawing/drawing-summary.jsp, drawing/drawing-viewer.jsp */
:root[data-theme="dark"] #summaryTable th {
    background-color: var(--tid-surface) !important;
}

/* emp/empformfill.jsp, public/publicformfill.jsp */
:root[data-theme="dark"] .signature-pad {
    background-color: var(--tid-surface) !important;
}

/* emp/empformfill.jsp, public/publicformfill.jsp */
:root[data-theme="dark"] .error-msg {
    color: var(--tid-ink) !important;
}

/* emp/empformfill.jsp, public/publicformfill.jsp */
:root[data-theme="dark"] td.field-error {
    background-color: var(--tid-surface) !important;
}

/* emp/empformfill.jsp, public/publicformfill.jsp */
:root[data-theme="dark"] .selected-files-list .remove-file-btn {
    color: var(--tid-ink) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .conflict-field {
    background-color: var(--tid-surface) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .existing-file-item {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .existing-file-item a {
    color: var(--tid-ink) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .existing-file-item .remove-existing-btn {
    color: var(--tid-ink) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .existing-file-item .remove-existing-btn:hover {
    color: var(--tid-ink) !important;
}

/* emp/empformfill.jsp */
:root[data-theme="dark"] .existing-file-item.removed a {
    color: var(--tid-ink) !important;
}

/* emp/empstatistics.jsp */
:root[data-theme="dark"] .stat-trend-down {
    color: var(--tid-ink) !important;
}

/* emp/empstatistics.jsp */
:root[data-theme="dark"] .stat-empty-error {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .status-interpreted {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .ia-sum {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .ia-due small {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .ia-due-late {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .ia-due-late small {
    color: var(--tid-ink) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] .invoice-amount {
    color: var(--tid-ink) !important;
}

/* public/publicformfill.jsp, public/publicformthankyou.jsp */
:root[data-theme="dark"] .public-form-header {
    background-color: var(--tid-surface) !important;
}

/* public/publicformfill.jsp */
:root[data-theme="dark"] .public-form-title {
    color: var(--tid-ink) !important;
}

/* public/publicformfill.jsp */
:root[data-theme="dark"] .form-card {
    background-color: var(--tid-surface) !important;
}

/* public/publicformthankyou.jsp */
:root[data-theme="dark"] .thankyou-icon {
    color: var(--tid-ink) !important;
}

/* superadmin/deletecustomer.jsp */
:root[data-theme="dark"] .note-status {
    color: var(--tid-ink) !important;
}

/* superadmin/deletecustomer.jsp */
:root[data-theme="dark"] .customer-table thead th {
    background-color: var(--tid-surface) !important;
}

/* superadmin/mobileapplogin.jsp */
:root[data-theme="dark"] .spinner {
    color: var(--tid-ink) !important;
}

/* superadmin/mobileapplogin.jsp */
:root[data-theme="dark"] .error {
    color: var(--tid-ink) !important;
}

/* superadmin/mobileapplogin.jsp */
:root[data-theme="dark"] .error a {
    color: var(--tid-ink) !important;
}

/* superadmin/superappversions.jsp */
:root[data-theme="dark"] .av-kpi {
    border-color: var(--tid-border) !important;
}

/* superadmin/superappversions.jsp */
:root[data-theme="dark"] .av-kpi .av-lbl {
    color: var(--tid-ink) !important;
}

/* superadmin/superappversions.jsp */
:root[data-theme="dark"] .av-dist {
    border-color: var(--tid-border) !important;
}

/* superadmin/superauthlog.jsp */
:root[data-theme="dark"] .authlog-ua {
    color: var(--tid-ink) !important;
}

/* superadmin/supercustomerbackup.jsp, superadmin/superproddump.jsp */
:root[data-theme="dark"] .progress-table-name {
    color: var(--tid-ink) !important;
}

/* superadmin/supercustomerbackup.jsp, superadmin/superdbcleanup.jsp, superadmin/superprod... */
:root[data-theme="dark"] .progress-counter {
    color: var(--tid-ink) !important;
}

/* superadmin/superdbcleanup.jsp */
:root[data-theme="dark"] .summary-figure {
    color: var(--tid-ink) !important;
}

/* superadmin/superdbcleanup.jsp */
:root[data-theme="dark"] .summary-label {
    color: var(--tid-ink) !important;
}

/* superadmin/superdbcleanup.jsp */
:root[data-theme="dark"] .summary-box {
    border-color: var(--tid-border) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .disk-card .big-number {
    color: var(--tid-ink) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .disk-card .unit {
    color: var(--tid-ink) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .disk-card .label {
    color: var(--tid-ink) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .detail-table th {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .detail-table tr:hover {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .detail-table .size-bar {
    background-color: var(--tid-surface-2) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .error-box {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* superadmin/supererpinvoices.jsp */
:root[data-theme="dark"] .ei-kpi {
    border-color: var(--tid-border) !important;
}

/* superadmin/supererpinvoices.jsp */
:root[data-theme="dark"] .ei-kpi .ei-lbl {
    color: var(--tid-ink) !important;
}

/* superadmin/supererpinvoices.jsp */
:root[data-theme="dark"] .ei-problem .ei-num {
    color: var(--tid-ink) !important;
}

/* superadmin/supererpinvoices.jsp */
:root[data-theme="dark"] .ei-note {
    color: var(--tid-ink) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .switch-label-text i {
    color: var(--tid-ink) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .status-item {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .ss-server {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .ss-server dt {
    color: var(--tid-ink) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .ss-flagkey {
    color: var(--tid-ink) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .secret-protected {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .secret-field:not(.is-locked) .secret-protected {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .editable-cell:hover {
    background-color: var(--tid-surface-2) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .editable-cell.editing {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .help-popover-preview a {
    color: var(--tid-ink) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .location-link {
    color: var(--tid-ink) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .location-link:hover {
    color: var(--tid-ink) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .locate-divid-btn {
    color: var(--tid-ink) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .locate-divid-btn:hover {
    color: var(--tid-ink) !important;
}

/* superadmin/superloginascust.jsp */
:root[data-theme="dark"] .user-login-item:hover {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superloginascust.jsp */
:root[data-theme="dark"] .badge-pluser {
    color: var(--tid-ink) !important;
}

/* superadmin/superonboarding.jsp */
:root[data-theme="dark"] #sumHelp {
    color: var(--tid-ink) !important;
}

/* superadmin/superonboarding.jsp */
:root[data-theme="dark"] #sumOk {
    color: var(--tid-ink) !important;
}

/* superadmin/superonboarding.jsp */
:root[data-theme="dark"] #sumFollowed {
    color: var(--tid-ink) !important;
}

/* superadmin/superonboarding.jsp */
:root[data-theme="dark"] .onb-help {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] .import-bar-label {
    color: var(--tid-ink) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] .drop-zone {
    color: var(--tid-ink) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] #importDbTableWrap {
    border-color: var(--tid-border) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] #importDbTable thead th {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] .row-running {
    color: var(--tid-ink) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] .row-done {
    color: var(--tid-ink) !important;
}

/* superadmin/superproddump.jsp */
:root[data-theme="dark"] .row-error {
    color: var(--tid-ink) !important;
}

/* superadmin/supersecurity.jsp */
:root[data-theme="dark"] .sec-help {
    background-color: var(--tid-surface) !important;
}

/* superadmin/supersecurity.jsp */
:root[data-theme="dark"] .sec-shadow-warn {
    color: var(--tid-ink) !important;
}

/* superadmin/superviewusage.jsp */
:root[data-theme="dark"] .vu-kpi {
    border-color: var(--tid-border) !important;
}

/* superadmin/superviewusage.jsp */
:root[data-theme="dark"] .vu-kpi .vu-lbl {
    color: var(--tid-ink) !important;
}

/* superadmin/superviewusage.jsp */
:root[data-theme="dark"] .vu-num-muted {
    color: var(--tid-ink) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .setup-container {
    background-color: var(--tid-surface) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .setup-header h2 {
    color: var(--tid-ink) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .qr-code {
    background-color: var(--tid-surface) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .qr-code img {
    background-color: var(--tid-surface) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .secret-key {
    background-color: var(--tid-surface) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .step-section {
    background-color: var(--tid-surface) !important;
}

/* totp_setup_required.jsp */
:root[data-theme="dark"] .step-section h4 {
    color: var(--tid-ink) !important;
}

/* Helgfärgen i mörkt läge: samma kulör, mörkad, så att den ljusa texten ovanpå går att
   läsa. Sätts som token eftersom JS skriver den inline per cell (se tidrapport.css). */
:root[data-theme="dark"] {
  --tid-weekend-bg: rgba(255, 99, 71, 0.22);
  --tid-weekend-line: rgba(255, 99, 71, 0.55);
}

/* ============================================================================
 * TREDJE OMGÅNGEN 2026-08-27 — tillstånd, tokens och två önskemål.
 * ========================================================================= */

/* --- DataTables: den sorterade kolumnen färgas INTE längre ---------------
 * DataTables lyfter den sorterade kolumnen med en inset box-shadow över hela cellen.
 * Jag mildrade den först till en knappt synlig ljus ton, men den stör ändå: kolumnen
 * ser annorlunda ut utan att det betyder något man behöver veta mitt i en tabell.
 *
 * Informationen finns redan där den hör hemma — pilen i kolumnrubriken säger vilken
 * kolumn som sorterar, och den syns när man letar efter den i stället för hela tiden.
 * Rubrikcellen behåller därför sin markering; bara kroppen slutar färgas.
 */
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_1,
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_2,
:root[data-theme="dark"] table.dataTable > tbody > tr > .sorting_3,
:root[data-theme="dark"] table.dataTable > tbody > tr > .dt-ordering-asc,
:root[data-theme="dark"] table.dataTable > tbody > tr > .dt-ordering-desc {
    box-shadow: none !important;
}

/* --- Alla linjer i tabellerna -------------------------------------------
 * Önskemål, och det är befogat: i mörkt läge räcker inte radavståndet för att ögat ska
 * hålla ihop en rad över breda tabeller — kontrasten mellan rad och botten är mindre än
 * i ljust läge, så det som bär blicken i ljust försvinner här. Linjerna är svaga nog att
 * inte rutmönstra sidan, men tillräckliga för att följa en rad från vänster till höger.
 */
:root[data-theme="dark"] table.dataTable > tbody > tr > td,
:root[data-theme="dark"] table.dataTable > tbody > tr > th,
:root[data-theme="dark"] table.dataTable > thead > tr > th,
:root[data-theme="dark"] .table:not(.table-borderless) > tbody > tr > td,
:root[data-theme="dark"] .table:not(.table-borderless) > tbody > tr > th,
:root[data-theme="dark"] .table:not(.table-borderless) > thead > tr > th {
    border: 1px solid var(--tid-border) !important;
}
:root[data-theme="dark"] table.dataTable,
:root[data-theme="dark"] .table:not(.table-borderless) {
    border-color: var(--tid-border) !important;
}

/* --- flatpickr: navigationspilarna --------------------------------------
 * Pilarna är SVG och färgas med fill, inte color — en textfärgsregel når dem aldrig.
 * De ärvde flatpickrs mörka standardfyllning och blev nästan osynliga mot den mörka
 * kalendern.
 */
:root[data-theme="dark"] .flatpickr-months .flatpickr-prev-month,
:root[data-theme="dark"] .flatpickr-months .flatpickr-next-month {
    color: var(--tid-ink);
    fill: var(--tid-ink);
}
:root[data-theme="dark"] .flatpickr-months .flatpickr-prev-month svg,
:root[data-theme="dark"] .flatpickr-months .flatpickr-next-month svg,
:root[data-theme="dark"] .flatpickr-months .flatpickr-prev-month svg path,
:root[data-theme="dark"] .flatpickr-months .flatpickr-next-month svg path {
    fill: var(--tid-ink) !important;
}
:root[data-theme="dark"] .flatpickr-months .flatpickr-prev-month:hover svg,
:root[data-theme="dark"] .flatpickr-months .flatpickr-next-month:hover svg,
:root[data-theme="dark"] .flatpickr-months .flatpickr-prev-month:hover svg path,
:root[data-theme="dark"] .flatpickr-months .flatpickr-next-month:hover svg path {
    fill: #6ea8fe !important;
}
/* Månads- och årsväljaren i huvudet är egna fält. */
:root[data-theme="dark"] .flatpickr-current-month .flatpickr-monthDropdown-months,
:root[data-theme="dark"] .flatpickr-current-month input.cur-year,
:root[data-theme="dark"] .numInputWrapper span.arrowUp,
:root[data-theme="dark"] .numInputWrapper span.arrowDown {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .flatpickr-current-month .flatpickr-monthDropdown-months option {
    background: var(--tid-surface);
    color: var(--tid-ink);
}
:root[data-theme="dark"] .numInputWrapper span.arrowUp:after {
    border-bottom-color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .numInputWrapper span.arrowDown:after {
    border-top-color: var(--tid-ink) !important;
}

/* --- Rapportkalenderns summeringsrad ------------------------------------
 * Totalerna längst ned ritas av FullCalendar som vanliga celler och blev därför en ljus
 * remsa under en mörk kalender. De ska läsas som en avslutning på tabellen, inte som en
 * ny yta.
 */
:root[data-theme="dark"] .fc .fc-daygrid-body tfoot td,
:root[data-theme="dark"] .fc tfoot td,
:root[data-theme="dark"] .fc tfoot th,
:root[data-theme="dark"] #calendarTotals,
:root[data-theme="dark"] .cal-totals,
:root[data-theme="dark"] .cal-total-row,
:root[data-theme="dark"] .cal-total-row > td {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}

/* ============================================================================
 * INLINE-CSS I JSP-FILERNA — genererat 2026-08-27.
 *
 * Ett fyrtiotal sidor har sitt eget <style>-block i JSP:n i stället för en .css-fil.
 * Både sidsvepet och granskningen av .css-filerna gick förbi dem: svepet mätte bara
 * renderade tillstånd, CSS-granskningen läste bara .css-filer. Det är därför de sista
 * rapporterna (superonboarding, superglobalconfigure, superdiskusage, invoiceattest,
 * customforms) alla låg just där.
 *
 * Reglerna är GENERERADE ur de blocken, efter tre mönster som återkommer överallt:
 *   ljus bakgrund  -> --tid-surface (nästan vit yta) eller --tid-surface-2 (ljusgrå)
 *   mörk text      -> --tid-ink
 *   ljus ram       -> --tid-border
 *
 * !important behövs eftersom ett inline-block i JSP:n laddas efter den här filen.
 * Selektorer som redan står handskrivna ovan hoppas över — de är genomtänkta och ska
 * inte skrivas över av en generator. Färgprover, diagram och händelsefärger är
 * undantagna helt: där ÄR färgen innehållet.
 *
 * Rätta gärna en enskild rad för hand om den blir fel — men lägg den då OVANFÖR det här
 * blocket, annars skrivs den över nästa gång generatorn körs.
 * ========================================================================= */

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .slider:before {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .chart-container-wide {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .chart-container-medium {
    background-color: var(--tid-surface) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .customer-detail-card {
    background-color: var(--tid-surface) !important;
}

/* ============================================================================
 * HOVER-FÄRGER — genererat 2026-08-27.
 *
 * :hover är ett TILLSTÅND, och sidsvepet mäter bara vilotillståndet. Därför hade varje
 * hover-färg i systemet gått omätt: 78 regler i 33 filer målade raden nästan vit när
 * muspekaren låg över den, och den ljusa texten försvann i den. Värst var
 * superadmin.css :: table.dataTable tbody tr:hover, som gäller VARJE DataTable på
 * superadminsidorna.
 *
 * Overlay (rgba) i stället för fast färg, eftersom hover måste fungera ovanpå vad som
 * än ligger under - en randad rad, ett kort, en vanlig cell. En fast färg hade blivit
 * osynlig i det ena fallet och för stark i det andra.
 *
 * Blåaktiga hover MARKERAR något (valbar rad, träff) och behåller sin kulör; gula och
 * röda likaså. Övriga blir neutralt ljusare.
 * ========================================================================= */

/* admin/chat.jsp */
:root[data-theme="dark"] .chat-conv:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .cfg-matrix > tbody > tr:not(.cfg-group):hover > td {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .qm-icon-opt:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/customerconfig.jsp */
:root[data-theme="dark"] .ui-state-default:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* admin/customforms.jsp */
:root[data-theme="dark"] .form-tree-hierarchy .hierarchy-root > .tree-folder-container > .tree-folder-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .file-action-btn:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/docs.jsp, emp/empdocs.jsp */
:root[data-theme="dark"] .hierarchy-root > .folder-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .cf-ctx-item:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* admin/integration/cloudfiles.jsp */
:root[data-theme="dark"] .file-table tr:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/integration/cloudstorage.jsp */
:root[data-theme="dark"] .folder-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/plancalendar.jsp, admin/planschedule.jsp */
:root[data-theme="dark"] .search-result-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/popups/planpopup.jsp */
:root[data-theme="dark"] .worker-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] #pdNotesTable tbody tr:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* admin/popups/projectdetails.jsp */
:root[data-theme="dark"] .tab-content table.table-bordered > tbody > tr:hover > td {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] #projectTimeTable .dropdown-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] #projectTimeTable .dropdown-toggle:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] #projectTimeTable tbody tr:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] #projectTimeTable td.pt-cell-click:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item-collapsed:hover {
    background-color: rgba(255, 193, 7, 0.16) !important;
}

/* admin/projecttimenew.jsp */
:root[data-theme="dark"] .pt-colvis-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .board-wrapper .add-portlet:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .btn-inverse-light:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .btn-inverse-secondary:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .calendar-aside .list:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .calendar-aside .list:hover .count:before {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .datepicker.datepicker-dropdown .datepicker-days table.table-condensed tbody td.day:hover,
:root[data-theme="dark"] .datepicker.datepicker-inline .datepicker-days table.table-condensed tbody td.day:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .dropdown-menu .dropdown-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .pagination-light .page-item .page-link:hover,
:root[data-theme="dark"] .pagination-light .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-link:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .pagination-light .jsgrid-pager-nav-button .page-link:hover,
:root[data-theme="dark"] .pagination-light .jsgrid .jsgrid-pager .jsgrid-pager-page .page-link:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .pagination-light .jsgrid-pager-page .page-link:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-light .page-item a:hover,
:root[data-theme="dark"] .pagination-light .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .pagination-light .jsgrid-pager-nav-button a:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-light .page-item a:hover,
:root[data-theme="dark"] .pagination-light .jsgrid .jsgrid-pager .jsgrid-pager-page a:hover,
:root[data-theme="dark"] .jsgrid .jsgrid-pager .pagination-light .jsgrid-pager-page a:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .product-item-wrapper .product-item .card-body .product-variation li:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .pws_tabs_container ul.pws_tabs_controll li a:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .tabcontrol > .steps > ul > li:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .tickets-card:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .todo-list .todo-item:not(.edit-mode):hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .todo-list .todo-item:not(.edit-mode):hover * {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/shared/style-bs5.css */
:root[data-theme="dark"] .wizard > .steps .disabled a:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* assets/css/vertical/style.css */
:root[data-theme="dark"] .sidebar .nav:not(.sub-menu) > .nav-item:hover:not(.nav-profile) > .nav-link {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* drawing/drawing.css */
:root[data-theme="dark"] .drawings-panel-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* drawing/drawing.css, style/drawing.css */
:root[data-theme="dark"] .room-panel-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* drivelog/driveloghome.jsp */
:root[data-theme="dark"] #home-stats .card.card-statistics:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* emp/invoiceattest.jsp */
:root[data-theme="dark"] table.dataTable tbody tr:hover > td {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/dokument-visa.css */
:root[data-theme="dark"] .kma-page .doc-toc .toc-collapse-btn:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/dokument-visa.css */
:root[data-theme="dark"] .kma-page .find-box button:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/dokument-visa.css */
:root[data-theme="dark"] .kma-page .winpath-copy:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/dokument.css */
:root[data-theme="dark"] .kma-page .resp-chip:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/kma.css */
:root[data-theme="dark"] .kma-sortable th.sortable:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* kma/css/maskiner.css */
:root[data-theme="dark"] .machine-group-hdr:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* style/login.css */
:root[data-theme="dark"] .web-app-link:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/projectcosts.css */
:root[data-theme="dark"] #costsTable tbody tr:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/report-popup.css */
:root[data-theme="dark"] .rp-drop-disabled:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/report-popup.css */
:root[data-theme="dark"] .rp-table > tbody > tr:hover > td {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/superadmin.css */
:root[data-theme="dark"] .deadline-editable:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/superadmin.css */
:root[data-theme="dark"] .email-toolbar button:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/superadmin.css */
:root[data-theme="dark"] .time-table tbody tr:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* style/superadmin.css */
:root[data-theme="dark"] table.dataTable tbody tr:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/tidrapport.css */
:root[data-theme="dark"] .date-input-wrapper .date-picker-toggle:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/tidrapport.css */
:root[data-theme="dark"] .pac-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/tidrapportfullcalender.css */
:root[data-theme="dark"] .cal-daymenu-item.danger:hover {
    background-color: rgba(220, 53, 69, 0.16) !important;
}

/* style/tidrapportfullcalender.css */
:root[data-theme="dark"] .plan-status-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* style/tidrapportfullcalender.css */
:root[data-theme="dark"] .plan-toolbar .plan-clear-btn.plan-filter-on:hover {
    background-color: rgba(255, 193, 7, 0.16) !important;
}

/* superadmin/superdiskusage.jsp */
:root[data-theme="dark"] .detail-table tr:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* superadmin/superglobalconfigure.jsp */
:root[data-theme="dark"] .switch-row:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* superadmin/superhelpadmin.jsp */
:root[data-theme="dark"] .editable-cell:hover {
    background-color: rgba(110, 168, 254, 0.16) !important;
}

/* superadmin/superloginascust.jsp */
:root[data-theme="dark"] .user-login-item:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
}

/* --- Spärrade menyval ---------------------------------------------------
 * Att "dämpa" betyder motsatta saker i de två lägena, och det är hela felet här.
 *
 * I ljust läge dämpas ett spärrat val genom att göras LJUSARE - #adb5bd på ikonen, #ced4da
 * på texten, opacity 0.5. Mot en mörk meny gör exakt samma värden tvärtom: ljusgrått
 * närmar sig vitt och blir MER framträdande än de val som faktiskt går att klicka. Menyn
 * såg ut att lyfta fram just det man inte kan göra.
 *
 * Här dämpas de nedåt i stället, mot menyns egen botten. Genomstrykningen och
 * not-allowed-pekaren är kvar - de bär betydelsen och fungerar i båda lägena. Gråskala på
 * ikonen tas bort: den är gjord för färgikoner mot vitt och gör ingen nytta mot mörkt.
 */
:root[data-theme="dark"] .cal-daymenu-item.disabled,
:root[data-theme="dark"] .cal-daymenu-item.disabled:hover,
:root[data-theme="dark"] .cal-daymenu-item.disabled .bi,
:root[data-theme="dark"] .cal-daymenu-item.disabled:hover .bi {
    color: #6b727c !important;
    background: transparent !important;
}
:root[data-theme="dark"] .dropdown-item.pt-export-disabled,
:root[data-theme="dark"] .dropdown-item.disabled,
:root[data-theme="dark"] .dropdown-item:disabled {
    /* Full opacitet, dämpad FÄRG. Opacity 0.5 ovanpå ljus text mot mörk botten ger en
       gråskala som ligger nära bottnen och blir svårläst i stället för dämpad. */
    opacity: 1 !important;
    color: #6b727c !important;
}
:root[data-theme="dark"] .dropdown-item.pt-export-disabled img,
:root[data-theme="dark"] .dropdown-item.pt-export-disabled i,
:root[data-theme="dark"] .dropdown-item.disabled i {
    filter: none !important;
    opacity: .55;
    color: #6b727c !important;
}

/* --- bootstrap-select (.selectpicker) ------------------------------------
 * Flervalslistorna i projektets offcanvas ("Visa för", tidkolumner m.m.) är
 * bootstrap-select, som ersätter <select> med en egen uppbyggnad: en knapp, en egen
 * dropdown-meny, en sökruta och en åtgärdsrad. Ingenting av det är ett <select>, så
 * varken Bootstraps formulärvariabler eller våra egna select-regler nådde det - listan
 * blev en vit ruta mitt i en mörk panel.
 */
:root[data-theme="dark"] .bootstrap-select > .dropdown-toggle,
:root[data-theme="dark"] .bootstrap-select > .btn,
:root[data-theme="dark"] .bootstrap-select .dropdown-menu,
:root[data-theme="dark"] .bootstrap-select .dropdown-menu .inner,
:root[data-theme="dark"] .bootstrap-select .bs-searchbox input,
:root[data-theme="dark"] .bootstrap-select .bs-actionsbox {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .bootstrap-select .dropdown-menu li a,
:root[data-theme="dark"] .bootstrap-select .dropdown-menu li a span.text,
:root[data-theme="dark"] .bootstrap-select .dropdown-item,
:root[data-theme="dark"] .bootstrap-select .no-results {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .bootstrap-select .dropdown-menu li a:hover,
:root[data-theme="dark"] .bootstrap-select .dropdown-item:hover,
:root[data-theme="dark"] .bootstrap-select .dropdown-item:focus {
    background-color: rgba(255, 255, 255, 0.07) !important;
    color: var(--tid-ink) !important;
}
/* Valt alternativ: blått bär betydelse och behålls som en mörk ton. */
:root[data-theme="dark"] .bootstrap-select .dropdown-menu li.selected a,
:root[data-theme="dark"] .bootstrap-select .dropdown-item.selected,
:root[data-theme="dark"] .bootstrap-select .dropdown-item.active {
    background-color: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .bootstrap-select .dropdown-header,
:root[data-theme="dark"] .bootstrap-select .dropdown-menu .divider {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink-muted) !important;
    border-color: var(--tid-border) !important;
}
/* Räknaren ("3 valda") och den lilla bocken. */
:root[data-theme="dark"] .bootstrap-select .filter-option,
:root[data-theme="dark"] .bootstrap-select .filter-option-inner-inner,
:root[data-theme="dark"] .bootstrap-select .check-mark {
    color: var(--tid-ink) !important;
}

/* ============================================================================
 * FJÄRDE OMGÅNGEN 2026-08-27.
 * ========================================================================= */

/* --- Kompakt sidomeny (sidebar-icon-only) -------------------------------
 * När menyn är minimerad visas etiketten som en bubbla vid sidan av ikonen, och
 * undermenyn fälls ut som en egen panel. Star Admin ger bubblan #fafbfc — nästan vit —
 * och har bara en mörk variant för .sidebar-dark, alltså för sitt EGET mörka menytema.
 * Vårt mörka läge är något annat: sidomenyn kan vara mörk utan att body bär sidebar-dark,
 * och då slog den ljusa varianten till mitt i ett mörkt gränssnitt.
 */
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title,
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item .collapse,
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item .collapsing,
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item .sidebar-sticker,
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item.nav-profile {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
/* Bubblans lilla pil pekar ut ur den och måste ha samma färg som ytan. */
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title:after {
    border-right-color: var(--tid-surface-2) !important;
}
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav.sub-menu,
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link:hover {
    background: rgba(255, 255, 255, 0.07) !important;
}

/* --- KMA-snabbmenyn i sidhuvudet ----------------------------------------
 * Menyn ligger i en Bootstrap-dropdown i navbaren, alltså utanför allt vi mörkat via
 * .card och .sidebar. Hovern kom från Bootstraps standard och blev en ljus platta.
 */
:root[data-theme="dark"] .navbar .dropdown-menu,
:root[data-theme="dark"] .navbar-nav .dropdown-menu {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .navbar .dropdown-menu .dropdown-item,
:root[data-theme="dark"] .navbar-nav .dropdown-menu .dropdown-item {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .navbar .dropdown-menu .dropdown-item:hover,
:root[data-theme="dark"] .navbar .dropdown-menu .dropdown-item:focus,
:root[data-theme="dark"] .navbar-nav .dropdown-menu .dropdown-item:hover,
:root[data-theme="dark"] .navbar-nav .dropdown-menu .dropdown-item:focus {
    background-color: rgba(255, 255, 255, 0.07) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .navbar .dropdown-menu .dropdown-header,
:root[data-theme="dark"] .navbar .dropdown-menu .dropdown-divider {
    color: var(--tid-ink-muted) !important;
    border-color: var(--tid-border) !important;
}

/* --- Flikrader (Rapportera / Attestera / Fakturering m.fl.) --------------
 * Flikarna sätter sin färg mot en ljus sida: #495057 för vilande, #212529 för aktiv,
 * #6c757d på ikonen. Mot mörkt blir de tre nästan lika mörka som bottnen, och
 * träffantalet fick dessutom en ljus platta (#e9ecef). Resultatet var en rad ljusa
 * fläckar där flikarna borde ha varit.
 *
 * Den blå understrykningen på aktiv flik behålls — det är den som säger var man är.
 */
:root[data-theme="dark"] #taTabs .nav-link,
:root[data-theme="dark"] .nav-tabs .nav-link {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] #taTabs .nav-link.active,
:root[data-theme="dark"] .nav-tabs .nav-link.active {
    color: var(--tid-ink) !important;
    background-color: transparent !important;
    border-bottom-color: #6ea8fe !important;
}
:root[data-theme="dark"] #taTabs .nav-link .bi {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] #taTabs .nav-link:hover,
:root[data-theme="dark"] #taTabs .nav-link:hover .bi,
:root[data-theme="dark"] #taTabs .nav-link.active .bi,
:root[data-theme="dark"] .nav-tabs .nav-link:hover {
    color: #6ea8fe !important;
}
:root[data-theme="dark"] #taTabs .ta-tab-count {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
/* Rapportörsmenyn under Rapportera-knappen. */
:root[data-theme="dark"] .ta-report-menu,
:root[data-theme="dark"] .ta-report-list .dropdown-item {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .ta-report-list .dropdown-item.active,
:root[data-theme="dark"] .ta-report-list .dropdown-item:hover {
    background: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}

/* --- KMA:s årshjul -------------------------------------------------------
 * Ligger INTE här längre. Hjulets färger är tokens i kma/css/arshjul.css, med det mörka
 * läget definierat i samma fil — det är skrivet temamedvetet från början i stället för
 * lappat i efterhand. Reglerna som stod här satte fill med !important på
 * "svg .month-sector" och skulle nu slå ut hjulets egna sektorfärger (kvartalston,
 * innevarande månad, vald månad). Kategorifärgerna sätts per prick från JS via --dot
 * och rörs inte av något läge: de är hela poängen med hjulet.
 */

/* --- Inställningar: ordning på kolumner vid rapportering -----------------
 * Korten i sorteringslistan har en GRADIENT (linear-gradient till #ffffff), inte en
 * enkel bakgrundsfärg. Generatorn satte background-color, vilket inte biter på en
 * gradient — hela background måste skrivas om. Samma fälla som hemmets .fact-card.
 */
:root[data-theme="dark"] .ui-state-default,
:root[data-theme="dark"] #sortableCols li,
:root[data-theme="dark"] #sortableAdminHomeTabs li {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .ui-state-default:hover,
:root[data-theme="dark"] #sortableCols li:hover,
:root[data-theme="dark"] #sortableAdminHomeTabs li:hover {
    background: var(--tid-border) !important;
}
/* Platsen där kortet ska släppas: blått bär betydelse och behålls som en mörk ton. */
:root[data-theme="dark"] .ui-state-highlight,
:root[data-theme="dark"] .ui-sortable-placeholder {
    background: rgba(110, 168, 254, 0.18) !important;
    border-color: #6ea8fe !important;
}

/* --- Hjälp-popoverns stängknapp ----------------------------------------
 * .close-popover är color:#000 med opacity .5 — svart mot en nu mörk rubrikrad, alltså
 * nästan osynlig. Det var det som gjorde hjälprutan otydlig även efter att själva
 * popovern mörkats.
 */
:root[data-theme="dark"] .popover.sticky-popover .close-popover {
    color: var(--tid-ink) !important;
    opacity: .75;
}
:root[data-theme="dark"] .popover.sticky-popover .close-popover:hover {
    opacity: 1;
}
/* Rutan för nionde färgen ska se ljus ut även i mörkt läge — den ÄR ett färgprov. */
:root[data-theme="dark"] .settings-panel .color-tiles .tiles.light {
    background-color: #f8f9fa !important;
    border-color: var(--tid-ink-muted) !important;
}

/* --- Rullningslisten i sidomenyn ---------------------------------------
 * Menyn är lång och scrollar. Listen ritas av webbläsaren med systemets ljusa färger och
 * blev en ljus stapel längs en mörk meny — den syntes mer än menyn själv. Gäller alla
 * inloggningar, eftersom varje dekoratör har samma sidomeny.
 *
 * color-scheme är det som får webbläsaren att rita SINA egna delar mörka; scrollbar-color
 * är standardvägen och ::-webkit-scrollbar täcker Chrome/Edge/Safari.
 */
:root[data-theme="dark"] {
    color-scheme: dark;
}
:root[data-theme="dark"] .sidebar,
:root[data-theme="dark"] .sidebar .nav,
:root[data-theme="dark"] #right-sidebar,
:root[data-theme="dark"] .content-wrapper,
:root[data-theme="dark"] .table-responsive,
:root[data-theme="dark"] .dropdown-menu,
:root[data-theme="dark"] .modal-body {
    scrollbar-color: var(--tid-border) transparent;
    scrollbar-width: thin;
}
:root[data-theme="dark"] ::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}
:root[data-theme="dark"] ::-webkit-scrollbar-track {
    background: transparent;
}
:root[data-theme="dark"] ::-webkit-scrollbar-thumb {
    background: var(--tid-border);
    border-radius: 6px;
}
:root[data-theme="dark"] ::-webkit-scrollbar-thumb:hover {
    background: var(--tid-ink-muted);
}
:root[data-theme="dark"] ::-webkit-scrollbar-corner {
    background: transparent;
}

/* Iframe-modalernas ram: webbläsaren målar ramens egen yta vit när dokumentet inuti är
   kortare än ramen, och det syntes som en vit remsa i underkanten på Rapportera tid. */
:root[data-theme="dark"] #taPopupFrame,
:root[data-theme="dark"] .modal-body > iframe,
:root[data-theme="dark"] .tid-iframe-modal iframe {
    background: var(--tid-surface) !important;
}

/* --- VALT alternativ i en knappgrupp -----------------------------------
 * Filterknapparna ("Visa: Aktiva / Alla", "med: ...") är Bootstraps btn-check + label.
 * Mitt eget fel: jag gav det VALDA alternativet samma stil som :hover, alltså
 * --tid-surface-2. Skillnaden mot en ovald knapp är då en nyans, och mot muspekaren
 * ingen alls — man kunde inte se vilket filter som gällde.
 *
 * Samma misstag som med aktiv menypost. Valt alternativ ska se VALT ut: fylld blå platta
 * med mörk text, precis som Bootstrap gör i ljust läge.
 */
:root[data-theme="dark"] .btn-check:checked + .btn,
:root[data-theme="dark"] .btn-check:checked + .btn-outline-secondary,
:root[data-theme="dark"] .btn-check:checked + .btn-outline-primary,
:root[data-theme="dark"] .btn-check:checked + .btn-outline-dark,
:root[data-theme="dark"] .btn-group > .btn.active,
:root[data-theme="dark"] .btn-group > .btn:active {
    background-color: #6ea8fe !important;
    border-color: #6ea8fe !important;
    color: #16181c !important;
    font-weight: 600;
}
:root[data-theme="dark"] .btn-check:checked + .btn i,
:root[data-theme="dark"] .btn-group > .btn.active i {
    color: #16181c !important;
}

/* Summeringsraden i rapportkalendern (Tim/Restid/Flextid). Se --tid-weekend-bg för samma
   lösning: färgen sätts inline på eventet från Java, så den måste gå via en variabel. */
:root[data-theme="dark"] {
    --tid-sum-bg: #262a31;
    --tid-sum-fg: #d7dade;
}

/* --- Summeringsradens TEXT i rapportkalendern ---------------------------
 * Bakgrunden går via --tid-sum-bg (satt från DbProcessor), men textfärgen räknas ut i
 * JavaScript ur bakgrundens luminans (itendicalhelper.js). Den kan inte räkna på en
 * var()-sträng och landar därför på "white" — och min egen regel för händelsetext
 * (a.fc-event *, mörk text mot användarens mättade färger) vann över den. Resultatet blev
 * mörk text på mörk botten.
 *
 * Summeringsraden har ingen egen klass; den är identisk med ett vanligt event så när som
 * på inline-färgen. Variabelnamnet är däremot unikt, och attributselektorn på style är
 * därför ett stabilt sätt att peka ut just den.
 */
:root[data-theme="dark"] a.fc-event[style*="--tid-sum-bg"],
:root[data-theme="dark"] a.fc-event[style*="--tid-sum-bg"] *,
:root[data-theme="dark"] a.fc-event[style*="--tid-sum-bg"] strong,
:root[data-theme="dark"] a.fc-event[style*="--tid-sum-bg"] .tid-event-body {
    color: var(--tid-sum-fg) !important;
}

/* --- Temapanelens två sista färgrutor -----------------------------------
 * "Ljus" (#f8f9fa) och "Standard" såg nästan identiska ut: standardrutan har ingen egen
 * färg i temat och blev därmed också nästan vit. Två rutor som ser likadana ut men gör
 * olika saker är värre än en ruta för lite.
 *
 * Standard betyder "ingen vald färg" och får därför visa det: ett streck över en neutral
 * yta, samma idé som en genomstruken färgruta i ett ritprogram.
 */
.settings-panel .color-tiles .tiles.default {
    background-color: var(--tid-surface-2, #e9ecef) !important;
    background-image: linear-gradient(to bottom right,
        transparent calc(50% - 1px), var(--tid-ink-muted, #adb5bd) calc(50% - 1px),
        var(--tid-ink-muted, #adb5bd) calc(50% + 1px), transparent calc(50% + 1px)) !important;
    border: 1px solid var(--tid-border, #ced4da);
}

/* Ljus toppmeny i mörkt läge: den är ett medvetet val och ska förbli ljus, men den ska inte
   lysa lika starkt som mot en ljus sida. Texten är fortsatt mörk — plattan är ljus. */
:root[data-theme="dark"] .navbar.default-layout.navbar-light {
    background: #e6e9ee;
    border-bottom-color: var(--tid-border);
}

/* --- ALLA dropdown-menyer, inte bara navbarens -------------------------
 * Attest, Fakturering, Verktyg och Kolumner mätte fg = bg = rgb(33,37,41): texten hade
 * EXAKT samma färg som menyns botten, alltså osynlig (1:1). Bootstrap mörkar själv
 * menyytan via data-bs-theme, men .dropdown-item behåller --bs-body-color från den ljusa
 * sidan, och min tidigare regel var scopad till .navbar — den nådde aldrig menyerna inne
 * i sidan.
 *
 * Regeln står medvetet brett: en dropdown ska fungera var den än öppnas, och de finns i
 * verktygsrader, tabellrader, offcanvas och modaler.
 */
:root[data-theme="dark"] .dropdown-menu {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .dropdown-menu .dropdown-item,
:root[data-theme="dark"] .dropdown-menu li > a,
:root[data-theme="dark"] .dropdown-menu label,
:root[data-theme="dark"] .dropdown-menu .form-check-label {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .dropdown-menu .dropdown-item:hover,
:root[data-theme="dark"] .dropdown-menu .dropdown-item:focus,
:root[data-theme="dark"] .dropdown-menu li > a:hover {
    background-color: rgba(255, 255, 255, 0.07) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .dropdown-menu .dropdown-item.active,
:root[data-theme="dark"] .dropdown-menu .dropdown-item:active {
    background-color: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .dropdown-menu .dropdown-header {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .dropdown-menu .dropdown-divider {
    border-color: var(--tid-border) !important;
}
/* Spärrade poster ska dämpas NEDÅT, inte upp — se regeln för spärrade menyval ovan. */
:root[data-theme="dark"] .dropdown-menu .dropdown-item.disabled,
:root[data-theme="dark"] .dropdown-menu .dropdown-item:disabled {
    color: #6b727c !important;
}

/* --- Kalenderhändelsernas text: SLUTA alternera ------------------------
 * itendicalhelper.js väljer svart eller vit text efter bakgrundens luminans, och det är
 * matematiskt rätt — men resultatet är att texten hoppar mellan svart och vit mellan
 * händelser som ligger bredvid varandra. Listan blir rörig att läsa även när varje enskild
 * rad når godkänd kontrast.
 *
 * Här läggs i stället en mörk overlay ovanpå händelsens färg (inset box-shadow täcker hela
 * ytan, oavsett vilken färg som satts inline), och texten är ALLTID ljus. Uppmätt över de
 * färger som faktiskt används:
 *
 *   utan overlay, bästa av svart/vit:  sämsta fall 5,11:1  (men växlande färg)
 *   med overlay, alltid vit text:      sämsta fall 5,09:1  (konsekvent)
 *
 * Alltså samma läsbarhet, utan hoppandet. Färgen finns kvar som en dämpad ton och skiljer
 * fortfarande händelsetyperna åt — det är den informationen som bär, inte styrkan.
 *
 * Gäller BARA mörkt läge. I ljust läge är växlingen rimlig, eftersom händelserna då ligger
 * mot en ljus sida och de flesta färger tar svart text.
 */
:root[data-theme="dark"] a.fc-event:not([style*="--tid-sum-bg"]),
:root[data-theme="dark"] .fc-event:not([style*="--tid-sum-bg"]) {
    box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.55);
}
:root[data-theme="dark"] a.fc-event:not([style*="--tid-sum-bg"]),
:root[data-theme="dark"] a.fc-event:not([style*="--tid-sum-bg"]) *,
:root[data-theme="dark"] .fc-event:not([style*="--tid-sum-bg"]) .fc-event-title,
:root[data-theme="dark"] .fc-event:not([style*="--tid-sum-bg"]) .fc-event-time {
    color: #ffffff !important;
}

/* --- Sektionsrubriker i projektpopupen ---------------------------------
 * .section-header i admin/popups/projectdetails.jsp mätte 1,33:1 — ljus text på #f8f9fa.
 *
 * Den slank igenom generatorn på grund av en svaghet i filtret: generatorn hoppar över
 * selektorer vars KLASSNAMN redan nämns i den här filen, och "section-header" fanns —
 * men bara i den snävare regeln .form-table .section-header td (superadmins createcustomer).
 * Namnet fanns alltså, regeln träffade inte. Värt att minnas om något annat verkar
 * "redan fixat" men ändå är ljust.
 */
:root[data-theme="dark"] .section-header {
    background-color: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}

/* --- Dropdowns som renderas utanför sitt sammanhang --------------------
 * Bootstrap flyttar en dropdown-meny till <body> när den öppnas i en modal eller med
 * data-bs-strategy="fixed". Då ligger den utanför .modal och .navbar, och alla regler som
 * är scopade till dem missar. Här sätts ytan på menyn själv, oavsett var den hamnar.
 */
:root[data-theme="dark"] body > .dropdown-menu,
:root[data-theme="dark"] .modal .dropdown-menu,
:root[data-theme="dark"] .modal-header .dropdown-menu,
:root[data-theme="dark"] .offcanvas .dropdown-menu {
    background-color: var(--tid-surface) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] body > .dropdown-menu .dropdown-item,
:root[data-theme="dark"] .modal .dropdown-menu .dropdown-item,
:root[data-theme="dark"] .offcanvas .dropdown-menu .dropdown-item {
    color: var(--tid-ink) !important;
}

/* --- Temapanelen: lägre höjd ------------------------------------------
 * Panelen växte med varje nytt val och Startsida hamnade utanför skärmen på en laptop.
 * Raderna och mellanrummen krymper; inget val tas bort.
 */
#theme-settings .settings-heading {
    margin-top: .5rem !important;
    margin-bottom: .25rem !important;
    padding-top: .35rem !important;
    padding-bottom: .35rem !important;
    font-size: .82rem;
}
#theme-settings .sidebar-bg-options {
    padding-top: 7px !important;
    padding-bottom: 7px !important;
}
#theme-settings .img-ss {
    width: 26px; min-width: 26px; height: 26px;
}
#theme-settings .color-tiles .tiles {
    width: 28px; min-width: 28px; height: 28px;
}
#theme-settings .form-text {
    font-size: .74rem;
    line-height: 1.25;
}
#theme-settings .px-4.pt-2.pb-1,
#theme-settings .px-4.pb-2,
#theme-settings .px-4.py-2 {
    padding-top: .25rem !important;
    padding-bottom: .25rem !important;
}
/* Panelen ska scrolla om den ändå inte får plats, i stället för att gå utanför rutan. */
#theme-settings {
    max-height: 100vh;
    overflow-y: auto;
}

/* ============================================================================
 * SWEETALERT2 — systemets alla dialoger
 *
 * Rutan renderas i <body>, utanför allt vi mörkat, och har egna klasser. Ingen regel nådde
 * den. Konsekvensen var värre än en ljus ruta: .swal2-title ärvde vår LJUSA rubrikfärg
 * (#d7dade) mot SweetAlerts VITA botten och mätte 1,4:1 — rubriken var alltså osynlig i
 * varje bekräftelse, varning och fråga i hela systemet.
 *
 * CLAUDE.md-regeln är att alla dialoger går genom TidUtil/SweetAlert, aldrig webbläsarens
 * alert/confirm. Det gör det här till en av de mest synliga ytorna som fanns kvar.
 *
 * Knapparnas färger rörs inte: de bär betydelse (röd = destruktiv) och mäter redan 4,5:1.
 * ========================================================================= */
:root[data-theme="dark"] .swal2-popup {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .swal2-title,
:root[data-theme="dark"] .swal2-html-container,
:root[data-theme="dark"] .swal2-html-container *,
:root[data-theme="dark"] .swal2-content,
:root[data-theme="dark"] .swal2-label,
:root[data-theme="dark"] .swal2-checkbox,
:root[data-theme="dark"] .swal2-radio,
:root[data-theme="dark"] .swal2-footer {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .swal2-footer {
    border-top-color: var(--tid-border) !important;
}
/* Inmatningsfälten: SweetAlert ger dem vit botten och mörk text. */
:root[data-theme="dark"] .swal2-input,
:root[data-theme="dark"] .swal2-textarea,
:root[data-theme="dark"] .swal2-select,
:root[data-theme="dark"] .swal2-file {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
    box-shadow: none !important;
}
:root[data-theme="dark"] .swal2-input::placeholder,
:root[data-theme="dark"] .swal2-textarea::placeholder {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .swal2-validation-message {
    background: rgba(220, 53, 69, 0.16) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .swal2-close {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .swal2-close:hover {
    color: var(--tid-ink) !important;
}
/* Toasten (TidUtil.toast) är samma popup i miniatyr. */
:root[data-theme="dark"] .swal2-toast {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    box-shadow: 0 3px 14px rgba(0, 0, 0, .5) !important;
}
:root[data-theme="dark"] .swal2-toast .swal2-title,
:root[data-theme="dark"] .swal2-toast .swal2-html-container {
    color: var(--tid-ink) !important;
}
/* Ikonernas ringar ritas i ljusa toner för vit botten. */
:root[data-theme="dark"] .swal2-icon.swal2-info,
:root[data-theme="dark"] .swal2-icon.swal2-question,
:root[data-theme="dark"] .swal2-icon.swal2-warning,
:root[data-theme="dark"] .swal2-icon.swal2-success,
:root[data-theme="dark"] .swal2-icon.swal2-error {
    background: transparent !important;
}
:root[data-theme="dark"] .swal2-success-ring {
    border-color: rgba(165, 220, 134, .5) !important;
}
:root[data-theme="dark"] .swal2-success-circular-line-left,
:root[data-theme="dark"] .swal2-success-circular-line-right,
:root[data-theme="dark"] .swal2-success-fix {
    background: var(--tid-surface) !important;
}

/* --- Hjälp-popoverns KROPP ---------------------------------------------
 * .popover fick mörk botten, men .popover-body har en EGEN vit bakgrund i temat och den
 * lämnades kvar — jag satte bara color på den. Ljus text på vit botten mäter 1,4:1, alltså
 * osynligt, och det var därför hjälprutan var otydlig även efter att popovern "fixats".
 *
 * Mitt mätfel gjorde det värre: jag mätte .popover (som var mörk) och inte kroppen inuti.
 * Att mäta rätt element är halva jobbet.
 */
:root[data-theme="dark"] .popover .popover-body,
:root[data-theme="dark"] .popover-body {
    background-color: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .popover .popover-body a {
    color: #8ab4f8 !important;
}

/* --- Dropdown-RADERNA, inte bara menyn ---------------------------------
 * Toppmenyns menyer (KMA, notiser, Mina uppgifter) hade mörk yta men VITA rader: varje
 * a.dropdown-item bär en egen vit bakgrund. Jag satte color på dem men aldrig
 * background-color, och mätte dessutom bara menyns yta — som var mörk. Alltså rapporterade
 * jag "fixat" tre gånger om något som inte var det.
 *
 * Det är exakt husregeln i CLAUDE.md: sätt bakgrunden, inte bara texten. Nästan alla fel
 * i den här genomgången har varit en ljus yta som blivit kvar under en text som gjorts
 * ljus — och det här är samma sak, en nivå ned.
 *
 * transparent i stället för en egen färg: då syns menyns yta igenom, och hover- och
 * aktiv-tillstånden ovan fortsätter fungera utan att slåss med en fast bakgrund.
 */
:root[data-theme="dark"] .dropdown-menu .dropdown-item,
:root[data-theme="dark"] .navbar-dropdown .dropdown-item,
:root[data-theme="dark"] .dropdown-menu a.dropdown-item,
:root[data-theme="dark"] .dropdown-menu .preview-item {
    background-color: transparent !important;
}
/* Rubriker och underrader i notismenyns förhandsvisning bär egen färg. */
:root[data-theme="dark"] .dropdown-menu .preview-item h6,
:root[data-theme="dark"] .dropdown-menu .preview-item p,
:root[data-theme="dark"] .dropdown-menu .preview-item-content *,
:root[data-theme="dark"] .dropdown-menu h6,
:root[data-theme="dark"] .dropdown-menu p {
    color: var(--tid-ink) !important;
    background-color: transparent !important;
}
:root[data-theme="dark"] .dropdown-menu .preview-item .text-muted,
:root[data-theme="dark"] .dropdown-menu .preview-item small {
    color: var(--tid-ink-muted) !important;
}

/* --- Laddningsindikatorn (TidUtil.busy) --------------------------------
 * .tid-busy lägger en slöja över det som laddas, och slöjan är rgba(255,255,255,.65) —
 * alltså VITARE ju längre laddningen tar, mitt i ett mörkt gränssnitt. Rutan med
 * "Laddar…" är dessutom vit med mörk text.
 *
 * Slöjan ska dämpa det som ligger under, inte lysa upp det: i mörkt läge betyder det en
 * mörk slöja. Rutan följer korten.
 */
:root[data-theme="dark"] .tid-busy {
    background: rgba(22, 24, 28, .65) !important;
}
:root[data-theme="dark"] .tid-busy .tid-busy-inner,
:root[data-theme="dark"] .tid-busy .tid-busy-box {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
/* Iframe-modalernas spinner ligger ovanpå ramen medan sidan laddas. */
:root[data-theme="dark"] .tid-iframe-spinner {
    background: var(--tid-surface) !important;
}
/* Bootstraps egen spinner ärver currentColor; text-primary/-secondary är mörkblå
   respektive grå och blir svaga mot mörkt. */
:root[data-theme="dark"] .spinner-border.text-secondary,
:root[data-theme="dark"] .spinner-grow.text-secondary {
    color: var(--tid-ink-muted) !important;
}
:root[data-theme="dark"] .spinner-border.text-primary,
:root[data-theme="dark"] .spinner-grow.text-primary {
    color: #6ea8fe !important;
}
/* Sidornas egna laddningsrutor (#loading i planeringsvyerna, #loadingIndicator i
   molnfilerna) och den vanliga "Laddar…"-texten. */
:root[data-theme="dark"] #loading,
:root[data-theme="dark"] #loadingIndicator,
:root[data-theme="dark"] #loadingText,
:root[data-theme="dark"] .loading,
:root[data-theme="dark"] .loading-overlay {
    background-color: transparent !important;
    color: var(--tid-ink) !important;
}

/* ============================================================================
 * KMA-DOKUMENTENS LÄSVY
 *
 * Redigeraren (.ProseMirror) mörkades tidigare, men LÄSVYN har en helt egen uppsättning
 * klasser i kma/css/dokument-visa.css — .doc-content med background:#fff och color:#222,
 * plus tabeller, citat, sökträffar och innehållsförteckning. Läsvyn är dessutom den som
 * används mest; redigeraren öppnas bara av den som skriver.
 *
 * Att mörka dokumentet är ett medvetet val och samma som för redigeraren: dokumenten läses
 * på skärm, utskriften har sin egen CSS (doc-print.js) och PDF-exporten sin, och en
 * lysande vit A4-yta är precis vad den som valt mörkt läge ville slippa.
 * ========================================================================= */
:root[data-theme="dark"] .kma-page .doc-content,
:root[data-theme="dark"] .kma-page .find-box,
:root[data-theme="dark"] .kma-page.doc-embedded .doc-sheet {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .kma-page.doc-embedded {
    background: var(--tid-bg) !important;
}
:root[data-theme="dark"] .kma-page .doc-content h1,
:root[data-theme="dark"] .kma-page .doc-content h2,
:root[data-theme="dark"] .kma-page .doc-content h3,
:root[data-theme="dark"] .kma-page .doc-content h4,
:root[data-theme="dark"] .kma-page .doc-content p,
:root[data-theme="dark"] .kma-page .doc-content li,
:root[data-theme="dark"] .kma-page .doc-content td,
:root[data-theme="dark"] .kma-page .doc-content strong,
:root[data-theme="dark"] .kma-page.doc-embedded .doc-head .doc-num,
:root[data-theme="dark"] .kma-page.doc-embedded .doc-head .meta {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-page .doc-content table th,
:root[data-theme="dark"] .kma-page .doc-content blockquote,
:root[data-theme="dark"] .kma-page .doc-content code.winpath,
:root[data-theme="dark"] .kma-page .winpath-copy {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .kma-page .doc-content table td,
:root[data-theme="dark"] .kma-page .doc-content table th {
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .kma-page .winpath-copy:hover,
:root[data-theme="dark"] .kma-page .doc-toc a:hover,
:root[data-theme="dark"] .kma-page .find-box button:hover,
:root[data-theme="dark"] .kma-page .doc-toc .toc-collapse-btn:hover {
    background: rgba(255, 255, 255, 0.07) !important;
}
/* Sökträffar och utkastbanderollen BÄR betydelse — kulören behålls, tonen mörkas så att
   den ljusa texten går att läsa ovanpå. Aktuell träff är fortfarande starkare än övriga. */
:root[data-theme="dark"] .kma-page .doc-content mark.kma-find {
    background: rgba(255, 193, 7, 0.30) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .kma-page .doc-content mark.kma-find.cur {
    background: rgba(255, 152, 0, 0.55) !important;
    color: #16181c !important;
}
:root[data-theme="dark"] .kma-page .draft-banner {
    background: rgba(255, 193, 7, 0.16) !important;
    color: var(--tid-ink) !important;
    border-color: rgba(255, 193, 7, 0.32) !important;
}
:root[data-theme="dark"] .kma-page .winpath-copy.copied {
    color: #75d6a3 !important;
}

/* --- DataTables egen "Bearbetar"-ruta -----------------------------------
 * div.dt-processing visas mitt i tabellen när DataTables laddar om (t.ex. när man byter
 * filter i Administrera > Projekt mellan Aktiva/Inaktiverade/Alla). Den är DataTables
 * egen, inte TidUtil.busy som mörkades nyss — därför fanns en vit ruta kvar just där.
 */
:root[data-theme="dark"] div.dt-processing,
:root[data-theme="dark"] .dataTables_processing {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border: 1px solid var(--tid-border) !important;
    border-radius: 8px;
    box-shadow: 0 3px 14px rgba(0, 0, 0, .5);
}
:root[data-theme="dark"] div.dt-processing > div > div {
    background: var(--tid-ink-muted) !important;
}

/* --- Textfärger som skribenten satt i dokumentet -----------------------
 * Redigerarens färgknappar (ed-color-red / ed-color-black) sparar färgen som inline
 * style på ett <span> i dokumentets HTML, alltså i databasen. Mot en mörk läsyta mätte
 * den svarta 1,05:1 och den röda 2,45:1 — dokumentets egen text var oläslig.
 *
 * Innehållet kan inte skrivas om: det är kundens dokument, sparat en gång, och samma
 * HTML ska fungera i ljust läge, i utskriften och i PDF-exporten. Attributselektorn på
 * style är därför enda vägen — samma grepp som för kalenderns summeringsrad.
 *
 * Rött BEHÅLLS som rött (skribenten menade något med det), bara ljusare. Svart blir
 * vanlig brödtextfärg, eftersom "svart" i ett mörkt läge betyder "standardfärg".
 *
 * Båda skrivsätten täcks: webbläsaren normaliserar hex till rgb() i style-attributet
 * först när den läser det, och innehållet kan ha sparats i endera formen.
 */
:root[data-theme="dark"] .doc-content [style*="rgb(204, 0, 0)"],
:root[data-theme="dark"] .doc-content [style*="#cc0000"],
:root[data-theme="dark"] .doc-content [style*="#CC0000"],
:root[data-theme="dark"] .ProseMirror [style*="rgb(204, 0, 0)"],
:root[data-theme="dark"] .ProseMirror [style*="#cc0000"] {
    color: #ff8087 !important;
}
:root[data-theme="dark"] .doc-content [style*="rgb(33, 37, 41)"],
:root[data-theme="dark"] .doc-content [style*="rgb(0, 0, 0)"],
:root[data-theme="dark"] .doc-content [style*="#212529"],
:root[data-theme="dark"] .doc-content [style*="#000000"],
:root[data-theme="dark"] .ProseMirror [style*="rgb(33, 37, 41)"],
:root[data-theme="dark"] .ProseMirror [style*="rgb(0, 0, 0)"],
:root[data-theme="dark"] .ProseMirror [style*="#212529"],
:root[data-theme="dark"] .ProseMirror [style*="#000000"] {
    color: var(--tid-ink) !important;
}

/* ============================================================================
 * PLANERINGEN — offcanvas-panelerna och verktygsraden
 *
 * Panelerna ("Inställningar", "Vem har ledig tid") öppnas bara på knapptryck, så sidsvepet
 * har aldrig sett dem. Innehållet var vitt med vår ljusa text: .plan-status-item mätte
 * 1,4:1 — namnen på personerna gick inte att läsa.
 *
 * Statusmärkena BÄR betydelse (ledig / dubbelbokad / ok) och behåller sin kulör som en
 * mörk ton, precis som tabellernas .table-danger.
 *
 * Händelsernas text rörs inte: med den mörka overlayen mäter alla nio färgerna i bruk
 * 5,5–8,1:1 mot vit text, alltså med marginal. Att mäta dem rakt av ger falska larm —
 * getComputedStyle rapporterar originalfärgen, inte resultatet efter overlayen.
 * ========================================================================= */
:root[data-theme="dark"] .plan-status-item,
:root[data-theme="dark"] .cal-daymenu {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] .plan-status-item:hover,
:root[data-theme="dark"] .plan-toolbar .plan-icon-btn:hover,
:root[data-theme="dark"] .cal-daymenu-item:hover {
    background: rgba(255, 255, 255, 0.07) !important;
}
:root[data-theme="dark"] .plan-res-tag,
:root[data-theme="dark"] .plan-toolbar .plan-toolbar-sep,
:root[data-theme="dark"] .cal-daymenu-sep {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .plan-status-name,
:root[data-theme="dark"] .plan-toolbar .plan-title,
:root[data-theme="dark"] .cal-daymenu-item,
:root[data-theme="dark"] .tid-plan-badge,
:root[data-theme="dark"] .plan-toolbar .plan-icon-btn {
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .plan-status-ranges,
:root[data-theme="dark"] .plan-toolbar .plan-toolbar-switch .form-check-label,
:root[data-theme="dark"] #planningSettingsTable .form-switch .form-check-label {
    color: var(--tid-ink-muted) !important;
}
/* Statusmärkena: kulören är informationen. */
:root[data-theme="dark"] .plan-status-badge.free {
    background: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .plan-status-badge.clash {
    background: rgba(220, 53, 69, 0.20) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .plan-status-badge.ok {
    background: rgba(25, 135, 84, 0.20) !important;
    color: var(--tid-ink) !important;
}
/* Aktivt filter i verktygsraden ska synas som aktivt, inte som hover. */
:root[data-theme="dark"] .plan-toolbar .plan-icon-btn.show,
:root[data-theme="dark"] .plan-toolbar .plan-icon-btn.active {
    background: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .plan-toolbar .plan-clear-btn.plan-filter-on:hover {
    background: rgba(255, 193, 7, 0.16) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] .cal-daymenu-item.danger:hover {
    background: rgba(220, 53, 69, 0.18) !important;
}
/* Dagar utanför rapportintervallet ska tona BORT, inte lysa. */
:root[data-theme="dark"] .fc .tid-outside-range {
    background: rgba(0, 0, 0, 0.25) !important;
}

/* Filterrutans laddningsindikator i Administrera > Projekt ("Laddar visa alla…").
   Den är en TREDJE laddningsruta utöver TidUtil.busy och DataTables dt-processing, byggd
   inline från scripts/admin/projectsadmin.js — därför överlevde den båda tidigare fixarna.
   Variablerna sätts där med de gamla färgerna som reserv, så ljust läge är oförändrat. */
:root[data-theme="dark"] {
    --tid-load-bg: rgba(30, 33, 38, 0.97);
    --tid-load-fg: #d7dade;
    --tid-load-fg-muted: #9aa1ab;
    --tid-load-veil: rgba(0, 0, 0, 0.45);
}

/* KMA-dokumentets flytande rad vid scroll (#stickyBar). Den läggs ovanpå sidan med
   position:fixed när man rullar och var rgba(255,255,255,.97) — en vit remsa tvärs över
   ett mörkt dokument. Den finns bara medan man scrollar, alltså ett tillstånd som varken
   sidsvepet eller en vanlig mätning ser. */
:root[data-theme="dark"] .kma-page #stickyBar {
    background: rgba(30, 33, 38, .97) !important;
    border-bottom-color: var(--tid-border) !important;
    box-shadow: 0 2px 8px rgba(0, 0, 0, .5) !important;
}
:root[data-theme="dark"] .kma-page #stickyBar .sb-title,
:root[data-theme="dark"] .kma-page #stickyBar .inner {
    color: var(--tid-ink) !important;
}

/* ============================================================================
 * RAPPORT-ADMINISTRATIONENS KALENDERFLIK (#taCalendar)
 *
 * Fliken är FullCalendar SCHEDULER (timeline-vyn) — en helt annan uppsättning klasser än
 * månadskalendern: .fc-datagrid-cell för resurskolumnen, .fc-timeline-slot-label för
 * datumhuvudet. De var kvar ljusa med vår ljusa text (1,28–1,33:1), liksom sidans egna
 * ta-cal-* och ta-chip-*.
 *
 * Vyn finns bara när fliken klickats, så varken sidsvepet eller modalmätningarna har sett
 * den — samma skäl som planeringens offcanvas.
 *
 * Dagfärgerna (helg, röd dag, infodag) BÄR betydelse och behåller sin kulör som mörk ton.
 * Chip-färgerna (tid/kategori/traktamente) är redan mättade och rörs inte.
 * ========================================================================= */
:root[data-theme="dark"] #taCalendar .fc-datagrid-cell,
:root[data-theme="dark"] #taCalendar th.fc-datagrid-cell,
:root[data-theme="dark"] #taCalendar .fc-timeline-slot-label,
:root[data-theme="dark"] #taCalendar th.ta-cal-topband,
:root[data-theme="dark"] #taCalendar .fc-datagrid-header,
:root[data-theme="dark"] #taCalendar .fc-timeline-header {
    background: var(--tid-surface-2) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
:root[data-theme="dark"] #taCalendar .fc-datagrid-cell-main,
:root[data-theme="dark"] #taCalendar .fc-timeline-slot-cushion,
:root[data-theme="dark"] #taCalendar th.ta-cal-topband .fc-timeline-slot-cushion,
:root[data-theme="dark"] #taCalendar .fc-datagrid-cell-cushion {
    color: var(--tid-ink) !important;
}
/* Dagfärgerna: kulören är informationen, tonen mörkas. */
:root[data-theme="dark"] #taCalendar .ta-cal-weekend {
    background: rgba(255, 99, 71, 0.14) !important;
}
:root[data-theme="dark"] #taCalendar .ta-cal-holiday {
    background: rgba(220, 53, 69, 0.20) !important;
}
:root[data-theme="dark"] #taCalendar .ta-cal-infoday {
    background: rgba(255, 152, 0, 0.18) !important;
}
/* Summeringschippet och teckenförklaringen. */
:root[data-theme="dark"] #taCalendar .ta-chip-sum,
:root[data-theme="dark"] .ta-cal-legend i.ta-cal-legend-inv {
    background: var(--tid-surface-2) !important;
}
:root[data-theme="dark"] #taCalendar .ta-chip-sum .ta-chip-body,
:root[data-theme="dark"] .ta-cal-legend {
    color: var(--tid-ink) !important;
}
/* Markeringsraden ("3 valda") — blått bär betydelse. */
:root[data-theme="dark"] #taCalSelActions {
    background: rgba(110, 168, 254, 0.18) !important;
    color: var(--tid-ink) !important;
}
:root[data-theme="dark"] #taCalSelCount {
    color: #9ec5fe !important;
}
:root[data-theme="dark"] .ta-cal-tip {
    background: var(--tid-surface) !important;
    color: var(--tid-ink) !important;
    border-color: var(--tid-border) !important;
}
/* Attestmarkeringen på ett chip ska synas mot mörk botten. */
:root[data-theme="dark"] #taCalendar .ta-chip.ta-att-full {
    color: #75d6a3 !important;
}
