/* ══════════════════════════════════════════════════════════════
   Nirona — komponenter v2

   Hver komponent har ett v2-navn og, der v1 hadde et, en peker fra det
   gamle navnet. Utseendet er v2 uansett hvilket navn ruten bruker.
   ══════════════════════════════════════════════════════════════ */

/* ── Knapper: fylt, tonet, ren, kant ─────────────────────────
   Fylt er det ene du helst skal gjøre. Aldri to fylte ved siden av hverandre. */
.knapp,.btn,.act{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:var(--trykk);padding:0 18px;border-radius:var(--r-sm);
  border:1px solid transparent;font:inherit;font-size:var(--t-sm);font-weight:600;
  text-decoration:none;cursor:pointer;color:var(--blekk);background:var(--kort);
  border-color:var(--haar-sterk);transition:background .12s,filter .12s;
  white-space:nowrap}
.knapp:hover,.btn:hover,.act:hover{background:var(--felt)}
.knapp.fylt,.btn.primary,.act.primary,.btn.accent,.act.accent{
  background:var(--aksent);color:var(--paa-aksent);border-color:transparent}
.knapp.fylt:hover,.btn.primary:hover,.act.primary:hover,.btn.accent:hover,
.act.accent:hover{background:var(--aksent);filter:brightness(1.08)}
.knapp.tonet{background:var(--felt);color:var(--aksent-tekst);border-color:transparent}
/* Kant er standardutseendet på .knapp, og finnes som eget navn fordi
   markupen sier det høyt der valget er bevisst. */
.kant{background:var(--kort);color:var(--blekk);border-color:var(--haar-sterk)}
.knapp.ren{background:transparent;color:var(--aksent-tekst);border-color:transparent}
.knapp.tonet:hover,.knapp.ren:hover{background:var(--felt)}
/* «Liten» er 36 px, ikke 34. Under 36 begynner en knapp å bli vanskelig å
   treffe med tommelen, og den lille knappen brukes nettopp der det er trangt. */
.knapp.liten{min-height:var(--trykk);padding:0 14px;font-size:var(--t-sm)}
.knapp[disabled],.btn[disabled],.act[disabled]{cursor:default;color:var(--dempet);
  background:var(--felt);border-color:transparent;filter:none}
.knapp svg,.btn svg,.act svg{width:17px;height:17px}
.act{width:100%;margin-bottom:8px;justify-content:flex-start}

/* ── Felter ──────────────────────────────────────────────────── */
.felt,.field{display:block;margin-bottom:16px}
.felt label,.field label{display:block;font-size:var(--t-xs);font-weight:700;margin-bottom:6px}
.felt .hj,.field .help{font-size:var(--t-xs);color:var(--dempet);margin:-2px 0 7px;line-height:1.5}
.inn,.input,input[type=text],input[type=email],input[type=search],
textarea,select{width:100%;min-height:var(--trykk);padding:0 13px;font:inherit;
  font-size:var(--t-md);color:var(--blekk);background:var(--kort);
  border:1px solid var(--haar-sterk);border-radius:var(--r-sm)}
textarea{padding:11px 13px;min-height:110px;resize:vertical;line-height:1.55}
.inn::placeholder,.input::placeholder,textarea::placeholder{color:var(--dempet)}
.inn:focus,.input:focus,input:focus,textarea:focus,select:focus{
  border-color:var(--aksent);box-shadow:0 0 0 3px var(--felt)}
select{appearance:none;padding-right:38px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2346505B' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;background-size:16px}
input[type=checkbox]{width:20px;height:20px;accent-color:var(--aksent);cursor:pointer}
.avkryss{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;
  border:1px solid var(--haar);border-radius:var(--r-sm);background:var(--felt);
  cursor:pointer;font-size:var(--t-sm)}

/* ── Brikker ─────────────────────────────────────────────────
   Alltid tekst på tonet flate. Aldri hvit tekst på farge. */
/* Brikker ligger på kort eller side. På den dypeste flaten (felt) ville de
   tonede fargene falt under 7:1 — så der får de sin egen, litt sterkere
   bakgrunn i stedet for at kontrasten stille blir for lav. */
.felt .brikke,.segk .brikke,.inn .brikke{background:var(--kort)}
.brikke,.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;
  border-radius:var(--r-pill);font-size:var(--t-xs);font-weight:600;line-height:1.5;
  background:var(--felt);color:var(--dempet);white-space:nowrap}
.brikke .p,.chip::before{content:"";width:6px;height:6px;border-radius:50%;
  background:currentColor;flex:none}
.chip.nodot::before{display:none}
.brikke.aks,.chip.teal,.chip.live{background:var(--felt);color:var(--aksent-tekst)}
.brikke.rod,.chip.p1{background:var(--rod-flate);color:var(--rod-tekst)}
.brikke.gul,.chip.p2{background:var(--gul-flate);color:var(--gul-tekst)}
.brikke.bla,.chip.p3{background:var(--bla-flate);color:var(--bla-tekst)}
.brikke.gronn,.chip.ok{background:var(--gronn-flate);color:var(--gronn-tekst)}

/* ══ Tilstanden bæres av FORMEN, ikke av fargen ═══════════════════════
   Målt 29. september 2026. Holdes alle fire statusfargene på AAA-gulvet
   (7:1), presses de inn i et bånd mellom 4,7 og 7,6 prosent luminans; i
   CIE L* lander de tonede flatene 2,8 fra hverandre, der omtrent 5 er der
   en forskjell begynner å registreres.

   Den som ikke skiller dem på kulør — og den som ser skjermen med
   gjenskinn over, altså hver operatør i et opplyst kontrollrom — ser én
   tone. Fire statuser som bare skilles med farge, er derfor én status.

   Markøren finnes fra før i hver brikke, som en 6 px prikk. Den blir her
   fire ulike former. Ingen mal er endret: formen følger av klassen
   brikken alt har.

        over frist   trekant
        venter       ring
        ny           firkant
        løst         hake

   Fargen på markøren er MARKØR-tokenet (3:1, WCAG 1.4.11), ikke
   tekst-tokenet — markøren er en lampe, ikke et ord. */

/* Formen står på et PSEUDOELEMENT, ikke på `.p`.
   Første utgave hang den på `<span class="p">`, som brikkene i køen har.
   Brikkene på landingssiden har den ikke — og der sto altså fire statuser
   uten noen markør i det hele tatt. Det ble sett på et skjermbilde i ren
   gråtone, ikke fanget av en måling: kontrastporten måler tekst mot flate,
   og en manglende markør har ingen kontrast å måle.

   Med `::before` følger formen av KLASSEN, og finnes uansett hva malen
   skrev. Der `.p` alt står, skjules den, så ingen brikke får to. */
.brikke.rod::before,.brikke.gul::before,
.brikke.bla::before,.brikke.gronn::before{content:"";flex:none}
.brikke.rod .p,.brikke.gul .p,.brikke.bla .p,.brikke.gronn .p{display:none}

.brikke.rod::before{background:var(--rod);width:9px;height:8px;
  clip-path:polygon(50% 0%, 100% 100%, 0% 100%)}
.brikke.gul::before{border:2px solid var(--gul);border-radius:50%;
  width:9px;height:9px;box-sizing:border-box}
.brikke.bla::before{background:var(--bla);border-radius:1px;width:8px;height:8px}
.brikke.gronn::before{width:5px;height:9px;box-sizing:border-box;
  border-right:2px solid var(--gronn);border-bottom:2px solid var(--gronn);
  transform:rotate(40deg) translateY(-1px)}
.brikke.noyt,.chip.neutral{background:var(--felt);color:var(--dempet)}

/* ── Kort og rader ───────────────────────────────────────────── */
/* v4: kortet har ikke lenger en ramme. Flaten, skyggen og hårstreken under
   etikettraden holder det sammen; rammen la en strek rundt alt på skjermen. */
.kort,.card{background:var(--hev);border:0;
  border-radius:var(--r-lg);box-shadow:var(--skygge)}
/* ══ Raden er et RUTENETT, ikke en flex-rekke ═════════════════════════

   ── Hva som var galt ─────────────────────────────────────────────────

   Målt 29. september 2026 på supportkonsollen, seks rader i køen:

       Over frist   brikke 92 px   tittelen starter på 383
       Venter       brikke 75 px   tittelen starter på 366
       Ny           brikke 51 px   tittelen starter på 342
       Løst         brikke 57 px   tittelen starter på 348
       Tildelt meg  brikke 100 px  tittelen starter på 391
       Uten eier    brikke 87 px   tittelen starter på 378

   Tittelens venstrekant spriker 49 px, og saksnummerets høyrekant 143.
   Med `display:flex` arver hver kolonne bredden fra innholdet sitt, og
   innholdet er en statustekst som varierer med tilstanden.

   ── Hvorfor det betyr noe her, og ikke bare er pent ──────────────────

   En kø skannes NEDOVER. Øyet følger en kant. Når kanten flytter seg for
   hver rad, må blikket finne begynnelsen på nytt hver gang — hele dagen,
   på den ene flaten kravet handler om.

   Med et rutenett har hver kolonne én bredde for hele listen: status,
   sak, hvem og når, nummer. Da er det bare teksten som varierer. */
.rad,.row{display:grid;
  /* To faste kolonner, og så én auto-kolonne per barn som følger. Da
     virker raden med tre barn OG med fire, uten at noe brytes ned på en
     ny linje. Med en fast liste på tre kolonner havnet det fjerde barnet
     på rad to — og justeringsporten sa grønt, fordi de brutte numrene
     sto pent under hverandre. */
  grid-template-columns:var(--kol-status) minmax(0,1fr);
  grid-auto-flow:column; grid-auto-columns:auto;
  align-items:center;gap:14px;padding:14px 18px;
  background:var(--hev);
  border-bottom:1px solid var(--haar);min-height:60px;text-decoration:none;
  color:inherit}
/* ── Annenhver rad, fram til v4 ──────────────────────────────────────
 *
 * En kø skannes NEDOVER, og blikket må kunne følge én rad tvers over uten
 * å miste den. Trinnet mellom `--hev` og `--kort` er 4,5 L* — nok til å
 * følge en rad, for lite til å lese som to ulike ting.
 *
 * Det var umulig før palett v3: trinnet mellom de samme to tokenene var
 * 1,6 L*, altså usynlig. Stripene ville vært en regel uten virkning.
 */
/* v4, 5. oktober 2026: stripen er FJERNET, og det var den som tvang fram
 * det grå lerretet. En stripe krever ~5 L* ned fra hvitt; over L* 95 finnes
 * ikke den plassen. Skillet bæres nå av hårstreken på hver rad — dekor, ikke
 * informasjon, og derfor utenfor 1.4.11. Se AD-2026-10-05 og AVVIK.md A14.
 *
 * `--kort` er dermed ikke lenger stripeflaten. Den er hvilestillingen under
 * pekeren, og står under `.rad:hover`. */
.rad:nth-child(even),.row:nth-child(even){background:var(--hev)}
/* Bredden på statuskolonnen er den bredeste brikken, ikke et gjett: målt
   til 100 px («Tildelt meg»), pluss luft. Endres teksten, endres tallet —
   og porten `radjustering.mjs` sier fra hvis den ikke gjorde det. */
:root{--kol-status:116px}
.rad>.brikke,.row>.brikke{justify-self:start}
/* Alt som skal stå på høyre kant, står på høyre kant — uansett om raden
   har tre kolonner eller fire. `.mlauto` het det da raden var flex; i et
   rutenett gjør `margin-left:auto` ingenting, og navnet er blitt en felle. */
.rad>.mono,.row>.mono,
.rad>.mlauto,.row>.mlauto,
.rad>.note-sm,.row>.note-sm{justify-self:end;text-align:right}
/* En rad som ikke har alle fire kolonnene, faller tilbake til flex —
   rutenettet skal ikke tvinge tomme celler inn i lister som er noe annet. */
.rad.fri,.row.fri{display:flex}
.rad:last-child,.row:last-child{border-bottom:0}
.rad:hover,.row:hover{background:var(--kort)}
.rad .t,.row .t{font-weight:600}
.rad .u,.row .u{font-size:var(--t-xs);color:var(--sekundaer)}
.row.ny{box-shadow:inset 3px 0 0 var(--aksent-hev)}
.av{width:32px;height:32px;border-radius:50%;background:var(--felt);
  color:var(--aksent-tekst);display:grid;place-items:center;font-size:var(--t-xs);
  font-weight:700;flex:none}

/* ── Segmentvelger ───────────────────────────────────────────── */
.segk{display:inline-flex;background:var(--felt);padding:3px;border-radius:var(--r-sm);
  gap:2px}
/* 38 px pluss 3 px padding på hver side gir 44 i alt — samme trykkflate som
   en knapp, slik at et valg ikke er vanskeligere å treffe enn en handling. */
.segk a,.segk span,.segk button{padding:0 14px;border:0;background:transparent;
  border-radius:var(--r-xs);font:inherit;font-size:var(--t-sm);font-weight:600;
  color:var(--dempet);cursor:pointer;text-decoration:none;min-height:var(--trykk);
  display:inline-flex;align-items:center;gap:6px}
.segk .on,.segk button.on{background:var(--kort);color:var(--blekk);box-shadow:var(--skygge)}

/* ── Meldinger ───────────────────────────────────────────────── */
.melding,.callout{border-left:3px solid var(--aksent-hev);background:var(--felt);
  padding:13px 16px;border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:var(--t-sm);
  margin:0 0 16px;line-height:1.6}
.melding.avvist{border-left-color:var(--rod-tekst);background:var(--rod-flate)}
.melding.venter{border-left-color:var(--gul-tekst);background:var(--gul-flate)}

/* ── Småting ─────────────────────────────────────────────────── */
/* v4: sans og normal kasus. Monospor i versaler er beholdt der det bærer
   noe — kode, tastatur, loggutdrag — og fjernet der det bare var stil. */
.overl,.overline{font-size:12.5px;font-weight:600;letter-spacing:0;
  color:var(--sekundaer)}
.note-sm{font-size:var(--t-xs);color:var(--sekundaer)}
/* En lenke inne i en merknad arvet merknadens farge, og dermed
   sekundærrollens 4,5:1-gulv. En lenke er ikke metadata — og den skal
   dessuten se ut som en lenke. Fanget av rollekontrollen 5. oktober 2026. */
.note-sm a{color:var(--aksent-tekst)}
.ikon{width:20px;height:20px;flex:none}
.kbd{font-family:var(--mono);font-size:var(--t-mono);border:1px solid var(--kant);
  border-radius:var(--r-xs);padding:1px 6px;color:var(--sekundaer)}

/* ── Veiviseren og saksvisningen (v1-navn) ───────────────────── */
.viewhead{margin-bottom:20px}
.viewhead h2{font-size:var(--t-h2);margin-bottom:4px}
.viewhead p{margin:0;color:var(--dempet);font-size:var(--t-md)}
/* Sidehodet på en flate som skannes: tittelen, og ingenting mer. En
   forklaring under tittelen leses én gang og koster to linjer hver dag. */
.viewhead.smal{margin-bottom:12px}
.viewhead.smal h2{margin-bottom:0}

/* Skjemaet som lager de lagrede visningene, ved brikkene det lager. Lukket
   til noen spør — ellers er det et skjema som står åpent hele dagen for en
   handling som gjøres et par ganger i året. */
.lagrevisning{position:relative}
.lagrevisning summary{display:inline-flex;align-items:center;
  min-height:var(--trykk);padding:0 12px;cursor:pointer;
  font-size:var(--t-sm);font-weight:600;color:var(--aksent-tekst)}
.lagrevisning form{max-width:420px;padding:14px 16px;background:var(--kort);
  border:1px solid var(--haar);border-radius:var(--r-lg)}
.helpbox{background:var(--kort);border:1px solid var(--haar);border-radius:var(--r-lg);
  padding:18px 20px;box-shadow:var(--skygge)}
.prob{display:block;padding:12px 14px;border:1px solid var(--haar);
  border-radius:var(--r-sm);margin-bottom:8px;background:var(--kort);cursor:pointer;
  text-decoration:none;color:inherit}
.prob:hover{border-color:var(--aksent)}
.prob.on{border-color:var(--aksent);background:var(--felt)}
.steps{display:flex;gap:6px;margin-bottom:22px}
.steps span{flex:1;height:4px;border-radius:var(--r-xs);background:var(--felt)}
.steps span.on{background:var(--aksent)}
.hasteval{display:grid;gap:8px}
.hasteval label{display:flex;gap:12px;align-items:flex-start;padding:13px 14px;
  border:1px solid var(--haar);border-radius:var(--r-sm);background:var(--kort);
  cursor:pointer;font-weight:500}
.hasteval label:has(input:checked){border-color:var(--aksent);background:var(--felt)}
.hasteval input{margin-top:2px}
.sla{font-size:var(--t-xs);font-variant-numeric:tabular-nums}
.sla.loper{color:var(--aksent-tekst)}
.sla.stille{color:var(--dempet)}

/* ══ Oppsettklasser ═════════════════════════════════════════════
   CSP-hodet setter style-src 'self', og det blokkerer også style="…"-
   attributter — stille. Alt oppsett skjer derfor med klasser. Disse er
   det lille settet rutene trenger, med samme avstander som resten.
   ═══════════════════════════════════════════════════════════════ */
.p16{padding:16px 18px}.p18{padding:18px 20px}.p20{padding:20px 22px}
.p22{padding:22px 24px}.p26{padding:26px}.p0{padding:0}
.m0{margin:0}
.mb8{margin-bottom:8px}.mb10{margin-bottom:10px}.mb12{margin-bottom:12px}
.mb14{margin-bottom:14px}.mb16{margin-bottom:16px}.mb18{margin-bottom:18px}
.mb20{margin-bottom:20px}.mb22{margin-bottom:22px}.mb26{margin-bottom:26px}
.mt4{margin-top:4px}.mt8{margin-top:8px}.mt12{margin-top:12px}.mt14{margin-top:14px}
.mt16{margin-top:16px}.mt18{margin-top:18px}.mt20{margin-top:20px}.mt22{margin-top:22px}
.mt28{margin-top:28px}
.my8{margin:8px 0}.mt-4-mb16{margin:-4px 0 16px}.mt-6-mb16{margin:-6px 0 16px}
.flex{display:flex}.wrap{flex-wrap:wrap}.kol{flex-direction:column}
.midt{align-items:center}.topp{align-items:flex-start}.slutt{align-items:flex-end}
.sentrer{justify-content:center}.hoyrestill{justify-content:flex-end}
.g6{gap:6px}.g8{gap:8px}.g10{gap:10px}.g12{gap:12px}.g14{gap:14px}
.mlauto{margin-left:auto}.min0{min-width:0}.flex1{flex:1}
.midtstilt{text-align:center}.hoyre-tekst{text-align:right}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.rutenett-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.bredde-auto{width:auto;min-width:220px}.bredde-auto-2{width:auto;min-width:240px}
.overflow-skjult{overflow:hidden}
.ingen-strek{text-decoration:none;color:inherit}
.fw600{font-weight:600}.fw700{font-weight:700}
.dim{opacity:.7}.svak{opacity:.35}
.blekk{color:var(--blekk)}.rod-tekst{color:var(--rod-tekst)}.gul-tekst{color:var(--gul-tekst)}
.gronn-tekst{color:var(--gronn-tekst)}.aksent-tekst{color:var(--aksent-tekst)}
.hvit-tekst{color:var(--paa-aksent)}

/* Tomme tilstander. En tom skjerm uten forklaring leses som en feil. */
.tom{padding:26px;text-align:center;color:var(--dempet)}

/* Store tall på måltallkort */
.maaltall{font-size:var(--t-h2);font-weight:800;letter-spacing:-.03em;line-height:1.1}
.maaltall.rod{color:var(--rod-tekst)}

/* Brødtekst i kort */
.tekst{margin:8px 0 0;font-size:var(--t-sm);line-height:1.7}
.tekst-mb{margin:8px 0 14px;font-size:var(--t-sm)}
.liten-midt{text-align:center;color:var(--dempet);margin:0 0 16px;font-size:var(--t-xs)}

/* ── Saklisten: faste kolonner, tegnet for å skannes ─────────────────────
 *
 * Settet er fast — velg · status · sak · eier · nr · alder · frist — og det
 * er derfor kolonneoverskriften er mulig. Før v1.1.0 hadde raden et
 * varierende antall kolonner, fordi fristbrikken ble utelatt når fristen var
 * god; da sto de samme opplysningene på ulike steder fra rad til rad.
 *
 * `grid-auto-flow` er BORTE her med vilje: den fylte på med en kolonne per
 * barn, og det er nettopp det som gjorde settet variabelt.
 */
.sakrad{display:grid;
  /* Statuskolonnen er bredden på den LENGSTE statusteksten, ikke et gjett:
     «Venter på leverandør» flommet 29 px inn i tittelen på 116 px. Porten
     radjustering.mjs sier fra hvis teksten vokser forbi tallet igjen. */
  grid-template-columns:24px 152px minmax(0,1fr) 88px 72px 56px 88px;
  grid-auto-flow:row;gap:14px;
  align-items:center;text-decoration:none;color:inherit;
  border-left:3px solid transparent;padding-left:15px}
.sakrad .tittel{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:600}
/* Prioriteten er radens venstrekant, ikke en prikk i en egen kolonne. Den
   koster ingen bredde, og den leses som det den er: en egenskap ved hele
   raden. */
.sakrad.pri-rod{border-left-color:var(--rod)}
.sakrad.pri-gul{border-left-color:var(--gul)}
.sakrad.pri-bla{border-left-color:var(--bla)}
.prikk{width:8px;height:8px;border-radius:50%;background:var(--dempet)}
.prikk.rod{background:var(--rod)}.prikk.gul{background:var(--gul)}
.prikk.bla{background:var(--bla)}
.eier{font-size:var(--t-xs);color:var(--dempet);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.eier.ingen{color:var(--svak);font-style:italic}
.alder{text-align:right;color:var(--dempet)}
.alder.sen{color:var(--rod-tekst)}
.frist{text-align:right;font-size:var(--t-xs);font-weight:600}
.frist.rolig{color:var(--svak);font-weight:400}
.frist.rod{color:var(--rod-tekst)}
.frist.gul{color:var(--gul-tekst)}
.frist.bla{color:var(--bla-tekst)}
.frist.noyt{color:var(--dempet)}

/* Kolonneoverskriften. Egen flate og en sterk hårstrek under: den er en
   etikettrad, ikke en sak. */
/* v4: etikettraden er ikke lenger en egen flate med sterk strek. Den er
   tekst over en liste, og den ser slik ut. */
.kolonnehode{min-height:36px;background:transparent;
  border-bottom:1px solid var(--haar);cursor:default}
.kolonnehode .kol{font-size:12.5px;font-weight:600;letter-spacing:0;
  color:var(--sekundaer);overflow:hidden;white-space:nowrap}
.kolonnehode .kol.h{text-align:right}

/* Statistikktabellen */
.statrad{display:grid;grid-template-columns:1.4fr repeat(5,1fr) auto;gap:12px;
  align-items:center}
.statrad.hode{background:var(--felt)}

/* Segmentvelger som kan bryte linje */
.segk.wrap{flex-wrap:wrap}

/* Inndata uten type-attributt skal se ut som alle andre */
input:not([type]){width:100%;min-height:var(--trykk);padding:0 13px;font:inherit;
  font-size:var(--t-md);color:var(--blekk);background:var(--kort);
  border:1px solid var(--haar-sterk);border-radius:var(--r-sm)}
input:not([type]):focus{border-color:var(--aksent);box-shadow:0 0 0 3px var(--felt)}

@media(max-width:760px){
  .grid2,.grid4,.rutenett-4{grid-template-columns:1fr}
  /* På telefon holder tre kolonner: status, sak, frist. Nummer, eier og
     alder er ett trykk unna, og en rad som prøver sju kolonner på 360 px
     bryter -- da står kantene pent på linje fordi alle har brutt likt. */
  .sakrad{grid-template-columns:104px minmax(0,1fr) 84px;gap:10px;
    padding-left:11px}
  .sakrad .velg-sak,.sakrad .nr,.sakrad .eier,.sakrad .alder{display:none}
  .kolonnehode{display:none}
  .statrad{grid-template-columns:1fr 1fr;gap:6px}
}

/* ── Det store feltet ────────────────────────────────────────
   Ett felt som er hele poenget med siden — virksomhetens navn, søkeordet —
   får en størrelse som sier det. Apple gjør det samme i oppsettet av en ny
   enhet: ett spørsmål, ett stort felt, ett svar. */
.inn.stor{min-height:56px;font-size:var(--t-lg);padding:0 16px;border-radius:var(--r)}
.inn.stor:focus{box-shadow:0 0 0 4px var(--felt)}

/* Lesbarhet i lange sider: begrens linjelengden. Over 75 tegn per linje
   mister øyet linjen på vei tilbake. */
.view p,.view .u,.view .note-sm{max-width:72ch}
.view h2{max-width:28ch}

/* Rader som er lenker skal kjennes som rader, ikke som lenker. */
a.rad{text-decoration:none;color:inherit}
a.rad:hover .tittel{color:var(--aksent-tekst)}

/* Skjemaer i kort: feltene puster */
.kort .felt:last-of-type{margin-bottom:6px}

/* ── Wiki-tekst ──────────────────────────────────────────────
   Lange tekster som skal leses, ikke skannes. Linjelengde, luft mellom
   avsnitt, og overskrifter som skiller uten å rope. */
.wikitekst{font-size:var(--t-md);line-height:1.72;max-width:72ch}
.wikitekst h2{font-size:var(--t-h3);margin:26px 0 10px}
.wikitekst h3{font-size:var(--t-lg);margin:22px 0 8px}
.wikitekst h4{font-size:var(--t-md);margin:18px 0 6px}
.wikitekst h2:first-child,.wikitekst h3:first-child{margin-top:0}
.wikitekst p{margin:0 0 14px}
.wikitekst ul,.wikitekst ol{margin:0 0 14px;padding-left:22px}
.wikitekst li{margin-bottom:6px}
.wikitekst a{color:var(--aksent-tekst);font-weight:600}
.wikitekst code{font-family:var(--mono);font-size:var(--t-sm);background:var(--felt);
  padding:2px 6px;border-radius:var(--r-xs)}
.wikitekst pre{background:var(--felt);border:1px solid var(--haar);
  border-radius:var(--r-sm);padding:14px 16px;overflow:auto;margin:0 0 14px}
.wikitekst pre code{background:none;padding:0;font-size:var(--t-sm);line-height:1.6}
.wikitekst b{font-weight:700}

/* ══ Saksvisningen ══════════════════════════════════════════════
   Meldingstråden, svarfeltet og fanene i den. Disse klassene sto uten
   stiler i flere måneder — markupen var riktig, men ingenting traff den.
   ═══════════════════════════════════════════════════════════════ */
.bubble{background:var(--kort);border:1px solid var(--haar);border-radius:var(--r);
  padding:14px 16px;margin-bottom:12px;max-width:72ch}
.bubble.intern{background:var(--gul-flate);border-color:transparent}
.bubble .who{display:flex;gap:8px;align-items:baseline;margin-bottom:6px;
  font-size:var(--t-xs);color:var(--dempet)}
.bubble .who b{color:var(--blekk);font-size:var(--t-sm)}
.bubble p{margin:0;font-size:var(--t-md);line-height:1.65;white-space:pre-wrap}

.composer{background:var(--kort);border:1px solid var(--haar);border-radius:var(--r-lg);
  padding:16px 18px;box-shadow:var(--skygge)}
.ctabs{display:inline-flex;background:var(--felt);padding:3px;border-radius:var(--r-sm);
  gap:2px;margin-bottom:12px}
.ctab{padding:0 14px;min-height:var(--trykk);border:0;border-radius:var(--r-xs);
  background:transparent;color:var(--dempet);font:inherit;font-size:var(--t-sm);
  font-weight:600;cursor:pointer;display:inline-flex;align-items:center}
.ctab.on{background:var(--kort);color:var(--blekk);box-shadow:var(--skygge)}
.cinput{width:100%;min-height:88px;padding:12px 14px;font:inherit;font-size:var(--t-md);
  line-height:1.6;color:var(--blekk);background:var(--kort);
  border:1px solid var(--haar-sterk);border-radius:var(--r-sm);resize:vertical}
.cinput:focus{border-color:var(--aksent);box-shadow:0 0 0 3px var(--felt)}
.cfoot{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}
.actnote{font-size:var(--t-xs);color:var(--dempet);margin-top:8px;line-height:1.55}

/* Sakstypevalg i veiviseren: to store kort, ikke to radioknapper. */
.typecards{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.typecard{display:block;background:var(--kort);border:1px solid var(--haar-sterk);
  border-radius:var(--r-lg);padding:20px;cursor:pointer;text-decoration:none;color:inherit}
.typecard:hover{border-color:var(--aksent)}
.typecard .ic{width:40px;height:40px;border-radius:var(--r);background:var(--felt);
  color:var(--aksent-tekst);display:grid;place-items:center;margin-bottom:12px}
.typecard .ic svg{width:21px;height:21px}
.typecard b{display:block;font-size:var(--t-lg);margin-bottom:4px}
.typecard .d{font-size:var(--t-sm);color:var(--dempet)}

/* Køen som liste */
.qlist .rad:last-child{border-bottom:0}

/* Tabeller: plattformflaten og de juridiske dokumentene */
.tbl,.fakta{width:100%;border-collapse:collapse;font-size:var(--t-sm)}
.tbl th,.fakta th{text-align:left;font-size:12.5px;letter-spacing:0;
  color:var(--sekundaer);
  padding:10px 12px;border-bottom:1px solid var(--haar);font-weight:600}
.tbl td,.fakta td{padding:12px;border-bottom:1px solid var(--haar);vertical-align:top}
.tbl tr:last-child td,.fakta tr:last-child td{border-bottom:0}
.fakta th{width:30%;color:var(--blekk);text-transform:none;font-family:var(--sans);
  font-size:var(--t-sm);letter-spacing:0}

/* Juridiske dokumenter: lange tekster som skal kunne søkes i med Cmd+F,
   derfor alltid synlige — ingen sammenklapping. */
.dok{max-width:820px;margin:0 auto;padding:34px 26px 80px}
.dok h1{font-size:var(--t-h1);margin-bottom:8px}
.dok h2{font-size:var(--t-h3);margin:34px 0 12px;display:flex;gap:10px;align-items:baseline}
.dok h3{font-size:var(--t-lg);margin:22px 0 8px}
.dok p,.dok li{font-size:var(--t-md);line-height:1.72;max-width:72ch}
.dok p{margin:0 0 14px}
.dok ul,.dok ol{margin:0 0 14px;padding-left:22px}
.dok .nummer{font-family:var(--mono);font-size:var(--t-xs);color:var(--aksent-tekst);
  background:var(--felt);border-radius:var(--r-xs);padding:1px 8px;flex:none}
.dok .merknad{background:var(--gul-flate);border-left:3px solid var(--gul);
  padding:14px 16px;border-radius:0 var(--r-sm) var(--r-sm) 0;margin:0 0 22px;
  font-size:var(--t-sm)}
.dok .innhold{background:var(--kort);border:1px solid var(--haar);
  border-radius:var(--r-lg);padding:18px 22px;margin:0 0 26px}
.dok .innhold a{display:block;padding:5px 0;color:var(--aksent-tekst);font-weight:600;
  text-decoration:none;font-size:var(--t-sm)}

/* Avkryssingen i opprettelsesskjemaet */
.avtale{display:flex;gap:12px;align-items:flex-start;padding:14px;
  border:1px solid var(--haar);border-radius:var(--r-sm);background:var(--felt);
  cursor:pointer;font-size:var(--t-sm);font-weight:400;margin:20px 0 0}
.avtale input{width:20px;height:20px;flex:none;margin-top:1px;accent-color:var(--aksent)}

.p4{padding:4px}

/* ══ Elementer uten klasse ══════════════════════════════════════
   Et felt eller en knapp uten klasse skal ikke se ut som 1998. Dette er
   sikkerhetsnettet, ikke unnskyldningen for å droppe klassen.
   ═══════════════════════════════════════════════════════════════ */
button:not([class]),input[type=submit]:not([class]){
  min-height:var(--trykk);padding:0 18px;border-radius:var(--r-sm);
  border:1px solid var(--haar-sterk);background:var(--kort);color:var(--blekk);
  font:inherit;font-size:var(--t-sm);font-weight:600;cursor:pointer}
button:not([class]):hover{background:var(--felt)}
table:not([class]){width:100%;border-collapse:collapse;font-size:var(--t-sm)}
table:not([class]) td,table:not([class]) th{padding:10px 12px;
  border-bottom:1px solid var(--haar);text-align:left}

/* ══ Bunnlinjen ═══════════════════════════════════════════════════
   Én mal for alle flater. Sentrert, fordi den ikke konkurrerer med noe —
   den er der for den som leter etter den.
   ═══════════════════════════════════════════════════════════════ */
.bunn{border-top:1px solid var(--haar);text-align:center;margin-top:auto;
  /* Det trygge området, nedre kant. Landingssidestandard v1.2, L7: «foten
     legger env(safe-area-inset-bottom) til sin nedre fyll». Uten det havner
     opphavsretten og de fire juridiske lenkene under hjemmestripen på en
     telefon uten hjemknapp — lenker som finnes, men ikke kan trykkes. */
  padding:36px calc(24px + env(safe-area-inset-right, 0px))
          calc(44px + env(safe-area-inset-bottom, 0px))
          calc(24px + env(safe-area-inset-left, 0px))}
.bunn .bmerke{display:inline-flex;align-items:center;gap:10px;text-decoration:none;min-height:var(--trykk);
  color:var(--blekk);margin-bottom:10px}
.bunn .bmerke .hvelvet{width:24px;height:24px;color:var(--blekk);flex:none}
.bunn .bmerke .hvelvet svg{width:100%;height:100%}
.bunn .bmerke b{font-size:var(--t-lg);letter-spacing:-.03em}
.bunn .bsagt{margin:0 0 18px;font-size:var(--t-sm);color:var(--dempet)}
.bunn .blenker{display:flex;gap:24px;justify-content:center;flex-wrap:wrap;
  margin-bottom:16px}
.bunn .blenker a{font-size:var(--t-sm);font-weight:600;color:var(--blekk);
  text-decoration:none;min-height:var(--trykk);display:inline-flex;align-items:center}
.bunn .blenker a:hover{color:var(--aksent-tekst)}
.bunn .rett{margin:0;font-size:var(--t-xs);color:var(--dempet)}

/* ── 2.5.5 Forbedret: lenker som står ALENE ───────────────────────────
 *
 * Kriteriet unntar en lenke som står «i en setning». Fire steder i
 * produktet så ut som løpende tekst og var det ikke: kontaktadressen i
 * bunnlinjen står alene i sin egen `<p>`, adressen i dokumenttabellene
 * alene i sin `<td>`, innholdsfortegnelsen én lenke per `<li>`, og
 * dokumentnavigasjonen to lenker i en `<nav>`.
 *
 * Målt høyde før rettingen: 13–38,5 px. Ingen av dem er en setning, og
 * unntaket gjelder derfor ingen av dem. Jeg vurderte å utvide unntaket i
 * porten i stedet — det ville gjort alle fire grønne uten å endre noe for
 * den som sikter. Det er nøyaktig den handelen resten av denne loggen
 * handler om, og den gjøres ikke her.
 */
.bkontakt a,
.innhold a,
nav[aria-label="Dokumenter"] a,
.dok table.fakta td a{
  min-height:var(--trykk);display:inline-flex;align-items:center;
  text-decoration:none}
.bkontakt a:hover,.innhold a:hover,
nav[aria-label="Dokumenter"] a:hover,.dok table.fakta td a:hover{
  text-decoration:underline}
@media(max-width:600px){
  .bunn{padding:28px calc(16px + env(safe-area-inset-right, 0px))
          calc(36px + env(safe-area-inset-bottom, 0px))
          calc(16px + env(safe-area-inset-left, 0px))}
  .bunn .blenker{gap:14px 18px}
}

/* Ferdigsvar over svarfeltet. De ligger der operatøren allerede ser, ikke i
   en meny hun må åpne — et ferdigsvar hun må lete etter, brukes ikke. */
.ferdigrad{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.ferdigrad .ferdig{border:0;cursor:pointer;font:inherit;font-size:var(--t-xs);
  font-weight:600}
.ferdigrad .ferdig:hover{background:var(--felt);color:var(--aksent-tekst)}

/* ── Chat ────────────────────────────────────────────────────
   Bobler som i en samtale, ikke rader som i en logg. Kundens meldinger
   til høyre, supportens til venstre — det er slik alle andre chatter ser
   ut, og en chat som ser annerledes ut, må læres. */
.chatrute{padding:18px;max-height:52vh;overflow-y:auto;display:flex;
  flex-direction:column;gap:10px}
.chatboble{max-width:72%;padding:10px 14px;border-radius:var(--r);
  background:var(--felt)}
.chatboble.kunde{align-self:flex-end;background:var(--felt)}
.chatboble.operator{align-self:flex-start}
.chatboble .who{font-size:var(--t-xs);color:var(--dempet);margin-bottom:4px}
.chatboble p{margin:0;font-size:var(--t-md);line-height:1.6;white-space:pre-wrap}
.chatsystem{align-self:center;margin:0;font-size:var(--t-xs);color:var(--dempet);
  font-style:italic}
@media(max-width:600px){.chatboble{max-width:88%}}

/* ══ Rutenettet ═══════════════════════════════════════════════════
   Alt som består av flere like rader, legges på samme rutenett. Uten det
   flyter feltene ut etter sin egen bredde, og øyet må lete etter starten
   på hver linje.

   Åpningstidene var det tydeligste eksempelet: sju rader der hver dag
   hadde sin egen bredde, fordi «Mandag» og «Onsdag» ikke er like lange.
   ═══════════════════════════════════════════════════════════════ */

/* Rad med etikett, felt, og felt. Etiketten har fast bredde, slik at alle
   radene begynner på samme sted. */
.rutenett{display:grid;gap:10px 12px;align-items:center}
.rutenett.dag{grid-template-columns:180px 1fr auto 1fr}
.rutenett.par{grid-template-columns:200px 1fr}
.rutenett .midt-tekst{color:var(--dempet);font-size:var(--t-sm);text-align:center}

/* Avkryssing med fast bredde, til bruk i et rutenett. Boksen står på samme
   sted i hver rad — ellers hopper den etter hvor langt ordet er. */
.avkryss.fast{width:100%;margin:0}

/* Felter i et rutenett skal ikke ha egen bunnmarg — rutenettet eier
   avstanden. To avstandssystemer i samme skjema gir skjeve rader. */
.rutenett .felt{margin-bottom:0}

@media(max-width:760px){
  .rutenett.dag{grid-template-columns:1fr 1fr;gap:8px}
  .rutenett.dag .midt-tekst{display:none}
  .rutenett.dag > label:first-child{grid-column:1 / -1}
  .rutenett.par{grid-template-columns:1fr}
}

/* Kvittering etter en handling. Står øverst i innholdet, vises én gang.
   Grønn kant og et symbol — den skal sees uten å leses. */
.melding.kvittering{display:flex;gap:10px;align-items:flex-start;
  background:var(--gronn-flate);border-left-color:var(--gronn-tekst);
  margin-bottom:18px}
.melding.kvittering .ikon{color:var(--gronn-tekst);flex:none;margin-top:2px}
.melding.kvittering.avvist{background:var(--rod-flate);border-left-color:var(--rod-tekst)}
.melding.kvittering.avvist .ikon{color:var(--rod-tekst)}
.melding.kvittering.venter{background:var(--gul-flate);border-left-color:var(--gul-tekst)}
.melding.kvittering.venter .ikon{color:var(--gul-tekst)}

/* ── Køen på tastatur ─────────────────────────────────────────
   Avkryssing lengst til venstre, synlig bare ved sveving eller valg —
   ellers er den støy på en rad som skal skannes. Den aktive raden har en
   ramme, den valgte en flate. */
.sakrad .velg-sak{width:22px;height:22px;display:grid;place-items:center;
  flex:none;margin-right:-4px;opacity:0;transition:opacity .12s}
.sakrad:hover .velg-sak,.sakrad.valgt .velg-sak,.sakrad.aktiv .velg-sak,
.sakrad:focus-within .velg-sak{opacity:1}
.sakrad .sakvelger{width:16px;height:16px;margin:0;accent-color:var(--aksent);
  cursor:pointer}
.sakrad.aktiv{box-shadow:inset 0 0 0 2px var(--aksent)}
.sakrad.valgt{background:var(--felt)}

/* Samlelinjen. Fast nederst mens noe er valgt. Antallet står først, fordi
   det er det man sjekker før man trykker «Løs». */
.samlelinje{position:sticky;bottom:12px;z-index:5;display:flex;gap:8px;
  align-items:center;flex-wrap:wrap;padding:10px 14px;margin-top:14px;
  background:var(--hev);border:1px solid var(--haar-sterk);
  border-radius:var(--r);box-shadow:var(--skygge-hev)}
.samlelinje .antall{font-size:var(--t-sm);color:var(--dempet);margin-right:6px}
.samlelinje .antall b{color:var(--blekk)}

/* Hurtigtastene. Skjult til noen trykker ?, og en linje ellers. */
.hurtigtaster{display:none;gap:16px;flex-wrap:wrap;margin-top:12px;
  font-size:var(--t-xs);color:var(--dempet)}
.hurtigtaster.vis{display:flex}
.hurtigtaster kbd{display:inline-block;min-width:20px;padding:1px 6px;
  margin-right:3px;border:1px solid var(--haar-sterk);border-bottom-width:2px;
  border-radius:4px;background:var(--felt);font-family:var(--mono);
  font-size:11px;color:var(--blekk);text-align:center}
@media(max-width:760px){.hurtigtaster{display:none !important}
  .sakrad .velg-sak{opacity:1}}

/* Lagrede visninger: brikker over køen. Delte har ingen prikk — prikken
   betyr «bare deg». */
.visninger{display:flex;gap:8px;flex-wrap:wrap}
.visninger .brikke{text-decoration:none;min-height:var(--trykk)}

/* ── Installer-hintet ─────────────────────────────────────────
   Ett kort, øverst, én gang. Stegene er en nummerert liste med de faktiske
   trykkene for enheten — ikke «bruk Del-menyen», som ikke hjelper den som
   ikke vet hvor den er. */
.installer{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;
  margin-bottom:18px;background:var(--felt);border:1px solid var(--haar);
  border-left:3px solid var(--aksent);border-radius:var(--r)}
.installer .ik{width:40px;height:40px;flex:none;color:var(--aksent-tekst)}
.installer .ik svg{width:100%;height:100%}
.installer b{display:block;margin-bottom:2px}
.installer p{margin:0 0 8px;font-size:var(--t-sm);color:var(--dempet)}
.installer .steg{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:5px}
.installer .steg li{display:flex;gap:9px;align-items:baseline;font-size:var(--t-sm)}
.installer .steg .n{flex:none;width:20px;height:20px;border-radius:50%;
  background:var(--aksent);color:var(--paa-aksent);font-size:11px;font-weight:700;
  display:inline-grid;place-items:center;transform:translateY(3px)}
.installer .varig{margin:8px 0 0}
.installer > .knapp{margin-left:auto;flex:none}
@media(max-width:600px){.installer{flex-wrap:wrap}.installer > .knapp{margin-left:54px}}

/* ── Valg av slag ─────────────────────────────────────────────
   To kort, ingen forhåndsvalgt. Forklaringen står i kortet, ikke i en
   hjelpetekst under — den som skal velge, skal ikke måtte lete etter
   forskjellen. */
.slagvalg{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.slagkort{position:relative;display:block;cursor:pointer}
.slagkort input{position:absolute;opacity:0;width:0;height:0}
.slagkort .i{display:block;padding:16px 18px;border:1px solid var(--haar-sterk);
  border-radius:var(--r);background:var(--kort);min-height:100%}
.slagkort .i b{display:block;margin-bottom:5px;font-size:var(--t-md)}
.slagkort .i .u{color:var(--dempet);font-size:var(--t-sm)}
.slagkort:hover .i{border-color:var(--aksent)}
.slagkort input:checked + .i{border-color:var(--aksent);background:var(--felt);
  box-shadow:inset 0 0 0 1px var(--aksent)}
.slagkort input:focus-visible + .i{box-shadow:0 0 0 3px var(--felt)}
@media(max-width:600px){.slagvalg{grid-template-columns:1fr}}

/* Hvorfor installere. Tre grunner, ikke en tekstblokk — den som skal bruke
   tjue sekunder på tre trykk, vil vite hva hun får igjen. */
.installer .hvorfor{margin:0 0 12px;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:6px}
.installer .hvorfor li{font-size:var(--t-sm);color:var(--dempet);
  padding-left:16px;position:relative}
.installer .hvorfor li::before{content:"";position:absolute;left:0;top:8px;
  width:6px;height:6px;border-radius:50%;background:var(--aksent)}
.installer .hvorfor b{display:inline;color:var(--blekk)}

/* Ny versjon. Fast nederst, over alt annet. Den skal sees, men den skal
   ikke laste noe på nytt av seg selv — en operatør midt i et svar skal ikke
   miste teksten fordi vi rullet ut noe. */
.nyversjon{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);
  z-index:60;display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  max-width:calc(100vw - 32px);padding:11px 16px;background:var(--hev);
  border:1px solid var(--haar-sterk);border-radius:var(--r);
  box-shadow:var(--skygge-hev);font-size:var(--t-sm)}
@media(max-width:600px){.nyversjon{left:12px;right:12px;bottom:12px;transform:none}}

/* Var dette til hjelp. Én linje under teksten, ikke en boks — spørsmålet
   skal ikke konkurrere med svaret det spør om. */
.hjalp{display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  padding:12px 16px;border-top:1px solid var(--haar)}

/* Nummerert forklaring. Brukes der en knapp gjør flere ting, og brukeren
   skal vite hva før hun trykker. */
.steg-liste{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.steg-liste li{font-size:var(--t-sm);color:var(--dempet)}
.steg-liste b{color:var(--blekk)}

/* Kode til å kopiere. Bryter aldri linjer — en kontrollsum med linjeskift
   midt i er ubrukelig når den limes inn. */
.kode{margin:10px 0 0;padding:12px 14px;background:var(--felt);
  border:1px solid var(--haar);border-radius:var(--r-sm);
  font-family:var(--mono);font-size:12px;line-height:1.7;
  overflow-x:auto;white-space:pre}

/* Semantisk søk. Et rolig panel over søkefeltet — det er et tilbud, ikke et
   krav, og skal ikke se ut som en feilmelding når det er av. */
.semantisk{padding:14px 16px;background:var(--felt);border-radius:var(--r);
  border:1px solid var(--haar)}
.semantisk .sem-status{font-size:var(--t-sm);color:var(--dempet);flex:1;min-width:200px}
.semantisk .sem-status.ok{color:var(--gronn-tekst)}
.semantisk .sem-status.feil{color:var(--rod-tekst)}
.semantisk .note-sm{margin:8px 0 0}
.sem-stolpe{height:4px;border-radius:2px;background:var(--haar);overflow:hidden;
  margin-top:10px}
.sem-stolpe i{display:block;height:100%;width:0;background:var(--aksent);
  transition:width .25s}

/* Flerlinjet feilforklaring. Beholder linjeskiftene — en liste over fem
   filer på én linje er ikke noe noen leser. */
.feilliste{white-space:pre-wrap;font-family:var(--mono);font-size:var(--t-xs);
  line-height:1.6;margin-top:8px;color:var(--blekk)}

/* Framdrift under modellhenting. Bruker samme stolpe som det semantiske
   panelet — samme sak, samme utseende. */
.hentstatus{margin-top:14px}
.hentstatus .feilliste{max-height:180px;overflow:auto}

/* Betydningstreff under ordtreffene. */
.sem-treff:empty{display:none}
.sem-treff .brikke{flex:none}

/* Hva enheten klarer. Én linje per måling, med svaret først — det er det
   man leter etter, og forklaringen er for den som lurer på hvorfor. */
.evneliste .rad{gap:12px}
.evneliste .brikke{flex:none;min-width:52px;justify-content:center}
.melding.evnesvar{margin-bottom:14px}

/* ── Saksahandlinger i fast rekkefølge ────────────────────────
   Én per linje, alltid i samme rekkefølge. Den som ikke kan gjøres, blir
   stående med grunnen under — en handling som forsvinner, får operatøren
   til å lure på om hun husket feil. */
.sakshandling{display:flex;gap:10px;align-items:center;min-height:var(--trykk);
  padding:8px 12px;margin-bottom:6px;border-radius:var(--r-sm);
  border:1px solid var(--haar-sterk);background:var(--kort);
  color:var(--blekk);font-size:var(--t-sm);font-weight:600;
  text-decoration:none}
.sakshandling:hover{background:var(--felt)}
.sakshandling.fremhevet{background:var(--aksent);color:var(--paa-aksent);
  border-color:transparent}
.sakshandling.fremhevet:hover{opacity:.92;background:var(--aksent)}
.sakshandling kbd{margin-left:auto;font-family:var(--mono);font-size:11px;
  padding:1px 6px;border:1px solid var(--haar-sterk);border-bottom-width:2px;
  border-radius:4px;background:var(--felt);color:var(--blekk)}
.sakshandling.fremhevet kbd{background:var(--paa-aksent-svak);
  border-color:transparent;color:var(--paa-aksent)}
/* Av: ikke grå ut til ulesbarhet — grunnen skal kunne leses. */
.sakshandling.av{flex-direction:column;align-items:flex-start;gap:2px;
  background:transparent;border-style:dashed;cursor:default;
  color:var(--dempet);font-weight:500}
.sakshandling.av small{font-size:var(--t-xs);color:var(--svak)}

/* ══ Mobil: bygget for tommelen ════════════════════════════════
   Flatene var responsive — de brøt riktig og rullet ikke sideveis. Men
   ingenting var tegnet for at en tommel er rundt elleve millimeter bred og
   treffer omtrent der den sikter.

   Tre regler, og de gjelder bare under 760 piksler:

     1. Ingen trykkflate under 44 piksler. Det er Apples minstemål, og det
        er ikke en anbefaling — under det bommer folk.
     2. Det viktigste innenfor tommelens rekkevidde, altså nederst.
     3. Ingenting viktig i hjørnene øverst. Der når hun ikke uten å bytte
        grep, og et grepbytte er der telefoner mistes.
   ══════════════════════════════════════════════════════════════ */
@media (max-width: 760px) {
  /* 1 · Minstemål på alt som kan trykkes. */
  .knapp, .velg, .filt, .act, .sakshandling, .rad, .brikke[href],
  .faner a, .side .i, .bruker, .steg-liste a, select.inn, input[type="checkbox"] {
    min-height: 44px;
  }
  .knapp.liten, .velg, .filt { padding-left: 16px; padding-right: 16px; }

  /* Avkryssingen i køen: alltid synlig, og stor nok. Under 44 piksler er
     den et sted man bommer og åpner saken i stedet. */
  .sakrad .velg-sak { width: 44px; height: 44px; opacity: 1; margin-right: 0; }
  .sakrad .sakvelger { width: 22px; height: 22px; }

  /* Rader får luft. To rader som er 40 piksler høye, er to rader man
     treffer feil av. */
  .rad { padding-top: 12px; padding-bottom: 12px; }

  /* 2 · Samlelinjen nederst, over tommelen — ikke øverst der den var. */
  .samlelinje {
    position: fixed; left: 8px; right: 8px; bottom: 8px; z-index: 30;
    margin: 0; padding: 12px; border-radius: var(--r);
    box-shadow: var(--skygge-hev);
  }
  .samlelinje .knapp { flex: 1 1 auto; justify-content: center; }
  /* Plass under listen, så siste rad ikke ligger under linjen. */
  .kort:has(.sakrad) { margin-bottom: 96px; }

  /* Handlingspanelet på en sak: den fremhevede nederst, der tommelen er. */
  .sakshandling { min-height: 48px; }

  /* 3 · Skjemafelt får samme minstemål, og skrift som ikke utløser
     automatisk innzooming i Safari. Under 16 piksler zoomer iOS inn ved
     fokus, og da har hun mistet oversikten. */
  .inn, textarea, select {
    min-height: 44px;
    font-size: 16px;
  }
  textarea { min-height: 120px; }

  /* Faner blir rullbare i stedet for å brekke. En fanelinje som går over
     to linjer, flytter alt under seg når man bytter fane. */
  .faner {
    display: flex; overflow-x: auto; flex-wrap: nowrap;
    scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  .faner::-webkit-scrollbar { display: none; }
  .faner a, .faner span { white-space: nowrap; flex: none; }
}

/* Under 400 piksler: de minste telefonene. Her er det plass til én ting
   om gangen, og knapper side om side blir to halve knapper. */
@media (max-width: 400px) {
  .samlelinje { flex-direction: column; align-items: stretch; }
  .samlelinje .knapp { width: 100%; }
  .flex.g8, .flex.g10 { flex-wrap: wrap; }
}

/* Vedlegg på en sak. Filnavnet er lenken — det er det folk sikter på. */
.vedleggsbolk input[type="file"]{padding:8px 10px;font-size:var(--t-sm)}
/* ── Lenken i en bolkrad fyller radhøyden ────────────────────────────
 *
 * Målt 5. oktober 2026 på den nye eiendelsbolken: lenken var 95 × 17 px, mot
 * kravet 44 × 44 (WCAG 2.2 · 2.5.5 Forbedret).
 *
 * Vedleggsbolken har hatt nøyaktig samme form siden den ble bygget, og ingen
 * port hadde sett den — **fordi ingen fixture gjengir en sak med vedlegg**.
 * Feilen ble synlig først da eiendelsbolken kom inn i en fixture, og rettingen
 * her treffer begge, fordi de deler regelen.
 *
 * Det er den samme lærdommen som alt annet: det som ikke er i fiksturen, er
 * ikke målt — og «ingen port har meldt det» betyr ikke at det ikke finnes. */
.vedleggsbolk .rad .t,.eiendelsbolk .rad .t{color:var(--aksent-tekst);
  text-decoration:none;display:inline-flex;align-items:center;
  min-height:var(--trykk)}
.vedleggsbolk .rad .t:hover,.eiendelsbolk .rad .t:hover{text-decoration:underline}
/* Eiendelsbolken på saksskjermen deler form med vedleggsbolken: samme
   overskrift, samme kort, samme radhøyde. To seksjoner som gjør det samme —
   lister noe som henger ved saken, og lar deg legge til eller fjerne — skal
   ikke se ut som to ulike ting. */
.eiendelsbolk select{max-width:min(100%,460px)}

/* ── Rapportark ───────────────────────────────────────────────
   Tegnet for å skrives ut. På skjerm er det et kort; på papir er det et
   ark uten menyer, knapper eller farger som spiser toner. */
.rapportark{background:var(--kort);border:1px solid var(--haar);
  border-radius:var(--r);padding:28px 32px}
.rapporttopp{display:flex;justify-content:space-between;align-items:baseline;
  padding-bottom:14px;margin-bottom:20px;border-bottom:2px solid var(--blekk)}
.rapporttopp b{font-size:var(--t-lg)}
.rapporttopp span{color:var(--dempet);font-size:var(--t-sm)}
.noekkeltall{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;
  margin-bottom:24px}
.noekkeltall div{text-align:center;padding:16px;background:var(--felt);
  border-radius:var(--r-sm)}
.noekkeltall b{display:block;font-size:30px;letter-spacing:-.03em;line-height:1.1;
  font-variant-numeric:tabular-nums}
.noekkeltall span{font-size:var(--t-xs);color:var(--dempet)}
.rapporttabell{width:100%;border-collapse:collapse;font-size:var(--t-sm);
  font-variant-numeric:tabular-nums}
.rapporttabell th{text-align:left;padding:8px 10px;border-bottom:1px solid var(--haar-sterk);
  font-size:var(--t-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--dempet)}
.rapporttabell td{padding:8px 10px;border-bottom:1px solid var(--haar)}
/* Tallkolonner høyrestilles. Tabellsifre alene er ikke nok: er kolonnen
   venstrestilt, står enerplassen i «7» og i «142» fortsatt ikke over
   hverandre, og øyet kan ikke sammenligne to rader uten å lese dem. */
.rapporttabell th.t,.rapporttabell td.t{text-align:right}
.rapportnote{margin-top:16px;font-size:var(--t-xs);color:var(--dempet)}

@media print{
  /* Ut med alt som ikke er rapporten. Et utskrevet dashbord med menyer er
     ikke dokumentasjon, det er et skjermbilde. */
  .side, .actions, .topp, .faner, .skuffedekke, .installer, .nyversjon { display:none !important }
  .app, .view { display:block !important; height:auto !important; overflow:visible !important }
  .rapportark { border:0; padding:0 }
  .noekkeltall div { background:transparent; border:1px solid #999 }
  body { background:#fff; color:#000 }
}

/* Fristrader. Tallet er det man endrer, så det skal være smalt og tydelig —
   ikke et felt som ser ut som det tar en setning. */
.fristrad{gap:16px;flex-wrap:wrap}
.fristfelt{display:flex;align-items:center;gap:8px;font-size:var(--t-sm)}
.fristfelt .inn{width:88px;text-align:right}
.fristfelt .enhet{color:var(--dempet)}

/* En rad man velger mellom. Hele raden er klikkflaten, ikke bare den lille
   sirkelen — 44 piksler gjelder også for radioknapper. */
.velgrad{cursor:pointer}
.velgrad input{flex:none;width:18px;height:18px;accent-color:var(--aksent)}

/* ── CIRONs bevegelsessignatur (design-regler v1.4 R9b) ──────────
   Slektskapet uten varemerket: to ringer som går hver sin vei, og en
   sveip rundt. Ingen merke i sentrum, ingen wedge, ingen eiker.

   Fargen er Nironas egen aksent, ikke CIRONs teal. Deler vi farge, leses
   vi som samme produkt; deler vi form, leses vi som samme hus.

   Kurven er den fra ciron.no. Den er det som gjør at bevegelsen kjennes
   igjen selv når figuren er 22 piksler. */
.hjul{width:22px;height:22px;flex:none;display:block;color:var(--aksent-hev)}
.hjul__ring{stroke:currentColor;stroke-width:1.25;opacity:.55;
  transform-origin:12px 12px}
.hjul__ut{animation:hjul-ut 9s linear infinite}
.hjul__inn{animation:hjul-inn 6s linear infinite;opacity:.35}
.hjul__sveip{stroke:currentColor;stroke-width:1.75;stroke-linecap:round;
  transform-origin:12px 12px;
  animation:hjul-sveip 3.2s cubic-bezier(.65,0,.35,1) infinite}
@keyframes hjul-ut{to{transform:rotate(360deg)}}
@keyframes hjul-inn{to{transform:rotate(-360deg)}}
@keyframes hjul-sveip{to{transform:rotate(360deg)}}

/* Stanser rotasjonen, men lar sveipen puste — R9b sier uttrykkelig at den
   kan pulsere i stedet. En helt stillestående figur ser ut som noe som
   har hengt seg opp. */
@media (prefers-reduced-motion: reduce){
  .hjul__ut,.hjul__inn{animation:none}
  .hjul__sveip{animation:hjul-puls 2.4s ease-in-out infinite}
}
@keyframes hjul-puls{0%,100%{opacity:.35}50%{opacity:1}}

/* ── CIRONs varemerke, orbiten (design-regler v1.4 R9a) ──────────
   Den roterende sirkelen fra ciron.no, i full struktur: ytre ring i 60 s,
   indre motsatt vei i 38 s, fire eiker, sveipen, og CIRON-merket i sentrum
   med diagonalmasken. Gjengis uendret — det er varemerket, ikke en figur.

   ── Hvorfor den står her og ikke i hvert ark ────────────────────
   M121. Den sto i TRE ark: apex.css, inngang.css og shell.css. Atten
   linjer, ordrett like — nesten:

     inngang.css   animation:sweep 6s cubic-bezier(.65,0,.35,1)
     apex.css      animation:sweep 6s cubic-bezier(.4,0,.2,1)
     shell.css     animation:sweep 6s cubic-bezier(.4,0,.2,1)

   R9b navngir `.65,0,.35,1` som kurven fra ciron.no. To av tre kopier var
   altså feil mot standarden, og varemerket beveget seg ulikt på
   innloggingen og inne i appen.

   Porten porter/dublettstil.mjs kunne ikke se det: de tre arkene lastes
   aldri på samme side, og den sammenligner bare ark som gjør det. Det er
   riktig avgrensning for den porten — og hullet den etterlater, er
   nøyaktig dette. Ett ark som alle flater laster, lukker det.
   ═══════════════════════════════════════════════════════════════ */
.orbit{width:100%;height:100%;overflow:visible;display:block}
.orbit__ring{fill:none;stroke:var(--haar-sterk);stroke-width:3}
.orbit__ring--brand{fill:none;stroke:var(--blekk);stroke-width:26}
.orbit__wedge{fill:var(--slekt)}
.orbit__spoke{stroke:var(--slekt);stroke-width:2.5;opacity:.3}
.orbit__node{fill:var(--aksent-hev)}
.orbit__node--soft{fill:var(--dempet);opacity:.5}
.orbit__rotor--slow{animation:spin 60s linear infinite;transform-origin:200px 200px}
.orbit__rotor--fast{animation:spin-rev 38s linear infinite;transform-origin:200px 200px}
.orbit__sweep{fill:none;stroke:var(--aksent-hev);stroke-width:5;stroke-linecap:round;
  stroke-dasharray:60 460;animation:sweep 6s cubic-bezier(.65,0,.35,1) infinite}
.orbit__pulse{animation:node-pulse 3.2s cubic-bezier(.4,0,.2,1) infinite;
  transform-origin:center;transform-box:fill-box}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes spin-rev{to{transform:rotate(-360deg)}}
@keyframes sweep{to{stroke-dashoffset:-520}}
@keyframes node-pulse{0%,100%{opacity:.35;transform:scale(1)}45%{opacity:1;transform:scale(1.45)}}
@media(prefers-reduced-motion:reduce){.orbit *{animation:none!important}}

/* Gjenopprettingskodene, vist én gang. Flerleie v1.6, 10g vilkår j.

   Monospace og god luft, fordi de skal leses av et menneske som skriver dem
   av for hånd — O mot 0 og I mot 1 er den feilen som koster. Alfabetet i
   lib/sesjon.ts utelater dem allerede; formatet her gjør resten. */
.kodeliste{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:10px}
.kodeliste code{font-family:var(--mono);font-size:var(--t-md);
  letter-spacing:.06em;background:var(--felt);border:1px solid var(--haar);
  border-radius:var(--r-sm);padding:12px 14px;text-align:center;
  user-select:all}

/* ── Køens hode ──────────────────────────────────────────────────────
 *
 * Én linje: tittelen, segmentvalget, de lagrede visningene og skjemaet som
 * lager dem. Det var fire blokker over hverandre og 180 px før den første
 * saken — på den flaten en operatør står i hele arbeidsdagen.
 */
.kolinje{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-bottom:14px;min-height:var(--trykk)}
.kolinje h2{font-size:var(--t-h3);margin:0;white-space:nowrap}
.kolinje .segk,.kolinje .visninger{margin:0}
/* Ingen `margin-left:auto`: den dyttet skjemaet til høyre kant, og da
   brøt linjen i to på alt under 1400 px. Det skulle spare en linje. */
.kolinje .lagrevisning{margin-left:0}
.kolinje .lagrevisning form{position:absolute;z-index:6;margin-top:6px}
@media(max-width:760px){
  .kolinje{gap:10px}}

/* ══ Eiendelsraden ═══════════════════════════════════════════════════════

   Samme form som saksraden, og av samme grunn: et register skannes nedover,
   og øyet følger en kant. Kolonnene er faste.

   Kritikalitetskolonnen er 152 px, som statuskolonnen i køen — den lengste
   teksten er «Kritisk», og bredden er satt av den lengste på BEGGE språk
   («Important»), ikke av den lengste på norsk.

   Venstrekanten bærer kritikaliteten, slik saksraden bærer prioriteten: den
   koster ingen bredde, og den leses som det den er — en egenskap ved hele
   raden. */
.eiendelsrad{display:grid;
  grid-template-columns:152px minmax(0,1fr) 128px 128px 88px;
  grid-auto-flow:row;gap:14px;align-items:center;
  text-decoration:none;color:inherit;
  border-left:3px solid transparent;padding-left:15px}
.eiendelsrad .tittel{display:block;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-weight:600}
.eiendelsrad.krit-rod{border-left-color:var(--rod)}
.eiendelsrad.krit-gul{border-left-color:var(--gul)}
.eiendelsrad.krit-bla{border-left-color:var(--bla)}
.eistatus{font-size:var(--t-xs);color:var(--dempet);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.eisaker{font-size:var(--t-xs);color:var(--dempet);text-align:right;
  white-space:nowrap}
/* Ingen åpne saker er en strek, ikke en null. En null leses som et tall man
   skal gjøre noe med. */
.eisaker.ingen{color:var(--svak)}

/* ══ Vaktraden ═══════════════════════════════════════════════════════════

   Tre kolonner: tilstand, hvem, tidsrom. Tidsrommet står i monoskrift og på
   høyre kant, slik hvert annet tall i produktet gjør — klokkeslett
   sammenlignes nedover, og da må sifrene stå under hverandre. */
.vaktrad{display:grid;grid-template-columns:152px minmax(0,1fr) 148px;
  grid-auto-flow:row;gap:14px;align-items:center}
.vaktrad .tittel{display:block;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-weight:600}
.vakttid{text-align:right;color:var(--dempet);white-space:nowrap}

/* ══ Rader på smal skjerm ═══════════════════════════════════════════════

   ── Hva som var galt, målt 5. oktober 2026 ───────────────────────────

   Kundeflaten ved 900 px: hver sakstittel brøt ETT ORD PER LINJE, og
   «41 min siden» og «#4811» lå oppå tittelen.

       Skriveren
       i
       3.
       etasje
       svarer
       ikke

   Årsaken er `minmax(0,1fr)` på tittelkolonnen sammen med auto-kolonner
   for tid og nummer: auto-kolonnene tar bredden sin fra innholdet og gir
   ikke etter, så det er tittelen som krymper — helt til null.

   `minmax(0,1fr)` er riktig i en bred rad. Den er det som gjør at en lang
   tittel ikke dytter nummeret ut av raden. På en smal rad blir den den
   motsatte feilen, og **ingen bredde er riktig for begge** — raden må
   skifte form.

   ── Hvorfor 1000 px, og hvorfor det er et ærlig tall ─────────────────

   Det er bredden der en rad med fire kolonner slutter å ha plass til en
   lesbar tittel: 116 px status, 88 + 56 for tid og nummer, luft — og
   under 1000 px blir det igjen under 40 tegn til tittelen.

   Tallet gjelder VINDUET, og raden står i et felt som er smalere enn
   vinduet. Det er samme svakhet som statuslinjen hadde, og den er ført:
   under dette punktet stables raden, og `porter/overlapp.mjs` måler ved
   fem bredder at ingen tekst havner oppå en annen uansett.
   ════════════════════════════════════════════════════════════════════ */
@media (max-width:1000px){
  /*
   * Flex og ikke rutenett.
   *
   * Første forsøk beholdt rutenettet og tvang tid og nummer ned i
   * tittelkolonnen. De fikk da hver sin rad, og hver sak ble tre linjer høy
   * med to nesten tomme. Flex med `wrap` lar dem dele den andre linjen, som
   * er det de gjør i enhver liste på en telefon.
   *
   * Rutenettet er riktig på bred skjerm — det er det som gir kolonnene én
   * felles kant å skanne nedover. Her finnes det ikke kolonner å skanne.
   */
  .rad,.row{display:flex;flex-wrap:wrap;align-items:center;
    column-gap:12px;row-gap:2px}
  .rad>.brikke,.row>.brikke{order:1;flex:none;justify-self:auto}
  .rad>.min0,.row>.min0{order:2;flex:1 1 55%;min-width:0}
  .rad>.mono,.row>.mono,
  .rad>.mlauto,.row>.mlauto,
  .rad>.note-sm,.row>.note-sm{order:3;justify-self:auto;text-align:left}

  .sakrad{display:flex;flex-wrap:wrap;align-items:center;
    column-gap:12px;row-gap:2px}
  .sakrad>.brikke{order:1;flex:none}
  .sakrad>*{order:3}
  .sakrad>.velg-sak{order:0;flex:none}
  .sakrad>.brikke{order:1}
  .sakrad>.min0{order:2;flex:1 1 55%;min-width:0}
  .sakrad .tittel{min-width:0}
  .sakrad>.eier,.sakrad>.nr,.sakrad>.alder,.sakrad>.frist{
    text-align:left;font-size:var(--t-xs)}
  .eiendelsrad,.vaktrad{display:flex;flex-wrap:wrap;align-items:center;
    column-gap:12px;row-gap:2px}
  .eiendelsrad>*,.vaktrad>*{order:3}
  .eiendelsrad>.brikke,.vaktrad>.brikke{order:1;flex:none}
  .eiendelsrad>.min0,.vaktrad>.min0{order:2;flex:1 1 55%;min-width:0}
  .eistatus,.eisaker,.vakttid{text-align:left}

  /* Kolonneoverskriften beskriver kolonner som ikke finnes her. Den
     skjules helt — en overskrift over feil kolonne er verre enn ingen. */
  .kolonnehode{display:none}
}

/* Sikkerhetsvarsel — NIST §4.1.2.1, A8/N1. Står øverst i arbeidsflaten til
   det er kvittert. Tilstanden bæres av ord og plassering; fargen bekrefter. */
.sikkerhetsvarsel{margin:16px 26px 0;padding:14px 16px;border-radius:var(--r);
  background:var(--gul-flate);color:var(--gul-tekst);
  border-left:3px solid var(--gul)}
.sikkerhetsvarsel .naar{font-size:var(--t-xs)}
.sikkerhetsvarsel p{margin:6px 0 0}
.sikkerhetsvarsel .knapper{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
