/* ============================================================================
   FORTA DARK @1.2 (D.11 / §20) — KERNE-lag (deles af ALLE Forta-produkter).
   STANDALONE: ren CSS (kun body.dark-selektorer + custom-property-overrides),
   NUL Tailwind-direktiver → distribueres UÆNDRET sammen med forta-core-dist.css.
   Versionen følger kernen (@1.2); bump ved hvert kerne-bump.
   Loades ALTID (efter app.css); body.dark styrer om det er aktivt. Klassen
   sættes SERVER-SIDE fra 'theme'-cookien (samme mønster som dense/nav_folded)
   så der ikke er noget lys-flash ved page-load.

   Filosofi: ALT er token-drevet, INGEN komponent-specialtilfælde.
     · §20 omdefinerer forta-tokens (ink/flade/semantik) → alle var()-baserede
       kerne-komponenter (topbar, ⌘K-palet, p-piller, empty-ic, dashboard-
       workbench …) flipper gratis.
     · Tailwind-paletten (torp/surface/border/neutral/success/warning/danger)
       peger fra tailwind.config.js mod rgb(var(--c-x)/<alpha>). Vi omdefinerer
       DE KANALER her → HELE Tailwind-fladen (utilities OG @apply-komponenter:
       kort, tabeller, formularer, piller, alerts, tabs, detail-sidebar,
       breadcrumb, badges, sub-navs …) flipper fra ét sted.
   Kun det Tailwind IKKE farver via de tokens — 'bg-white'/'text-white' (Tailwind-
   kerne-hvid, MÅ ikke blindt flippes: hvid knaptekst skal forblive hvid) samt et
   par rå-hex-rester — får eksplicitte, stadig token-baserede, overrides.
   ========================================================================= */

/* ── 1. §20 forta-token-fil (præcis) ────────────────────────────────────── */
body.dark{
  /* §24.2 CC·mørk: dybere app-bg (#081320) bag panelerne. Kant .22 (§23/10d)
     bevaret: adskillelsen dét sikrede vejer tungere end den accent-tonede
     prototype-kant.
     🔴 --bg-panel FORBLIVER #12263A OG SOLID. To grunde, målt 15-08-2026:
     (1) Værdien er VEDTAGET i §24.2 (22/7) og er pinnet af
         `test_d11_dark_theme.py::test_dark_file_has_exact_section20_tokens`.
         Prototypens `--panel-solid` (#0E2233) findes allerede som eget token
         i denne fil; at flytte #0E2233 ind i --bg-panel ville overskrive en
         vedtaget beslutning, og ratchetten fanger det.
     (2) Formen kan ikke være en gradient: nogle komponenter sætter
         `background-color:var(--bg-panel)`, hvor en gradient er en ugyldig
         værdi der falder tilbage til TRANSPARENT (se noten i forta-core.css).
     Prototypens gradient-panel findes som `--panel` her og skal adopteres
     pr. flade med `background:` (CC.2) — ikke ved at redefinere dette token. */
  --bg-app:#081320; --bg-panel:#12263A; --bd-panel:rgba(197,210,221,.22);
  /* 🔴 ACCENTEN SKAL OGSÅ VÆRE MØRK-VARIANTEN. Målt 15-08-2026: dette lag
     overstyrede --accent-soft, --accent-soft-tx og --accent-bright og byggede
     --glow, --card-top, --bg-grad og --num-glow oven på dem — men aldrig
     `--accent` selv. Mørk tilstand arvede derfor tema-lagets accent —
     `forta-theme-crm.css:14` sætter #1E96B0, og det er dén der renderede i
     BEGGE temaer (målt gennem browseren: rgb(30,150,176)). Fladen manglede
     altså sin turkise identitet uden at nogen token så forkert ud.
     Prototypen (docs/design-prototype-app) sætter #31C7CC i sin mørke rod;
     vi havde ingen mørk accent overhovedet, kun tema-lagets ene værdi.
     Alt der udleder af --accent (bl.a. --bg-grad's radiale glød) følger med
     automatisk; lys tilstand er urørt, fordi denne blok er body.dark-scopet. */
  --accent:#31C7CC;
  /* 🔴 --accent-bright SKAL GEN-ERKLÆRES HER, OG DET ER IKKE OPRYDNING.
     Tilføjet 17-08-2026 efter protorests måling i den kørende app.

     Tokenet er erklæret i forta-core.css:124-125 i `:root`. En custom property
     substitueres på det element hvor den er ERKLÆRET — ikke hvor den bruges.
     `var(--accent)` inde i --accent-bright opløstes derfor mod :root's accent,
     som tema-laget sætter til #1E96B0 (forta-theme-crm.css:14), og ALDRIG mod
     mørk-lagets #31C7CC ovenfor. Målt i browseren af protorest og gen-regnet
     her i oklab, to uafhængige metoder, samme tal:

         foer  color-mix(oklab,#1E96B0 70%,white) = rgb(114,181,200)
         nu    color-mix(oklab,#31C7CC 70%,white) = rgb(130,216,219) = #82D8DB

     Tokenets egen kommentar siger «lysnet accent — glød/aktiv-tekst i MØRK»,
     og den fodrer --glow, --card-top, --num-glow, --tbl-hover og --grad-btn i
     netop dette lag. Den var altså mørkets token og så aldrig mørkets accent.

     🔴 KOMMENTAREN 41-52 OVENFOR SIGER «alt der udleder af --accent følger med
     automatisk». DEN SÆTNING ER FALSK for de tokens der bor i :root, og det er
     derfor fejlen overlevede sin egen rettelse. Værn:
     tests/test_css_accent_scope.py.

     🔴 --accent-bright ER FJERNET HERFRA, 19-08-2026. Den stod ogsaa laengere
     nede i denne fil som designets eget tal (#43E4E4), og TO BLOKKE af samme
     selektor er to hensigter hvor den sidste vinder i tavshed — praecis den
     defekt --card-top havde. Vaern:
     test_css_token_dubletter.test_intet_token_deklareres_i_TO_forskellige_blokke.

     Den nedre blok vandt, og grunden er maalt dér: formlen
     `color-mix(--accent 70%, white)` kan STRUKTURELT ikke ramme sit eget
     maaltal — at blande med hvid goer farven lysere og MINDRE maettet, mens
     #43E4E4 er lysere og MERE maettet. Fire prototype-afvigelser haenger paa
     den ene token (--card-top, --grad-btn, --num-glow, --glow). */
  /* §24.2 CC — app-baggrundens radiale glød i MØRK (0d). Static teal-fallback
     FØR color-mix (white-label-sikker; base = var(--bg-app) = #081320). */
  --bg-grad:radial-gradient(1200px 700px at 78% -8%,rgba(43,179,184,.16),transparent 60%),radial-gradient(900px 600px at 8% 108%,rgba(30,150,176,.12),transparent 55%),var(--bg-app);
  /* 🔴 TO stop fra TO tokens, som prototypen. Dens gl0ed er
     rgba(43,179,184,.16) (= #2BB3B8 = --teal) og rgba(30,150,176,.12)
     (= #1E96B0 = --blue) — to FORSKELLIGE kilder, praecis som
     --grad-btn. Vi udledte BEGGE af var(--accent), saa fallbacken sagde
     teal mens afl0eseren malede accent. Samme fejlform, mindre udslag
     (malt 5 af 255), men fallback og afl0eser skal vaere ENIGE. */
  --bg-grad:radial-gradient(1200px 700px at 78% -8%,color-mix(in srgb,var(--teal) 16%,transparent),transparent 60%),radial-gradient(900px 600px at 8% 108%,color-mix(in srgb,var(--blue) 12%,transparent),transparent 55%),var(--bg-app);
  --ink-900:#EAF2F8; --ink-800:#DEE9F1; --ink-700:#C6D6E2; --ink-600:#AFC2D2;
  /* 🔴 --ink-500 (MOERK) LOEFTET #7d94a9 -> #96adc0 (26-09-2026, spor
     appkontrast). Huset har selv skrevet rettelsen ned tre steder
     (test_dark_kontrast ALLOW_TPL/ALLOW_HOVER: «rettes ved et token-bump af
     --c-neutral, ikke lokalt»). #7d94a9 bestod kun paa --bg-panel (4,90)
     og faldt paa husets egne tonede flader — maalt paa pixels 26-09:
         --c-torp-bg #17323f  4,27   /notifications, /kasse, /sms
         accent-soft #174052  3,53   /abonnementer/forecast «nu»-cellen
         --ink-100   #24374a  3,88   pladsholdere, vf-trin
     #96adc0: 4,78 / 5,78 / 5,25 — og 6,62 paa panelet. Stadig under
     --ink-2 #9DB6C8, saa hierarkiet ink-2 > ink-500 staar.
     --c-neutral (rgb-tripel) er SAMME farve og SKAL flyttes med.
     Vaern: tests/test_app_kontrast_flader_browser.py + test_dark_kontrast. */
  --ink-500:#96adc0; --ink-300:#3a5268; --ink-200:rgba(197,210,221,.18);
  --ink-100:rgba(197,210,221,.10); --ink-50:#0B1B2B;
  /* ── 0e KOMPLET TOKEN-PORT (MØRK) — se forta-core.css-noten. Brand-tonede
     literals → color-mix(var(--accent-bright)…) m. static fallback FØR. ────── */
  --panel:linear-gradient(180deg,rgba(21,42,63,.92),rgba(13,30,47,.92));
  --panel-solid:#0E2233;
  --border:rgba(120,190,210,.16); --border-strong:rgba(120,200,220,.30);
  --ink:#EAF5F9; --ink-2:#9DB6C8; --ink-3:#63809A;
  --glow:0 0 0 1px rgba(120,200,220,.10),0 18px 44px -20px rgba(0,0,0,.75),0 0 60px -30px rgba(43,179,184,.5);
  /* 🔴 Tredje skygge kommer fra --teal, ikke --accent-bright. Prototypens
     vaerdi er rgba(43,179,184,.5) = #2BB3B8 — og vores egen statiske
     fallback ovenfor er ordret den. Afl0eseren pegede paa #43E4E4 og
     malede 34,114,114 hvor designet vil have 22,90,92. Fallback og
     afl0eser var altsaa uenige om HVILKEN farve gl0eden har. */
  --glow:0 0 0 1px rgba(120,200,220,.10),0 18px 44px -20px rgba(0,0,0,.75),0 0 60px -30px color-mix(in oklab,var(--teal) 50%,transparent);
  --shadow:0 20px 50px -24px rgba(0,0,0,.8);
  --shadow-float:0 24px 60px -20px rgba(0,0,0,.85);
  --chip:rgba(255,255,255,.04); --chip-bd:rgba(150,190,210,.16);
  --card-top:linear-gradient(90deg,transparent,rgba(67,228,228,.6),transparent);
  --card-top:linear-gradient(90deg,transparent,color-mix(in oklab,var(--accent-bright) 60%,transparent),transparent);
  --num-glow:0 0 22px rgba(67,228,228,.45);
  --num-glow:0 0 22px color-mix(in oklab,var(--accent-bright) 45%,transparent);
  --tbl-hover:rgba(43,179,184,.07);
  /* Samme rettelse som --glow: fallbacken er rgba(43,179,184,.07) =
     #2BB3B8 = --teal, saa afl0eseren skal pege paa --teal og ikke paa
     --accent-bright (#43E4E4). Malt forskel var kun 3 af 255 — ved 7%
     alfa ses den ikke — men fallback og afl0eser skal vaere enige om
     HVILKEN farve raekke-hoveret har, ikke tilfaeldigvis ligne hinanden. */
  --tbl-hover:color-mix(in oklab,var(--teal) 7%,transparent);
  --grad-btn:linear-gradient(135deg,#1E96B0,#2BB3B8 55%,#43E4E4);
  /* 🔴 TRE stop fra TRE tokens. Prototypens gradient er
     linear-gradient(135deg,#1E96B0,#2BB3B8 55%,#43E4E4) — altsaa
     --blue, --teal og --teal-bright, tre forskellige kilder. Vi udledte
     BEGGE vores stop af --accent, og saa laenge de haenger paa ét token
     kan de ikke begge vaere rigtige: da --accent skiftede til #31C7CC,
     blev foerste stop MERE forkert (matchede #1E96B0 foer). Vi manglede
     ogsaa et stop helt — proto har fire farver, vi havde tre. */
  --grad-btn:linear-gradient(135deg,var(--blue),var(--teal) 55%,var(--accent-bright));
  /* ── STATUSFARVER: PROTOTYPENS, BESLUTTET AF ANDREAS 15-08-2026 ──────────
     "Vi holder os til Prototypens farver. Synes de er fine."
     Prototypens --g-green/--g-amber/--g-red. KUN i mørk: prototypen
     definerer dem i sin `:root` med ÉN værdi for begge modes og slipper
     afsted med det, fordi den aldrig renderer lys. Vores lyse værdier
     bliver stående — målt ville prototypens amber ramme 2,12:1 på hvid,
     og gul tekst på hvid er ikke en designafvigelse, det er ulæseligt.

     🔴 PRISEN, SKREVET NED FREM FOR SKJULT. Marginen mod AA's 4,5:1 falder
     mærkbart i mørk. Målt mod vores to mørke flader:

                       --bg-app #081320   --bg-panel #12263A
         grøn #18A46C       5,84:1              4,81:1   ← kun 0,31 over
         amber #E0A93E      8,82:1              7,27:1
         rød  #E65F58       5,46:1              4,50:1   ← præcis på grænsen

     Til sammenligning lå de gamle værdier på 9,43-10,07:1 på panelet.
     Begge består, men en fremtidig ændring af --bg-panel kan skubbe grøn og
     rød under. Ændres panel-fladen, SKAL de to genberegnes.

     🔴 RØD ER JUSTERET, IKKE OVERTAGET RÅT. Prototypens #E5564E giver
     4,23:1 på vores --bg-panel (#12263A) — under grænsen. Vores panel er
     lysere end prototypens (#0E2233), så samme farve klarer sig dårligere
     her. #E65F58 er samme kulør og mætning med lysheden løftet 0,022 i HSL
     — 13,5 af 441 i RGB-afstand fra prototypens, altså visuelt den samme
     røde, men den rammer 4,50:1. Alternativet var en navngiven undtagelse i
     kontrast-værnet; en justering på 3% af farverummet er billigere end et
     hul i porten.

     -bg-tonerne er urørte: --green-bg er allerede rgba(24,164,108) =
     prototypens grønne.

     🔴 GRØN OG RØD ÆNDRET AF ANDREAS 24-09-2026 («2 ret»). Beslutningen
     ovenfor fra 15-08 er OMGJORT for de to — den står, så vendingen kan ses.
     Tallene ovenfor målte teksten mod PANELET; en pille lægger sin egen
     tonede flade ovenpå (--green-bg/--red-bg α .16), og «parret er hele
     målingen». Målt på malede pixels 24-09 (rapporter/pillefarver/,
     hyppigste pixel under pillen, mørkt tema, 1400 + 393, ti flader):

                       værste pilleflade      på --bg-panel
         grøn #18A46C       3,83                 4,81     🔴 falder på pillen
         grøn #1AB577       4,62                 5,81     ← NY
         rød  #E65F58       3,99                 4,50     🔴 falder på pillen
         rød  #E9726C       4,60                 5,20     ← NY

     Samme kulør og mætning, lysheden løftet ~0,04 i HSL. Amber (5,43) og
     info (6,99) bestod på samme måling og er urørte. -bg og -bd var urørte
     til 26-09 (opgaven rettede KUN tekstfarven).
     🔴 -bg OG -bd FØLGER NU TEKSTENS KULØR (designvalg 26-09-2026, Andreas
     via forta-56: «gå med dine anbefalinger»), så pillen er én kulør. Hed
     indtil 26-09: green-bg rgba(24,164,108,.16), red-bg rgba(214,69,65,.16),
     green-bd rgba(24,164,108,.32), red-bd rgba(230,95,88,.32).
     ⚠️ ALFAEN PÅ -bg ER SÆNKET, OG DET ER MÅLT, IKKE SMAG. Den nye kulør er
     lysere; ved samme α .16 bliver pillens flade lysere, og teksten falder:
     forudsagt på de værste flader grøn 4,62 → 4,45 og rød 4,60 → 4,22. Med
     grøn .13 og rød .09 er fladen ikke lysere end før. Målt på malede
     pixels (rapporter/designvalg/LEVERANCE.md §4). Hæver nogen alfaen igen,
     SKAL pillerne måles om. Kanten (-bd) er ikke tekst og beholder α .32.
     ⚠️ Lysere token = MINDRE kontrast for hvid ovenpå. To steder maler
     hvidt på --green-tx/--red-tx; de læser nu --on-status-fill (nedenfor). */
  --green-bg:rgba(26,181,119,.13); --green-tx:#1AB577;
  --amber-bg:rgba(240,180,60,.14); --amber-tx:#E0A93E;
  --red-bg:rgba(233,114,108,.09);  --red-tx:#E9726C;
  --info-bg:rgba(47,169,196,.16);  --info-tx:#7FD4E4;
  /* BS-pillen: dybere, blåere end info-cyanen (se forta-core.css --bs-bg). */
  --bs-bg:rgba(64,110,230,.30);    --bs-tx:#B2C8FF;
  /* Tekst/glyf der males PÅ --green-tx/--red-tx som fylde (sidebarens
     forfaldne-tæller, checklistens flueben). Hvid gav 2,96 på #E9726C og
     2,65 på #1AB577 (flueben er grafik, 3:1) — og hvid på den gamle røde var
     allerede 3,42. Mørk blæk: 6,31 og 7,05. Lyst tema har ingen definition
     og falder tilbage til #fff (6,54 på #B3261E) — urørt. */
  --on-status-fill:var(--tekst-paa-lys-accent);
  /* Samme greb for sidebarens info-taeller (--teal-400-fylde): --ink-900
     inverterer til lys i moerk og gav 1,82:1. Tilfoejet 24-09 efter
     dirigentens bestilling; lyst tema har ingen definition (-> --ink-900). */
  --on-info-fill:var(--tekst-paa-lys-accent);
  /* forta-core@1.1: semantik-pille-kanter i dark (dæmpede accent-toner). */
  /* Kanterne FOELGER tekstfarverne. Samme alfa (.32), ny kulOer — ellers
     stod #18A46C-tekst i en #4ADE9C-kant fra den gamle palet. */
  --green-bd:rgba(26,181,119,.32); --amber-bd:rgba(224,169,62,.32);
  --red-bd:rgba(233,114,108,.32);

}
/* CRM-accent-dark (accent-glow uændret — primær-knap-gradienten bevares).
   §23/10b (K3): accenterne AFLEDES nu af var(--accent) via color-mix, så en
   white-label-tenant med egen --accent får et sammenhængende mørkt tema — ingen
   hardcodede Torp-teal-værdier. STATISK fallback-linje FØR hver color-mix (de
   nuværende værdier) → motorer uden color-mix() beholder dagens udseende. For
   Torps --accent (#1E96B0) er color-mix-resultatet ≈ de gamle hex (umærkelig). */
body.dark{
  /* 🔴 53 % MED ET LOFT PAA L >= 0,35 — APP-BESLUTNING ⑤ (23-09-2026).
     Andreas 23-09: «vi goer alt efter dine anbefalinger». Den gamle ordlyd
     staar herunder, fordi en paastand om et TAL skal kunne ses vende:

         GAMMEL: «45 %, IKKE 55 % — OG TALLET ER MAALT, IKKE VALGT
                 (20-08-2026).» 45 % beskar ALLE accenter for de moerkes
                 skyld: 151 af 899 faldt ved 55 %, alle moerke.

     Nu: forholdet haeves til 53 %, og de moerke accenter holdes ude af et
     LOFT i stedet — `core/accentloft.py`, `L_MIN = 0,35` (OKLCH L), og
     `klamp_ui_accent` loefter en accent under loftet med kulør bevaret.
     Maalt 23-09 med vaernets egen blander: 53 % bestaar AA for 0 faldne af
     780 (vaernets gitter fra L 0,35) og af 96.958 (fint gitter, C op til
     0,25, hue i trin af 5°); hoejeste bestaaende forhold er 53,5 %. Uden
     loftet falder 110 af 899 ved 53 %. DE TO TAL ER ÉT PAR.
     Vores turkis #31C7CC (L 0,758) er langt over loftet og roeres ikke:
     soft-tx paa soft 8,20 -> 7,72 · link paa panel 11,35 -> 10,69 · link
     paa app 13,78 -> 12,97.

     ⚠️ I DAG SAETTER INGEN TENANT `--accent` i app'en — den er statisk.
     Loftet er en KONTRAKT for den dag white-label-accenten kommer: vejen
     dertil SKAL gaa gennem `klamp_ui_accent`. Tenantens dokumentfarve
     (`companies.accent_farve`) er IKKE omfattet: den blandes aldrig mod
     hvid, og husets standard #0C2237 (L 0,246) er bevidst moerk.

     Aarsagen til at moerke accenter falder er uaendret: BEGGE sider af
     parret afledes af --accent — teksten er accent blandet mod hvid, fladen
     accent ved 16 % over panelet. En moerk accent goer teksten moerkere
     UDEN at goere fladen lysere.

     🔴 DE TO TOKENS AENDRES SAMMEN. De ER samme formel; rettes kun den ene,
     holder to identiske formler op med at vaere det, og den naeste der laeser
     dem kan ikke se hvilken der er rigtig. --accent-link har 67 forbrugs-
     steder mod --accent-soft-tx' 20 — den store flade er DEN.

     🔴 RESERVERNE ER REGNET AF SAMME FORMEL: #31C7CC ved 53 % mod hvid =
     #a4e2e4. En reserve bygget paa et andet forhold end linjen efter den,
     tegner en anden farve i en gammel browser end i en ny.

     Vaern: tests/test_accent_soft_tx_formel.py — den regner color-mix efter
     og maaler den FAKTISKE farve, og den laeser `L_MIN` fra
     core/accentloft.py. test_dark_kontrast kan det IKKE: dens _resolve slaar
     var(--x) op i en haandholdt tabel af reserve-hexe og springer rgba med
     alfa < .6 over. */
  --accent-soft:rgba(49,199,204,.16);
  --accent-soft:color-mix(in oklab, var(--accent) 16%, transparent);
  --accent-soft-tx:#a4e2e4;
  --accent-soft-tx:color-mix(in oklab, var(--accent) 53%, white);
  --accent-link:#a4e2e4;
  --accent-link:color-mix(in oklab, var(--accent) 53%, white);
}
/* §24 COMMAND CENTER — surface-tokens (MØRK).
   🔴 RETTET 19-08-2026. Her stod at --accent-strong/--accent-bright IKKE
   redefineres, fordi de er "rene funktioner af var(--accent), mode-uafhængige,
   og arves fra forta-core.css :root". Begge led var forkerte, og filen
   modsagde allerede sig selv: --accent-bright ER redefineret i body.dark
   ovenfor. En ren funktion af var(--accent) arves netop IKKE — den opløses paa
   :root med den lyse accent, saa "mode-uafhængig" blev til "laast til lys".
   Begge staar nu i body.dark. Kun de flade-tokens der har en anden MØRK værdi
   staar herunder.

   🔴 --card-top STOD OGSÅ HER INDTIL 17-08-2026, OG DET VAR EN DUBLET.
   Den er deklareret i forvejen i body.dark-blokken ovenfor (linje 71-72) med
   `color-mix(in oklab,var(--accent-bright) 60%,transparent)` — samme formel som
   dens naboer --glow og --num-glow, der begge afledes af --accent-bright.
   Udgaven her brugte `color-mix(in oklab,var(--accent) 55%,white) 50%`, som er
   --accent-links formel, og fordi den stod SENERE vandt den i tavshed.

   To body.dark-blokke der begge sætter samme token er to hensigter, hvoraf
   den ene er usynlig — klammebalancen er sand, og CSS'en er gyldig, så intet
   værktøj sagde fra. Værnet er nu
   tests/test_css_token_dubletter.py::test_intet_token_deklareres_i_TO_forskellige_blokke.

   🔴 FJERNELSEN ÆNDRER DEN MALEDE FARVE. Den forkerte vandt, så efter denne
   rettelse males --card-top af --accent-bright-udtrykket. Det er hensigten
   (blok 1 er den der hører sammen med resten af mørk-paletten), men det er
   ikke en kosmetisk oprydning — se SVAR-afstemning-cardtop.md. */
body.dark{
  --bg-panel-2:rgba(255,255,255,.03);
  /* 🔴 ALIAS-TOKENS SKAL GENTAGES HER — de arves IKKE.
     forta-core.css :root har `--panel-2:var(--bg-panel-2)`, `--teal-100`/
     `--teal-200`:var(--accent-soft) og `--blue-700`:var(--accent-link).
     Et custom property opløses i den kontekst hvor det DEFINERES, altså på
     :root — hvor kilderne stadig er de LYSE værdier. Overstyringen her på
     body.dark er en EFTERKOMMER og nåede derfor aldrig frem.
     Målt 15-08-2026 i Chromium: --bg-panel-2 skiftede korrekt til
     rgba(255,255,255,.03), mens --panel-2 blev stående på rgb(235,244,246)
     i BEGGE temaer. Samme for de tre øvrige.
     Fejlen er usynlig for en sammenligning af definitionerne — de MATCHER;
     det er kun opløsningen der afslører den. Vagten er
     test_d11_dark_theme.test_intet_alias_token_er_doedt_i_moerk_tilstand. */
  --panel-2:var(--bg-panel-2);
  --teal-100:var(--accent-soft);
  --teal-200:var(--accent-soft);
  --blue-700:var(--accent-link);
  /* 🔴 FIRE MERE, FUNDET 19-08 VED AT FLETTE VAERNET SAMMEN MED cc's KILDE.
     fix/doede-alias-tokens-moerkt rettede de fire ovenfor — men den blev
     forgrenet foer cc fik disse i forta-core.css' :root (linje 55-56 og 122).
     Samme defekt, samme form. De staar HER og ikke i body.dark-blokken oeverst
     i filen, hvor grenen havde lagt sine: to body.dark-blokke der saetter
     samme token er to hensigter hvoraf den ene er usynlig, og
     test_css_token_dubletter blev roed af netop det.
       --teal-400      BRUGES 2 steder (forta-core.css:1090 og :1139)
       --teal-300      0 forekomster — rettes med, saa familien er ensartet
       --blue-500      0 forekomster — do.
       --accent-strong BRUGES 8 steder. ⚠️ DEN ENESTE AENDRING I HELE
                       LANDINGEN DER FLYTTER EN FARVE NOGEN KAN SE: den males
                       i dag af en moerknet LYS accent i moerkt tema. Husets
                       fortilfaelde er soeskende-tokenet --accent-bright, der
                       allerede staar redefineret laengere nede i denne blok. */
  --teal-400:var(--accent);
  --teal-300:var(--accent);
  --blue-500:var(--accent);
  /* 40 %, ikke 55 % — se den fulde maaling ved samme token i
     forta-core.css. Kort: kontrakten er hvid tekst, og 55 % faldt
     for 163 af 899 accenter. De tre filer skal holdes ENS. */
  --accent-strong:color-mix(in oklab,var(--accent) 40%,#06222E);
  /* 🔴 DESIGNETS EGET TAL, IKKE EN AFLEDNING.
     forta-core.css:124-125 har to deklarationer af --accent-bright: først
     #43E4E4 (intentionen), så `color-mix(in oklab,var(--accent) 70%,white)`
     — og den sidste vinder i enhver browser der kan color-mix. Hexen har
     derfor været dokumentation og ikke adfærd.
     Formlen kan STRUKTURELT ikke ramme sit eget måltal: at blande med hvid
     gør farven lysere og MINDRE mættet, mens #43E4E4 er lysere og MERE
     mættet. Målt i mørk: 114,181,200 hvor designet vil have 67,228,228.
     Fire prototype-afvigelser hænger på den ene token — --card-top,
     --grad-btn, --num-glow og --glow bruger alle var(--accent-bright).
     Den står HER og ikke i core, fordi ADMIN-appen har sin egen accent
     (#64748B), læser core og renderer tokenet som --sb-active-tx (aktiv
     nav-tekst). En literal i core ville gøre admins nav-tekst cyan. Admin
     læser aldrig denne fil (målt: nul referencer i admin/templates/base.html).
     Der findes ingen tenant med egen accent — intet farvefelt i skemaet —
     så formlen bevarer ikke en tenant, den bevarer admin. */
  --accent-bright:#43E4E4;
  /* Prototypens to oevrige kilde-tal. De er ikke komponenter — de er
     de tal --grad-btn og --glow er bygget af, og prototypen holder dem
     som selvstaendige tokens netop derfor. Literale af samme grund som
     --accent-bright ovenfor: i moerk er der kun én forbruger, og admin
     laeser aldrig denne fil. */
  --blue:#1E96B0;
  --teal:#2BB3B8;
  /* --sb-active-tx er selv et alias af --accent-bright og bor i core's
     :root — altså samme dødvande. Da linjen ovenfor flyttede kilden, blev
     aliaset hængende på den lyse værdi, og vagten
     test_intet_alias_token_er_doedt_i_moerk_tilstand fangede det med det
     samme. Den skal gentages her af samme grund som de fire ovenfor. */
  --sb-active-tx:var(--accent-bright);
  --elev-card:0 20px 50px -24px rgba(0,0,0,.8);
  --elev-float:0 24px 60px -20px rgba(0,0,0,.85);
  /* 🔴 --card-top er FJERNET herfra, ikke rettet. Den stod ALLEREDE korrekt
     længere oppe i denne fil (afledt af --accent-bright 60% transparent, som
     prototypens rgba(67,228,228,.6)). Denne blok satte den igen med
     --accent-soft-tx's formel — `var(--accent) 55%, white` — og vandt, fordi
     den står senere. Malt forskel: 105 af 255 på den kraftigste kanal, altså
     en anden farve og ikke en nuance.
     To deklarationer i SAMME blok er det bevidste fallback-mønster. To
     BLOKKE er to hensigter, hvor den ene er usynlig for den der læser den
     første. Vagten er
     test_d11_dark_theme.test_intet_token_deklareres_i_TO_forskellige_blokke. */
  --bd-control:rgba(197,210,221,.30);   /* §23/10d kontrol-kant-niveau i mørk */
}
/* Dark række-hover afledt af accent (subtil teal-anelse) — fallback først. */
body.dark .data-table tbody tr:hover{
  /* 🔴 rgba(49,199,204,.08) = #31C7CC, IKKE #1E96B0 (rettet 21-08-2026).
     Reserven var regnet af tema-lagets LYSE accent, mens color-mix-linjen
     under den regner paa var(--accent) — som moerk tilstand fik sat til
     #31C7CC 15-08. Samme foraeldelse som --accent-soft/-tx/-link havde:
     reserven blev aldrig regnet om da accenten skiftede, saa en gammel og en
     ny browser tegnede to forskellige hover-toninger.
     KOSMETISK, ikke en AA-defekt: raekketeksten (--ink) staar paa 12,49:1 mod
     den gamle og 11,89:1 mod den nye — begge langt over 4,50. Rettet fordi en
     reserve der ikke matcher sin formel ikke ER en reserve, ikke fordi noget
     var ulaeseligt. Vaern: test_enhver_literal_reserve_er_regnet_af_sin_egen_
     formels_accent. */
  background-color:rgba(49,199,204,.08);
  background-color:color-mix(in oklab, var(--accent) 8%, transparent);
}

/* ── 2. Tailwind-palettens RGB-kanaler → dark. Ét sted flipper HELE
   torp/surface/border/neutral/success/warning/danger-fladen (utilities +
   @apply-komponenter). Værdier mapper 1:1 til §20-semantikken. ──────────── */
body.dark{
  --c-torp-navy:234 242 248;   /* overskrifter/strong → ink-900 */
  --c-torp-blue:127 212 228;   /* links/accent → accent-link (cyan) */
  --c-torp-light:127 212 228;
  --c-torp-bg:23 50 63;        /* info-/avatar-flade (subtil teal-navy) */
  --c-surface:18 38 58;        /* kort/paneler/inputs → bg-panel */
  --c-border:39 56 72;         /* subtil kant */
  --c-border-2:58 82 104;      /* stærkere kant → ink-300 dark */
  --c-success:74 222 156;      /* green-tx */
  --c-success-bg:19 46 40;     /* dæmpet grøn flade */
  --c-warning:245 197 99;      /* amber-tx */
  --c-warning-bg:46 41 26;     /* dæmpet amber flade */
  --c-danger:255 138 132;      /* red-tx */
  --c-danger-bg:58 30 30;      /* dæmpet rød flade */
  --c-neutral:150 173 192;     /* labels/sekundær → ink-500 (#96adc0) */
  --c-neutral-strong:222 233 241; /* body-tekst → ink-800 */
  --c-neutral-bg:26 45 64;     /* subtil neutral flade */
}

/* ── 3. Base-flade + tekst. body har @apply bg-white text-neutral-strong;
   bg-white er Tailwind-kerne-hvid (ikke en token) → sæt eksplicit. ──────── */
body.dark{ background-color:var(--bg-app); color:var(--ink-800); }

/* ── 4. KPI-gradient-tekst → almindelig lys tekst i dark (læsbarhed).
   Sparklines beholder accent (urørt). ──────────────────────────────────── */
body.dark .kpi-value{ color:var(--ink-900); }
body.dark .kpi-value.kpi-value-grad{
  background:none; -webkit-background-clip:border-box; background-clip:border-box;
  color:var(--ink-900); -webkit-text-fill-color:var(--ink-900);
}

/* ── 5. bg-white-flader (Tailwind-kerne-hvid) → panel. Både direkte utility
   OG @apply-komponenter der bygger på bg-white. text-white forbliver hvid
   (fx primær-knap-tekst på gradient). ──────────────────────────────────── */
body.dark .bg-white,
body.dark .form-input, body.dark .form-select, body.dark .form-textarea,
body.dark .form-checkbox, body.dark .form-radio,
body.dark .btn-secondary, body.dark .btn-danger-outline, body.dark .filter-pill,
body.dark .modal-container, body.dark .forta-dialog,
body.dark .inline-edit-input, body.dark .inline-edit-popover,
body.dark .list-action, body.dark .notif-dropdown,
body.dark .print-labels-menu, body.dark .sub-combobox-dropdown,
body.dark .topbar-tablet-menu, body.dark .topnav,
body.dark .topnav-mobile-menu, body.dark .topnav-more-menu,
body.dark .activity-event, body.dark .pos-amount-input,
body.dark .pos-btn-card, body.dark .pos-btn-cash,
body.dark .pos-btn-mobilepay, body.dark .pos-btn-cancel,
body.dark .pos-btn-secondary{
  background-color:var(--bg-panel);
}
/* Tilbudskomposerens send-knap: --grad-btn er den LYSE turkis her, saa
   teksten er moerk (5,38 / 7,34 / 11,98). Lyst tema har hvid i kernen. */
body.dark .lyn-send-primaer{ color:var(--tekst-paa-lys-accent); }
/* @tailwindcss/forms (strategy:'base') giver ALLE rå form-kontroller en hvid
   flade — fang de stragglers der ikke bruger .form-*-klasserne (dato/tid/tal),
   men rør IKKE afkrydsning/radio/farve (egne accent-flader). */
body.dark input:not([type=checkbox]):not([type=radio]):not([type=color]):not([type=range]):not([type=file]),
body.dark select, body.dark textarea{
  background-color:var(--bg-panel); color:var(--ink-800);
}
/* §23/10d/M15: kontrol-kanter .30 i dark (tydeligere felt-afgrænsning). */
body.dark .form-input, body.dark .form-select, body.dark .form-textarea,
body.dark input:not([type=checkbox]):not([type=radio]):not([type=color]):not([type=range]):not([type=file]),
body.dark select, body.dark textarea{
  border-color:rgba(197,210,221,.30);
}
/* Input-tekst/placeholder på de mørke felt-flader. */
body.dark .inline-edit-input{ color:var(--ink-800); }
body.dark .form-input::placeholder, body.dark .form-textarea::placeholder,
body.dark .search-input::placeholder, body.dark input::placeholder{ color:var(--ink-500); }

/* ── 6. Brand-fyldte kontroller: undgå hvid tekst på nu-lys cyan i dark.
   Hold dem på den (uændrede) mættede teal-accent. ──────────────────────── */
body.dark .save-bar, body.dark .filter-pill-selected, body.dark .topnav-mark{
  background-color:var(--accent);
}
/* §24.3 håndhævet: hvid tekst PÅ --accent måler 3,47:1 — under AA. Samme
   mørke ink som primærknappen (#08131F) giver 5,38:1.
   🔴 #08131F ER IKKE --bg-app. Målt 23-08: --bg-app er #081320 (linje 40).
   Kommentaren her og nedenfor sagde «svarende til --bg-app», og det er en
   PÅSTAND om at literalen følger tokenet — den gør den ikke. Forskellen er
   ét trin i blå og usynlig; det farlige er at en senere ændring af --bg-app
   ikke flytter denne farve, mens kommentaren lover at den gør.
   Literalen står 6 gange i denne fil og også i forta-mobil.css og
   forta-kundeside.css. At lade den følge tokenet er et selvstændigt stykke
   arbejde over tre stylesheets — ikke en kommentarrettelse.
   Reglen "hvid tekst på lys teal er forbudt" gælder ALLE accent-fyldte
   kontroller, ikke kun .btn-primary. */
body.dark .filter-pill-selected{ border-color:var(--accent); color:var(--tekst-paa-lys-accent); }
body.dark .save-bar, body.dark .save-bar .save-bar-text,
body.dark .topnav-mark{ color:var(--tekst-paa-lys-accent); }
/* §24.3 CC·MØRK: primær = LYS teal-gradient (accent→accent-bright) med MØRK
   tekst — ink #08131F (en literal, IKKE --bg-app; se noten ovenfor). Hvid tekst på lys teal er
   FORBUDT (består aldrig §23). AA målt pr. gradient-stop for Torps --accent:
   mørkeste stop var(--accent) #1E96B0 mod #08131F ≈ 5,4:1 (AA ✓); lyseste stop
   (accent-bright) langt højere. Solid fallback var(--accent) FØR gradienten så
   mørk tekst aldrig lander på transparent. Kun CRM loader forta-dark.css (admin
   gør ikke) → ændringen er CRM-scoped; erstatter den tidligere dybblå #184365. */
body.dark .btn-primary{
  background-color:var(--accent);
  background-image:linear-gradient(135deg,var(--accent),var(--accent-bright));
  background-image:linear-gradient(135deg,var(--accent) 0%,color-mix(in oklab,var(--accent) 45%,var(--accent-bright)) 55%,var(--accent-bright) 100%);
  color:var(--tekst-paa-lys-accent);
  box-shadow:0 10px 24px -12px rgba(43,179,184,.5);
}
/* 🔴 SAMME FÆLDE SOM I app.src.css, ÉT LAG DYBERE. Skyggen ovenfor sluger
   fokusringen, og her er det specificitet: `body.dark .btn-primary` (0,2,1)
   slår `.btn-primary:focus-visible` (0,2,0), så komponentens egen
   fokus-regel når ikke frem i mørkt tema. Målt i drift 21-08-2026: efter at
   lys var rettet til 34/0 stod mørk stadig på «INGEN RING; outline
   transparent» for netop denne knap.
   Ringen gentages derfor her, med samme tre lag som `:focus-visible` i
   app.src.css: 1,5px accent, 3px glød, 4,5px var(--ink). I mørkt tema er
   --ink #EAF5F9 (mod #0C2231 i lyst), så yderlaget bærer i BEGGE temaer uden
   at nogen skal vælge en farve. Rører man skyggen ovenfor, skal den også med
   her.

   🔴 OG DEN DEKORATIVE SKYGGE ER FLYTTET BAGERST — se den lange note ved
   `.btn-primary:focus-visible` i app.src.css. Første box-shadow-lag tegnes
   øverst; stod `0 10px 24px -12px` forrest, lå den oven på hele ringen.
   Målt differentielt på pixels i dette træ: mørkt tema 7,83 → 15,66. */
body.dark .btn-primary:focus-visible{
  box-shadow:0 0 0 1.5px var(--accent),
             0 0 0 3px var(--accent-glow),
             0 0 0 4.5px var(--ink),
             0 10px 24px -12px rgba(43,179,184,.5);
}
body.dark .btn-primary:hover{ filter:brightness(1.05); }

/* ── 6c. AFKRYDSNING/RADIO: HUSETS ACCENT MED MOERKT MAERKE ───────────────
   Maalt 20-08-2026 paa malte pixels: et afkrydset felt stod
   rgb(37,99,235) = Tailwind blue-600 med hvidt flueben. Det BESTAAR AA
   (5,17:1) — men farven er Tailwinds, ikke Fortas.

   🔴 OG DEN NAIVE RETTELSE VILLE HAVE BRUDT §23. Tailwind maler fladen som
   `background-color: currentColor` og fluebenet som et `background-image`
   med `fill='%23fff'` HAARDKODET i en data-URI. De to sidder altsaa hvert
   sit sted, og flytter man kun fladen til turkis, falder maerket fra 5,17
   til 2,06:1 — maalt i browseren paa netop det mellemtrin, ikke regnet.
   Det er praecis den kombination denne fil selv kalder FORBUDT.

       flade                      hvidt maerke   #08131F
       Tailwind blue-600 #2563EB      5,17         3,62
       Fortas --accent   #31C7CC      2,06 🔴      9,06   <- valgt
       --accent-bright   #43E4E4      1,56 🔴     11,98

   Derfor flyttes BEGGE: fladen til var(--accent), og maerket til den samme
   url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2308131F' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E") med husets moerke ink #08131F — samme valg som primaerknappen og
   Scan-knappen allerede har truffet. Resultat 5,17 -> 9,06:1.

   Lyst tema er UROERT: dér er blue-600 + hvid stadig 5,17:1 og bestaar.
   Vagt: tests/test_app_afkrydsning_accent.py */
body.dark input[type="checkbox"]:checked{
  color:var(--accent);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2308131F' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E");
}
body.dark input[type="radio"]:checked{
  color:var(--accent);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2308131F'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");
}

/* ── 7. Rå-hex-rester (ikke Tailwind-tokens): hjælpe-tooltip-chip. ──────── */
body.dark .help-tip{ background-color:var(--ink-200); color:var(--ink-700); }

/* ── 8. Modaler/paneler: dæmp tunge slag-skygger på mørk flade (kant bærer
   adskillelsen). ───────────────────────────────────────────────────────── */
body.dark .modal-container, body.dark .forta-dialog{
  box-shadow:0 24px 60px rgba(0,0,0,.5); border:1px solid var(--bd-panel);
}
/* <dialog> faar `color: CanvasText` (sort) af browserens standardark og ARVER
   derfor ikke body.dark's --ink-800. Maalt 04-10 (spor boksafvis): i mørkt tema
   var dialogens <p> og en knaps tekst rgb(0,0,0) paa --bg-panel — kun det der
   har sin egen farve (h3, form-label, text-neutral) kunne laeses. */
body.dark .forta-dialog{ color:inherit; }
body.dark .setting-card:hover{ box-shadow:none; border-color:var(--accent-soft-tx); }

/* ── 9. §23/10g/3: mørke scrollbars. Hvide OS-scrollbars lyste op som
   artefakter ved faneblade (/sms, ordre-detalje) og vandret-scrollende
   tabeller/overflow-containere. Firefox via scrollbar-color; WebKit via
   ::-webkit-scrollbar. Sidebarens egen (.side-scroll) vinder på specificitet. */
body.dark{ scrollbar-color:var(--ink-300) transparent; }
body.dark ::-webkit-scrollbar{ width:10px; height:10px; }
body.dark ::-webkit-scrollbar-thumb{ background:var(--ink-300); border-radius:6px; }
body.dark ::-webkit-scrollbar-track{ background:transparent; }
