/* ==========================================================================
   NERVE Finance — fladelag for SALGSFAKTURAEN (ADR-0030).
   Reglerne: ../../docs/UI-UX-STANDARD.md · grundlaget: ../design/nerve-finance-apple.css

   ⛔ ../design/*.css og *.js RETTES ALDRIG. De er ordret dem ADR-0005 hash-låste.
      Alt hvad en flade har brug for ud over grundlaget, står i et fladelag som
      dette — additivt, aldrig ved at redigere kilden (UI-UX-STANDARD § 1).

   § 1-3 er de samme rettelser som `kladde.css` og `debitor-kreditor.css` bærer,
   med de samme MÅLTE tal og de samme forbehold. De er GENTAGET og ikke
   importeret: et fladelag står pr. definition ved siden af sin flade. Skal de en
   dag deles, hører de i grundlaget og i en ny hash-linje i ADR-0005 — ikke i en
   tredje fil ingen af fladerne ejer.

   § 4-10 er fakturaens egne: fakturahovedet, de redigerbare linjeceller,
   beløbskæden, forudsætningslisten og bekræftelsesruden.
   ========================================================================== */

/* ── 1. Fokus ───────────────────────────────────────────────────────────────
   `:focus-visible`, ikke `:focus`. I et gitter man TASTER i, er ringen det
   eneste der siger hvilken celle der modtager tegnene. */
:root { --fokus: #0059B3; --acc-tekst: #0059B3; --btn-flade: #0071E3; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) {
  --fokus: #6FB6FF; --acc-tekst: #6FB6FF; --btn-flade: #0060C9;
}}
:root[data-theme="dark"] { --fokus: #6FB6FF; --acc-tekst: #6FB6FF; --btn-flade: #0060C9; }

a:focus-visible,
button:focus-visible,
select:focus-visible,
input:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--fokus);
  outline-offset: 2px;
  border-radius: 7px;
}
.gscroll:focus-visible { outline: 2px solid var(--fokus); outline-offset: -2px; }
.gsog input:focus,
.g thead tr.fltrow input:focus,
.pop select:focus, .pop input:focus { outline-color: var(--fokus); }

.springlink {
  position: fixed; top: -60px; left: 12px; z-index: 200;
  padding: 8px 14px; border-radius: 0 0 10px 10px;
  background: var(--chrome); color: var(--txt); font-size: 13px; font-weight: 600;
  text-decoration: none; box-shadow: var(--skygge);
}
.springlink:focus { top: 0; }

.visuelt-skjult {
  position: absolute; width: 1px; height: 1px; margin: -1px;
  padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ── 2. Kontrast ────────────────────────────────────────────────────────────
   Samme målte værdier som `kladde.css`: rød og grøn på fladefarven skal holde
   4,5:1 i BEGGE temaer. Farve står aldrig alene — statuspiller bærer ikon OG
   tekst (UI-UX-STANDARD § 5 · § 10). */
.mute { color: var(--txt-2); }

/* ── 3. Berøringsmål og smal skærm ─────────────────────────────────────────*/
@media (pointer: coarse) {
  .rbtn, .merebtn, .smalbtn, .btn, .rail button, .tree .it { min-height: 44px; }
}
@media (max-width: 1080px) {
  .tree { display: none; }
  .kpirow .kpi { flex: 1 1 140px; }
  .fakturahoved { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 780px) {
  .rail { display: none; }
  .view { padding: 12px 10px 0; }
  .bruger label { display: none; }
  .fakturahoved { grid-template-columns: minmax(0, 1fr); }
}

/* ── 4. Værktøjslinjen: enhed og »udstedes af« ─────────────────────────────
   Enhedsvalget er SYNLIGT, ikke gemt i en menu [D14]: hvilket selskab der
   fakturerer, må aldrig skulle slås op. */
.top .firma { min-width: 0; }
.enhedsvalg {
  max-width: 300px; height: 26px; padding: 0 8px;
  border: none; border-radius: 8px; background: var(--graa-flade);
  color: var(--txt); font-size: 14px; font-weight: 600; letter-spacing: -.02em;
  cursor: pointer;
}
.enhedsvalg:disabled { color: var(--txt-3); cursor: default; }
.bruger { display: flex; align-items: center; gap: 7px; margin-left: auto; }
.bruger label { font-size: 11.5px; color: var(--txt-2); white-space: nowrap; }
.bruger input {
  width: 176px; height: 26px; padding: 0 9px;
  border: none; border-radius: 8px; background: var(--graa-flade);
  color: var(--txt); font-size: 12.5px;
}
.bruger input::placeholder { color: var(--txt-3); }

/* ── 5. Sidebjælkens dokumentliste ─────────────────────────────────────────
   ⚠ SELEKTOREN ER `.tree .it.dokit`, ikke `.dokit` — grundlagets regel er
     `.tree .it` (0,2,0), og et bart `.dokit` (0,1,0) TABER. Den fejl kostede to
     runder i `kladde.css`; kuren er båret hertil MED sit forbehold (REGEL 5
     punkt 2), ikke som en løsrevet regel.
   ⛔ `flex: none` er den ANDEN halvdel. `.tree .liste` er selv en flex-søjle, så
     hver post er et flex-element med `flex-shrink: 1` og krymper mod sin
     `min-height` når listen er højere end bjælken. `height: auto` alene er ikke
     nok — det er præcis dét der blev målt 20-08-2026 (scrollHeight 58 mod
     clientHeight 31). */
.tree .it.dokit {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  height: auto; min-height: 30px; padding-top: 5px; padding-bottom: 5px;
  flex: none;
}
.dokit .d1 { display: flex; align-items: center; gap: 6px; width: 100%; }
.dokit .d1 .nr { font-variant-numeric: tabular-nums; font-weight: 600; }
.dokit .d2 {
  padding-left: 22px; font-size: 11px; color: var(--txt-3);
  font-variant-numeric: tabular-nums;
}
.tree .tomliste { padding: 14px 12px; font-size: 12px; color: var(--txt-3); line-height: 1.45; }

/* ── 6. Fakturahovedet ─────────────────────────────────────────────────────
   Kunden, datoerne og valutaen står ÅBENT over gitteret og ikke i en dialog:
   momsscenariet — og dermed om der overhovedet må stå moms på fakturaen —
   udledes af kunden, og det skal kunne ses samtidig med beløbet [D7]. */
.fakturahoved {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px 14px; margin-bottom: 12px;
}
.fakturahoved:empty { display: none; }
.fakturahoved .f {
  display: flex; flex-direction: column; gap: 3px; min-width: 0;
}
.fakturahoved label { font-size: 11.5px; color: var(--txt-2); }
.fakturahoved input,
.fakturahoved select {
  height: 30px; padding: 0 9px; border: 1px solid var(--line);
  border-radius: 8px; background: var(--chrome); color: var(--txt);
  font: inherit; font-size: 13px; min-width: 0;
}
.fakturahoved .vis {
  font-size: 13px; padding: 6px 0 0; color: var(--txt);
  font-variant-numeric: tabular-nums;
}
/* ⛔ IDENTIFIKATORER FÅR ALDRIG TUSINDTALSSEPARATOR (Christian, 22-08-2026).
   Fakturanummer, kundenummer og CVR er navne på ting, ikke beløb: »11.000«
   læses som elleve tusinde. Klassen er en markør for læseren af koden — selve
   reglen ligger i JS'en, hvor `String(x)` bruges frem for `helt(x)`. */
.fakturahoved .vis.ident,
.dokit .nr,
.kort .ident { font-variant-numeric: tabular-nums; letter-spacing: 0; }
.fakturahoved .hjaelp { font-size: 11px; color: var(--txt-3); line-height: 1.4; }

/* ── 7. Bånd ───────────────────────────────────────────────────────────────
   ⚠ Ingen advarsler uden en handling (UI-UX-STANDARD § 9). Hvert bånd her
     bærer enten et næste skridt eller et sted at læse videre. */
.baandstak { display: flex; flex-direction: column; gap: 7px; margin-bottom: 11px; }
.baandstak:empty { display: none; }
.baand {
  display: flex; gap: 9px; align-items: flex-start;
  padding: 9px 12px; border-radius: 10px;
  font-size: 12.5px; line-height: 1.45;
}
.baand svg { width: 16px; height: 16px; flex: none; margin-top: 1px; }
.baand b { font-weight: 600; }
.baand.info { background: var(--acc-soft); color: var(--acc-tekst); }
.baand.advar { background: var(--warn-bg); color: var(--warn); }
.baand.fejl { background: var(--neg-flade); color: #B3241A; }
:root[data-theme="dark"] .baand.fejl,
:root:not([data-theme="light"]) .baand.fejl { color: var(--b-forf-fg, #B3241A); }
.baand.lukket { background: var(--graa-flade); color: var(--txt-2); }

/* ── 8. Beløbskæden: Netto + Moms = Fakturabeløb ───────────────────────────
   ⛔ Tankestregen er RESERVERET: `–` betyder »ikke opgjort«, `0,00` betyder
     »opgjort til nul« (UI-UX-STANDARD § 4). Forskellen er ikke kosmetisk — et
     »0,00« i momsfeltet er en påstand om at der ikke skal moms på fakturaen. */
.kpirow .kpi.baand.tot .val { color: var(--acc-tekst); }
.kpirow .kpi .val.uopgjort,
.kpirow .kpi.baand.tot .val.uopgjort {
  font-size: 13px; font-weight: 500; color: var(--txt-3);
}
.kpirow .kpi .val.neg,
.kpirow .kpi.baand.tot .val.neg { color: #B3241A; }
:root[data-theme="dark"] .kpirow .kpi .val.neg,
:root:not([data-theme="light"]) .kpirow .kpi .val.neg { color: var(--b-forf-fg, #B3241A); }
.kpirow .kpi .hvorfor {
  margin-top: 3px; font-size: 11px; color: var(--txt-3); line-height: 1.4;
}

/* ── 9. Redigerbare celler i linjegitteret ─────────────────────────────────
   ⛔ Ydelsen er et KARTOTEKSOPSLAG, ikke et fritekstfelt: arten og momstypen
     skrives ud af ydelseskartoteket (`debitor._kraev_linje`). Et `<select>` kan
     ikke tage imod fritekst — værnet er formen, ikke en kontrol bagefter. */
.g td .cf {
  width: 100%; height: 24px; padding: 0 5px;
  border: none; border-radius: 6px; background: transparent;
  color: var(--txt); font: inherit; font-size: 12.5px;
  font-variant-numeric: tabular-nums;
}
.g td .cf::placeholder { color: var(--txt-3); opacity: 1; }
.g td .cf:hover { background: var(--graa-flade); }
.g td .cf:focus { background: var(--chrome); box-shadow: inset 0 0 0 1px var(--fokus); }
.g td .cf.tal { text-align: right; }
.g td .cf.neg { color: var(--neg); }
.g td .cf[aria-invalid="true"] { box-shadow: inset 0 0 0 1.5px var(--neg); }
.g td select.cf { cursor: pointer; }
.g td .laestcelle { font-variant-numeric: tabular-nums; }

/* ── 10. Forudsætningslisten og bekræftelsesruden ──────────────────────────*/
.detrul { overflow-x: auto; max-width: 100%; }
.krav { display: flex; flex-direction: column; gap: 8px; }
.krav .k {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 9px 12px; border-radius: 10px; background: var(--graa-flade);
  font-size: 12.5px; line-height: 1.45;
}
.krav .k svg { width: 16px; height: 16px; flex: none; margin-top: 1px; }
.krav .k.mangler { background: var(--neg-flade); color: #B3241A; }
:root[data-theme="dark"] .krav .k.mangler,
:root:not([data-theme="light"]) .krav .k.mangler { color: var(--b-forf-fg, #B3241A); }
.krav .k .naeste { display: block; margin-top: 3px; color: var(--txt-2); }
:root[data-theme="dark"] .krav .k.mangler .naeste,
:root:not([data-theme="light"]) .krav .k.mangler .naeste { color: inherit; opacity: .85; }
.krav .k .naeste { opacity: .9; }
.krav .k b { font-weight: 600; }

.postab { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.postab th, .postab td { padding: 5px 10px; text-align: left; white-space: nowrap; }
.postab th { font-weight: 600; color: var(--txt-2); border-bottom: 1px solid var(--line); }
.postab td.tal, .postab th.tal { text-align: right; font-variant-numeric: tabular-nums; }
.postab td.negtal { color: #B3241A; }
:root[data-theme="dark"] .postab td.negtal,
:root:not([data-theme="light"]) .postab td.negtal { color: var(--b-forf-fg, #B3241A); }

/* ⛔ Ruden skal kunne rummes i vinduet, og knapperne skal ALTID være synlige.
   Knaprækken står i `.modalknapper`, IKKE i grundlagets `.pop`: `.pop` er
   `position: fixed; width: 280px` — som knapholder bliver rækken en fastlåst
   280 px kasse der svæver uden for ruden. Målt i browseren 24-08-2026 på
   regnskabsfladen; formen her er `postering.js`/`postering.css`s rettede. */
.modal.bekraeft {
  width: min(680px, calc(100vw - 32px)); max-width: none;
  display: flex; flex-direction: column;
  max-height: calc(100vh - 40px);
}
.modal .modalkrop { min-height: 0; overflow-y: auto; overflow-x: hidden; }
.modal .modalknapper {
  display: flex; gap: 8px; justify-content: flex-end; align-items: center;
  flex: 0 0 auto; margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--line-2);
}
.modal .modalknapper .btn,
.modal .modalknapper .smalbtn { white-space: nowrap; }
.modal textarea {
  width: 100%; min-height: 92px; padding: 9px 11px; margin-top: 6px;
  border: 1px solid var(--line); border-radius: 9px;
  background: var(--chrome); color: var(--txt); font: inherit; font-size: 13px;
  line-height: 1.45; resize: vertical;
}
.modal .taeller { font-size: 11.5px; color: var(--txt-3); margin-top: 5px; }
.modal .taeller.forkort { color: #B3241A; font-weight: 600; }
:root[data-theme="dark"] .modal .taeller.forkort,
:root:not([data-theme="light"]) .modal .taeller.forkort { color: var(--b-forf-fg, #B3241A); }
/* Feltgruppen genbruges inde i ruden (krediteringsdatoen). Reglerne gentages
   scopet til `.modal`, fordi `.fakturahoved .f` med vilje er bundet til hovedet —
   en fælles `.f` uden scope ville ramme et hvilket som helst fremtidigt element
   med det klassenavn. */
.modal .f { display: flex; flex-direction: column; gap: 3px; margin: 10px 0; }
.modal .f label { font-size: 11.5px; color: var(--txt-2); }
.modal .f input {
  height: 30px; padding: 0 9px; border: 1px solid var(--line);
  border-radius: 8px; background: var(--chrome); color: var(--txt);
  font: inherit; font-size: 13px;
}
.modal .hjaelp { font-size: 11px; color: var(--txt-3); line-height: 1.4; }
.modal .krav { margin: 8px 0 12px; }
.modal .kvit { display: flex; flex-wrap: wrap; gap: 8px 20px; margin: 6px 0 10px; }
.modal .kvit div { font-size: 12.5px; }
.modal .kvit b { display: block; font-size: 15px; font-variant-numeric: tabular-nums; }

/* ── 12. Kundekortet ───────────────────────────────────────────────────────
   Christian, 25-08-2026: »Når man vælger en debitor så skal alle værdierne
   udfyldes så man kan se hvordan fakturaen bliver sendt. Valuta, betalingstid
   osv«. Kortet skal kunne læses som svaret på ÉT spørgsmål, og derfor står de
   fire grupper side om side frem for i en dialog man skal åbne.

   ⛔ `:not(.skjult)` er ikke pedanteri. `.kundekort` (0,1,0) og grundlagets
     `.hidden,.skjult` (0,1,0) vejer det SAMME, og fladelaget indlæses SIDST —
     så en bar `display: grid` her ville vinde på kildeorden og lade kortet stå
     tændt uden en kunde. Præcis den fejl ramte `#demoPille` og `#forsystemPille`
     24-08-2026 (UI-UX-STANDARD § 14), og husreglen derfra er ordret: enhver
     `display`-regel i et fladelag skal bære `:not(.skjult)` hvis elementet
     nogensinde kan få klassen. */
/* ⛔ KORTETS EGNE FARVER ER MÅLT, IKKE VALGT — og de er UGENNEMSIGTIGE.
   Første udgave brugte `--graa-flade` (`rgba(120,120,128,.28)`) som baggrund og
   husets `--txt-2`/`--txt-3` som tekst. Målt i browseren 25-08-2026 med alfaen
   komponeret ned på den reelle flade: etiket og note gav **4,07:1** i lyst tema
   — under UI-UX-STANDARD § 10's 4,5:1 — og gruppetitel og tankestreg **2,62:1**.
   Tokenerne er rigtige nok; de er bare målt mod `--flade`, og kortet ligger på
   en anden flade end den.

   ⚠ Baggrunden er derfor sat UGENNEMSIGTIGT til præcis den farve alfaen gav
     (lyst #E6E6E9 over #F5F5F7, mørkt #363639 over #1C1C1E). En kontrastmåling
     mod en gennemsigtig flade gælder kun så længe det der ligger BAGVED, ikke
     ændrer sig — og det er ikke et værn, det er et tilfælde (REGEL 5 punkt 1).

   Målt efter rettelsen, lyst · mørkt:
   | rolle | farve | kontrast |
   |---|---|---|
   | værdi (`--txt`) | husets | 13,51 · 11,09 |
   | etiket + note (`--kk-daempet`) | #5A5A60 · #B0B0B6 | **5,50 · 5,58** |
   | gruppetitel + tankestreg (`--kk-svag`) | #636369 · #A8A8AE | **4,79 · 5,09** |
   | foldeknap (`--acc-tekst`) | husets | 5,47 · 5,64 | */
:root {
  --kk-flade: #E6E6E9; --kk-daempet: #5A5A60; --kk-svag: #636369;
  --kk-advar: #8A5200; --kk-fejl: #A81F16;
}
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) {
  --kk-flade: #363639; --kk-daempet: #B0B0B6; --kk-svag: #A8A8AE;
  --kk-advar: #F0A03C; --kk-fejl: #FF9A92;
}}
:root[data-theme="dark"] {
  --kk-flade: #363639; --kk-daempet: #B0B0B6; --kk-svag: #A8A8AE;
  --kk-advar: #F0A03C; --kk-fejl: #FF9A92;
}

.kundekort:not(.skjult) {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 6px 14px; margin-bottom: 10px;
  padding: 8px 12px 9px; border: 1px solid var(--line);
  border-radius: 12px; background: var(--kk-flade);
}
@media (max-width: 1080px) { .kundekort:not(.skjult) { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 780px)  { .kundekort:not(.skjult) { grid-template-columns: minmax(0, 1fr); } }

/* ⛔ FOLDET er ÉN linje, ikke ingenting. Christian, 24-08-2026, om en anden
   flade: *»Dette billede fylder alt for meget … der hoved sagen at se er
   oversigten«*. Kortet er svaret på hans spørgsmål og står derfor ÅBENT som
   standard — men det må kunne foldes, og foldet skal de fire vigtigste
   værdier stadig kunne læses. Et panel man ikke kan folde, er ikke en
   oplysning, det er en mur. Valget huskes (`nerve_finance_kundekort`), samme
   mønster som temaet og bundpanelet. */
.kundekort.foldet:not(.skjult) { grid-template-columns: minmax(0, 1fr); }
.kundekort.foldet .kkgrp, .kundekort.foldet .kknote { display: none; }
.kundekort .kkresume { display: none; }
.kundekort.foldet .kkresume {
  display: block; grid-column: 1 / -1;
  font-size: 12.5px; line-height: 1.45; color: var(--kk-daempet);
}

.kundekort .kkhdr {
  grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: baseline;
  gap: 3px 10px;
}
.kundekort .kkhdr b { font-size: 13.5px; letter-spacing: -.01em; }
.kundekort .kkhdr .ident { font-variant-numeric: tabular-nums; color: var(--kk-daempet); }
.kundekort .kkhdr .kkdato { margin-left: auto; font-size: 11.5px; color: var(--kk-svag); }
.kundekort .kkfold {
  border: none; background: transparent; cursor: pointer; padding: 2px 6px;
  border-radius: 7px; color: var(--acc-tekst); font: inherit; font-size: 11.5px;
  font-weight: 600;
}
.kundekort .kkfold:hover { background: var(--acc-soft); }
@media (pointer: coarse) { .kundekort .kkfold { min-height: 44px; } }

.kundekort .kkgrp { display: flex; flex-direction: column; gap: 0; min-width: 0; }
.kundekort .kkgrp h3 {
  margin: 0 0 2px; font-size: 10.5px; font-weight: 600; letter-spacing: .04em;
  text-transform: uppercase; color: var(--kk-svag);
}
.kundekort .kkr {
  display: flex; gap: 8px; align-items: baseline;
  font-size: 12px; line-height: 1.38; min-width: 0;
}
.kundekort .kkl { flex: 0 0 40%; color: var(--kk-daempet); }
.kundekort .kkv { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
/* Beløb og kurser står med tabulartal; IDENTIFIKATORER (kundenummer, EAN/GLN,
   momsnummer) står ligeledes med tabulartal — men UDEN tusindtalsseparator.
   Reglen selv ligger i JS'en, hvor `String(x)` bruges frem for `helt(x)`. */
.kundekort .kkv.tal, .kundekort .kkv.ident { font-variant-numeric: tabular-nums; }
/* ⛔ Tankestregen er RESERVERET: `–` = »ikke opgjort«, `0,00` = »opgjort til
   nul« (UI-UX-STANDARD § 4). Den dæmpede farve er kun farve — teksten bærer
   selv betydningen, for farve må aldrig stå alene (§ 10). */
.kundekort .kkv.uopgjort { color: var(--kk-svag); }
/* ⛔ TILSTANDSFARVERNE ER OGSÅ MÅLT MOD KORTETS EGEN FLADE — og de var de to
   værste fund. Første udgave brugte husets `--warn` og `--b-forf-fg`, som er
   målt mod `--flade`/`--neg-flade`. På kortets flade gav de **4,36:1** (advarsel,
   lyst) og **1,83:1** (fejl, mørkt). 1,83 er ikke »lidt under« — det er en rød
   tekst der er næsten usynlig præcis dér hvor den siger at fakturaen ikke kan
   bogføres. Målt efter rettelsen: advarsel **5,13 · 5,62**, fejl **5,87 · 5,90**.
   ⚠ Farve står ALDRIG alene (§ 10): teksten siger selv »Mangler pr. …« og
     »Skal tastes«, og hver af dem har en note med et næste skridt nedenunder. */
.kundekort .kkv.advar { color: var(--kk-advar); font-weight: 600; }
.kundekort .kkv.fejl { color: var(--kk-fejl); font-weight: 600; }
.kundekort .kknote {
  grid-column: 1 / -1; margin-top: 1px;
  font-size: 11.5px; line-height: 1.4; color: var(--kk-daempet);
}
.kundekort .kknote b { font-weight: 600; }

/* Feltet der SKAL tastes fordi datoen ikke kan udledes [INV-19]. Farve står
   ikke alene: hjælpeteksten under feltet siger hvorfor, og feltet bærer
   `aria-required`. */
.fakturahoved input.kraevet {
  border-color: var(--warn); box-shadow: inset 0 0 0 1px var(--warn);
}
.fakturahoved .hjaelp.kraevet { color: var(--warn); font-weight: 600; }

/* ── 11. Plads ─────────────────────────────────────────────────────────────
   ⛔ TRE dele, ikke én (UI-UX-STANDARD § 5). `.gscroll` står i grundlaget; her
     lægges GULVET under gitteret og LODRET rulning i arbejdsområdet. 1 alene =
     gitteret klemmes. 3 alene = reglen fyrer aldrig. Kun 2 + 3 sammen virker. */
#gitter { min-height: 200px; }
.detbund { max-height: min(42vh, 360px); }
.view { overflow-y: auto; overflow-x: hidden; }

/* ── 11. Modulets undermenu i sidebjælken ──────────────────────────────────
   (10-09-2026, ADR-0049)

   ⛔ `flex: none` ER HELE REGLEN, og uden den ser fejlen ud som en designfejl.
      Grundlagets `.tree` er en flex-søjle, og `.tree .liste` bærer
      `flex: 1; min-height: 0; overflow-y: auto`. Sidebjælken har nu TO
      `.liste`-børn — undermenuen og dokumentlisten — og uden denne regel deler
      de højden ligeligt: menuens tre punkter ville stå i en rullebar kasse på
      halvdelen af skærmen, med dokumentlisten klemt sammen under.

      Det er nøjagtig samme fælde som `.tree .it.dokit` løser i § 5, bare på
      beholderen i stedet for på posten — og den er skrevet her MED sin
      begrundelse (REGEL 5 punkt 2), ikke båret over som en løsreven regel.

   Menuen ruller aldrig: den har tre punkter, og et fast antal. Det er
   dokumentlisten der vokser, og den beholder derfor `flex: 1` alene. */
.tree .liste.undermenu {
  flex: none;
  overflow: visible;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--line-2);
}

/* Første gruppeoverskrift i dokumentlisten står nu under en skillelinje og
   behøver ikke sin egen luft ovenover. Grundlaget giver `.grp` 12 px foroven;
   her ville de lægge sig oven i kantens fire. */
.tree .liste.undermenu + .liste > .grp:first-child { padding-top: 8px; }

/* ── 12. Send-ruden ────────────────────────────────────────────────────────
   (10-09-2026, ADR-0050 · F1b)

   Dialogen er en formular og ikke en bekræftelse: modtager, emne og brevtekst
   kan alle rettes, fordi ingen af dem altid kan udledes. Særligt modtageren —
   `mailopsaetning` svarer med vilje `""` når kunden ingen registreret
   fakturamail har, og der gættes ALDRIG på en anden adresse [GD-01]. */
.mailmodal { width: min(560px, 92vw); }
.mailmodal .mailfelt { display: flex; flex-direction: column; gap: 3px; margin-bottom: 12px; }
.mailmodal .mailfelt label { font-size: 11.5px; color: var(--txt-2); font-weight: 600; }
.mailmodal .mailfelt input,
.mailmodal .mailfelt textarea {
  width: 100%; padding: 7px 9px; border: 1px solid var(--line);
  border-radius: 8px; background: var(--chrome); color: var(--txt);
  font: inherit; font-size: 13px;
}
/* Brevteksten skrives, ikke kodes — men den skal kunne vokse uden at ruden
   springer. `resize: vertical` og aldrig `horizontal`: en bredere kasse ville
   sprænge dialogens gitter. */
.mailmodal .mailfelt textarea { resize: vertical; min-height: 90px; line-height: 1.45; }
.mailmodal .mailfelt .hjaelp { font-size: 11px; color: var(--txt-3); line-height: 1.4; }

/* Manglerne står som en LISTE og ikke som én sætning: hver linje er sin egen
   forudsætning med sit eget næste skridt [UI-UX-STANDARD § 9]. */
.mailmodal .mangelliste { margin: 4px 0 0; padding-left: 18px; }
.mailmodal .mangelliste li { margin: 2px 0; line-height: 1.45; }
.mailmodal .mangelliste .naeste { color: var(--txt-2); }

/* ── 13. »Dan faktura« — den ene primære handling ──────────────────────────
   (10-09-2026, F1e)

   Christian, fra skærmen: *»Hvor er dan faktura-knappen — altså hvor vi faktisk
   genererer den og den bliver bogført og sendt?«*

   ⛔ HAN LEDTE, OG FANDT DEN IKKE. Det er den prøve knappen skal bestå — ikke
      »er den til at se, når man ved den er der«. Grundlagets `.rbtn.primar`
      giver accentfarve og fed skrift, og det er nok til at MARKERE en knap
      blandt knapper. Det er ikke nok til at man FINDER den blandt fjorten
      ikoner man ikke kender rækkefølgen på.

   Derfor en flade: samme form som båndets øvrige knapper, samme højde, samme
   ikon — men fyldt. Huset bruger allerede den fyldte form til ⌘K-paletten, så
   den er ikke ny; den er bare aldrig brugt på dét der er skærmens formål.

   ⚠ Kun i FAKTURAFLADENS lag. `.rbtn.primar` findes i det hash-låste grundlag
     (ADR-0005) og bruges af andre flader; en ændring dér ville gøre hver
     primær knap i huset fyldt uden at nogen havde besluttet det.
   ⚠ Slukket bevarer sin egen form: en spærret primærknap må ikke se ud som en
     man kan trykke på — grunden står i dens `title` og `aria-label`
     [UI-UX-STANDARD § 7]. */
.rbtn.primar {
  background: var(--acc-soft);
  border-radius: 9px;
  padding-left: 12px;
  padding-right: 12px;
}
.rbtn.primar:hover:not(:disabled) { background: var(--acc-mid); }
.rbtn.primar:disabled {
  background: var(--graa-flade);
  color: var(--txt-3);
}
.rbtn.primar:disabled svg { color: var(--txt-3); }
