/* ==========================================================================
   DOKUMENTFORMEN — ÉN sannhet for rapporter/dokumenter på skjerm OG papir
   (landing 75, Vidars vedtak 2026-09-16: «Dette må på plass så vi får det
   likt over alt alltid uten å måtte tenke på det, og vakter som håndhever
   at det er det som er fasiten»).

   Nivåtrappa (d01v §2.0, Vidars dom 2026-08-28 med tilbuds-PDF-en som
   referanse): dokumenthode → mørkt gruppebånd → tonet etikettstripe →
   hvite rader. Formen bor HER og bare her: skjermen laster fila som
   stylesheet, utskriftsklossen (shared/js/dokument-print.js) henter samme
   fil og legger den inn i print-iframen og server-PDF-en. Også papirformen
   (kompakt skrift og celleluft) står her, under @media print nederst — flatene
   gir aldri dokumentklassene egne verdier. Vakt: tests/test_dokument_form_en_sannhet.py.

   Klasser: .mh-dok-hode (.mh-dok-typemerke / -kontekst / -dato) · .mh-dok-tekst ·
   .mh-dok-gruppe · .mh-dok-baand (.mh-dok-baand-tittel / -meta, faste kolonner: --kolonner, -navn, -felt) ·
   .mh-dok-tabell (th/td) · .mh-dok-innhold · .mh-dok-lenke · .mh-dok-viktig · .mh-dok-tom ·
   .mh-dok-ark (.mh-dok-ark--parts: papirbredde) og .mh-dok-stempel (bare skjermen: dokumentforhåndsvisningen) ·
   partsdokumentet (dokumentmalen, shared/js/dokumentmal.js): .mh-dokmal og .mh-dokmal-*, nederst før papiret
   ========================================================================== */

/* Dokumenthode: typemerke + kontekst venstre, Utskriftsdato fast plass høyre. */
.mh-dok-hode {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  border-bottom: 2px solid var(--gruppe); padding-bottom: 6px; margin-bottom: 10px;
}
.mh-dok-typemerke { color: var(--primary); font-size: 15px; font-weight: 700; letter-spacing: 0.06em; }
.mh-dok-kontekst { font-size: var(--skrift); color: var(--text); font-weight: 600; margin-left: 10px; }
.mh-dok-dato { font-size: var(--skrift); color: var(--text); white-space: nowrap; text-align: right; }

/* Dokumentteksten: fritekst for hele dokumentet i en rolig boks rett under hodet, aldri i
   tittellinja (d01v §2.2, Vidar 2026-10-04). */
.mh-dok-tekst {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 5px 10px; margin: -4px 0 10px; font-size: var(--skrift); color: var(--text);
}

/* Én gruppe = bånd + tabell. */
.mh-dok-gruppe { margin-bottom: 12px; page-break-inside: avoid; }

/* Nivå 1 — mørkt gruppebånd. Tekst-tokenene snus så alt inni båndet
   (tittel, meta, lenke, viktig-merknad) arver riktig farge uten egne regler.
   Tittelen er fet, som gruppebåndet i arbeidsflata (formelen, Vidar 2026-11-02): typografien står i rollene
   i components.css. */
.mh-dok-baand {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  background: var(--gruppe-soft); border: 1px solid var(--gruppe);
  border-radius: 6px; padding: 6px 10px; margin: 0 0 4px; /* også når båndet er en h3 */
  color: var(--morkflate-tekst); font-size: var(--skrift);
  --text: var(--morkflate-tekst);
  --muted: var(--morkflate-muted);
  --danger: var(--morkflate-danger);
  /* Båndet blir på papiret også der siden skrives ut uten mørke flater (/info). Uten dette ryker flaten, og den
     hvite teksten står igjen på hvitt. */
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
/* Over kort: samme luft fra båndet på arbeidsbordet, i modulkatalogen, på Systeminfo, Verktøy og Driftsstatus. */
.mh-kortsone .mh-dok-baand,
.card > .mh-dok-baand { margin-bottom: 12px; }
.mh-dok-baand-tittel { font-weight: var(--vekt-overskrift); color: inherit; text-decoration: none; }   /* navnet på gruppa: fet (formelen) */
.mh-dok-baand-meta { color: var(--muted); font-size: var(--skrift); }

/* FASTE KOLONNER I BÅNDET (Vidars funn 2026-11-03 i utskriften av Administrasjon: «Veldig mye enklere lesbarhet om alt
   står over hverandre over alt så man kan enkelt lese med øye nedover og evnt finne avvik. Det gjelder alt over alt.»).
   Typen, statusen og antallet sto som én tekst rett etter navnet og flyttet seg med navnets lengde. Nå har hvert felt
   sin kolonne, og bredden kommer fra slaget (`data-mh-slag`: kode, kort, tall eller tekst), med de samme tokenene
   `--kol-*` i theme.css som tabellens kolonner på skjermen. Navnet tar resten (E03 R1.11: ett felt absorberer, de andre
   reserverer), og langt navn brytes innenfor kolonnen sin, som cellene i dokumentet, og skyver aldri feltene. En
   tekstkolonne deler resten likt med navnet. Flaten gir alle gruppene de samme feltene, også et tomt felt, så de står
   over hverandre nedover hele dokumentet. Er plassen for liten (et smalt panel), krymper feltene likt i alle gruppene,
   så de fortsatt står over hverandre, og navnet beholder minst en kort kolonne. Markupen bygges av
   `ModulHubDokumentPrint.baand`. Vakt: tests/test_baandets_faste_kolonner.py. */
.mh-dok-baand--kolonner { flex-wrap: nowrap; }
.mh-dok-baand-navn {
  flex: 1 1 0; min-width: var(--kol-kort); overflow-wrap: break-word;
  display: flex; align-items: baseline; flex-wrap: wrap; gap: inherit;   /* navnet og en viktig merknad står etter hverandre */
}
.mh-dok-baand-felt { flex: 0 1 var(--dok-felt-b); min-width: 0; overflow-wrap: break-word; }
.mh-dok-baand-felt[data-mh-slag="kode"] { --dok-felt-b: var(--kol-kode); }
.mh-dok-baand-felt[data-mh-slag="kort"] { --dok-felt-b: var(--kol-kort); }
.mh-dok-baand-felt[data-mh-slag="tall"] { --dok-felt-b: var(--kol-tall); }
.mh-dok-baand-felt[data-mh-slag="tekst"] { flex: 1 1 0; }
/* Smal skjerm: feltene får bryte til neste linje (E03 R1.11 gjelder innenfor én linje). Papiret har alltid én linje. */
@media screen and (max-width: 720px) {
  .mh-dok-baand--kolonner { flex-wrap: wrap; }
}

/* Seksjonsvarianten: båndet som skille mellom seksjonene på en åpen side. Vidar 2026-10-10 om /info:
   «Seksjonskillene kunne vi muligens vurdert på lik linje som radar og alle andre rapportutskrifter.
   Hadde pyntet og vært mer lettlest». Samme farger og form, skriften i overskriftsstørrelse. */
/* To klasser i velgeren, så varianten vinner over sidens egen overskriftsregel uten at sida rører båndet. */
.mh-dok-baand.mh-dok-baand--seksjon {
  padding: 8px 14px; margin: 0 0 12px; font-size: clamp(18px, 2.2vw, 22px); font-weight: 700; letter-spacing: 0;
}

/* Nivå 2 — tonet etikettstripe (--kontrollsone, ikke --surface-soft som ble
   usynlig mot hvitt). Nivå 3 — hvite rader: dokumentet er lese-/arbeidsflate (R1.15).
   table-layout: fixed + colgroup fra flata = fast plass i alle grupper. */
/* Samme skrift som tabellen i arbeidsflaten, og hodet skiller seg med fet skrift (Vidar 2026-11-02: «Gjenspeiles da også
   riktig på utskrift»). Papiret får papirets verdi av tokenet. På skjermen er en rad med én linje like høy som
   tabellraden; dokumentet bryter lang tekst, for papiret kan ingen holde pekeren over. */
.mh-dok-tabell { width: 100%; border-collapse: collapse; font-size: var(--skrift); line-height: var(--skrift-linje); table-layout: fixed; }
.mh-dok-tabell th, .mh-dok-tabell td { overflow-wrap: break-word; }
.mh-dok-tabell th {
  text-align: left;
  font-weight: var(--vekt-overskrift); text-transform: var(--bokstaver-seksjon); letter-spacing: var(--sperring-seksjon);
  color: var(--text); padding: var(--tabell-luft) 8px;
  background: var(--kontrollsone); border-bottom: 1px solid var(--border);
}
.mh-dok-tabell td { padding: var(--tabell-luft) 8px; border-bottom: 1px solid var(--border); vertical-align: top; background: var(--surface); }

/* Innholdsblokk under et bånd — tekst eller felt, ikke tabell (landing 76,
   radars sakspanel: forklaringen, løsningsfeltet, beskjedfeltene). Samme
   hvite flate og skrift som en rad, så en gruppe leses likt enten den bærer
   tabell eller tekst. Skjema-klossens seksjonsoverskrift inni blokken
   starter uten strek (båndet ER skillet). */
.mh-dok-innhold { --kontroll-flate: var(--surface); background: var(--surface-muted); border-bottom: 1px solid var(--border); padding: 8px 10px; font-size: var(--skrift); line-height: 1.45; }
.mh-dok-innhold > .mh-skjema-seksjon:first-child { border-top: 0; margin-top: 0; padding-top: 0; }
/* Båndet alene er skillet mellom gruppene: siste rad eller blokk i en gruppe har ingen strek rett over neste bånd. */
.mh-dok-gruppe > .mh-dok-innhold:last-child { border-bottom: 0; }
.mh-dok-gruppe > .mh-dok-tabell tr:last-child td { border-bottom: 0; }

/* Lenke i dokumentet (til raden/objektet i arbeidsflata). */
.mh-dok-lenke { color: var(--primary-text); font-weight: 600; text-decoration: none; }
.mh-dok-lenke:hover { text-decoration: underline; }
/* Navnet i båndet som lenke (lasset i Lassplan-rapporten) har båndets farge, som navnet uten lenke. Før sto det som
   innebygd stil på flaten; klossen bygger lenken (ModulHubDokumentPrint.baand), og fargen bor her (samling 14). */
.mh-dok-baand-tittel.mh-dok-lenke { color: inherit; }

/* Viktig merknad (toppnotat) og tom gruppe. */
.mh-dok-viktig { color: var(--danger); font-size: var(--skrift); }
.mh-dok-tom { color: var(--muted); font-size: var(--skrift); padding: 6px 8px; }

/* Arket på skjermen (dokumentforhåndsvisningen, E03 R1.9): dokumentet står på hvitt
   papir mot den tonede panelflata, så laget veksler (E01 R1.15). Stempelet sier at
   dokumentet ikke er sendt ennå; det er en rolig merkelapp med ord, ikke rødt (rødt er
   «blokkerer», E01 R1.12) og ikke gult (gult er avvik som skal ses på). */
.mh-dok-ark {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 14px 16px; color: var(--text);
}
/* Partsdokumentet på skjermen har papirets bredde (A4 er 210 mm), så tilbudet og fakturaen ser ut som arket de blir,
   og flyter ikke over hele flata (Vidars dom 2026-11-05). Lassrapporten og de andre driftsdokumentene bruker bredden
   de får. Klassen settes av ModulHubDokumentPrint.skjermHtml med `parts: true`. */
.mh-dok-ark--parts { max-width: 210mm; }
.mh-dok-stempel {
  display: inline-block; margin-bottom: 10px; padding: 2px 8px;
  border: 1px dashed var(--muted); border-radius: var(--radius-sm);
  color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase;
}

/* PARTSDOKUMENTET — dokumentmalen for tilbud, ordre, ordrebekreftelse og faktura (d01v §2.1–§2.6, skisse 8 fra
   2026-11-04). Markupen bygges av `ModulHubDokumentmal` (shared/js/dokumentmal.js) og går ut på skjerm, papir og PDF
   gjennom dokumentklossen med `parts: true`. Klientens navn og logo bærer merkevaren, og typemerket er nøytralt i
   tekstfarge (§2.0, låst 2026-10-04); ingen oransje på klientens dokument (runde 10 r10-02, anbefalingen, venter svar).
   Én skrift som resten av rota (formelen i theme.css): tittelen og klientens navn er ett trinn større, etikettene er
   dempet, og bare kolonnehodet har store bokstaver. Varelinjene er rotas grupper (`.mh-dok-gruppe`: det mørke
   gruppebåndet og `.mh-dok-tabell`), som lassplanen og rapportutskriftene (Vidars dom 2026-11-05, erstatter r10-09).
   Vakt: tests/test_dokumentmal.py. */
.mh-dokmal { color: var(--text); font-size: var(--skrift); line-height: 1.4; }
.mh-dokmal-topp {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 16px;
  padding-bottom: 8px; border-bottom: 1px solid var(--border);
}
.mh-dokmal-logo { display: block; max-height: 40px; max-width: 180px; margin-bottom: 4px; }
.mh-dokmal-avsender { color: var(--muted); min-width: 0; overflow-wrap: break-word; }
.mh-dokmal-avsender-navn,
.mh-dokmal-tittel { color: var(--text); font-size: var(--skrift-tittel); font-weight: var(--vekt-overskrift); }
.mh-dokmal-type { text-align: right; }
.mh-dokmal-utkast { color: var(--muted); }
.mh-dokmal-parter { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px 16px; flex-wrap: wrap; margin-top: 10px; }
.mh-dokmal-mottaker { min-width: 0; overflow-wrap: break-word; }
.mh-dokmal-mottaker-etikett { color: var(--muted); }
.mh-dokmal-mottaker-navn { font-weight: var(--vekt-overskrift); }
/* Etikettene har rotas etikettrolle (.mh-skrift-etikett); her står bare at etiketten står over verdien. */
.mh-dokmal-felt > .mh-skrift-etikett { display: block; }
.mh-dokmal-meta { border-collapse: collapse; }
.mh-dokmal-meta td { padding: 0 16px 0 0; }
.mh-dokmal-meta .mh-dokmal-tall { padding-right: 0; text-align: right; }
.mh-dokmal-tall { font-variant-numeric: tabular-nums; white-space: nowrap; }
/* Referansefeltene: fire faste kolonner, aldri mer, mellom tynne linjer og uten bokser (d01v §2.2; Vidars dom 2026-11-05:
   «4 faste felt som er ledige horisontalt, men aldri mer enn 4. Fast plass, og alt står vertikalt strukturert»). Hver
   kolonne er en stabel med små etiketter over verdiene. På smal skjerm blir det to kolonner, så én, i samme rekkefølge,
   og ingenting forkortes (r10-19). Papiret har alltid fire. */
.mh-dokmal-ref {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px 16px;
  margin-top: 10px; padding: 5px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
}
.mh-dokmal-refkol { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
@media screen and (max-width: 720px) { .mh-dokmal-ref { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media screen and (max-width: 400px) { .mh-dokmal-ref { grid-template-columns: minmax(0, 1fr); } }
.mh-dokmal-felt { min-width: 0; overflow-wrap: break-word; }
.mh-dokmal-liten { color: var(--muted); }
.mh-dokmal .mh-dok-tekst { margin: 8px 0 0; }
/* Varelinjene er rotas grupper (.mh-dok-gruppe: det mørke gruppebåndet over tabellen), med luften fra rota. */
.mh-dokmal-linjer { margin-top: 10px; font-variant-numeric: tabular-nums; }
/* Kolonnene har rotas slag (`<col data-mh-slag>`, tokenene --kol-* i theme.css, E03 R1.11), som tabellen i
   arbeidsflata: varenummeret er en kode, beløpene er korte felt med plass til sju sifre, antall og rabatt er tall, og
   beskrivelsen tar resten. */
.mh-dok-tabell col[data-mh-slag="kode"] { width: var(--kol-kode); }
.mh-dok-tabell col[data-mh-slag="kort"] { width: var(--kol-kort); }
.mh-dok-tabell col[data-mh-slag="tall"] { width: var(--kol-tall); }
.mh-dok-tabell col[data-mh-slag="tekst"] { width: auto; }
/* På telefonen får ikke de faste slagene plass ved siden av beskrivelsen; der deler kolonnene arkets bredde, og
   ingenting stikker ut av arket (r10-19). */
@media screen and (max-width: 720px) {
  .mh-dok-tabell col[data-mh-slag] { width: auto; }
}
/* På telefonen er det ikke plass til at beløpene står samlet; der brytes de heller enn å stikke ut av arket (r10-19). */
@media print, screen and (min-width: 721px) {
  .mh-dok-tabell > tbody > tr > td.mh-dokmal-h,
  .mh-dok-tabell td.mh-dokmal-nr { white-space: nowrap; }   /* varenummeret brytes aldri («V-SETT8», 2026-11-05) */
}
.mh-dok-tabell .mh-dokmal-h { text-align: right; }
/* Varenummeret står i kodens slag (4em); det får hele bredden uten luft til høyre, så det ikke brytes. */
.mh-dok-tabell td.mh-dokmal-nr { padding-right: 0; }
.mh-dokmal-identitet,
.mh-dokmal-linjetekst,
.mh-dok-tabell .mh-dokmal-gruppetekst td { color: var(--muted); }
.mh-dok-tabell .mh-dokmal-bestaar > td { padding-top: 0; }
.mh-dok-tabell .mh-dokmal-delsum td { font-weight: var(--vekt-overskrift); }
/* «Består av»: en egen sone under enhetslinja, som inngår i prisen og ikke summeres (d01v §2.3, PRIS-9). */
.mh-dokmal-sone { border-left: 2px solid var(--border); padding-left: 8px; }
.mh-dokmal-del-tabell { width: 100%; border-collapse: collapse; }
.mh-dok-tabell .mh-dokmal-del-tabell td { padding: 0 6px; border: 0; background: transparent; color: var(--muted); }
.mh-dok-tabell .mh-dokmal-del-tabell td:nth-child(2) { width: 9%; }
.mh-dok-tabell .mh-dokmal-del-tabell td:nth-child(3) { width: 30%; }
.mh-dok-tabell .mh-dokmal-del-tabell .mh-dokmal-sone-tittel { color: var(--text); font-weight: var(--vekt-overskrift); }
.mh-dok-tabell .mh-dokmal-del-tabell .mh-dokmal-sone-sum td { border-top: 1px dashed var(--border); color: var(--text); }
/* Summene nederst til høyre, og betalingsboksen ved siden av som rotas fokusboks (d01v §2.4, r10-01, anbefalingen, venter svar). */
/* Bunnsonen avslutter dokumentet: summene, og på fakturaen «Å betale»-boksen ytterst til høyre ved siden av (r11-01,
   Vidar 2026-11-06). Får de ikke plass ved siden av hverandre, står boksen under summene, fortsatt til høyre. Sonen
   holdes samlet på papiret, så summene og boksen står på samme (siste) side. */
.mh-dokmal-bunnsone { display: flex; justify-content: flex-end; align-items: flex-start; gap: 12px 16px; flex-wrap: wrap; margin-top: 10px; page-break-inside: avoid; break-inside: avoid; }
/* Summene er rotas summering (.mh-summering i components.css); her står bare plassen nederst til høyre. */
.mh-dokmal-sum { flex: 0 0 auto; }
.mh-dokmal-betaling { flex: 1 1 260px; max-width: 380px; min-width: 0; }
/* «Å betale» (r11-01): beløpet stort på egen linje (tittelens trinn), postene med etiketten foran verdien i én kolonne. */
.mh-dokmal-betal-belop { display: block; font-size: var(--skrift-sum); font-weight: var(--vekt-overskrift); margin: 2px 0 6px; }
.mh-dokmal-betal-poster { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 12px; }
.mh-dokmal-betal-post { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; }
.mh-dokmal-betal-sporsmal { margin-top: 6px; }
.mh-dokmal-betal-tekst { margin: 6px 0 0; }
.mh-dokmal-bunn { margin-top: 16px; padding-top: 5px; border-top: 1px solid var(--border); color: var(--muted); text-align: center; }
.mh-dokmal-utskrift { margin-top: 4px; color: var(--muted); text-align: right; }

/* Papiret — utskrift og PDF (print-iframen og server-PDF-en tegnes som print).
   ÉN papirform for alle dokumenter (feilklasse 6, Vidars vedtak 2026-09-29: «Man må jo
   ha en master for hvordan utskrift vises uansett hva det er»). Før sto den som kopi i
   fem flaters print-strenger, med 2 px mot 3 px i overskriftene, og forhåndsvisningen fikk
   skjermstørrelse på papiret. */
@media print {
  /* Skriften kommer fra tokenet (`--skrift` har papirets verdi under @media print i theme.css); her står bare luften. */
  .mh-dok-tabell { line-height: normal; }
  .mh-dok-tabell th, .mh-dok-tabell td { padding: 3px 6px; }
  .mh-dok-tabell th { vertical-align: top; }
  .mh-dok-tom { padding: 3px 6px; }
}
