/* =====================================================================
   BPA-UNIVERSET — faelles/designlag.css        FORSIDE v2 · designlaget
   ---------------------------------------------------------------------
   Loades AF BEGGE universer, EFTER stil.css. Filen er rent additiv:

     🔒 REGEL 1 — den omdøber ALDRIG en eksisterende klasse.
        adm.js finder knapper via ca. 40 klassenavne (.tfa-x, .nr-frist,
        .ret-hjaelp, .adm-gv …). Omdøbes en af dem, holder knappen op med
        at virke UDEN at der kommer en fejl. Derfor: kun nye navne.

     🔒 REGEL 2 — alt heri hedder ds-… og --ds-….
        Målt 04.08.2026: præfikset «ds-» findes ikke ét eneste sted i
        adm.js, borger.js, core.js, stil.css, index.html eller
        adm/index.html. Det kan derfor ikke kollidere med noget.

     🔒 REGEL 3 — den rører ikke stil.css' egne variabler.
        --blaa, --groen, --roed, --moerk, --moerk2, --flade, --hvid,
        --graa og --font BRUGES her, men sættes aldrig om i lys tilstand.
        Mørkt tema (trin 3) sætter dem om ét sted — se nederst.

   VIGTIGT: bump ?v=-nummeret i <link>-tagget når denne fil ændres,
   ellers viser browseren en gammel version fra cachen.

   Handicapformidlingen · 04.08.2026
   ===================================================================== */

/* ============================================================
   1 · TOKENS — lys tilstand
   ============================================================ */
:root{
  --ds-bg:#eef3f8;          /* sidens flade bag indholdet          */
  --ds-flade:#f7fafc;       /* rolig flade inde i et kort          */
  --ds-kort:#ffffff;        /* kortets egen flade                  */
  --ds-ink:#12293c;         /* brødtekst                           */
  --ds-ink2:#5b6d7d;        /* underordnet tekst                   */
  --ds-linje:rgba(18,41,60,.09);
  --ds-linje2:rgba(18,41,60,.16);
  --ds-skinne:#122436;      /* venstre navigationsskinne           */
  --ds-skinne-ink:rgba(255,255,255,.62);
  --ds-s1:0 1px 2px rgba(18,41,60,.05), 0 8px 22px rgba(18,41,60,.06);
  --ds-s2:0 2px 4px rgba(18,41,60,.06), 0 20px 44px rgba(18,41,60,.13);
  --ds-r:19px;              /* kanternes rundhed på kort           */
  --ds-r-lille:12px;
  --ds-puls:.22s cubic-bezier(.2,.7,.3,1);
}

/* ============================================================
   2 · SIDENS RAMME
   ------------------------------------------------------------
   ds-ramme lægges på <body>. Skinnen til venstre, alt andet i
   højre spalte. Under 900 px falder skinnen væk og bundnavet
   træder til — samme punkter, anden placering.
   ============================================================ */
body.ds-ramme{
  color:var(--ds-ink);
  display:grid;grid-template-columns:246px 1fr;min-height:100vh;
  /* 🔴 Farven ligger på SIDEN, ikke kun på skinnen. Skinnen er sticky og
     kun 100vh høj; på en lang side sluttede det mørke felt derfor midt
     på skærmen, og resten af spalten stod grå. Nu er selve spalten mørk. */
  background:linear-gradient(90deg,var(--ds-skinne) 0 246px,var(--ds-bg) 246px);
}
/* 🔴 Mobil-omskrivningen af rammen står NEDERST i filen, ikke her.
   Et «display:none» i en media-forespørgsel her ville blive slået af
   .ds-skinne{display:flex} tre linjer længere nede: samme vægt, og så
   vinder den sidste. Skinnen blev derfor stående på en telefon. Samme
   fælde som .bundnav i mockup'en. Alt mobil samlet i afsnit 10. */

/* ---------- venstre skinne ---------- */
.ds-skinne{
  background:var(--ds-skinne);color:#fff;padding:16px 12px 14px;
  display:flex;flex-direction:column;gap:3px;position:sticky;top:0;
  height:100vh;overflow-y:auto;overflow-x:hidden;z-index:20;
  padding-bottom:74px;   /* plads til pop-ud-knapperne, så sidste punkt ikke gemmes */
}
.ds-skinne::before{                       /* et strejf lys i toppen */
  content:"";position:absolute;inset:-40% -60% auto -60%;height:70%;
  background:radial-gradient(60% 60% at 50% 50%,rgba(60,180,229,.28),transparent 70%);
  pointer-events:none;
}
.ds-skinne-logo{display:flex;align-items:center;gap:10px;padding:6px 10px 16px;position:relative}
.ds-skinne-logo .ds-mrk{
  width:32px;height:32px;border-radius:10px;flex:none;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--blaa),var(--groen));
}
.ds-skinne-logo .ds-mrk i{width:12px;height:12px;border-radius:50%;background:var(--ds-skinne);font-style:normal}
.ds-skinne-logo b{font-size:1rem;letter-spacing:-.02em;line-height:1.1}
.ds-skinne-logo small{display:block;font-size:.7rem;color:var(--ds-skinne-ink);font-weight:600;letter-spacing:.04em}

.ds-skinne-h{
  font-size:.66rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ds-skinne-ink);padding:14px 12px 6px;
}
.ds-punkt{
  display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:11px;
  font-size:.87rem;font-weight:600;color:rgba(255,255,255,.80);cursor:pointer;
  position:relative;transition:background var(--ds-puls),color var(--ds-puls);
  border:0;background:none;font-family:var(--font);text-align:left;width:100%;
}
.ds-punkt i{font-style:normal;font-size:1rem;width:19px;text-align:center;flex:none}
.ds-punkt .ds-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-punkt .ds-n{
  font-size:.7rem;font-weight:800;background:rgba(255,255,255,.13);
  border-radius:999px;padding:1px 7px;color:#fff;
}
.ds-punkt .ds-n.ds-vigtig{background:var(--roed)}
.ds-punkt:hover{background:rgba(255,255,255,.07);color:#fff}
.ds-punkt:focus-visible{outline:2px solid var(--blaa);outline-offset:2px}
.ds-punkt.ds-paa{
  background:linear-gradient(100deg,rgba(60,180,229,.26),rgba(147,213,0,.16));
  color:#fff;font-weight:700;
}
.ds-punkt.ds-paa::before{
  content:"";position:absolute;left:-12px;top:50%;transform:translateY(-50%);
  width:3px;height:20px;border-radius:0 3px 3px 0;background:var(--blaa);
}
.ds-skinne-bund{margin-top:auto;padding-top:12px;border-top:1px solid rgba(255,255,255,.09)}
/* versionslinjen — diskret, men til at læse uden udviklerværktøjer */
.ds-skinne-logo .ds-byg{
  display:block;font-size:.6rem;font-weight:700;letter-spacing:.08em;
  color:rgba(255,255,255,.30);margin-top:1px;
}
.ds-fod .ds-byg{color:var(--ds-ink2);opacity:.55;font-size:.68rem;letter-spacing:.06em}

/* ---------- højre spalte ---------- */
.ds-hoved{min-width:0;display:flex;flex-direction:column;background:var(--ds-bg)}

/* ---------- topstribe ---------- */
.ds-top{
  position:sticky;top:0;z-index:15;display:flex;align-items:center;gap:12px;
  padding:11px 26px;background:color-mix(in srgb,var(--ds-bg) 82%,transparent);
  backdrop-filter:blur(14px);border-bottom:1px solid var(--ds-linje);
}
@supports not (background:color-mix(in srgb,red 50%,transparent)){
  .ds-top{background:var(--ds-bg)}
}
.ds-soeg{
  flex:1;max-width:520px;display:flex;align-items:center;gap:9px;
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:13px;
  padding:9px 13px;font-size:.86rem;color:var(--ds-ink2);cursor:pointer;
  transition:border-color var(--ds-puls);font-family:var(--font);
}
.ds-soeg:hover{border-color:var(--ds-linje2)}
.ds-soeg>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}
.ds-soeg kbd{
  margin-left:auto;font-family:var(--font);font-size:.7rem;font-weight:700;
  background:var(--ds-bg);border:1px solid var(--ds-linje);border-radius:6px;padding:1px 6px;
}
.ds-fyld{flex:1}

/* pille: en TILSTAND, ikke en opgave (fx «to-faktor aktiv») */
.ds-pille{
  display:inline-flex;align-items:center;gap:6px;border:1px solid var(--ds-linje);
  background:var(--ds-kort);border-radius:999px;padding:6px 12px;
  font-size:.78rem;font-weight:700;color:var(--ds-ink2);cursor:pointer;font-family:var(--font);
}
.ds-pille.ds-god{color:#4c7a00;border-color:rgba(147,213,0,.45);background:rgba(147,213,0,.12)}
.ds-pille .ds-prik{width:6px;height:6px;border-radius:50%;background:var(--groen)}
/* 🔴 [hidden] er browserens egen display:none, og den taber til en klasse
   med display:inline-flex. Uden denne linje stod to-faktor-pillen som en
   tom, hvid knap i topstriben, selv om den var sat til hidden. */
.ds-pille[hidden],.ds-soeg[hidden]{display:none}

/* ============================================================
   3 · VELKOMSTBÅNDET
   ============================================================ */
.ds-velkomst{
  position:relative;margin:20px 0 0;border-radius:24px;overflow:hidden;
  padding:26px 28px 24px;color:#fff;
  background:linear-gradient(140deg,var(--moerk) 0%,#24435e 58%,#2a5573 100%);
  box-shadow:0 24px 60px rgba(30,55,76,.28);
}
.ds-velkomst::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(520px 320px at var(--ds-mx,78%) var(--ds-my,-10%),rgba(60,180,229,.50),transparent 62%),
             radial-gradient(520px 400px at -8% 120%,rgba(147,213,0,.24),transparent 58%);
  transition:background .25s ease-out;
}
.ds-velkomst>*{position:relative}
.ds-vk-dato{font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.58)}
.ds-vk-h{font-size:clamp(1.5rem,3vw,2.05rem);font-weight:800;letter-spacing:-.03em;margin:5px 0 6px;line-height:1.15}
.ds-vk-h em{
  font-style:normal;background:linear-gradient(96deg,#7fd8ff,#c3f06a);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.ds-vk-p{color:rgba(255,255,255,.80);font-size:.95rem;max-width:64ch}
.ds-vk-p b{color:#fff;font-weight:700}
.ds-vk-hand{display:flex;gap:9px;flex-wrap:wrap;margin-top:16px}
.ds-vk-hand a,.ds-vk-hand button{
  display:inline-flex;align-items:center;gap:7px;border-radius:12px;padding:9px 15px;
  font-size:.86rem;font-weight:700;cursor:pointer;text-decoration:none;
  transition:transform var(--ds-puls),box-shadow var(--ds-puls),background var(--ds-puls);
  border:0;font-family:var(--font);
}
.ds-vk-hand .ds-primaer{background:#fff;color:var(--moerk);box-shadow:0 8px 22px rgba(0,0,0,.25)}
.ds-vk-hand .ds-primaer:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(0,0,0,.32)}
.ds-vk-hand .ds-sek{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.20)}
.ds-vk-hand .ds-sek:hover{background:rgba(255,255,255,.20)}

/* ============================================================
   4 · DAGENS TAL
   ------------------------------------------------------------
   Ét tal pr. felt. Tallet er det største på feltet. Farve bruges
   KUN til status — aldrig til pynt.
   ============================================================ */
.ds-tal{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:12px;margin:16px 0 0}
.ds-tk{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:17px;
  padding:15px 16px;box-shadow:var(--ds-s1);position:relative;overflow:hidden;
  transition:transform var(--ds-puls),box-shadow var(--ds-puls),border-color var(--ds-puls);
}
.ds-tk:hover{transform:translateY(-3px);box-shadow:var(--ds-s2);border-color:var(--ds-linje2)}
.ds-tk .ds-lbl{font-size:.76rem;font-weight:700;color:var(--ds-ink2);display:flex;align-items:center;gap:6px}
.ds-tk .ds-v{
  font-size:2rem;font-weight:800;letter-spacing:-.045em;line-height:1.1;margin-top:5px;
  font-variant-numeric:tabular-nums;
}
.ds-tk .ds-stribe{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--ds-linje2)}
.ds-tk.ds-adv .ds-stribe{background:var(--roed)}
.ds-tk.ds-god .ds-stribe{background:var(--groen)}
.ds-tk .ds-mrk{
  display:inline-flex;align-items:center;gap:4px;font-size:.72rem;font-weight:800;
  border-radius:999px;padding:2px 8px;margin-top:7px;
}
.ds-tk .ds-mrk.ds-adv{background:rgba(231,0,76,.12);color:var(--roed)}
.ds-tk .ds-mrk.ds-god{background:rgba(147,213,0,.16);color:#4c7a00}
.ds-tk .ds-rolig{font-size:.72rem;color:var(--ds-ink2);font-weight:600;margin-top:7px;display:block}

/* ============================================================
   5 · ADVARSEL — vises KUN når der ER noget at gøre
   ============================================================ */
/* 🔴 Blokken hedder ds-varsel og IKKE ds-adv. ds-adv er en TILSTANDS-
   modifikator (.ds-tk.ds-adv, .ds-mrk.ds-adv). Hed blokken det samme,
   ville et taltavle-kort med .ds-adv arve hele bjælkens udseende —
   rosa flade, ramme og display:flex. Det skete i første udkast, og
   tallet lagde sig ved siden af sin egen etiket. Blok og modifikator
   må aldrig dele navn. */
.ds-varsel{
  margin:14px 0 0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  background:linear-gradient(100deg,rgba(231,0,76,.10),rgba(231,0,76,.04));
  border:1px solid rgba(231,0,76,.28);border-radius:16px;padding:12px 16px;
}
.ds-varsel b{font-size:.9rem}
.ds-varsel small{color:var(--ds-ink2);font-size:.82rem}
.ds-varsel .ds-kn{
  margin-left:auto;background:var(--roed);color:#fff;border:0;border-radius:11px;
  padding:8px 15px;font-weight:700;font-size:.83rem;cursor:pointer;font-family:var(--font);
}

/* ============================================================
   6 · INDHOLD, OVERSKRIFTER, HURTIG-START
   ============================================================ */
.ds-indhold{padding:22px 0 8px;min-width:0}
.ds-h4{
  font-size:.78rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--ds-ink2);margin:26px 0 11px;display:flex;align-items:center;gap:12px;
}
.ds-h4::after{content:"";flex:1;height:1px;background:var(--ds-linje)}
.ds-h4:first-child{margin-top:0}

.ds-hurtig{
  display:flex;gap:9px;flex-wrap:wrap;align-items:center;background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:17px;padding:12px 14px;
  box-shadow:var(--ds-s1);margin-bottom:4px;
}
.ds-hurtig .ds-t{
  font-size:.75rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ds-ink2);margin-right:2px;
}
/* 🔴 Programmerne tegnes af adm.js som <button>, ikke <a> — strippen
   bygges FORFRA, når programlisten er hentet. Stod reglen kun på a,
   fik man de grå husknapper tilbage et halvt sekund efter, at siden
   ellers så rigtig ud. Derfor gælder den begge dele. */
.ds-hurtig a,.ds-hurtig .ds-p{
  display:inline-flex;align-items:center;gap:7px;border:1px solid var(--ds-linje);
  border-radius:11px;padding:7px 12px;font-size:.83rem;font-weight:700;
  color:var(--ds-ink);text-decoration:none;background:var(--ds-flade);
  font-family:var(--font);cursor:pointer;
  transition:transform var(--ds-puls),border-color var(--ds-puls),box-shadow var(--ds-puls);
}
.ds-hurtig a:hover,.ds-hurtig .ds-p:hover{transform:translateY(-2px);border-color:var(--blaa);box-shadow:0 8px 20px rgba(60,180,229,.20)}
.ds-hurtig .ds-p img,.ds-hurtig .ds-p svg{flex:none}

/* ============================================================
   7 · KORTGITTERET
   ============================================================ */
.ds-gitter{display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:13px}
.ds-kort{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  padding:17px 17px 15px;box-shadow:var(--ds-s1);position:relative;overflow:hidden;
  display:flex;gap:13px;align-items:flex-start;cursor:pointer;text-decoration:none;
  color:inherit;transition:transform var(--ds-puls),box-shadow var(--ds-puls),border-color var(--ds-puls);
}
.ds-kort::before{
  content:"";position:absolute;left:0;right:0;top:0;height:2px;opacity:0;
  transition:opacity var(--ds-puls);background:linear-gradient(90deg,var(--blaa),var(--groen));
}
.ds-kort:hover{transform:translateY(-4px);box-shadow:var(--ds-s2);border-color:var(--ds-linje2)}
.ds-kort:hover::before{opacity:1}
.ds-kort:focus-visible{outline:2px solid var(--blaa);outline-offset:2px}
/* 🎨 Medaljonen er ikke en grå firkant. Den er husets to mærkefarver lagt
   som et blødt vask bag ikonet med en tynd blå ring indeni — dét er
   forskellen på et kort, der ser færdigt ud, og et der ikke gør.
   Ringen ligger som INSET-skygge og ikke som border: en border lægger sig
   uden på de 42 px og skubber ikonet ud af midten. */
.ds-kort .ds-med{
  width:42px;height:42px;flex:none;border-radius:13px;display:grid;place-items:center;
  font-size:1.22rem;
  background:linear-gradient(140deg,rgba(60,180,229,.16),rgba(147,213,0,.13));
  box-shadow:inset 0 0 0 1px rgba(60,180,229,.18);
  transition:transform var(--ds-puls);
}
.ds-kort:hover .ds-med{transform:scale(1.06) rotate(-3deg)}
.ds-kort b{display:block;font-size:.95rem;letter-spacing:-.01em}
.ds-kort small{display:block;color:var(--ds-ink2);font-size:.79rem;line-height:1.4;margin-top:3px}
.ds-kort .ds-n{
  position:absolute;top:13px;right:13px;background:var(--roed);color:#fff;
  font-size:.7rem;font-weight:800;border-radius:999px;padding:2px 8px;
}
.ds-kort .ds-n.ds-stille{background:var(--ds-flade);color:var(--ds-ink2);border:1px solid var(--ds-linje)}

/* ============================================================
   8 · PANELER — «Min dag»
   ============================================================ */
.ds-minidag{display:grid;grid-template-columns:repeat(auto-fit,minmax(252px,1fr));gap:13px;
  /* 🔴🔴 06.08.2026 — Søren: «Min dag» fyldte hele skærmen. Panelerne
     strakte sig efter det højeste, og «Til stede» med 25 navne gjorde de to
     andre til frimærker med 900 px tom flade under sig. `start` lader hvert
     panel være præcis så højt, som dets indhold kræver. */
  align-items:start}
/* Listen i «Til stede» får et loft. Er der tyve på arbejde, skal man rulle
   i DEN — ikke i hele forsiden. Loftet er sat, så panelet lander tæt på de
   to andre i højde, som i mockup'en. */
.ds-liste{max-height:264px;overflow-y:auto;overscroll-behavior:contain;margin:0 -4px;padding:0 4px}
.ds-liste::-webkit-scrollbar{width:8px}
.ds-liste::-webkit-scrollbar-thumb{background:var(--ds-linje);border-radius:99px}
.ds-liste::-webkit-scrollbar-track{background:transparent}
/* «+ Vis 6 på ferie eller syge» — én linje i stedet for seks rækker. */
.ds-mere{display:block;width:100%;margin:8px 0 0;padding:7px 10px;cursor:pointer;
  background:none;border:1px dashed var(--ds-linje);border-radius:11px;
  font-family:inherit;font-size:.78rem;font-weight:800;color:var(--graa)}
.ds-mere:hover{border-style:solid;color:var(--tekst)}

/* ============================================================
   8b · BURGEREN I ADM — borgerens menu hører ikke hjemme her
   ============================================================
   🔴🔴 06.08.2026 — Søren sendte et billede med ☰ i adm-toppen ringet ind:
   «her vises borgers menu». Det gjorde den også.

   `univers-retur.js` bygger ÉN burger-menu (`mobilMenuSetup()`) og hænger
   den i `header .bar .bar-top` — den samme kode kører i begge universer.
   Punkterne er borgerens: Forside · HF Vagtplan · Kom godt i gang ·
   Fællesskabet · Mine noter · Dit årshjul · Formularer · Kontakt ·
   Spørgsmål & svar · Nyheder. Ikke ét af dem hører til i adm.

   I adm er den både forkert OG dobbelt: bundnavets «Mere» viser husets egne
   områder, og mockup'ens adm-mobil har slet ingen burger i toppen — der er
   kun to-faktor-pillen, klokken og navnechippen.

   🔴 Rettet HER og ikke i `univers-retur.js`: den fil deles med
      borger-universet, hvor menuen er den RIGTIGE. Ændrer man den fælles
      fil, tager man menuen fra borgeren for at rydde op hos os.
   🔴 `!important` er med vilje: menuen åbnes ved at sætte klassen `.vis`,
      og uden det ville et åbent overlay stadig kunne dukke op. */
body.adm-tilstand #ubBurger,
body.adm-tilstand .ub-burger{display:none!important}
body.adm-tilstand #ubMenu{display:none!important}
.ds-panel{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  padding:16px 17px;box-shadow:var(--ds-s1);
}
/* 🔴 Hovedet skal kunne brække, men ALDRIG midt i sin egen titel.
   Uden wrap klemte «Ros til kollegerne» + mærkat + knap sig sammen i en
   350 px spalte, og både titel og knap brækkede over to linjer. Nu får
   titlen lov at fylde en linje for sig, og mærkat og knap holder sammen. */
.ds-panel .ds-ph{
  font-size:.85rem;font-weight:800;display:flex;align-items:center;gap:8px;
  margin-bottom:10px;flex-wrap:wrap;row-gap:7px;
}
.ds-panel .ds-ph>span:first-child,.ds-panel .ds-ph>b:first-child{min-width:0}
.ds-panel .ds-r{
  display:flex;align-items:center;gap:9px;padding:6px 0;font-size:.85rem;
  border-top:1px solid var(--ds-linje);
}
.ds-panel .ds-r:first-of-type{border-top:0}
.ds-panel .ds-av{
  width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  font-size:.68rem;font-weight:800;color:#fff;flex:none;
}
.ds-panel small{color:var(--ds-ink2);font-size:.78rem}

/* ---- panelets små dele --------------------------------------------
   Tallet i hovedet («4 af 9»), den højrestillede oplysning i en række
   («Hvalsø», «Teams»), tidspunktet med tabelcifre, den tomme tilstand og
   den lille ✕. Alle fire fandtes i mockup'en som inline-stil; her får de
   et navn, så adm.js kan nøjes med en klasse.
   🔴 .ds-hoejre må IKKE hedde .ds-h — .ds-h4 ville så være en modifikator
   af den, og blok og modifikator må aldrig dele navn (se afsnit 5). */
.ds-panel .ds-ph .ds-antal{
  margin-left:auto;font-size:.75rem;font-weight:700;color:var(--ds-ink2);
}
.ds-panel .ds-r .ds-hoejre{margin-left:auto;text-align:right;flex:none;padding-left:10px}
.ds-panel .ds-r .ds-tid{
  font-variant-numeric:tabular-nums;font-weight:800;flex:none;min-width:44px;
}
.ds-panel .ds-r.ds-fraoven{align-items:flex-start}
.ds-panel .ds-r .ds-cit{font-size:.85rem;line-height:1.45}
.ds-panel .ds-r .ds-cit small{display:block;margin-top:2px}
.ds-panel .ds-tom{color:var(--ds-ink2);font-size:.82rem;margin:2px 0 0}
.ds-panel .ds-x{
  margin-left:auto;border:0;background:none;cursor:pointer;color:var(--ds-ink2);
  font-family:var(--font);font-size:.85rem;line-height:1;padding:2px 4px;border-radius:7px;
  opacity:0;transition:opacity var(--ds-puls),background var(--ds-puls);flex:none;
}
.ds-panel .ds-r:hover .ds-x,.ds-panel .ds-x:focus-visible{opacity:1}
.ds-panel .ds-x:hover{background:var(--ds-flade);color:var(--roed)}
/* den lille handling i panelets hoved — «✏️ Sæt status», «🌟 Giv ros» */
.ds-panel .ds-phkn{
  border:1px solid var(--ds-linje);background:var(--ds-flade);color:var(--ds-ink);
  border-radius:9px;padding:5px 11px;font-family:var(--font);font-size:.76rem;
  font-weight:800;cursor:pointer;white-space:nowrap;flex:none;
  transition:border-color var(--ds-puls),background var(--ds-puls);
}
.ds-panel .ds-phkn:hover{border-color:var(--blaa);background:var(--ds-kort)}
.ds-panel .ds-mrk{
  display:inline-flex;align-items:center;gap:4px;font-size:.7rem;font-weight:800;
  border-radius:999px;padding:2px 9px;background:rgba(147,213,0,.16);color:#4c7a00;
  white-space:nowrap;flex:none;
}
.ds-panel .ds-fold{margin-top:10px;border-top:1px solid var(--ds-linje);padding-top:10px}

/* ============================================================
   9 · FODEN — én linje i stedet for den blå blok
   ============================================================ */
.ds-fod{
  margin:26px 26px 0;padding:14px 2px 18px;border-top:1px solid var(--ds-linje);
  display:flex;gap:16px;flex-wrap:wrap;align-items:center;
  font-size:.78rem;color:var(--ds-ink2);font-weight:600;
}
.ds-fod .ds-sp{flex:1}
.ds-fod a{font-weight:700;color:var(--ds-ink);text-decoration:none}
.ds-fod a:hover{text-decoration:underline}

/* ============================================================
   10 · BUNDNAV — træder til når skinnen falder væk
   ============================================================ */
.ds-bundnav{display:none}
@media(max-width:900px){
  body.ds-ramme{grid-template-columns:1fr}
  .ds-skinne{display:none}
  .ds-bundnav{
    display:flex;position:sticky;bottom:0;z-index:18;
    background:color-mix(in srgb,var(--ds-kort) 92%,transparent);
    backdrop-filter:blur(14px);border-top:1px solid var(--ds-linje);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  }
  .ds-bundnav a{
    flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;
    padding:6px 2px;font-size:.66rem;font-weight:700;color:var(--ds-ink2);
    text-decoration:none;position:relative;border-radius:10px;
  }
  .ds-bundnav a i{font-style:normal;font-size:1.12rem}
  .ds-bundnav a.ds-paa{color:var(--ds-ink)}
  .ds-bundnav a .ds-n{
    position:absolute;top:2px;right:calc(50% - 20px);background:var(--roed);color:#fff;
    font-size:.6rem;font-weight:800;border-radius:999px;padding:0 5px;
  }
  .ds-fod{margin-left:14px;margin-right:14px}
  /* 🔴 Søgefeltet skal have HELE bredden på en telefon.
     «flex:1» alene rækker ikke: grundlaget er 0, så feltet skrumper til
     ingenting og teksten falder ned bogstav for bogstav. Der skal stå
     et grundlag på 100 %, og rækken skal have lov at bryde. */
  .ds-top{padding:9px 14px;flex-wrap:wrap}
  .ds-soeg{flex:1 0 100%;max-width:none;min-width:0;order:2}
  .ds-soeg kbd{display:none}
  .ds-fyld{display:none}
  .ds-gitter{grid-template-columns:1fr 1fr;gap:10px}
  .ds-kort{padding:14px 13px 12px;flex-direction:column;gap:9px}
  .ds-kort .ds-med{width:36px;height:36px;font-size:1.05rem}
  .ds-kort small{font-size:.74rem}
}
@media(max-width:420px){
  .ds-gitter{grid-template-columns:1fr}
  .ds-kort{flex-direction:row}
}

/* ============================================================
   11 · INDFLYVNING — respekterer «reducér bevægelse»
   ============================================================ */
@keyframes ds-ind{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.ds-anim{animation:ds-ind .5s cubic-bezier(.2,.7,.3,1) both}
@media(prefers-reduced-motion:reduce){
  .ds-anim{animation:none}
  .ds-kort,.ds-tk,.ds-hurtig a{transition:none}
}


/* ============================================================
   13 · BROLÆGNING — de GAMLE elementer, sat ind i den nye ramme
   ------------------------------------------------------------
   🔴 Dette er det eneste sted i filen, hvor der står andre
   klassenavne end ds-. Hver eneste regel er spærret inde bag
   «body.ds-ramme», så den kun kan gælde på en side, der bevidst
   har taget rammen på. Ingen anden side i huset kan rammes.

   Hvorfor ikke bare skjule <header> og bygge en ny? Fordi
   .bar-top huser #logudBtn, #kodeBtn, #kalTopBtn, #barHandling
   OG profil.js' runde profilbillede — profil.js indsætter det
   lige før #logudBtn. Skjules baren, forsvinder «Log ud».
   Derfor bliver baren stående og får nyt tøj på.
   ============================================================ */
body.ds-ramme header{
  position:sticky;top:0;z-index:15;
  background:color-mix(in srgb,var(--ds-bg) 82%,transparent);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--ds-linje);box-shadow:none;
}
@supports not (background:color-mix(in srgb,red 50%,transparent)){
  body.ds-ramme header{background:var(--ds-bg)}
}
body.ds-ramme .bar{max-width:none;margin:0;padding:10px 26px}
body.ds-ramme .bar-top{gap:12px;flex-wrap:wrap}
/* Søgefeltet skal kunne vokse, men aldrig skrumpe til to linjer tekst */
body.ds-ramme .ds-soeg{flex:1 1 260px;min-width:230px}

/* #barHandling er genvejene «💬 Beskeder · 📬 Feedback · 🎧 Live-chat ·
   🎫 Int. support» med tællere. Skinnen viser nu de SAMME fire med de
   SAMME tal, og to sæt af samme genveje på én skærm er netop det rod,
   version 2 skal af med. Elementet bliver stående og bliver fyldt som
   hidtil — det er kun skjult, så intet JavaScript kan gå i stykker. */
body.ds-ramme #barHandling{display:none}

/* notifikations-beskeden og «nævnt» fik deres margen af main's gamle
   sidepolstring, som er væk — de får den nu direkte */
body.ds-ramme #admPush,body.ds-ramme #lcaNaevnt{margin:14px 0 0}

/* ---------- #admBar — univers-retur.js' faste admin-linje ----------
   Den mørke stribe under topbjælken kommer fra univers-retur.js og har
   altid været der. Men fire af dens punkter — 🗂 Admin-central, 🗨 Intern,
   🗒️ Noter og 🔎 søg — står nu ALLE i skinnen til venstre og i søgefeltet
   foroven. To sæt af samme genveje på én skærm er præcis det rod, version
   2 skal af med, og den mørke bjælke skar desuden siden midt over.

   🔴 Punkterne SKJULES, de fjernes ikke. univers-retur.js er en fælles fil
   på 111 KB, som begge universer bruger; vi rører ikke dens kode. Alt det,
   der IKKE findes andre steder, bliver stående: universskifteren, 🧰
   programmer, 📌 seddel, 👋 status, chat-vagten og 🔑 kodeord. */
/* Rækken selv forsvinder — knapperne er flyttet op i topbjælken af
   dsAdmBarFlyt(). Skulle flytningen af en eller anden grund ikke lykkes,
   står rækken tilbage i en form, der stadig ser rigtig ud. */
body.ds-ramme #admBar{
  background:var(--ds-kort);border-bottom:1px solid var(--ds-linje);box-shadow:none;
}
body.ds-ramme #admBar .ab-i{
  max-width:none;margin:0;padding:7px 26px;gap:8px;
  justify-content:flex-start;flex-wrap:wrap;
}
body.ds-ramme #admBar .ab-i>*{flex:0 0 auto}

/* værktøjerne i topbjælken */
.ds-verk{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
body.ds-ramme .ds-verk a,
body.ds-ramme .ds-verk .ab-klar{
  display:inline-flex;align-items:center;gap:5px;
  color:var(--ds-ink);background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:999px;
  font-size:.76rem;font-weight:700;padding:6px 11px;white-space:nowrap;
  text-decoration:none;cursor:pointer;font-family:var(--font);
}
body.ds-ramme .ds-verk a:hover,
body.ds-ramme .ds-verk .ab-klar:hover{border-color:var(--blaa);background:var(--ds-flade)}
body.ds-ramme .ds-verk .ab-klar.gr{border-color:rgba(147,213,0,.55);background:rgba(147,213,0,.12);color:#4c7a00}
@media(max-width:900px){
  body.ds-ramme .ds-verk{order:4;overflow-x:auto;max-width:100%;flex-wrap:nowrap;scrollbar-width:none}
  body.ds-ramme .ds-verk::-webkit-scrollbar{display:none}
}
body.ds-ramme #admBar .ab-m,
body.ds-ramme #abCentral,
body.ds-ramme #abIntern,
body.ds-ramme #abNoter,
body.ds-ramme #abSoeg{display:none!important}
body.ds-ramme #admBar a,
body.ds-ramme #admBar .ab-klar{
  color:var(--ds-ink);background:var(--ds-flade);
  border:1px solid var(--ds-linje);border-radius:10px;
  font-size:.78rem;font-weight:700;padding:5px 11px;
}
body.ds-ramme #admBar a:hover,
body.ds-ramme #admBar .ab-klar:hover{border-color:var(--blaa)}

/* Den gule seddelstribe (fastgjorte noter) får samme sidemargen og
   samme kantrunding som alt andet. 🔴 Den flyttes IKKE med CSS: den er
   ikke et direkte barn af main, og et forsøg med flex/order ville ændre
   layoutet for alle atten afsnit på siden for at flytte ét element. */
body.ds-ramme #bnotStribe,body.ds-ramme #notStribe{
  margin:14px 26px 0;border-radius:var(--ds-r);
}

/* pop-ud-knapperne lå nederst til venstre — dér hvor skinnen nu er */
/* 🔴 !important er nødvendigt her, og det er ikke dovenskab: core.js
   sætter #poFab med style.cssText («position:fixed;bottom:18px;left:18px»),
   og en inline-stil slår enhver regel i et stilark. Uden dette lå de to
   pop-ud-knapper oven på skinnens nederste punkter — Rettigheder og
   Guider kunne simpelthen ikke rammes. core.js ejes af os, men den er
   fælles for begge universer, så rettelsen hører hjemme i designlaget. */
/* 🔴 06.08.2026: knapperne er FLYTTET ind i skinnen (dsPopUdISkinnen).
   Den gamle regel skubbede dem bare uden for skinnen — og dermed ind over
   indholdet, hvor de spiste klik på hvert kort, der rullede under dem.
   Reglen bliver stående for det tilfælde, at flytningen ikke er sket
   endnu (fx hvis adm.js er ældre end denne fil et øjeblik under en
   udrulning). Er de flyttet, bærer de klassen .ds-poud, og så gælder
   afsnittet nedenfor i stedet. */
body.ds-ramme #poFab:not(.ds-poud){left:262px!important}
body.ds-ramme #poFab.ds-poud{
  position:static!important;left:auto!important;bottom:auto!important;
  display:flex;flex-direction:column;gap:4px;margin:6px 0 0;
  padding-top:7px;border-top:1px solid rgba(255,255,255,.1);
}
body.ds-ramme #poFab.ds-poud button{
  display:flex;align-items:center;gap:9px;width:100%;text-align:left;
  background:none!important;color:rgba(220,234,243,.72)!important;
  box-shadow:none!important;border-radius:9px!important;
  padding:7px 10px!important;font-size:.78rem!important;font-weight:600!important;
}
body.ds-ramme #poFab.ds-poud button:hover{
  background:rgba(255,255,255,.09)!important;color:#fff!important;
}
/* 🔴 På telefonen er der ikke to vinduer at stille ved siden af hinanden,
   og skinnen findes slet ikke. Så er knappen kun i vejen. */
@media(max-width:900px){ body.ds-ramme #poFab{display:none!important} }
/* 🔴 Sidepolstringen SKAL blive. main havde «padding:0 22px», og den
   holdt hvert eneste af de 22 områder inde på skærmen. Fjernede vi den
   for at give forsiden fuld bredde, stak område-bjælken og tabellerne
   ud i højre side på en telefon — i alle områder undtagen Overblik.
   Nu ligger polstringen på main, og forsidens egne blokke har ingen
   vandret margen af sig selv. */
body.ds-ramme main{max-width:none;margin:0;padding:0 26px 40px}
body.ds-ramme .sek{margin-top:0}
body.ds-ramme footer{background:none;color:var(--ds-ink2);margin-top:0}
body.ds-ramme footer .f-i,body.ds-ramme footer .bund{display:none}

/* skinnen bærer logoet, så hjemlinket er dobbeltkonfekt — indtil
   skinnen falder væk på en telefon, hvor det er den eneste vej hjem */
/* 🔴 :not(.ds-alene) — reglen gjaldt FØR begge universer. Men kun
   adm-universet har en skinne til at bære logoet; borgeren har ingen, og
   dér forsvandt mærket helt på en pc. Fundet 05-08 ved at måle, hvorfor
   topbjælken startede med søgefeltet. */
@media(min-width:901px){ body.ds-ramme:not(.ds-alene) .hjemlink{display:none} }

/* 🔴 Mobil-rettelser til brolægningen SKAL stå her — altså EFTER de
   almindelige regler ovenfor. Stod de i afsnit 10, ville de blive slået
   af reglerne her: samme vægt, og den sidste vinder. Kontrollen fangede
   det; det var samme fælde som skinnen på telefonen. */
@media(max-width:900px){
  body.ds-ramme .bar{padding:9px 14px}
  body.ds-ramme main{padding:0 14px 86px}
  body.ds-ramme{background:var(--ds-bg)}
  body.ds-ramme #poFab{left:14px!important;bottom:74px!important}
  body.ds-ramme #admBar .ab-i{padding:7px 14px}
  body.ds-ramme #bnotStribe,body.ds-ramme #notStribe{margin-left:14px;margin-right:14px}
  /* 🔴 Søgefeltet skal have sin EGEN linje. Reglen står her og ikke i
     afsnit 10, fordi «body.ds-ramme .ds-soeg» ovenfor ellers vinder:
     højere vægt slår en media-forespørgsel, uanset rækkefølge. */
  body.ds-ramme .ds-soeg{flex:1 0 100%;max-width:none;min-width:0;order:2}
  body.ds-ramme #aFab{bottom:82px}
}


/* ============================================================
   12 · MØRKT TEMA
   ------------------------------------------------------------
   Sættes som data-tema="moerk" på <html>. Valget huskes i
   nøglen hf_tema (målt ledig — de eksisterende hf_*-nøgler er
   hf_2fa_enhed, hf_adm_hop, hf_adm_retur, hf_logo_www_header,
   hf_pop_sess og hf_pwa_luk).

   ⚠️ Kun ds-laget er mørkt herunder. De GAMLE skærmbilleder
   følger først med, når stil.css' egne variabler også sættes om
   — det er trin 3, og det kræver at de 548 farver, der IKKE er
   husets otte mærkefarver, får en mørk makker først. Indtil da
   ville en global omskiftning give sort tekst på sort flade.
   ============================================================ */
html[data-tema="moerk"]{
  --ds-bg:#0c1722; --ds-flade:#101f2c; --ds-kort:#15283a;
  --ds-ink:#eaf2f8; --ds-ink2:#94a9ba;
  --ds-linje:rgba(255,255,255,.09); --ds-linje2:rgba(255,255,255,.17);
  --ds-skinne:#0a1420; --ds-skinne-ink:rgba(255,255,255,.55);
  --ds-s1:0 1px 2px rgba(0,0,0,.30), 0 8px 22px rgba(0,0,0,.28);
  --ds-s2:0 2px 4px rgba(0,0,0,.35), 0 20px 44px rgba(0,0,0,.45);
}
html[data-tema="moerk"] .ds-pille.ds-god{color:#b5e75a;background:rgba(147,213,0,.14)}
html[data-tema="moerk"] .ds-tk .ds-mrk.ds-god{color:#b5e75a}
html[data-tema="moerk"] .ds-velkomst{box-shadow:0 24px 60px rgba(0,0,0,.5)}
/* de nye dele fra afsnit 7 og 8 skal have en mørk makker, ellers står de
   som lyse huller på en mørk flade, når flaget engang vendes */
html[data-tema="moerk"] .ds-kort .ds-med{
  background:linear-gradient(140deg,rgba(60,180,229,.22),rgba(147,213,0,.16));
  box-shadow:inset 0 0 0 1px rgba(60,180,229,.26);
}
html[data-tema="moerk"] .ds-panel .ds-mrk{color:#b5e75a}

/* ============================================================
   14 · BPA-UNIVERSET (borgeren) — samme byggeklodser, ingen skinne
   ------------------------------------------------------------
   Borgeren har 13 kasser, ikke 23 områder, og hun har sin egen
   vandrette menu i forvejen. En skinne til venstre ville være en
   mur foran en dør, der allerede er åben. Derfor: én spalte.

   🔴 Fliserne beholder klassen .flise og attributten data-flise.
   borger.js' forsideAnvend() finder dem på præcis dem — den
   omdøber, skjuler og OMROKERER dem efter admins opsætning. Vi
   giver dem nyt tøj; vi rører ikke navnene.
   ============================================================ */
body.ds-ramme.ds-alene{grid-template-columns:1fr;background:var(--ds-bg)}

/* forsidebilledet erstattes af velkomstbåndet — videoen flyttes med
   JavaScript ned i sit eget felt, så den ikke går tabt */
body.ds-ramme.ds-alene .hero{display:none}

/* de to gamle striber foldes ind i båndet: nyheder ét sted, frister ét sted */
body.ds-ramme.ds-alene #nytBanner,body.ds-ramme.ds-alene #hjulBanner{display:none!important}

/* søgefeltet flytter op i topbjælken (samme felt, samme binding) */
/* 🔴 flex-grundlaget skal være 320 og ikke 260: med 260 blev feltet aldrig
   bredere end sit grundlag, når der var plads nok i rækken, og det stod som
   en lille stump ude i venstre side ved siden af en meter tom bjælke.
   Og vokse-faktoren skal være HØJERE end fyldets: .ds-fyld er flex:1, så
   med samme faktor deler de den frie plads ligeligt — og feltet blev ved
   at være det halve af, hvad der var plads til. */
/* 🔴🔴 FEMTE GANG: en inline-stil slår ethvert stilark.
   #soegBar bærer margin:26px auto 68px DIREKTE i index.html — den margin
   stammer fra dengang feltet stod midt på forsiden under forsidebilledet.
   Uden !important stod der 94 px luft omkring feltet oppe i topbjælken,
   og på en telefon skubbede det akutnummeret ned på sin egen fjerde linje
   med 77 px tomt over sig. Målt, ikke gættet. */
body.ds-ramme.ds-alene #soegBar{
  max-width:520px;margin:0!important;padding:0!important;
  flex:3 1 460px;min-width:240px;gap:8px;
}
body.ds-ramme.ds-alene #soegFelt{
  border:1px solid var(--ds-linje)!important;border-radius:13px!important;
  padding:9px 13px!important;font-size:.86rem!important;box-shadow:none!important;
  background:var(--ds-kort)!important;
}
body.ds-ramme.ds-alene #soegFelt::placeholder{color:var(--ds-ink2);opacity:1}
body.ds-ramme.ds-alene #soegFelt:focus{border-color:var(--blaa)!important;outline:none}
/* knappen bliver en rolig firkant i stedet for en blå cirkel — den skal
   ligne resten af topbjælken, ikke stjæle den */
body.ds-ramme.ds-alene #soegKnap{
  width:38px!important;height:38px!important;font-size:.95rem!important;
  box-shadow:none!important;border-radius:12px!important;
  background:var(--ds-flade)!important;color:var(--ds-ink2)!important;
  border:1px solid var(--ds-linje)!important;
}
body.ds-ramme.ds-alene #soegKnap:hover{border-color:var(--blaa)!important;color:var(--ds-ink)!important}

/* akutnummeret som pille i toppen — det vigtigste på hele siden må ikke
   ligge i et forsidebillede, der ruller væk */
.ds-akut{
  display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:7px 14px;
  font-size:.8rem;font-weight:800;background:var(--roed);color:#fff;text-decoration:none;
  box-shadow:0 6px 18px rgba(231,0,76,.28);white-space:nowrap;
}
.ds-akut:hover{transform:translateY(-1px)}

/* ---------- flisegitteret ---------- */
body.ds-ramme.ds-alene .fliser{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));
  gap:13px;margin-top:0;
}
body.ds-ramme.ds-alene .flise{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  padding:17px 17px 15px;box-shadow:var(--ds-s1);gap:9px;
  transition:transform var(--ds-puls),box-shadow var(--ds-puls),border-color var(--ds-puls);
}
body.ds-ramme.ds-alene .flise:hover{transform:translateY(-4px);box-shadow:var(--ds-s2);border-color:var(--ds-linje2)}
body.ds-ramme.ds-alene .flise .blob{
  width:42px;height:42px;border-radius:13px;font-size:1.22rem;
  background:var(--ds-flade)!important;border:1px solid var(--ds-linje);
  color:inherit;box-shadow:none!important;transition:transform var(--ds-puls);
}
body.ds-ramme.ds-alene .flise:hover .blob{transform:scale(1.06) rotate(-3deg)}
body.ds-ramme.ds-alene .flise h3{font-size:.98rem;letter-spacing:-.01em}
body.ds-ramme.ds-alene .flise p{color:var(--ds-ink2);font-size:.82rem;line-height:1.45}
body.ds-ramme.ds-alene .flise .pil{font-size:.83rem}
body.ds-ramme.ds-alene .flise .ny{
  top:16px;right:14px;transform:none;background:var(--roed);color:#fff;
  border-radius:999px;padding:2px 9px;font-size:.7rem;font-weight:800;max-width:60%;
}

/* ---------- HF Vagtplan: størst, fordi den har mest at sige ---------- */
body.ds-ramme.ds-alene .flise.vp{
  grid-column:1/-1;order:-1;flex-direction:row;align-items:center;gap:20px;
  padding:24px 26px;border:1px solid rgba(60,180,229,.30);
  background:linear-gradient(120deg,#14293c 0%,#1c3d55 55%,#245a72 100%);
  box-shadow:0 20px 50px rgba(20,41,60,.30);
}
body.ds-ramme.ds-alene .flise.vp::before,
body.ds-ramme.ds-alene .flise.vp::after{opacity:.85}
body.ds-ramme.ds-alene .flise.vp .blob{
  width:64px;height:64px;flex:none;border-radius:20px;font-size:1.9rem;
  background:linear-gradient(135deg,var(--groen),var(--blaa))!important;border:0;
  box-shadow:0 12px 30px rgba(147,213,0,.30)!important;
}
body.ds-ramme.ds-alene .flise.vp .vp-tekst{flex:1;min-width:0}
body.ds-ramme.ds-alene .flise.vp h3{font-size:1.35rem;color:#fff}
body.ds-ramme.ds-alene .flise.vp p{color:#c6dbea;font-size:.92rem;max-width:60ch}
body.ds-ramme.ds-alene .flise.vp .vp-bund{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;flex:none;
}
body.ds-ramme.ds-alene .flise.vp .pil{
  background:#fff;color:var(--moerk);border-radius:12px;padding:10px 17px;
  font-size:.88rem;font-weight:800;box-shadow:0 8px 22px rgba(0,0,0,.25);
  transition:transform var(--ds-puls),box-shadow var(--ds-puls);
}
body.ds-ramme.ds-alene .flise.vp:hover .pil{
  color:var(--moerk);transform:translateY(-2px);box-shadow:0 14px 30px rgba(0,0,0,.32);
}
/* ---- 🔌 tænd/sluk for AI'en ---- */
#aiKontakt{margin:0 0 20px}
#aiKontakt *{box-sizing:border-box}
.sn-aikort{background:var(--ds-kort);border:1px solid rgba(147,213,0,.45);
  border-radius:var(--ds-r);box-shadow:var(--ds-s1);padding:17px 20px}
.sn-aikort.sn-slukket{border-color:rgba(231,0,76,.45);background:rgba(231,0,76,.04)}
.sn-ai-t{display:grid;gap:4px}
.sn-ai-t b{font-size:1.02rem}
.sn-ai-t span{color:var(--ds-ink2);font-size:.9rem;font-weight:650}
.sn-ai-hvem{margin:10px 0 0;color:var(--ds-ink2);font-size:.83rem;font-weight:700}

/* ---- 💡 ønsker ---- */
.sn-m.sn-t-nyt{background:rgba(18,41,60,.07);color:#4a5f70}
.sn-m.sn-t-overvejer{background:rgba(60,180,229,.16);color:#0d5b7a}
.sn-m.sn-t-planlagt{background:rgba(122,90,248,.14);color:#4a2ec0}
.sn-m.sn-t-igang{background:rgba(245,166,35,.20);color:#8a5a00}
.sn-m.sn-t-kom{background:rgba(147,213,0,.22);color:#3f5c00}
.sn-m.sn-t-afvist,.sn-m.sn-t-dublet{background:rgba(18,41,60,.07);color:#5b6d7d}
.sn-m.sn-t-findes{background:rgba(60,180,229,.12);color:#12546e}
.sn-m.sn-vej{background:rgba(122,90,248,.14);color:#4a2ec0}
.sn-m.sn-fra{background:rgba(245,166,35,.18);color:#8a5a00}
.sn-m.sn-trods{background:rgba(245,166,35,.22);color:#8a5a00}

.sn-koereplan{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 8px}
.sn-kol{background:rgba(255,255,255,.5);border:1px solid var(--ds-linje);
  border-radius:var(--ds-r);padding:12px}
.sn-kol h4{margin:0 0 10px;font-size:.78rem;font-weight:850;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ds-ink2);display:flex;gap:8px;align-items:center}
.sn-kol h4 i{font-style:normal;background:rgba(18,41,60,.07);border-radius:999px;
  padding:1px 8px;font-size:.72rem}
.sn-mini{display:block;width:100%;text-align:left;font:inherit;color:inherit;
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:12px;
  padding:11px 13px;margin:0 0 8px;cursor:pointer;box-shadow:var(--ds-s1)}
.sn-mini:hover{border-color:rgba(60,180,229,.5)}
.sn-mini b{display:block;font-size:.9rem;line-height:1.35;margin:0 0 5px}
.sn-mini-u{display:flex;gap:8px;align-items:center;color:var(--ds-ink2);
  font-size:.76rem;font-weight:750;flex-wrap:wrap}

.sn-onskeliste{display:grid;gap:10px}
.sn-onske{background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  box-shadow:var(--ds-s1);padding:15px 18px;cursor:pointer;
  transition:box-shadow .22s cubic-bezier(.2,.7,.3,1),border-color .22s cubic-bezier(.2,.7,.3,1)}
.sn-onske:hover{box-shadow:var(--ds-s2);border-color:rgba(60,180,229,.5)}
.sn-onske.sn-lukket{opacity:.72}
.sn-onske h3{margin:6px 0 5px;font-size:1.04rem}
.sn-onske p{margin:0 0 10px;color:var(--ds-ink2);font-size:.92rem}
.sn-onskefod{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  color:var(--ds-ink2);font-size:.8rem;font-weight:750}
.sn-op{display:inline-flex;align-items:center;gap:7px;font:inherit;background:var(--ds-flade);
  border:1px solid var(--ds-linje2);border-radius:999px;padding:5px 13px;
  font-size:.82rem;font-weight:850;cursor:pointer;color:var(--ds-ink)}
.sn-op:hover{border-color:var(--blaa,#3cb4e5)}
.sn-op.sn-paa{background:rgba(60,180,229,.16);border-color:rgba(60,180,229,.5);color:#0d5b7a}

.sn-sti{display:flex;align-items:flex-start;margin:18px 0 0;flex-wrap:wrap}
.sn-sti div{flex:1;min-width:96px;position:relative;padding:0 4px;text-align:center}
.sn-sti div::before{content:"";position:absolute;top:9px;left:0;right:0;height:2px;
  background:var(--ds-linje2)}
.sn-sti div:first-child::before{left:50%}
.sn-sti div:last-child::before{right:50%}
.sn-sti i{position:relative;display:block;width:20px;height:20px;margin:0 auto 7px;
  border-radius:50%;background:var(--ds-kort);border:2.5px solid var(--ds-linje2)}
.sn-sti span{font-size:.76rem;font-weight:800;color:var(--ds-ink2);line-height:1.25;display:block}
.sn-sti div.sn-gjort i{background:var(--groen,#93d500);border-color:var(--groen,#93d500)}
.sn-sti div.sn-gjort::before{background:var(--groen,#93d500)}
/* 🔴 «sn-her», ikke «sn-nu»: .sn-besk-agtige navne er husets. Fjerde gang
   huset roerer et stylesheet — tredje gang kostede et statustrin en hel kasse. */
.sn-sti div.sn-her i{background:var(--blaa,#3cb4e5);border-color:var(--blaa,#3cb4e5);
  box-shadow:0 0 0 5px rgba(60,180,229,.18)}
.sn-sti div.sn-her span{color:var(--ds-ink)}

.sn-band-luk{background:rgba(18,41,60,.05);color:var(--ds-ink2)}
.sn-band-trods{background:rgba(245,166,35,.14);color:#8a5a00}
.sn-svar{margin:18px 0 0;padding:16px 19px;border-radius:var(--ds-r);
  background:linear-gradient(105deg,rgba(147,213,0,.12),rgba(147,213,0,.04));
  border:1px solid rgba(147,213,0,.35)}
.sn-svar b{display:block;font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;
  color:#4a6b00;margin:0 0 5px}
.sn-svar p{margin:0}
.sn-komliste{display:grid;gap:10px;margin:12px 0 0}
.sn-kom{background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:12px;padding:12px 15px}
.sn-kom-ejer{background:rgba(147,213,0,.07);border-color:rgba(147,213,0,.3)}
.sn-kom-hv{display:flex;gap:9px;align-items:center;color:var(--ds-ink2);
  font-size:.78rem;font-weight:800;margin:0 0 5px;flex-wrap:wrap}
.sn-kom p{margin:0;font-size:.93rem}
.sn-komind{flex:1;min-width:200px;border:1px solid var(--ds-linje2);border-radius:12px;
  padding:10px 14px;font:inherit;font-size:.92rem;outline:0;background:var(--ds-kort);color:inherit}
.sn-venter{display:flex;align-items:center;gap:12px;margin:0 0 14px;padding:13px 17px;
  border-radius:var(--ds-r);background:rgba(231,0,76,.08);border:1px solid rgba(231,0,76,.3);
  font-weight:800;color:#a8003a;flex-wrap:wrap}
/* ══════════════ 📥 TIL GODKENDELSE ══════════════
   🔴 Tre slags kort, tre farver i venstre kant — kladde, forslag, besked.
   Man skal kunne se HVAD der venter, før man læser. Farven er kun kanten:
   tre fyldte flader ved siden af hinanden bliver et rodet bord. */
/* 📷 skærmbilleder på en opdatering.
   🔴 Rammen er lys og tydelig, men billedet fylder aldrig mere end kortet:
   et skærmbillede skal hjælpe med at genkende noget, ikke overtage siden. */
/* «Hvad sker der, når jeg trykker Gem» — den linje, der skifter, mens man
   klikker. 🔴 Den er stor og tydelig med vilje: den skal ikke kunne læses
   forkert, som reglen i småt blev det. */
.sn-folge{margin:6px 0 14px;padding:12px 15px;border-radius:13px;font-size:.9rem;
  font-weight:700;line-height:1.5;border:1px solid var(--ds-linje2);background:var(--ds-flade)}
.sn-folge b{font-weight:850}
.sn-fo-ok{background:rgba(147,213,0,.10);border-color:rgba(147,213,0,.42)}
.sn-fo-varm{background:rgba(231,0,76,.08);border-color:rgba(231,0,76,.32)}
.sn-fo-graa{background:var(--ds-flade);color:var(--ds-ink2)}

/* 👁 «vis mig, hvad der ville blive sendt» — ordret, som teksten er.
   🔴 Bevidst en rå tekstblok: den skal se ud som det, den ER, ikke som en
   pæn opsummering. En garanti, man ikke kan se, er kun en påstand. */
.sn-konvolut{margin:12px 0 0;padding:13px 15px;border-radius:12px;white-space:pre-wrap;
  background:var(--ds-flade);border:1px solid var(--ds-linje2);font-size:.82rem;
  line-height:1.55;max-height:340px;overflow:auto;font-family:ui-monospace,Menlo,Consolas,monospace}

.sn-billeder{display:grid;gap:9px;margin:10px 0 2px}
.sn-billed{margin:0;display:grid;gap:6px}
.sn-billed img{display:block;width:100%;max-height:420px;object-fit:contain;
  object-position:left top;border-radius:12px;border:1px solid var(--ds-linje2);
  background:var(--ds-flade)}
.sn-billed figcaption{font-size:.83rem;font-weight:700;color:var(--ds-ink2)}
/* ══════ 🔴 11.08.2026 — ET TRINBILLEDE SKAL ILLUSTRERE TRINNET,
   IKKE OVERTAGE DET.
   Soeren, da de foerste kom paa: «billederne er alt for store, det ser ikke
   elegant ud». Han har ret. `.sn-billed` er lavet til et skaermbillede paa
   et kort i tidslinjen, hvor det ER indholdet — fuld bredde, 420 px hoejt.
   Paa et trin er billedet en fodnote til én saetning, og et halvsides
   billede mellem punkt 3 og 4 braekker listen midt over.

   To stoerrelser, to formaal:
     · toppen  — «hvad er det for en skaerm?»  stort, men ikke halvanden
                 skaerm hoejt.
     · trinnet — «hvor er det, jeg trykker?»   smalt nok til at oejet bliver
                 i listen, og med luft nok til at det ikke klaeber. */
.sn-billed.sn-topbil{margin:0 0 16px}
.sn-billed.sn-topbil img{max-height:330px}
.sn-trin .sn-billed.sn-trinbil{max-width:430px;margin:9px 0 6px}
.sn-trin .sn-billed.sn-trinbil img{max-height:210px;border-radius:10px}
@media(max-width:640px){
  .sn-trin .sn-billed.sn-trinbil{max-width:100%}
  .sn-billed.sn-topbil img{max-height:240px}
}

.sn-bplads{padding:22px 16px;border-radius:12px;border:1px dashed var(--ds-linje2);
  background:var(--ds-flade);color:var(--ds-ink2);font-size:.85rem;font-weight:700;text-align:center}

.sn-vliste{display:grid;gap:11px}
.sn-vkort{padding:15px 18px 15px 20px;border-radius:var(--ds-r);background:var(--ds-kort);
  border:1px solid var(--ds-linje2);border-left:4px solid var(--ds-linje2);display:grid;gap:7px}
.sn-v-kladde{border-left-color:#f0a500}
.sn-v-forslag{border-left-color:var(--blaa,#3cb4e5)}
.sn-v-besked{border-left-color:#e7004c}
.sn-vhoved{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.sn-vf{font-weight:800;font-size:.87rem;color:var(--ds-ink2)}
.sn-vdato{font-size:.8rem;font-weight:700;color:var(--ds-ink2);flex:none}
.sn-vt{font-size:1.02rem;line-height:1.35}
.sn-vp{margin:0;font-size:.92rem;font-weight:650;color:var(--ds-ink2)}
/* 🔴 «hvad sker der, hvis jeg ikke gør noget» — den vigtigste linje på
   kortet, og derfor den eneste med sin egen flade. */
.sn-vsker{margin:3px 0 0;padding:9px 12px;border-radius:11px;font-size:.86rem;font-weight:700;
  background:var(--ds-flade);color:var(--ds-ink2)}
.sn-vlev{background:rgba(30,55,76,.08);color:var(--moerk,#1e374c)}
@media (max-width:520px){
  .sn-vkort{padding:13px 14px 13px 16px}
  .sn-vkort .sn-gem button{width:100%}
}

.sn-styr{margin:18px 0 0;padding:15px 18px;border-radius:var(--ds-r);
  background:var(--ds-flade);border:1px solid var(--ds-linje2);display:grid;gap:9px}
.sn-styr b{font-size:.8rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ds-ink2)}
.sn-styr select,.sn-styr textarea{font:inherit;font-size:.93rem;border:1px solid var(--ds-linje2);
  border-radius:12px;padding:10px 13px;outline:0;background:var(--ds-kort);color:inherit;width:100%}
.sn-styr textarea{min-height:80px;resize:vertical}
.sn-styr .sn-knap{justify-self:start}
.sn-port{border-color:rgba(245,166,35,.55)}
.sn-fund{background:var(--ds-flade);border:1px solid var(--ds-linje);border-radius:14px;
  padding:15px 18px;margin:12px 0 0}
.sn-fund em{display:block;font-style:normal;font-size:.74rem;font-weight:850;
  letter-spacing:.05em;text-transform:uppercase;color:var(--ds-ink2);margin:0 0 5px}
.sn-fund b{display:block;font-size:1rem;margin:0 0 5px}
.sn-fund p{margin:0;color:var(--ds-ink2);font-size:.92rem}
.sn-pind.sn-paavej::before{border-color:var(--lilla,#7a5af8);border-style:dashed}
.sn-kort.sn-paavej{border-style:dashed;border-color:rgba(122,90,248,.45);
  background:linear-gradient(105deg,rgba(122,90,248,.055),rgba(122,90,248,0))}
.sn-nustreg{position:relative;margin:22px 0 20px;border-top:2px dashed var(--ds-linje2)}
.sn-nustreg span{position:absolute;top:-10px;left:0;background:var(--ds-bg);padding:0 11px 0 0;
  font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase;color:var(--ds-ink2)}
@media(max-width:820px){ .sn-koereplan{grid-template-columns:1fr} }

/* ---- forslag fra en levering ---- */
.sn-forslag{margin:16px 0 0;padding:17px 20px;border-radius:var(--ds-r);
  background:linear-gradient(105deg,rgba(122,90,248,.09),rgba(60,180,229,.05));
  border:1px solid rgba(122,90,248,.4)}
.sn-fo-o{display:block;font-size:.84rem;color:#4a2ec0;margin:0 0 8px}
.sn-forslag p{margin:0 0 9px}
.sn-forslag ul,.sn-forslag ol{margin:0 0 4px;padding-left:20px;color:var(--ds-ink2)}
.sn-forslag li{margin:0 0 4px}
.sn-m.sn-lev{background:rgba(122,90,248,.14);color:#4a2ec0}
/* 🔔 «den her er valgt til dig» — 10.08.2026.
   Den skal kunne ADSKILLES fra «ulæst» på et halvt sekund: ulæst er blåt og
   handler om mig selv, det her er varmt og handler om, at nogen har peget.
   Farven er husets egen «vigtigt»-gule, ikke en ny. */
.sn-m.sn-tilmig{background:rgba(245,166,35,.22);color:#7d5200}

/* ---- skrivefladen ---- */
.sn-felt{margin:0 0 16px}
.sn-felt label{display:block;font-weight:850;font-size:.88rem;margin:0 0 3px}
.sn-felt small{display:block;color:var(--ds-ink2);font-size:.82rem;font-weight:650;margin:0 0 7px}
.sn-felt input[type=text],.sn-felt textarea,.sn-felt select{width:100%;font:inherit;font-size:.95rem;
  border:1px solid var(--ds-linje2);border-radius:12px;padding:11px 14px;outline:0;
  background:var(--ds-kort);color:inherit}
.sn-felt textarea{resize:vertical;min-height:86px}
.sn-felt input:focus,.sn-felt textarea:focus,.sn-felt select:focus{border-color:var(--blaa,#3cb4e5)}
.sn-bokse{display:flex;gap:8px;flex-wrap:wrap}
.sn-bokse label{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:.85rem;
  background:var(--ds-kort);border:1px solid var(--ds-linje2);border-radius:999px;padding:6px 13px;
  cursor:pointer;margin:0}
/* 👤 person-vælgeren. Et RULLEFELT med fast højde, ikke en liste, der
   skubber Gem-knappen 80 navne ned ad siden. Søgefeltet står lige over. */
.sn-folksog{width:100%;font:inherit;font-size:.92rem;border:1px solid var(--ds-linje2);
  border-radius:12px;padding:9px 13px;outline:0;background:var(--ds-kort);color:inherit;margin:0 0 8px}
.sn-folksog:focus{border-color:var(--blaa,#3cb4e5)}
.sn-folk{max-height:230px;overflow:auto;border:1px solid var(--ds-linje2);border-radius:13px;
  background:var(--ds-kort);padding:5px}
.sn-folk label{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:9px;
  font-size:.88rem;font-weight:700;cursor:pointer;margin:0}
.sn-folk label:hover{background:rgba(18,41,60,.05)}
.sn-folk label b{font-weight:800}
.sn-folk label span{color:var(--ds-ink2);font-weight:650;font-size:.8rem;margin-left:auto;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:45%}
.sn-folk input{flex:none}
.sn-tjek{display:block;font-weight:800;font-size:.9rem;margin:0 0 16px;cursor:pointer}
.sn-tjek small{display:block;color:var(--ds-ink2);font-size:.82rem;font-weight:650;margin:4px 0 0}
.sn-gem{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin:18px 0 0}
.sn-knap{font:inherit;font-weight:800;font-size:.9rem;border:0;border-radius:12px;padding:10px 20px;
  background:var(--moerk,#1e374c);color:#fff;cursor:pointer}
.sn-knap[disabled]{opacity:.55;cursor:default}
.sn-knap.sn-let{background:var(--ds-kort);color:var(--ds-ink);border:1px solid var(--ds-linje2)}
.sn-knap.sn-lille{padding:6px 13px;font-size:.8rem;margin:12px 0 0}
.sn-slet{margin:16px 0 0;font:inherit;font-weight:750;font-size:.85rem;background:none;border:0;
  color:var(--roed,#e7004c);cursor:pointer;text-decoration:underline}
.sn-fejl{color:var(--roed,#e7004c);font-weight:750;font-size:.86rem}

@media(max-width:700px){
  body.ds-ramme.ds-alene .flise.vp{flex-direction:column;align-items:flex-start;gap:14px;padding:20px}
  body.ds-ramme.ds-alene .flise.vp .vp-bund{width:100%}
  body.ds-ramme.ds-alene .flise.vp .pil{width:100%;text-align:center}
}

/* 🔴 «reveal» slås fra. Husets egen indflyvning sætter opacity:0 og venter
   på, at et element kommer i syne. Med den nye rækkefølge lå nyhedsafsnittet
   uden for skærmen, når den blev sat op — og blev derfor stående usynligt
   med fuld højde. Designlaget har sin egen indflyvning (ds-anim), som ikke
   kan efterlade noget usynligt. */
body.ds-ramme.ds-alene .reveal{opacity:1;transform:none}

/* ---------- velkomstvideoen får sit eget felt ----------
   Den sad i forsidebilledet og var stylet til hvid tekst på mørk flade.
   Flyttet ud står den nu på en lys side — så noten og teksterne skal
   have en farve, man kan læse. Bredden bindes; en 1-minuts video må
   ikke fylde en halv skærm. */
body.ds-ramme.ds-alene #dsbVideo:not(:empty){
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  box-shadow:var(--ds-s1);padding:16px 17px;margin-top:13px;
  display:flex;gap:16px;align-items:center;flex-wrap:wrap;max-width:560px;
}
body.ds-ramme.ds-alene #dsbVideo::before{
  content:"🎬 Velkommen til universet";font-size:.78rem;font-weight:800;
  letter-spacing:.13em;text-transform:uppercase;color:var(--ds-ink2);flex:1 1 100%;
}
body.ds-ramme.ds-alene #dsbVideo:empty::before{content:none}
body.ds-ramme.ds-alene .hero-vid{flex:0 0 320px;max-width:100%}
body.ds-ramme.ds-alene .vid-wrap video{border:1px solid var(--ds-linje);border-radius:14px}
body.ds-ramme.ds-alene .vid-note{color:var(--ds-ink2);text-align:left;justify-content:flex-start}
/* 🔴 #vidTekstKnap er hvid tekst på gennemsigtig hvid — den var usynlig,
   så snart videoen flyttede fra det mørke forsidebillede til en lys side.
   Der stod kun 💬 tilbage. Id-selektor kræver id-selektor for at vinde. */
body.ds-ramme.ds-alene #vidTekstKnap{
  color:var(--ds-ink);border-color:var(--ds-linje);background:var(--ds-flade);
}
body.ds-ramme.ds-alene #vidTekstKnap:hover{background:var(--ds-bg)}

/* ---------- 📣 Seneste nyt ---------- */
.ds-nyh{display:grid;gap:10px}
.ds-nyhed{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  padding:15px 17px;box-shadow:var(--ds-s1);position:relative;overflow:hidden;
  transition:transform var(--ds-puls),box-shadow var(--ds-puls);
}
.ds-nyhed:hover{transform:translateY(-2px);box-shadow:var(--ds-s2)}
.ds-nyhed .ds-nhoved{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:7px}
.ds-nyhed .ds-uprik{width:8px;height:8px;border-radius:50%;background:var(--blaa);flex:none}
.ds-nyhed .ds-nkat{
  display:inline-flex;align-items:center;gap:5px;font-size:.7rem;font-weight:800;
  letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:3px 10px;
  background:var(--ds-flade);border:1px solid var(--ds-linje);color:var(--ds-ink2);
}
.ds-nyhed .ds-naar{font-size:.76rem;font-weight:700;color:var(--ds-ink2)}
.ds-nyhed h5{font-size:.98rem;font-weight:800;letter-spacing:-.01em;line-height:1.3}
.ds-nyhed p{color:var(--ds-ink2);font-size:.85rem;line-height:1.5;margin-top:5px}
.ds-nyhed .ds-laes{display:inline-block;margin-top:9px;font-weight:800;font-size:.85rem;color:var(--blaa)}
/* 🔴 Driftsinfo er den ENESTE kategori med farve. Den er den eneste, der
   har en frist. Får alle fem farve, siger farve ingenting. */
.ds-nyhed.ds-drift{border-color:rgba(231,0,76,.30);background:linear-gradient(100deg,rgba(231,0,76,.05),transparent 60%)}
.ds-nyhed.ds-drift::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--roed)}
.ds-nyhed.ds-drift .ds-nkat{background:rgba(231,0,76,.10);border-color:rgba(231,0,76,.30);color:var(--roed)}
.ds-nyhed.ds-laest{background:none;border-style:dashed;box-shadow:none}
.ds-nyhed.ds-laest h5{color:var(--ds-ink2);font-weight:700}
.ds-nyhed.ds-frem h5{font-size:1.14rem}

/* overskriftsrækken med tællepille og «se alle» */
.ds-h4 .ds-antal{
  font-size:.7rem;font-weight:800;letter-spacing:0;text-transform:none;
  background:var(--blaa);color:#fff;border-radius:999px;padding:2px 9px;
}
.ds-h4 .ds-alle{
  margin-left:auto;font-size:.78rem;font-weight:800;letter-spacing:0;
  text-transform:none;color:var(--blaa);text-decoration:none;white-space:nowrap;
}
.ds-h4:has(.ds-alle)::after{display:none}

/* ---------- rækker: det der venter dig ---------- */
.ds-raekke{
  display:flex;align-items:center;gap:13px;background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:15px;padding:13px 16px;
  box-shadow:var(--ds-s1);
}
.ds-raekke .ds-ik{font-size:1.25rem;flex:none}
.ds-raekke b{display:block;font-size:.92rem}
.ds-raekke small{display:block;color:var(--ds-ink2);font-size:.8rem;margin-top:2px}
.ds-raekke .ds-kn2{
  margin-left:auto;flex:none;background:var(--ds-flade);border:1px solid var(--ds-linje);
  border-radius:11px;padding:8px 14px;font-weight:700;font-size:.83rem;
  color:var(--ds-ink);text-decoration:none;white-space:nowrap;font-family:var(--font);cursor:pointer;
}
.ds-raekke .ds-kn2:hover{border-color:var(--blaa)}
@media(max-width:560px){
  .ds-raekke{flex-wrap:wrap}
  .ds-raekke .ds-kn2{margin-left:0;width:100%;text-align:center}
}

/* ---------- BPA-universet på telefonen ---------- */
@media(max-width:900px){
  /* søgefeltet skal have sin egen linje — «flex:1» alene giver et
     grundlag på 0, og så skrumper feltet til ingenting */
  body.ds-ramme.ds-alene #soegBar{flex:1 0 100%;max-width:none;min-width:0;order:2}
  /* 🔴 Rækkefølgen på en telefon: logo+menu, søgefelt, og så de tre små
     ting SAMMEN på én linje. Uden order på klokken og navnet havnede de
     før søgefeltet (order 0 kommer før order 2), og akutnummeret stod
     alene på en fjerde linje med 80 px tomt over sig. */
  body.ds-ramme.ds-alene .ds-akut,
  body.ds-ramme.ds-alene .ds-klokke,
  body.ds-ramme.ds-alene .ds-mig{order:3}
  body.ds-ramme.ds-alene .bar-top{row-gap:9px}
  body.ds-ramme.ds-alene #dsbFyld{display:none}   /* fyldet tvang en tom linje frem */
  /* chat-knappen sad oven på bundnavets sidste punkt */
  body.ds-ramme.ds-alene main{padding-bottom:86px}
  body.ds-ramme.ds-alene .fliser{grid-template-columns:1fr 1fr;gap:10px}
  body.ds-ramme.ds-alene .flise{padding:14px 13px 12px}
  body.ds-ramme.ds-alene .flise p{display:block;font-size:.76rem}
  body.ds-ramme.ds-alene .flise h3{font-size:.9rem}
  body.ds-ramme.ds-alene .flise .blob{width:34px;height:34px;font-size:1rem}
  body.ds-ramme.ds-alene #dsbVideo:not(:empty){max-width:none}
  body.ds-ramme.ds-alene .hero-vid{flex:1 1 100%}
}
/* to spalter helt ned til de smalleste telefoner — 13 kasser i ÉN spalte
   er en meget lang rulletur. Husets egen mobil-regel gjorde det samme. */
@media(max-width:359px){
  body.ds-ramme.ds-alene .fliser{grid-template-columns:1fr}
}

/* ============================================================
   15 · BORGERENS EGNE BYGGEKLODSER  (forside v2, 2. runde)
   ------------------------------------------------------------
   Mockup'ens borger-side er ikke en ommaling af den gamle — den
   bruger adm-universets byggeklodser i en ny raekkefoelge. De
   seksten klasser, mockup'en brugte og som ikke fandtes her,
   staar herunder. Alle bygger paa de SAMME --ds-tokens som resten
   af filen, saa lyst og moerkt foelger med af sig selv.

   🔴 Blok og modifikator maa aldrig dele navn (fjerde gang den
   regel skrives ned). Modifikatorerne herunder — ds-idag,
   ds-mangler, ds-fri, ds-xl — staar ALDRIG alene som blok.
   ============================================================ */

/* ---------- ⭐ HF Vagtplan: det kort, borgeren skal bruge ----------
   Den skal falde i oejnene uden at raabe. Derfor: LYS som resten af
   siden — velkomstbaandet er allerede moerkt, og to moerke blokke oven
   paa hinanden bliver tungt. Farven ligger i kanten, ikke i fladen.
   Den er stoerst, fordi den HAR mest at sige. */
.ds-vp{
  position:relative;border-radius:22px;padding:2px;overflow:hidden;
  background:linear-gradient(115deg,var(--blaa),#5ecfe0 32%,var(--groen) 72%,#b9e356);
  box-shadow:0 3px 8px rgba(30,55,76,.10),0 20px 46px rgba(60,180,229,.28);
  transition:transform var(--ds-puls),box-shadow var(--ds-puls);
}
.ds-vp:hover{transform:translateY(-4px);box-shadow:0 6px 14px rgba(30,55,76,.12),0 28px 60px rgba(60,180,229,.38)}
.ds-vp-i{
  position:relative;border-radius:20px;padding:20px 22px;overflow:hidden;
  background:
    radial-gradient(520px 220px at 88% -30%,rgba(147,213,0,.16),transparent 62%),
    radial-gradient(460px 240px at -6% 130%,rgba(60,180,229,.18),transparent 60%),
    var(--ds-kort);
  display:flex;gap:20px;align-items:center;flex-wrap:wrap;
}
/* et blidt lysstroeg hvert sjette sekund — nok til at oejet finder kortet,
   lidt nok til at man ikke bliver traet af det */
.ds-vp-i::after{
  content:"";position:absolute;top:0;bottom:0;width:38%;left:-45%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  animation:ds-vpglimt 6.5s ease-in-out infinite;
}
@keyframes ds-vpglimt{0%,72%{left:-45%}88%,100%{left:115%}}
/* 🔴 Emojien 📅 tegnes af STYRESYSTEMET: på Windows er den en gullig lap
   papir med tallet 17, på iPhone noget helt andet. Vi kan hverken styre
   farve, form eller hvilket tal der står — og «17» er en tilfældig dag.
   Derfor et rigtigt mærke tegnet som SVG (se dsbVpIkon i borger.js):
   samme streg på alle skærme, skarpt i alle størrelser. */
.ds-vp-med{
  width:64px;height:64px;flex:none;border-radius:20px;display:grid;place-items:center;
  background:linear-gradient(140deg,#1b3d55,#2a5573 55%,#1f5f7a);color:#7fd8ff;
  box-shadow:0 10px 24px rgba(30,55,76,.32), inset 0 1px 0 rgba(255,255,255,.14);
  position:relative;
}
.ds-vp-med svg{display:block}
/* prikken siger, om der er noget at se til — grøn når ugen er dækket, rød
   når en dag mangler en hjælper. Den findes KUN, når vi ved det. */
.ds-vp-med.ds-god::before,.ds-vp-med.ds-adv::before{
  content:"";position:absolute;right:-3px;bottom:-3px;width:15px;height:15px;
  border-radius:50%;box-shadow:0 0 0 3px var(--ds-kort);
}
.ds-vp-med.ds-god::before{background:var(--groen)}
.ds-vp-med.ds-adv::before{background:var(--roed)}
.ds-vp-med::after{
  content:"";position:absolute;inset:-4px;border-radius:24px;
  border:2px solid rgba(60,180,229,.32);animation:ds-vpring 3.4s ease-in-out infinite;
}
@keyframes ds-vpring{0%,100%{transform:scale(1);opacity:.75}50%{transform:scale(1.07);opacity:.25}}
.ds-vp-tekst{flex:1 1 300px;min-width:230px;position:relative}
.ds-vp-tekst h3{font-size:1.32rem;font-weight:800;letter-spacing:-.025em;line-height:1.15}
.ds-vp-naest{font-size:.94rem;font-weight:600;color:var(--ds-ink2);margin-top:3px}
.ds-vp-naest b{color:var(--ds-ink);font-weight:800}
.ds-vp-kn{
  display:inline-flex;align-items:center;gap:8px;margin-top:13px;border:0;border-radius:13px;
  padding:12px 20px;font-size:.94rem;font-weight:800;color:#fff;cursor:pointer;
  font-family:var(--font);background:linear-gradient(120deg,var(--moerk),#2a5573);
  box-shadow:0 10px 24px rgba(30,55,76,.30);transition:transform var(--ds-puls),box-shadow var(--ds-puls);
}
.ds-vp-kn:hover{transform:translateY(-2px);box-shadow:0 16px 32px rgba(30,55,76,.38)}
.ds-vp-kn:focus-visible{outline:2px solid var(--blaa);outline-offset:3px}
.ds-vp-mobil{
  display:inline-flex;align-items:center;gap:6px;margin-left:11px;
  font-size:.79rem;font-weight:700;color:var(--ds-ink2);
}

/* ---------- 📅 Ugens daekning ----------
   🔴 TRE tilstande, ikke to. En dag UDEN vagt er ikke et problem: mange
   borgere har slet ikke vagt alle ugens dage. Det, der skal falde i
   oejnene, er en vagt der MANGLER EN HJAELPER — ikke en fridag.
     ✓ groen = vagt, daekket · ! roed = mangler hjaelper · – graa = ingen vagt */
.ds-uge{
  position:relative;flex:none;background:var(--ds-flade);border:1px solid var(--ds-linje);
  border-radius:16px;padding:13px 15px;min-width:262px;
}
.ds-uge-h{
  font-size:.72rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ds-ink2);margin-bottom:9px;
}
.ds-dage{display:flex;gap:6px}
.ds-dag{flex:1;text-align:center;min-width:0}
.ds-dag span{display:block;font-size:.68rem;font-weight:800;color:var(--ds-ink2);margin-bottom:4px}
.ds-dag i{
  display:block;height:26px;border-radius:8px;font-style:normal;font-size:.68rem;
  font-weight:800;line-height:26px;color:#3d5a00;background:rgba(147,213,0,.34);
}
.ds-dag.ds-idag i{box-shadow:inset 0 0 0 2px var(--moerk)}
.ds-dag.ds-mangler i{background:rgba(231,0,76,.16);color:var(--roed)}
.ds-dag.ds-fri i{background:var(--ds-bg);color:var(--ds-ink2);opacity:.65;box-shadow:inset 0 0 0 1px var(--ds-linje)}
.ds-dag.ds-fri.ds-idag i{box-shadow:inset 0 0 0 2px var(--moerk)}
.ds-sum{font-size:.75rem;font-weight:700;color:var(--ds-ink2);margin-top:9px}
.ds-sum b{color:var(--roed)}
.ds-tegn{
  display:flex;gap:11px;flex-wrap:wrap;margin-top:7px;
  font-size:.68rem;font-weight:700;color:var(--ds-ink2);
}
.ds-tegn span{display:inline-flex;align-items:center;gap:4px}
.ds-tegn i{
  font-style:normal;width:15px;height:15px;border-radius:5px;display:grid;
  place-items:center;font-size:.6rem;font-weight:800;
}
.ds-tegn .ds-tg-ok{background:rgba(147,213,0,.34);color:#3d5a00}
.ds-tegn .ds-tg-mangler{background:rgba(231,0,76,.16);color:var(--roed)}
.ds-tegn .ds-tg-ingen{background:var(--ds-bg);color:var(--ds-ink2);box-shadow:inset 0 0 0 1px var(--ds-linje)}
/* venter vi stadig paa svaret, staar der en rolig plads — ikke et tomt hul
   og ikke et tal, vi ikke har */
.ds-uge.ds-venter .ds-dag i{background:var(--ds-bg);color:transparent;box-shadow:inset 0 0 0 1px var(--ds-linje)}

/* ---------- 📋 «Det der venter dig» ----------
   Det, hun faktisk kom efter — uden at skulle ind i tre fliser foerst. */
.ds-raek{display:grid;gap:10px}
.ds-naeste{
  display:flex;gap:13px;align-items:center;flex-wrap:wrap;background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:17px;padding:14px 17px;box-shadow:var(--ds-s1);
  transition:transform var(--ds-puls),box-shadow var(--ds-puls),border-color var(--ds-puls);
}
.ds-naeste:hover{transform:translateY(-3px);box-shadow:var(--ds-s2);border-color:var(--ds-linje2)}
.ds-nik{
  width:40px;height:40px;border-radius:13px;display:grid;place-items:center;font-size:1.2rem;flex:none;
  background:linear-gradient(140deg,rgba(60,180,229,.16),rgba(147,213,0,.13));
  box-shadow:inset 0 0 0 1px rgba(60,180,229,.18);
}
.ds-naeste b{font-size:.95rem;display:block}
.ds-naeste small{color:var(--ds-ink2);font-size:.82rem}
.ds-nkn{
  margin-left:auto;border:1px solid var(--ds-linje);background:var(--ds-flade);border-radius:11px;
  padding:8px 15px;font-weight:700;font-size:.83rem;color:var(--ds-ink);cursor:pointer;
  font-family:var(--font);text-decoration:none;white-space:nowrap;flex:none;
  transition:border-color var(--ds-puls),background var(--ds-puls);
}
.ds-nkn:hover{border-color:var(--blaa);background:var(--ds-kort)}

/* ---------- 🔠 store og smaa kort ----------
   De, der bliver brugt hver uge, er store. Resten er mindre. Foer var alle
   tretten lige store — og saa er ingen af dem vigtige. */
.ds-stor{display:grid;grid-template-columns:repeat(auto-fit,minmax(272px,1fr));gap:14px}
.ds-kort.ds-xl{padding:21px 21px 19px}
.ds-kort.ds-xl .ds-med{width:52px;height:52px;font-size:1.5rem;border-radius:16px}
.ds-kort.ds-xl b{font-size:1.06rem}
.ds-kort.ds-xl small{font-size:.85rem;margin-top:5px}
.ds-pil{display:block;margin-top:10px;font-weight:800;font-size:.85rem;color:var(--blaa)}

/* ---------- 🔔 klokken og navnet i topbjaelken ---------- */
.ds-klokke{
  position:relative;width:38px;height:38px;border-radius:12px;border:1px solid var(--ds-linje);
  background:var(--ds-kort);display:grid;place-items:center;font-size:1rem;box-shadow:var(--ds-s1);
  cursor:pointer;font-family:var(--font);flex:none;text-decoration:none;color:inherit;
  transition:border-color var(--ds-puls);
}
.ds-klokke:hover{border-color:var(--ds-linje2)}
.ds-klokke .ds-n{
  position:absolute;top:-5px;right:-5px;background:var(--roed);color:#fff;font-size:.65rem;
  font-weight:800;border-radius:999px;padding:1px 5px;box-shadow:0 0 0 2px var(--ds-bg);
}
.ds-mig{
  display:flex;align-items:center;gap:9px;padding:4px 10px 4px 4px;border-radius:999px;
  border:1px solid var(--ds-linje);background:var(--ds-kort);box-shadow:var(--ds-s1);
  cursor:pointer;font-family:var(--font);color:inherit;text-decoration:none;flex:none;
}
.ds-mig .ds-av{
  width:30px;height:30px;border-radius:50%;background:linear-gradient(140deg,var(--moerk),#2a5573);
  color:#fff;display:grid;place-items:center;font-size:.76rem;font-weight:800;flex:none;
}
.ds-mig b{font-size:.82rem;white-space:nowrap}
.ds-mig .ds-pilned{color:var(--ds-ink2);font-size:.72rem}

/* ---------- mørk makker til afsnit 15 ---------- */
html[data-tema="moerk"] .ds-vp{box-shadow:0 3px 8px rgba(0,0,0,.35),0 20px 46px rgba(0,0,0,.45)}
html[data-tema="moerk"] .ds-vp-i::after{background:linear-gradient(100deg,transparent,rgba(255,255,255,.16),transparent)}
html[data-tema="moerk"] .ds-vp-med{background:linear-gradient(140deg,#17334a,#245068 55%,#1b5069)}
html[data-tema="moerk"] .ds-dag i{color:#c9f06d}
html[data-tema="moerk"] .ds-dag.ds-mangler i{color:#ff7ba5;background:rgba(231,0,76,.24)}
html[data-tema="moerk"] .ds-sum b{color:#ff7ba5}
html[data-tema="moerk"] .ds-tegn .ds-tg-ok{color:#c9f06d}
html[data-tema="moerk"] .ds-tegn .ds-tg-mangler{color:#ff7ba5;background:rgba(231,0,76,.24)}
html[data-tema="moerk"] .ds-dag.ds-idag i,
html[data-tema="moerk"] .ds-dag.ds-fri.ds-idag i{box-shadow:inset 0 0 0 2px #7fd8ff}
html[data-tema="moerk"] .ds-nik{
  background:linear-gradient(140deg,rgba(60,180,229,.22),rgba(147,213,0,.16));
  box-shadow:inset 0 0 0 1px rgba(60,180,229,.26);
}
html[data-tema="moerk"] .ds-pil{color:#7fd8ff}

/* ---------- afsnit 15 paa telefonen ---------- */
@media(max-width:640px){
  .ds-vp-i{padding:17px 16px;gap:15px}
  .ds-vp-med{width:52px;height:52px;font-size:1.5rem;border-radius:16px}
  .ds-vp-tekst h3{font-size:1.15rem}
  .ds-vp-kn{width:100%;justify-content:center;padding:13px 16px}
  .ds-vp-mobil{margin:9px 0 0;display:flex;justify-content:center;width:100%}
  .ds-uge{min-width:0;flex:1 1 100%}
  .ds-dage{gap:4px}
  .ds-naeste{padding:13px 14px;gap:11px}
  .ds-nkn{margin-left:0;width:100%;text-align:center}
  .ds-stor{grid-template-columns:1fr;gap:10px}
  .ds-mig b{display:none}
  .ds-mig{padding:3px}
}

/* ---------- afsnit 15b · fliserne i ét gitter med to overskrifter ----------
   🔴 Overskrifterne ligger INDE i gitteret og fylder hele bredden. De kunne
   ikke ligge udenfor: forsideAnvend() omrokerer fliserne inde i
   #forsideFliser efter admins opsætning, og to beholdere ville betyde, at
   to funktioner sloges om de samme kasser. Se dsbFliserByg(). */
body.ds-ramme.ds-alene .fliser .ds-fuld{grid-column:1/-1;margin:22px 0 2px}
body.ds-ramme.ds-alene .fliser .ds-fuld:first-child{margin-top:0}
/* de to øverste er store — de bliver brugt hver uge. Kun hvor der ER plads
   til to spalter; på en telefon er alle kasser lige brede i forvejen. */
@media(min-width:781px){
  body.ds-ramme.ds-alene .fliser .flise.ds-xl{grid-column:span 2;padding:21px 22px 19px}
  body.ds-ramme.ds-alene .fliser .flise.ds-xl h3{font-size:1.12rem}
  body.ds-ramme.ds-alene .fliser .flise.ds-xl p{font-size:.88rem}
  body.ds-ramme.ds-alene .fliser .flise.ds-xl .blob{width:52px;height:52px;font-size:1.5rem;border-radius:16px}
}

/* ---------- afsnit 15c · navigationsrækken bliver roligere ----------
   🔴 Mockup'en har den slet ikke — kasserne ER vejen rundt dér. Den bliver
   STÅENDE alligevel: 550 borgere kender den, og et menupunkt, der forsvinder
   natten over, er en fejl for dem, uanset hvor pænt der bliver uden. Den
   træder i stedet et skridt tilbage, så velkomstbåndet er det første, øjet
   møder. Skal den helt væk, er det denne ene blok, der skal ændres. */
body.ds-ramme.ds-alene header nav{
  gap:2px;padding:0 26px 7px;max-width:none;margin:0;flex-wrap:wrap;
}
body.ds-ramme.ds-alene header nav a{
  font-size:.8rem;font-weight:700;color:var(--ds-ink2);padding:5px 10px;
  border-radius:9px;transition:background var(--ds-puls),color var(--ds-puls);
}
body.ds-ramme.ds-alene header nav a:hover{background:var(--ds-flade);color:var(--ds-ink)}
body.ds-ramme.ds-alene header nav a.aktiv{background:var(--ds-flade);color:var(--ds-ink)}
@media(max-width:640px){
  body.ds-ramme.ds-alene header nav{padding:0 14px 6px;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  body.ds-ramme.ds-alene header nav::-webkit-scrollbar{display:none}
  body.ds-ramme.ds-alene header nav a{white-space:nowrap}
}

/* ---------- afsnit 15d · bredden på en stor skærm ----------
   Borgerens side er en LÆSESIDE, ikke et arbejdsbord med en skinne ved
   siden af. Målt på Sørens egen skærm: 2600 px bred, og teksten blev en
   tynd stribe hen over en meter. Adm-universet kan bære fuld bredde, fordi
   skinnen tager 246 px og fordi kolonnerne er indholdet. Her er der ingen
   skinne. Ændrer intet på telefon eller bærbar. */
body.ds-ramme.ds-alene main,
body.ds-ramme.ds-alene header .bar{max-width:1340px;margin-left:auto;margin-right:auto}
body.ds-ramme.ds-alene .ds-fod{max-width:1340px;margin-left:auto;margin-right:auto}

/* ---------- afsnit 15e · luft mellem afsnittene ----------
   🔴 De to nye afsnit er tomme <div>'er, indtil borger.js fylder dem. Et
   tomt element må ikke sætte luft af — så ville der stå et hul, hvor
   vagtplanen ikke findes. Derfor :not(:empty). */
body.ds-ramme.ds-alene #dsbVagtplan:not(:empty),
body.ds-ramme.ds-alene #dsbVenter:not(:empty){display:block;margin-top:6px}
body.ds-ramme.ds-alene #dsbVelkomst:not(:empty){margin-bottom:4px}
/* overskrifterne i borgerens univers får samme luft over sig som i adm */
body.ds-ramme.ds-alene #dsbVagtplan .ds-h4,
body.ds-ramme.ds-alene #dsbVenter .ds-h4,
body.ds-ramme.ds-alene #nyhedsTeaser .ds-h4{margin:24px 0 11px}

/* 👤 husets tomme profilcirkel: vi har vores egen navnechip nu, og to
   ansigter ved siden af hinanden er ét for meget */
body.ds-ramme.ds-alene #profilBtn{display:none}

/* 🔴 Uden ugepanelet ville vagtplan-kortet strække sig over hele bredden
   med en tom højreside — nøjagtig den fejl, videoen lavede i 1. runde.
   Så længe der ikke er tal at vise, holder kortet sig i en bredde, der
   ser bevidst ud. Kommer panelet, falder grænsen væk af sig selv. */
/* 🔴 Kortet havde en max-bredde, så det ikke stod med en tom højreside,
   mens ugepanelet mangler. Søren 05-08: det skal flugte med resten.
   I stedet er det INDRE lagt om: teksten fylder, og knapperne står til
   højre — så bredden bliver brugt i stedet for at være tom. */

/* husets burger bar margin-left:320px som inline-stil — den tvang sig selv
   ud på en linje for sig på en telefon */
body.ds-ramme.ds-alene #ubBurger{margin-left:auto!important}

/* ============================================================
   16 · MØRKT TEMA — husets egne farver
   ------------------------------------------------------------
   🔴 Regel 4 siger, at stil.css' variabler ALDRIG sættes om i LYS
   tilstand. I mørk tilstand er det netop meningen, at de skal —
   det var hele planen for trin 3. Herunder er de fire, der bærer
   næsten hele huset. Målt på de seks filer:

     --graa    612 steder · 611 af dem er `color`      → sikker
     --flade    33 steder ·  31 af dem er `background`  → sikker
     --hvid      4 steder ·   4 af dem er `background`  → sikker
     --moerk   206 steder · 134 color, 60 background    → 🔴 IKKE sikker

   `--moerk` er tvetydig: den er BÅDE husets mørke tekst OG husets
   mørke flader. Vender man den, bliver teksten læsbar og fladerne
   hvide med hvid tekst på. På BORGERENS forside er den kun brugt som
   flade fire steder, og alle fire er vores egne ds-elementer — dem
   får vi en mørk makker til lige nedenfor. Derfor kan den vendes her.

   ⚠️ I ADM-universet er de 60 flader spredt ud over 22 områder, og
   dét er grunden til, at DS_TEMA_KLAR stadig står på false. Se
   MOERKT-TEMA-STATUS.md for hvor langt vi når, og hvad der mangler.
   ============================================================ */
html[data-tema="moerk"]{
  --moerk:#e8f1f8;      /* var husets mørkeblå tekst  → nu lys tekst      */
  --moerk2:#c6dbea;
  --flade:#101f2c;      /* var den lyse baggrundsflade → nu mørk flade    */
  --hvid:#15283a;       /* var kortets hvide flade     → nu mørk kortflade */
  --graa:#94a9ba;       /* underordnet tekst, lysnet så den kan læses     */
  --skygge:0 1px 2px rgba(0,0,0,.30), 0 8px 22px rgba(0,0,0,.28);
  --skygge2:0 2px 4px rgba(0,0,0,.35), 0 20px 44px rgba(0,0,0,.45);
}
/* 🔴 De fire steder, hvor VI selv bruger var(--moerk) som en MØRK FLADE.
   Uden dem ville knappen og medaljonen blive lyse med hvid tekst på. */
html[data-tema="moerk"] .ds-vp-kn{background:linear-gradient(120deg,#1c3a52,#2a5573)}
html[data-tema="moerk"] .ds-mig .ds-av{background:linear-gradient(140deg,#1c3a52,#2a5573)}
html[data-tema="moerk"] .ds-panel .ds-av{box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}
/* husets egne mørke flader, der stadig SKAL være mørke */
html[data-tema="moerk"] body.ds-ramme .knap,
html[data-tema="moerk"] body.ds-ramme .gate-knap{background:#1c3a52;color:#fff}
/* felter og kanter, der var lyse linjer på hvid flade */
html[data-tema="moerk"] body.ds-ramme input,
html[data-tema="moerk"] body.ds-ramme textarea,
html[data-tema="moerk"] body.ds-ramme select{
  background:var(--ds-kort);color:var(--ds-ink);border-color:var(--ds-linje2);
}
html[data-tema="moerk"] body.ds-ramme input::placeholder,
html[data-tema="moerk"] body.ds-ramme textarea::placeholder{color:var(--ds-ink2)}
/* den røde er for mørk til at læse som tekst på en mørk flade */
html[data-tema="moerk"] body.ds-ramme .ds-nkat.ds-drift{color:#ff8fb0;background:rgba(231,0,76,.20)}
html[data-tema="moerk"] .ds-antal{background:#1f8fc4}

/* 🔴 Den hvide hovedknap i velkomstbåndet: fladen SKAL blive hvid — båndet
   er mørkt i begge temaer. Men teksten stod på var(--moerk), og den er nu
   lys. Hvid på hvid. Målt af kontrastprøven, ikke set med øjet. */
html[data-tema="moerk"] .ds-vk-hand .ds-primaer{color:#12293c}
html[data-tema="moerk"] .ds-vp-mobil{color:var(--ds-ink2)}

/* 🔴 core.js sætter #poFab's knapper med style.cssText — inline slår alt.
   De stod på background:var(--moerk);color:#fff, og da --moerk blev lys i
   mørk tilstand, blev de hvide med hvid tekst. Sjette gang inline-fælden
   melder sig; her er !important den eneste vej, for filen er ikke vores. */
html[data-tema="moerk"] #poFab button{background:#1c3a52!important;color:#fff!important}
html[data-tema="moerk"] #aFab{color:#0d2a12}
/* ============================================================
   17 · MØRKT TEMA — husets 104 hårdkodede farver
   ------------------------------------------------------------
   Farverne står som var(--kf-…, #original) i adm.js, borger.js,
   core.js, stil.css og de to index-filer. Er variablen ikke sat
   — altså i LYS tilstand — bruger browseren reservefarven, og så
   er resultatet nøjagtig som før. Det er hele sikkerheden: lys
   tilstand KAN ikke ændre sig, uanset hvad der står herunder.
   Bevist med billed-for-billed sammenligning af 21 områder.

   kf = flade · kt = tekst · kb = kant. Samme farve kan optræde i
   flere grupper: #fff er både 168 flader og 121 stykker tekst, og
   de to skal hver sin vej. Dét var grunden til, at «vend farverne»
   ikke kunne lade sig gøre som ét greb.
   ============================================================ */
html[data-tema="moerk"]{
  /* --- FLADER — snappet til husets tre mørke flader; tonede beholder kuløren (43) --- */
  --kf-ffffff:#15283a;                   /* #ffffff · 168 steder */
  --kf-eef3f7:#1c2d3b;                   /* #eef3f7 · 24 steder */
  --kf-f4f8fb:#192e3e;                   /* #f4f8fb · 13 steder */
  --kf-f3f7fa:#192e3d;                   /* #f3f7fa · 6 steder */
  --kf-1f8fc4:#264c5e;                   /* #1f8fc4 · 6 steder */
  --kf-fdf3e2:#3e3019;                   /* #fdf3e2 · 5 steder */
  --kf-fdecef:#3e1920;                   /* #fdecef · 4 steder */
  --kf-fff3cd:#3e3519;                   /* #fff3cd · 3 steder */
  --kf-fff8e1:#3e3519;                   /* #fff8e1 · 3 steder */
  --kf-77c9ec:#214250;                   /* #77c9ec · 3 steder */
  --kf-eef4f8:#192f3d;                   /* #eef4f8 · 3 steder */
  --kf-fbeceb:#3e1b19;                   /* #fbeceb · 3 steder */
  --kf-e8f2ef:#15283a;                   /* #e8f2ef · 3 steder */
  --kf-eef7ec:#203d1a;                   /* #eef7ec · 3 steder */
  --kf-e6f4fb:#19313e;                   /* #e6f4fb · 2 steder */
  --kf-f3eefb:#27193e;                   /* #f3eefb · 2 steder */
  --kf-eaf6dc:#2d3e19;                   /* #eaf6dc · 1 sted */
  --kf-cfdae3:#101f2c;                   /* #cfdae3 · 1 sted */
  --kf-fffdf5:#3e3619;                   /* #fffdf5 · 1 sted */
  --kf-fffef9:#3e3719;                   /* #fffef9 · 1 sted */
  --kf-e0a800:#5e5026;                   /* #e0a800 · 1 sted */
  --kf-e6eef4:#1a2e3c;                   /* #e6eef4 · 1 sted */
  --kf-eef7fb:#19323e;                   /* #eef7fb · 1 sted */
  --kf-2a91c4:#264c5e;                   /* #2a91c4 · 1 sted */
  --kf-eef2f6:#1e2b39;                   /* #eef2f6 · 1 sted */
  --kf-f4f7fa:#1b2b3c;                   /* #f4f7fa · 1 sted */
  --kf-eef6fb:#19303e;                   /* #eef6fb · 1 sted */
  --kf-fafcfe:#192b3e;                   /* #fafcfe · 1 sted */
  --kf-f2f5f7:#15283a;                   /* #f2f5f7 · 1 sted */
  --kf-e6f4ea:#1a3c24;                   /* #e6f4ea · 1 sted */
  --kf-eaf3fb:#192c3e;                   /* #eaf3fb · 1 sted */
  --kf-fff3e0:#3e2f19;                   /* #fff3e0 · 1 sted */
  --kf-fbfdff:#192b3e;                   /* #fbfdff · 1 sted */
  --kf-ffd166:#504121;                   /* #ffd166 · 1 sted */
  --kf-eef1f5:#15283a;                   /* #eef1f5 · 1 sted */
  --kf-1e9fd6:#264d5e;                   /* #1e9fd6 · 1 sted */
  --kf-5ec4ec:#214250;                   /* #5ec4ec · 1 sted */
  --kf-2da5d8:#264e5e;                   /* #2da5d8 · 1 sted */
  --kf-f0f9f0:#193e19;                   /* #f0f9f0 · 1 sted */
  --kf-eef6fc:#192e3e;                   /* #eef6fc · 1 sted */
  --kf-9db4c4:#0c1722;                   /* #9db4c4 · 1 sted */
  --kf-eaffb0:#343e19;                   /* #eaffb0 · 1 sted */
  --kf-eaf4fb:#192f3e;                   /* #eaf4fb · 1 sted */

  /* --- TEKST — mørk bliver lys, hvid bliver hvid (35) --- */
  --kt-0d2a12:#a9e4b4;                   /* #0d2a12 · 29 steder */
  --kt-2a3a48:#b8c8d6;                   /* #2a3a48 · 17 steder */
  --kt-41630a:#cee6a8;                   /* #41630a · 15 steder */
  --kt-333333:#e8f1f8;                   /* #333333 · 11 steder */
  --kt-8a6400:#e6d5a8;                   /* #8a6400 · 10 steder */
  --kt-8a5a12:#e6cda8;                   /* #8a5a12 · 9 steder */
  --kt-1f7ea8:#a8d3e6;                   /* #1f7ea8 · 7 steder */
  --kt-a86b00:#e6cfa8;                   /* #a86b00 · 7 steder */
  --kt-1c6b5a:#a8e6d8;                   /* #1c6b5a · 6 steder */
  --kt-8a6d00:#e6d9a8;                   /* #8a6d00 · 3 steder */
  --kt-112233:#abc7e3;                   /* #112233 · 3 steder */
  --kt-8c2f2f:#e3abab;                   /* #8c2f2f · 3 steder */
  --kt-3b6d11:#c4e6a8;                   /* #3b6d11 · 3 steder */
  --kt-33520a:#cbe6a8;                   /* #33520a · 2 steder */
  --kt-a3003a:#e6a8be;                   /* #a3003a · 2 steder */
  --kt-8a5a00:#e6d0a8;                   /* #8a5a00 · 2 steder */
  --kt-2a5a78:#accde2;                   /* #2a5a78 · 2 steder */
  --kt-1e374c:#afc9df;                   /* #1e374c · 2 steder */
  --kt-22303c:#b7c8d6;                   /* #22303c · 2 steder */
  --kt-1a2e05:#c8e6a8;                   /* #1a2e05 · 2 steder */
  --kt-12556f:#a8d5e6;                   /* #12556f · 2 steder */
  --kt-4b2c86:#beabe3;                   /* #4b2c86 · 2 steder */
  --kt-7b8b98:#94a9ba;                   /* #7b8b98 · 1 sted */
  --kt-555566:#e8f1f8;                   /* #555566 · 1 sted */
  --kt-a06a00:#e6d1a8;                   /* #a06a00 · 1 sted */
  --kt-3a2e00:#e6d9a8;                   /* #3a2e00 · 1 sted */
  --kt-1a7a1a:#a8e6a8;                   /* #1a7a1a · 1 sted */
  --kt-2c3d00:#d5e6a8;                   /* #2c3d00 · 1 sted */
  --kt-3d7a00:#c7e6a8;                   /* #3d7a00 · 1 sted */
  --kt-2a5573:#adcce1;                   /* #2a5573 · 1 sted */
  --kt-9aa7b2:#94a9ba;                   /* #9aa7b2 · 1 sted */
  --kt-b3261e:#e6aba8;                   /* #b3261e · 1 sted */
  --kt-1f7a45:#a8e6c2;                   /* #1f7a45 · 1 sted */
  --kt-12283a:#a9cae4;                   /* #12283a · 1 sted */
  --kt-5f8a00:#d3e6a8;                   /* #5f8a00 · 1 sted */

  /* --- KANTER — en lys streg på hvid bliver en lys streg på mørk (13) --- */
  --kb-dbe6ee:rgba(255,255,255,.14);     /* #dbe6ee · 30 steder */
  --kb-e6eef4:rgba(255,255,255,.14);     /* #e6eef4 · 4 steder */
  --kb-f5b400:rgba(255,255,255,.22);     /* #f5b400 · 2 steder */
  --kb-f2df9e:rgba(255,255,255,.14);     /* #f2df9e · 2 steder */
  --kb-e6d59a:rgba(255,255,255,.14);     /* #e6d59a · 2 steder */
  --kb-f0f5f9:rgba(255,255,255,.14);     /* #f0f5f9 · 2 steder */
  --kb-ffffff:rgba(255,255,255,.14);     /* #ffffff · 2 steder */
  --kb-eef3f7:rgba(255,255,255,.14);     /* #eef3f7 · 1 sted */
  --kb-f2c9d4:rgba(255,255,255,.14);     /* #f2c9d4 · 1 sted */
  --kb-9db4c4:rgba(255,255,255,.22);     /* #9db4c4 · 1 sted */
  --kb-cfe0ec:rgba(255,255,255,.14);     /* #cfe0ec · 1 sted */
  --kb-e4b4b4:rgba(255,255,255,.14);     /* #e4b4b4 · 1 sted */
  --kb-f0dcbb:rgba(255,255,255,.14);     /* #f0dcbb · 1 sted */
}

/* 🔴 --moerk er husets ENE variabel til to modsatte ting: mørk TEKST (134
   steder) og mørk FLADE (60 steder). Vender man den i mørk tilstand, bliver
   teksten læsbar og fladerne hvide med hvid tekst på — præcis dét, den
   forrige session målte som «chips hvidt på hvidt».
   De 60 flader er derfor skrevet om til var(--ds-flademoerk,var(--moerk)).
   Er variablen ikke sat — lys tilstand — falder den tilbage på --moerk, og
   så er der ingen forskel overhovedet. */
html[data-tema="moerk"]{ --ds-flademoerk:#1c3a52; }

/* ---------- afsnit 15f · vagtplan-kortet i fuld bredde ----------
   Kortet flugter nu med resten af siden. For at bredden bliver BRUGT og
   ikke bare står tom, mens ugepanelet mangler, er det indre lagt om:
   medaljon og tekst til venstre, knapperne som en egen blok til højre.
   Kommer ugepanelet, sætter det sig i midten, og knapperne rykker med. */
.ds-vp-i{align-items:center}
.ds-vp-hand{display:flex;align-items:center;gap:12px;flex-wrap:wrap;flex:none;margin-left:auto}
.ds-vp-kn{margin-top:0}
.ds-vp-mobil{margin-left:0}
/* en rolig linje mellem tekst og knapper, så kortet ikke er ét langt bånd */
@media(min-width:781px){
  .ds-vp-hand{padding-left:20px;border-left:1px solid var(--ds-linje)}
}
@media(max-width:780px){
  /* 🔴 Denne blok skal blive stående SIDST. Mobil-reglen for .ds-vp-tekst
     lå før grundreglen i afsnit 15f og blev slået af den — samme vægt,
     og så vinder den sidste. Kontrol 8 i tjek.mjs fangede det. */
  .ds-vp-tekst{min-width:0;flex:1 1 100%}
  .ds-vp-hand{margin-left:0;flex:1 1 100%}
  .ds-vp-kn{width:100%;justify-content:center}
}

/* ---------- afsnit 15g · brugermenuen ----------
   «Skift kodeord» og «Log ud» hører til under personen, ikke ude i
   bjælken ved siden af søgefeltet. Knapperne er FLYTTET ind — ikke
   bygget om — så deres hændelser er urørte. */
.ds-migpak{position:relative;flex:none}
.ds-mig{cursor:pointer;font-family:var(--font);color:inherit}
.ds-mig:hover{border-color:var(--ds-linje2)}
.ds-mig[aria-expanded="true"]{border-color:var(--blaa);background:var(--ds-flade)}
.ds-migmenu{
  position:absolute;top:calc(100% + 8px);right:0;z-index:60;min-width:232px;
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:16px;
  box-shadow:var(--ds-s2);padding:7px;display:flex;flex-direction:column;gap:2px;
}
.ds-migmenu[hidden]{display:none}
.ds-migh{
  display:flex;align-items:center;gap:10px;padding:9px 10px 11px;
  border-bottom:1px solid var(--ds-linje);margin-bottom:5px;
}
.ds-migh .ds-av{
  width:34px;height:34px;border-radius:50%;flex:none;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--ds-flademoerk,var(--moerk)),#2a5573);
  color:#fff;font-size:.8rem;font-weight:800;
}
.ds-migh b{display:block;font-size:.88rem;line-height:1.25}
.ds-migh small{display:block;color:var(--ds-ink2);font-size:.75rem;font-weight:600}
/* husets to knapper får menuens udseende — de beholder deres id og klik */
.ds-migmenu > button{
  display:flex!important;align-items:center;gap:9px;width:100%;text-align:left;
  border:0!important;background:none!important;border-radius:10px!important;
  padding:10px 11px!important;font-family:var(--font)!important;font-size:.87rem!important;
  font-weight:700!important;color:var(--ds-ink)!important;cursor:pointer;
  box-shadow:none!important;margin:0!important;
}
.ds-migmenu > button:hover{background:var(--ds-flade)!important}
.ds-migmenu > button#logudBtn{color:var(--roed)!important}
/* «Log ud» er den eneste knap i menuen, man ikke kan fortryde. Den får en
   streg over sig, så den ikke ligger klods op ad «Skift dit kodeord». */
.ds-migmenu > button#logudBtn{
  border-top:1px solid var(--ds-linje)!important;
  margin-top:5px!important;padding-top:12px!important;
}
.ds-migmenu > button[hidden]{display:none!important}

/* ---------- afsnit 15g-2 · navnechippen i ADM-universet ----------
   Samme chip som borgerens, men med to forskelle:

   1) Ansigtet er profil.js' RIGTIGE profilbillede (#profilBtn), ikke to
      bogstaver. Billedet var der i forvejen ude i bjælken; det er flyttet
      ind i chippen, så det stadig åbner «Min profil» på et klik.
      Findes billedet ikke (ingen profil-fil, intet foto), tegner adm.js
      initialerne i stedet, og reglerne nedenfor rører ingenting.
   2) Menuen rummer ni punkter i stedet for to, og fire af dem er
      knapper, der skriver i deres egen tekst. Derfor .ds-migrk: knappen
      er ikonet, ordet står ved siden af, og RÆKKEN er klikmålet.

   Chippen er én pille om begge dele, så [foto][Søren ▾] læses som ét —
   ikke som to knapper, der tilfældigvis står ved siden af hinanden. */
.ds-migpak.ds-admmig{
  display:flex;align-items:center;gap:7px;flex:none;
  border:1px solid var(--ds-linje);background:var(--ds-kort);
  border-radius:999px;padding:3px 4px 3px 3px;box-shadow:var(--ds-s1);
  transition:border-color var(--ds-puls),background var(--ds-puls);
}
.ds-migpak.ds-admmig:hover{border-color:var(--ds-linje2)}
.ds-migpak.ds-admmig.ds-aaben{border-color:var(--blaa);background:var(--ds-flade)}
/* profil.js sætter sin egen #profilBtn-regel i et <style> senere i
   dokumentet. To klasser + et id slår et id alene — derfor vinder disse,
   uanset rækkefølgen. */
.ds-migpak.ds-admmig #profilBtn{
  width:30px;height:30px;border:0;flex:none;box-shadow:none;
}
.ds-migpak.ds-admmig .ds-mig{
  border:0;background:none;box-shadow:none;padding:0 7px 0 0;gap:7px;
}
.ds-migpak.ds-admmig .ds-mig:hover{border:0}
.ds-migpak.ds-admmig .ds-mig[aria-expanded="true"]{border:0;background:none}
.ds-migpak.ds-admmig .ds-migmenu{top:calc(100% + 9px)}

/* #abVisning er et <a>, ikke en <button> — den skal se ud som resten */
.ds-migmenu > a{
  display:flex!important;align-items:center;gap:9px;width:100%;box-sizing:border-box;
  border:0!important;background:none!important;border-radius:10px!important;
  padding:10px 11px!important;font-family:var(--font)!important;font-size:.87rem!important;
  font-weight:700!important;color:var(--ds-ink)!important;cursor:pointer;
  box-shadow:none!important;margin:0!important;text-decoration:none;text-align:left;
}
.ds-migmenu > a:hover{background:var(--ds-flade)!important}
/* chat-beredskabet er grønt, når man tager imod — den eneste farve i menuen */
.ds-migmenu > button.ab-klar.gr{color:#4c7a00!important}

/* ikonknap + ord. Ordet ligger UDEN FOR knappen, fordi hfStatusVis() og
   opdKlarKnap() overskriver knappens egen textContent. */
.ds-migrk{
  display:flex;align-items:center;gap:9px;width:100%;box-sizing:border-box;
  border-radius:10px;padding:8px 11px;cursor:pointer;
}
.ds-migrk:hover{background:var(--ds-flade)}
.ds-migrk > button,
.ds-migrk > .ab-klar{
  border:0!important;background:none!important;box-shadow:none!important;
  padding:0!important;margin:0!important;border-radius:0!important;
  font-size:1.02rem!important;line-height:1.35!important;cursor:pointer;
  min-width:19px;text-align:left;color:var(--ds-ink)!important;
  font-family:var(--font)!important;flex:none;
}
.ds-migrk > button:hover{background:none!important}
.ds-migt{font-size:.87rem;font-weight:700;color:var(--ds-ink);white-space:nowrap}

/* På telefonen brydes bjælken i to linjer, og de tre ting skal stå på
   den ØVERSTE — som i mockup'en. Uden en rækkefølge lagde søgefeltet sig
   først og skubbede chippen ned i venstre hjørne af anden linje; menuen,
   der hænger ud fra chippens højrekant, endte 222 px uden for skærmen.
   Målt 06.08.2026 med prøven topbar.mjs. */
@media(max-width:700px){
  body.adm-tilstand .bar-top{row-gap:9px}
  body.adm-tilstand #dsFyld{display:none}
  body.adm-tilstand .bar-top .hjemlink{order:1}
  body.adm-tilstand #dsTfaPille{order:2;margin-left:auto}
  body.adm-tilstand #dsAdmKlokke{order:3;margin-left:auto}
  body.adm-tilstand #dsTfaPille:not([hidden]) ~ #dsAdmKlokke{margin-left:0}
  body.adm-tilstand #dsAdmMigPak{order:4}
  body.adm-tilstand #dsSoeg{order:5;flex:1 1 100%;min-width:0}
  .ds-migpak.ds-admmig .ds-migmenu{
    min-width:0;width:max-content;max-width:calc(100vw - 24px);
  }
  .ds-migpak.ds-admmig .ds-mig b{display:none}
  .ds-migpak.ds-admmig{padding:3px}
  .ds-migpak.ds-admmig .ds-mig{padding:0 5px 0 0}
}

/* ---------- afsnit 15i · «Tilpas sektioner» — tre kolonner ----------
   Bygget 06.08.2026 efter oplægget, Søren godkendte. Fliserne trækkes
   mellem forsidens grupper, 🧩 Apps og de to skjul-skuffer. */
.ds-sek{
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  box-shadow:var(--ds-s1);padding:16px;margin:0 0 16px;
}
.ds-sek-h b{font-size:.95rem;font-weight:800}
.ds-sek-h p{margin:5px 0 14px;font-size:.78rem;color:var(--ds-ink2);line-height:1.55;max-width:96ch}
.ds-sek-3{display:grid;grid-template-columns:1.35fr .85fr .85fr;gap:14px;align-items:start}
@media(max-width:1080px){.ds-sek-3{grid-template-columns:1fr}}
.ds-sek-sp{border:1px solid var(--ds-linje);border-radius:14px;padding:12px;background:var(--ds-flade)}
.ds-sek-sp>h3{margin:0 0 8px;font-size:.88rem;font-weight:800}
.ds-sek-sp>h4{margin:12px 0 5px;font-size:.7rem;font-weight:800;letter-spacing:.07em;
  text-transform:uppercase;color:var(--ds-ink2)}
.ds-sek-p{margin:0 0 10px;font-size:.75rem;color:var(--ds-ink2);line-height:1.5}
.ds-sg{border:1px solid var(--ds-linje);border-radius:12px;padding:9px;margin:0 0 10px;background:var(--ds-kort)}
.ds-sg-h{display:flex;gap:6px;align-items:center;margin:0 0 7px}
.ds-sg-h input{flex:1;border:1px solid var(--ds-linje);border-radius:9px;padding:6px 10px;
  font-family:var(--font);font-weight:700;font-size:.83rem;color:var(--ds-ink);background:var(--ds-kort)}
.ds-sg-mere{font-size:.75rem;font-weight:800;color:var(--ds-ink2);text-transform:uppercase;letter-spacing:.06em}
.ds-sg-mere small{font-weight:600;text-transform:none;letter-spacing:0}
.ds-sm{border:1px solid var(--ds-linje);background:var(--ds-kort);border-radius:8px;width:28px;height:28px;
  cursor:pointer;font-size:.8rem;color:var(--ds-ink2);flex:none;font-family:var(--font)}
.ds-sm:hover{border-color:var(--blaa);color:var(--ds-ink)}
.ds-sm[disabled]{opacity:.35;cursor:default}
.ds-sm.ds-fare:hover{border-color:var(--roed);color:var(--roed)}
.ds-sz{min-height:42px;display:flex;flex-direction:column;gap:6px;border-radius:10px;padding:4px;
  border:2px dashed transparent;transition:border-color var(--ds-puls),background var(--ds-puls)}
.ds-sz.ds-over{border-color:var(--blaa);background:rgba(60,180,229,.08)}
.ds-sz-tom{color:var(--ds-ink2);font-size:.74rem;padding:8px 6px;font-style:italic}
.ds-sf{display:flex;align-items:center;gap:9px;background:var(--ds-kort);border:1px solid var(--ds-linje);
  border-radius:10px;padding:7px 10px;cursor:grab;box-shadow:var(--ds-s1);user-select:none}
.ds-sf:active{cursor:grabbing}
.ds-sf.ds-traek{opacity:.4}
.ds-sf i{font-style:normal;font-size:1.02rem;width:21px;text-align:center;flex:none}
.ds-sf b{font-size:.83rem;font-weight:700;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-sf-app{background:rgba(60,180,229,.14);color:#14607f;border-radius:999px;padding:2px 8px;
  font-size:.6rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;flex:none}
.ds-sf-hjem{font-size:.7rem;color:var(--ds-ink2);font-weight:600;white-space:nowrap;
  max-width:12ch;overflow:hidden;text-overflow:ellipsis}
.ds-sf-laas{font-size:.72rem;color:var(--ds-ink2)}
.ds-sf-kn{border:0;background:none;cursor:pointer;color:var(--ds-ink2);font-size:.82rem;
  padding:2px 5px;border-radius:6px;font-family:var(--font);flex:none}
.ds-sf-kn:hover{background:var(--ds-flade);color:var(--ds-ink)}
.ds-sf-kn[disabled]{opacity:.28;cursor:default}
.ds-sf-kn[disabled]:hover{background:none}
.ds-sf-ryk{font-size:.78rem;padding:2px 4px}
/* 🔴 Hvor lander flisen, hvis jeg slipper nu? Uden et mærke er et træk et
   gæt — og så gav Søren op og kaldte det «svært at arrangere dem».
   Stregen sidder OVER den flise, man ville lande foran; nederst i zonen
   betyder det «sidst i gruppen». */
.ds-sf.ds-foer{box-shadow:inset 0 3px 0 0 var(--blaa),var(--ds-s1)}
.ds-sz.ds-sidst{box-shadow:inset 0 -3px 0 0 var(--blaa)}
.ds-stilf{border:1px dashed var(--ds-linje2);background:none;border-radius:10px;padding:9px;width:100%;
  font-family:var(--font);font-weight:700;font-size:.81rem;color:var(--ds-ink2);cursor:pointer}
.ds-stilf:hover{border-color:var(--blaa);color:var(--ds-ink)}
.ds-sek-f{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px;
  padding-top:13px;border-top:1px solid var(--ds-linje)}
.ds-sek-f b{font-size:.8rem;color:var(--ds-ink2);font-weight:700}
.ds-sk{border:1px solid var(--ds-linje);background:var(--ds-flade);color:var(--ds-ink);
  border-radius:11px;padding:9px 16px;font-family:var(--font);font-weight:800;font-size:.84rem;cursor:pointer}
.ds-sk:hover{border-color:var(--blaa)}
.ds-sk.ds-pri{background:linear-gradient(120deg,var(--ds-flademoerk,var(--moerk)),#2a5573);
  color:#fff;border-color:transparent}
.ds-sk[disabled]{opacity:.5;cursor:default}
html[data-tema="moerk"] .ds-sf-app{background:rgba(60,180,229,.2);color:#7fd8ff}

/* ---------- afsnit 15l · adm-toppen på telefonen ----------
   Søren 06.08.2026: «kan vi ændre så der på mobil bare står HF-adm
   univers — slet logo og Handicapformidlingen — så det kan stå på én
   linje sammen med det andet».

   Målt før: toppen fyldte 145 px, fordi logoet tvang linjen op i højden
   og skubbede resten. Logoet er dobbeltkonfekt: det står også i skinnen,
   og skinnen findes ikke på en telefon — men mærket skal stadig kunne
   ses, så teksten bliver. Den skrumper lige nok til at kunne stå på
   linje med klokken og navnechippen. */
@media(max-width:900px){
  body.adm-tilstand .bar-top .hjemlink img{display:none}
  body.adm-tilstand .bar-top .hjemlink{gap:0;flex:0 0 auto;min-width:0}
  body.adm-tilstand .bar-top .hjemlink .titel{
    font-size:.92rem;line-height:1.15;white-space:nowrap;
  }
  body.adm-tilstand .bar-top{row-gap:7px}
}

/* ---------- afsnit 15k · velkomstbåndet på telefonen ----------
   Mockup'en har de tre knapper under hinanden i fuld bredde. Målt på
   392 px stod de på 186, 225 og 170 px og brød i to rækker med et hul —
   det ligner et uheld, ikke en beslutning. Fuld bredde giver også et
   større trykmål, og det er tommelfingre, der bruger den her. */
@media(max-width:640px){
  body.adm-tilstand .ds-velkomst .ds-vk-hand{flex-direction:column;align-items:stretch}
  body.adm-tilstand .ds-velkomst .ds-vk-hand .ds-primaer,
  body.adm-tilstand .ds-velkomst .ds-vk-hand .ds-sek{
    width:100%;justify-content:center;text-align:center;
  }
}

/* ---------- afsnit 15j · «Mere»-menuen på telefonen ----------
   Panelet er bygget med inline-stil af admBarByg(), så det skal have
   !important for at kunne blive bredere. På 392 px var det 250 px bredt
   med god plads til begge sider — nu fylder det, hvad der er. Loftet på
   højden holder det fri af bundnavet. */
@media(max-width:700px){
  body.adm-tilstand #omrSkift > div{
    min-width:min(84vw,340px)!important;
    max-height:min(58vh,520px)!important;
  }
}

/* ---------- afsnit 15g-3 · den tomme admin-række ----------
   🔴 #admBar må IKKE sættes til display:none, selv om den er tom.
   univers-retur.js placerer sine tre popovers med
   admBar.getBoundingClientRect().bottom + 6 — og en skjult række måler
   nul, så 🧰 programmer, 👋 status og 📌 seddel landede oppe i hjørnet
   af skærmen, oven i topbjælken. Rækken bliver stående med nul højde:
   usynlig, men målbar. */
body.ds-ramme #admBar.ds-tom{
  height:0;min-height:0;padding:0;margin:0;border:0;
  overflow:hidden;visibility:hidden;
}

/* ---------- afsnit 15h · de to toplinjer skal flugte ----------
   🔴 Målt: .bar-top havde 26 px og nav havde sin egen udmåling, så
   søgefeltet og «Forsiden» startede 13 px fra hinanden. Én variabel
   styrer nu begge — og foden og indholdet bruger den samme. */
body.ds-ramme.ds-alene{--ds-kant:26px}
body.ds-ramme.ds-alene .bar-top{padding-left:var(--ds-kant);padding-right:var(--ds-kant)}
body.ds-ramme.ds-alene header nav{padding-left:var(--ds-kant);padding-right:var(--ds-kant)}
body.ds-ramme.ds-alene main{padding-left:var(--ds-kant);padding-right:var(--ds-kant)}
body.ds-ramme.ds-alene header .bar{padding-left:0;padding-right:0}
/* 🔴 Menupunkterne havde vandret polstring, så TEKSTEN stod 10 px inde i
   forhold til søgefeltet ovenover. At trække polstringen fra containeren
   flyttede bare problemet: så stak den aktive pille 10 px ud til venstre.
   Løsningen er at fjerne polstringen og markere det aktive punkt med en
   streg under i stedet for en pille bagved. Så flugter tekst med tekst. */
body.ds-ramme.ds-alene header nav{gap:20px}
body.ds-ramme.ds-alene header nav a{
  padding:5px 0 6px;border-radius:0;background:none;position:relative;
}
body.ds-ramme.ds-alene header nav a:hover{background:none;color:var(--ds-ink)}
body.ds-ramme.ds-alene header nav a.aktiv{background:none;color:var(--ds-ink);font-weight:800}
body.ds-ramme.ds-alene header nav a.aktiv::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--blaa),var(--groen));
}
/* 🔴 Foden ligger UDEN FOR <main> (den er en del af den gamle blå fodblok).
   Den skal derfor selv have både max-bredden og kanten, ellers står den
   50 px længere til venstre end alt andet på siden. Målt: 0..1340 mod
   indholdets 76..1364. */
body.ds-ramme.ds-alene .ds-fod{
  max-width:1340px;margin-left:auto;margin-right:auto;
  padding-left:var(--ds-kant);padding-right:var(--ds-kant);
  box-sizing:border-box;   /* som <main> — ellers bliver den 52 px bredere */
}
@media(max-width:640px){
  body.ds-ramme.ds-alene{--ds-kant:14px}
}

/* ---------- afsnit 15i · logo-låsen får en makeover ----------
   Før stod HF-logoet og ordet «BPA-univers» bare ved siden af hinanden i
   to helt forskellige størrelser, uden noget der bandt dem sammen. Nu er
   det ét mærke: logoet, en hårfin lodret streg, og ordet i to vægte.
   Stregen er dét, der gør to ting til én ting. */
body.ds-ramme.ds-alene .hjemlink{gap:12px;align-items:center;padding:2px 0}
body.ds-ramme.ds-alene .bar img{height:26px;width:auto;display:block}
body.ds-ramme.ds-alene .hjemlink .titel{
  position:relative;padding-left:13px;font-size:.98rem;font-weight:800;
  letter-spacing:-.025em;line-height:1.15;color:var(--ds-ink);
}
body.ds-ramme.ds-alene .hjemlink .titel::before{
  content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:19px;background:var(--ds-linje2);
}
body.ds-ramme.ds-alene .hjemlink .titel span{color:var(--ds-ink2);font-weight:600}
body.ds-ramme.ds-alene .hjemlink:hover .titel span{color:var(--blaa)}

/* ---------- afsnit 15j · telefonens topbjælke: tre linjer, ikke fire ----
   🔴 Menuknappen lå på sin EGEN linje, fordi den kun havde margin-left:auto
   og ingen rækkefølge — så den brød linjen efter logoet. Nu:
     linje 1  logo ......................... ☰
     linje 2  søgefeltet i fuld bredde
     linje 3  📅  🌙  🔔  Anna
   Målt før: fire linjer og 271 px header. Efter: tre linjer. */
@media(max-width:640px){
  body.ds-ramme.ds-alene .bar-top{align-items:center;row-gap:8px}
  /* 🔴 flex:1 gjorde logoet 364 px bredt — hele rækken — og så måtte
     menuknappen ned på sin egen linje. Den skal kun fylde det, den ER. */
  body.ds-ramme.ds-alene .hjemlink{order:0;flex:0 1 auto;min-width:0;overflow:hidden}
  /* 🔴 Regnestykket på en 392 px skærm: 14+14 kant = 364 px til rådighed.
     Logo 195 + mellemrum 12 + ord 109 + mellemrum 12 + menuknap 44 = 372.
     Otte pixel for meget — og så brød menuknappen linjen. Logoet ned på
     22 px højde (≈165 bredt), så er der 43 px i overskud. */
  body.ds-ramme.ds-alene .bar img{height:22px}
  body.ds-ramme.ds-alene .hjemlink{gap:10px}
  body.ds-ramme.ds-alene .hjemlink .titel{
    font-size:.88rem;padding-left:11px;white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis;
  }
  body.ds-ramme.ds-alene #ubBurger{order:1;margin-left:auto!important;flex:none}
  body.ds-ramme.ds-alene #soegBar{order:2}
  body.ds-ramme.ds-alene #kalTopBtn,
  body.ds-ramme.ds-alene .ds-klokke,
  body.ds-ramme.ds-alene .ds-migpak{order:3}
  /* 🔴 kalenderknappen stod med margin-right:auto og blev efterladt helt
     ude i venstre side, mens de tre andre sad til højre. De fire hører
     sammen — de er alle «mine ting». Ingen auto-margen. */
  body.ds-ramme.ds-alene .bar-top{justify-content:flex-end}
  body.ds-ramme.ds-alene .hjemlink{margin-right:auto}
  body.ds-ramme.ds-alene .ds-mig{padding:3px 9px 3px 3px}
  body.ds-ramme.ds-alene .ds-mig b{display:inline}
  body.ds-ramme.ds-alene .ds-migmenu{right:0;min-width:210px}
}

/* ---------- afsnit 15k · bundnavet må ikke klippe sine egne etiketter ----
   Målt på en 780 px høj skærm: etiketterne lå under skærmkanten. Ikonet
   var 1.05rem og linjeafstanden fri. Nu er højden fast og indholdet
   centreret, så teksten altid er med. */
body.ds-ramme.ds-alene .ds-bundnav a{
  min-height:56px;justify-content:center;gap:3px;line-height:1.1;
}
body.ds-ramme.ds-alene .ds-bundnav a i{font-size:1.15rem;line-height:1}
/* de svævende knapper (💬 chat og 🔊 læs højt) lå oven på bundnavet og
   oven på nyhedskortene */
/* de svævende knapper lå oven på bundnavet og oven på kortene.
   Bundnavet er 56 px + sikker zone; de skal ligge OVER det. */
body.ds-ramme.ds-alene #chatFab{bottom:calc(74px + env(safe-area-inset-bottom))!important}
body.ds-ramme.ds-alene #hfLaesHojt{bottom:calc(74px + env(safe-area-inset-bottom))!important}

/* på de smalleste telefoner (320 px, fx iPhone SE) er der ikke plads til
   både logo, ord og menuknap. Logoet må vige — ordet «BPA-univers» siger
   mere om HVOR man er end mærket gør, når man allerede er logget ind. */
@media(max-width:360px){
  body.ds-ramme.ds-alene .bar img{height:19px}
  body.ds-ramme.ds-alene .hjemlink{gap:8px;max-width:calc(100% - 56px)}
  body.ds-ramme.ds-alene .hjemlink .titel{font-size:.83rem;padding-left:9px}
}

/* kalenderknappen får samme form som klokken og temaknappen */
body.ds-ramme.ds-alene #kalTopBtn{
  display:inline-flex!important;align-items:center;gap:7px;
  border:1px solid var(--ds-linje)!important;background:var(--ds-kort)!important;
  color:var(--ds-ink)!important;border-radius:12px!important;padding:8px 12px!important;
  font-family:var(--font)!important;font-size:.82rem!important;font-weight:700!important;
  box-shadow:var(--ds-s1);flex:none;
}
body.ds-ramme.ds-alene #kalTopBtn:hover{border-color:var(--blaa)!important}
@media(max-width:640px){
  body.ds-ramme.ds-alene #kalTopBtn{padding:8px 10px!important}
  body.ds-ramme.ds-alene #kalTopBtn .kb-t{display:none}
}

/* ---------- afsnit 15m · «🌟 Giv ros»-formularen ----------
   07.08.2026. Knappen bor i panelets hoved (.ds-phkn, som allerede fandtes
   og stod ubrugt), og formularen folder sig ud i en .ds-fold under det. Den
   fylder derfor NUL, naar den er lukket — og det var hele grunden til, at
   den blev pillet ud 5. august: panelet skulle kunne staa i samme hoejde som
   de to andre paa «Min dag».
   Felterne arver universets farvevariabler, saa de ogsaa holder i det
   moerke tema. Ingen faste farver her. */
.ds-panel .ds-kugiv{display:flex;flex-direction:column;gap:8px}
.ds-panel .ds-kusoeg,
.ds-panel .ds-kutxt{
  width:100%;box-sizing:border-box;border:1px solid var(--ds-linje);
  border-radius:10px;padding:9px 11px;font-family:var(--font);font-size:.85rem;
  background:var(--ds-kort);color:var(--ds-ink);outline:none;
  transition:border-color var(--ds-puls);
}
.ds-panel .ds-kusoeg:focus,
.ds-panel .ds-kutxt:focus{border-color:var(--blaa)}
.ds-panel .ds-kutxt{resize:vertical;min-height:48px;line-height:1.45}
.ds-panel .ds-kuhits{display:flex;flex-wrap:wrap;gap:6px}
.ds-panel .ds-kuhits:empty{display:none}
.ds-panel .ds-kuvalgt{font-size:.78rem;font-weight:800;color:var(--ds-ink2)}
.ds-panel .ds-kuvalgt:empty{display:none}
.ds-panel .ds-kusend{
  align-self:flex-start;border:0;border-radius:10px;padding:9px 16px;
  font-family:var(--font);font-weight:800;font-size:.82rem;cursor:pointer;
  color:var(--kt-ffffff,#fff);
  background:linear-gradient(120deg,var(--ds-flademoerk,var(--moerk)),var(--kf-2a5573,#2a5573));
}
.ds-panel .ds-kusend:disabled{opacity:.55;cursor:default}
/* Paa en telefon er der ikke plads til en knap ved siden af titlen, saa
   hovedet braekker — og saa skal knappen have hele bredden i stedet for at
   staa som en lille stump yderst til hoejre. */
@media(max-width:520px){
  .ds-panel .ds-ph .ds-phkn{margin-left:0!important;width:100%;text-align:center}
  .ds-panel .ds-kusend{align-self:stretch;text-align:center}
}

/* ============================================================
   16 · 📁 «MIN MAPPE» — borgerens egen mappe
   ------------------------------------------------------------
   07.08.2026. En RAMME med AFSNIT, ikke en ansoegerside. Der kommer
   flere afsnit i (dokumentarkiv m.fl.), saa kortene er bygget som en
   liste, der taaler at vokse — ikke som et gitter, der skal laves om,
   naar der bliver fem.
   Farverne er universets egne variabler. Skriv aldrig #fff her: mappen
   skal ogsaa kunne staa i det moerke tema.
   ============================================================ */
.ds-mappe{
  background:var(--ds-kort,#fff);border:1px solid var(--ds-linje,rgba(30,55,76,.1));
  border-radius:var(--ds-r,19px);padding:16px 17px;box-shadow:var(--ds-s1,0 6px 18px rgba(30,55,76,.06));
}
.ds-mappe-i{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.ds-mappe-ik{
  width:52px;height:52px;border-radius:16px;flex:none;display:grid;place-items:center;
  font-size:1.5rem;background:rgba(60,180,229,.14);
}
.ds-mappe-tekst{min-width:150px;flex:1}
.ds-mappe-tekst h3{margin:0;font-size:1.02rem;font-weight:800}
.ds-mappe-under{font-size:.85rem;color:var(--ds-ink2,#6b8298);margin-top:2px}
.ds-mappe-hand{margin-left:auto;flex:none}
.ds-mappe-kn{
  border:0;border-radius:13px;padding:12px 18px;cursor:pointer;
  font-family:var(--font);font-weight:800;font-size:.92rem;
  color:var(--kt-ffffff,#fff);
  background:linear-gradient(120deg,var(--ds-flademoerk,var(--moerk,#1e374c)),var(--kf-2a5573,#2a5573));
  box-shadow:0 6px 16px rgba(30,55,76,.24);
}
.ds-mappe-kn:hover{filter:brightness(1.08)}
@media(max-width:560px){
  .ds-mappe-hand{margin-left:0;width:100%}
  .ds-mappe-kn{width:100%}
}

/* ---- selve mappen: et panel, ikke en ny side ---- */
.ds-mappe-ov{
  position:fixed;inset:0;z-index:9996;background:rgba(30,55,76,.45);
  display:flex;align-items:center;justify-content:center;padding:18px;
}
.ds-mappe-kort{
  width:min(520px,100%);max-height:88vh;overflow-y:auto;
  background:var(--ds-kort,#fff);border-radius:22px;padding:22px;
  font-family:var(--font);color:var(--ds-ink,var(--moerk,#1e374c));
  box-shadow:0 30px 80px rgba(0,0,0,.4);
}
.ds-mappe-h{display:flex;align-items:center;gap:10px;font-size:1.12rem;margin-bottom:14px}
.ds-mappe-h b{font-size:1.12rem}
.ds-mappe-x{
  margin-left:auto;border:0;background:var(--ds-flade,rgba(30,55,76,.07));
  border-radius:11px;width:36px;height:36px;cursor:pointer;font-size:1rem;color:inherit;
}
/* ét kort pr. afsnit — listen taaler at vokse */
.ds-mk{
  display:flex;align-items:center;gap:13px;width:100%;text-align:left;
  border:1px solid var(--ds-linje,rgba(30,55,76,.12));background:var(--ds-flade,rgba(30,55,76,.03));
  color:inherit;border-radius:15px;padding:14px 15px;margin-bottom:9px;cursor:pointer;
  font-family:inherit;transition:border-color .15s,transform .1s;
}
.ds-mk:hover{border-color:var(--blaa,#3cb4e5)}
.ds-mk:active{transform:scale(.995)}
.ds-mk-ik{font-size:1.5rem;flex:none;width:38px;text-align:center}
.ds-mk-t{min-width:0}
.ds-mk-t b{display:block;font-size:.98rem;font-weight:800}
.ds-mk-t small{display:block;font-size:.8rem;color:var(--ds-ink2,#6b8298);margin-top:1px}
.ds-mk-pil{margin-left:auto;color:var(--ds-ink2,#6b8298);font-size:1.2rem;flex:none}
/* «paa vej» skal se ROLIGT ud — ikke som noget i stykker */
.ds-mk-vej{cursor:default;opacity:.72}
.ds-mk-vej:hover{border-color:var(--ds-linje,rgba(30,55,76,.12))}

/* ---- den tomme mappe: et ordentligt svar, ikke en tom liste ---- */
.ds-mtom{text-align:center;padding:14px 6px 6px}
.ds-mtom-ik{font-size:2.6rem;line-height:1;margin-bottom:10px}
.ds-mtom h3{margin:0 0 8px;font-size:1.1rem;font-weight:800}
.ds-mtom p{margin:0 0 10px;font-size:.9rem;line-height:1.55;color:var(--ds-ink2,#6b8298)}
.ds-mtom-hvad{
  background:var(--ds-flade,rgba(30,55,76,.04));border-radius:13px;padding:11px 14px;
  color:var(--ds-ink,inherit)!important;font-size:.88rem!important;
}
.ds-mtom-ring a{color:var(--blaa,#3cb4e5);font-weight:800;text-decoration:none;white-space:nowrap}
.ds-mtom-ring a:hover{text-decoration:underline}

/* ---------- afsnit 16b · «Min mappe» — adm-skaermen ----------
   Adgang PR. AFSNIT. Tabellen faar én kolonne pr. afsnit, saa den taaler
   at der kommer flere — og de tre knapper pr. felt er der, fordi «Luk»
   og «Foelg alle» IKKE er det samme. Et udtrykkeligt nej staar ved magt,
   ogsaa naar man aabner for alle. Derfor har de hver sin farve. */
.ds-ma-afs{
  border:1px solid var(--ds-linje,rgba(30,55,76,.12));border-radius:14px;
  padding:12px 14px;margin-bottom:10px;background:var(--ds-flade,rgba(30,55,76,.03));
}
.ds-ma-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ds-ma-h span{font-size:1.15rem}
.ds-ma-h small{color:var(--graa,#6b8298);font-size:.78rem}
.ds-ma-kn{display:flex;gap:18px;flex-wrap:wrap}
.ds-ma-t{display:flex;align-items:center;gap:7px;font-size:.85rem;cursor:pointer}
.ds-ma-t small{color:var(--graa,#6b8298);font-size:.75rem}
.ds-ma-soeg{margin:14px 0 10px}
.ds-ma-soeg input{
  width:100%;box-sizing:border-box;border:1px solid var(--ds-linje,rgba(30,55,76,.2));
  border-radius:11px;padding:10px 13px;font-family:var(--font);font-size:.88rem;
  background:var(--ds-kort,#fff);color:var(--ds-ink,inherit);outline:none;
}
.ds-ma-soeg input:focus{border-color:var(--blaa,#3cb4e5)}
.ds-ma-tab{width:100%;border-collapse:collapse;font-size:.85rem}
.ds-ma-tab th{
  text-align:left;font-size:.76rem;color:var(--graa,#6b8298);font-weight:800;
  padding:6px 8px;border-bottom:1px solid var(--ds-linje,rgba(30,55,76,.12));
}
.ds-ma-tab td{padding:7px 8px;border-bottom:1px solid var(--ds-linje,rgba(30,55,76,.08));vertical-align:middle}
.ds-ma-tab td small{display:block;color:var(--graa,#6b8298);font-size:.74rem;font-weight:600}
.ds-ma-vaelg{display:inline-flex;gap:4px;flex-wrap:wrap}
.ds-ma-vaelg .ma-v{
  border:1px solid var(--ds-linje,rgba(30,55,76,.18));background:var(--ds-kort,#fff);
  color:var(--ds-ink,inherit);border-radius:9px;padding:5px 10px;cursor:pointer;
  font-family:var(--font);font-size:.76rem;font-weight:700;
}
.ds-ma-vaelg .ma-v:hover{border-color:var(--blaa,#3cb4e5)}
.ds-ma-vaelg .ma-v.ja{background:var(--groen,#93d500);border-color:transparent;color:var(--kt-0d2a12,#0d2a12)}
.ds-ma-vaelg .ma-v.nej{background:var(--roed,#e7004c);border-color:transparent;color:var(--kt-ffffff,#fff)}
.ds-ma-vaelg .ma-v.auto{background:var(--ds-flade,rgba(30,55,76,.08));border-color:transparent;font-weight:800}
@media(max-width:720px){
  .ds-ma-tab,.ds-ma-tab thead,.ds-ma-tab tbody,.ds-ma-tab tr,.ds-ma-tab th,.ds-ma-tab td{display:block}
  .ds-ma-tab thead{display:none}
  .ds-ma-tab tr{border:1px solid var(--ds-linje,rgba(30,55,76,.12));border-radius:12px;padding:8px;margin-bottom:8px}
  .ds-ma-tab td{border:0;padding:5px 4px}
}

/* ---------- afsnit 16c · klokkens liste ----------
   07.08.2026. Klokken TALTE foer kun — et klik hoppede til «Min dag» og
   rullede ned til naevnt-panelet. Havde man ingen naevninger, fandtes det
   panel ikke, og saa skete der ingenting. En knap, der ingenting goer, er
   vaerre end ingen knap.
   Nu aabner den en liste med det, der er — eller siger, at der ikke er
   noget, og hvad klokken saa er til. */
.ds-klokkemenu{
  position:absolute;z-index:9995;width:min(360px,calc(100vw - 20px));
  max-height:min(70vh,460px);overflow-y:auto;
  background:var(--ds-kort,#fff);border:1px solid var(--ds-linje,rgba(30,55,76,.12));
  border-radius:16px;box-shadow:0 22px 60px rgba(30,55,76,.22);
  padding:8px;font-family:var(--font);color:var(--ds-ink,inherit);
}
.ds-klokkemenu .ds-km-h{
  display:flex;align-items:center;gap:8px;font-weight:800;font-size:.9rem;
  padding:6px 8px 9px;border-bottom:1px solid var(--ds-linje,rgba(30,55,76,.1));margin-bottom:6px;
}
.ds-klokkemenu .ds-km-n{
  background:rgba(231,0,76,.14);color:var(--roed,#e7004c);border-radius:999px;
  padding:1px 9px;font-size:.76rem;font-weight:800;
}
.ds-klokkemenu .ds-km-tom{
  margin:4px 8px 10px;font-size:.84rem;line-height:1.55;color:var(--ds-ink2,#6b8298);
}
.ds-klokkemenu .ds-km-r{
  display:block;width:100%;text-align:left;border:0;background:none;color:inherit;
  border-radius:11px;padding:9px 10px;cursor:pointer;font-family:inherit;
}
.ds-klokkemenu .ds-km-r:hover{background:var(--ds-flade,rgba(30,55,76,.05))}
.ds-klokkemenu .ds-km-af{display:block;font-size:.8rem}
.ds-klokkemenu .ds-km-txt{
  display:block;font-size:.85rem;font-style:italic;color:var(--ds-ink2,#6b8298);
  margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.ds-klokkemenu .ds-km-tid{display:block;font-size:.72rem;color:var(--ds-ink2,#6b8298);margin-top:2px}
.ds-klokkemenu .ds-km-alle{
  width:100%;margin-top:6px;border:0;background:none;color:var(--ds-ink2,#6b8298);
  cursor:pointer;font-family:inherit;font-size:.8rem;padding:8px;border-radius:10px;
}
.ds-klokkemenu .ds-km-alle:hover{background:var(--ds-flade,rgba(30,55,76,.05))}

/* ---------- afsnit 16d · assistenten foran opkaldskortet ----------
   07.08.2026. Relatel-kortene staar paa z-index 997; assistentens vindue
   paa 96. Aabnede man assistenten under et opkald, laa skrivefeltet BAG
   kortet — man kunne se, at der stod noget, men ikke naa det.
   Har man bevidst aabnet assistenten for at skrive, er det den, der skal
   vaere forrest. Kortet er der stadig, naar man lukker igen.
   🔴 KUN naar vinduet er aabent (.vis). Lukket roerer vi ingenting. */
#aWin.vis{z-index:998}

/* ---------- afsnit 16e · velkomstbaandets knapper: ét udseende ----------
   07.08.2026. Søren: «Åbn din vagtplan» ser rodet ud — samme farve og
   samme hoejde som «Skriv til os».

   🔴 MÅLT, og det var ikke bare smag. Den hvide knap var 58,02 px hoej,
   den anden 42,02. Padding, skriftstoerrelse og linjehoejde var ENS paa
   begge — forskellen kom et helt andet sted fra:

     `.ds-sek` er BÅDE sekundaerknappen her i baandet OG sektionskortet i
     «Tilpas sektioner» (afsnit 15i, bygget 06.08). Kortets regel siger
     `margin:0 0 16px`, og den margin fulgte med ned i knappen. Baandet er
     en flexboks uden align-items, saa flexlinjen blev 42+16 = 58 hoej —
     og den HVIDE knap, som ingen margin har, blev STRAKT til de 58.

   Det ramte begge universer: «Se de sager der venter» i adm-baandet har
   samme laekage. Ét klassenavn, to betydninger — derfor rettes det dér,
   hvor det goer skade, og ikke ved at doebe komponenten om.

   Tre linjer lukker det:
     · margin:0             — et sektionskorts margin hoerer ikke til i en knap
     · align-items:center   — en knap straekkes aldrig efter naboens margin
     · gennemsigtig 1px kant — saa en knap MED kant og en UDEN er lige hoeje
   Farven laegges KUN i borgeruniverset; adm har ikke bedt om den. */
.ds-vk-hand{align-items:center}
.ds-vk-hand a,.ds-vk-hand button{margin:0;border:1px solid transparent}
body:not(.adm-tilstand) .ds-vk-hand .ds-primaer{
  background:rgba(255,255,255,.12);color:#fff;
  border-color:rgba(255,255,255,.20);box-shadow:none;
}
body:not(.adm-tilstand) .ds-vk-hand .ds-primaer:hover{
  background:rgba(255,255,255,.20);transform:none;box-shadow:none;
}

/* ============================================================
   16 · 🧩 PROGRAMVINDUET — bjælke i toppen + blå skinne til venstre
   ------------------------------------------------------------
   09.08.2026. Bygget af faelles/adm.js (hfAppAaben). Grundformen:

     ┌─────────────────────────────────────────────┐
     │ ☰  ‹ Adm-universet   📅 HF Kalender         │  #hfAppBar
     ├────┬────────────────────────────────────────┤
     │ 🏠 │                                        │
     │ 📅 │   programmet i sin iframe              │  #hfAppKrop
     │ ✉️ │                                        │
     └────┴────────────────────────────────────────┘
       ↑ #hfAppSkinne, 56 px — folder ud til 246 px

   🔴 SKINNEN SKUBBER ALDRIG PROGRAMMET. Den ligger absolut placeret, og
   iframen har en fast venstremargen på 56 px. Folder man ud, ændrer KUN
   skinnens bredde sig — iframen får aldrig nye mål og dermed aldrig en
   resize. Det er ikke pedanteri: HF Kalender tegner sig selv om, når dens
   mål ændrer sig, og har frosset fanen to gange på den konto.

   🔴 Farverne har bogstavelige fald-tilbage. Vinduet hænges på <body> og
   står uden for universets egen boks; CSS-variabler falder ikke tilbage
   dér, og resultatet er hvid tekst på hvid baggrund. Sket seks gange nu.
   ============================================================ */
#hfAppOverlay{
  position:fixed;inset:0;z-index:9998;display:flex;flex-direction:column;
  background:var(--ds-bg,#eef2f6);
}
#hfAppBar{
  flex:none;height:54px;display:flex;align-items:center;gap:10px;padding:0 12px;
  background:linear-gradient(120deg,var(--ds-skinne,#1e374c),#2a5573);
  color:#fff;box-shadow:0 2px 10px rgba(30,55,76,.22);z-index:4;
}
#hfAppBar button{
  border:0;cursor:pointer;font-family:var(--font);font-weight:800;color:#fff;
  background:rgba(255,255,255,.14);transition:background .15s;
}
#hfAppBar button:hover{background:rgba(255,255,255,.26)}
#hfAppBar button:focus-visible{outline:2px solid var(--blaa,#3cb4e5);outline-offset:2px}
/* ☰ er 38 px — over de 40 px, en finger skal have, når man tæller bjælkens
   egen højde med. Mindre end det, og knappen bliver ramt ved siden af. */
#hfAppMenuKnap{
  flex:none;width:38px;height:38px;border-radius:12px;
  display:grid;place-items:center;font-size:1.05rem;
}
#hfAppLuk{flex:none;font-size:.88rem;padding:9px 16px;border-radius:999px}
#hfAppNavn{
  font-weight:700;font-size:.92rem;opacity:.95;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.hfa-kort{display:none}

/* 🔴 Pladsen til skinnen laves med PADDING på kroppen — ikke ved at placere
   iframen absolut. Et absolut placeret ERSTATTET element (iframe, img) løser
   ikke sin bredde ud fra left/right, når width er auto; det bruger sin
   naturlige størrelse. Målt: rammen stod 300 × 150 px i et hjørne, mens
   alt andet så rigtigt ud. Med padding er iframen almindeligt indhold på
   100 % × 100 % — og padding'en ændrer sig ikke, når skinnen folder ud, så
   programmet får stadig aldrig en resize. */
#hfAppKrop{flex:1;min-height:0;position:relative;padding-left:56px;box-sizing:border-box}
#hfAppRamme{display:block;width:100%;height:100%;border:0}
#hfAppSkygge{
  position:absolute;top:0;right:0;bottom:0;left:56px;z-index:2;
  background:rgba(18,36,54,.34);opacity:0;pointer-events:none;transition:opacity .18s ease;
}
#hfAppOverlay.hfa-aaben #hfAppSkygge{opacity:1;pointer-events:auto}

#hfAppSkinne{
  position:absolute;left:0;top:0;bottom:0;width:56px;z-index:3;
  background:var(--ds-skinne,#122436);color:#fff;
  display:flex;flex-direction:column;gap:2px;padding:10px 8px 18px;
  overflow-y:auto;overflow-x:hidden;transition:width .18s ease;
}
#hfAppOverlay.hfa-aaben #hfAppSkinne{width:246px;box-shadow:14px 0 34px rgba(30,55,76,.30)}
#hfAppSkinne .ds-punkt.ds-paa::before{left:-8px}

/* --- sammenfoldet: ALLE punkter, men kun ikoner --- */
/* 🔴 Denne regel skal stå for sig selv. Første forsøg lod selektorlisten
   fortsætte hen over en kommentar og ind i næste regel — så arvede .ds-t
   pludselig `height:0` i stedet for `display:none`, beholdt sin BREDDE, og
   ikonerne blev skubbet ud af den 56 px stribe. Prøven fangede det på
   «teksten er væk = false». En kommentar midt i en selektorliste er ikke en
   pause; den er usynlig for parseren. */
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-t,
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-skinne-logo{display:none}

/* 🔴 09.08.2026 — SØREN: «alle områder i striben = ja tak.»
   Så står de der ALLE, også sammenfoldet. Ingen udvælgelse, intet at holde
   ved lige, og intet der kan gemme sig. Striben ruller, hvis skærmen er
   for lav — `overflow-y:auto` på #hfAppSkinne.

   🔴 Derfor tegnes navneskiltet i OVERLAYET og ikke inde i striben: en
   rullende beholder klipper sine egne absolut placerede børn, uanset
   z-index. Med alle punkter er striben næsten altid rullende, så det er
   ikke længere en teoretisk fælde.

   Gruppe-overskrifterne bliver til en tynd streg — grupperingen er stadig
   til at se, men uden tekst der ikke er plads til. */
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-skinne-h{
  height:0;padding:0;margin:7px 6px;border-top:1px solid rgba(255,255,255,.13);
  overflow:hidden;font-size:0;
}
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-punkt{justify-content:center;padding:9px 0}
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-punkt i{width:auto}
/* tælleren bliver til et lille mærke i hjørnet — tallet er stadig det, man
   handler på, og det må ikke forsvinde, bare fordi striben er smal */
#hfAppOverlay:not(.hfa-aaben) #hfAppSkinne .ds-punkt .ds-n{
  position:absolute;top:1px;right:2px;padding:0 4px;font-size:.58rem;line-height:1.5;
}

/* --- navnet som skilt ved museover (kun sammenfoldet, kun med mus) --- */
#hfAppSkilt{
  position:absolute;z-index:9;transform:translateY(-50%);pointer-events:none;
  background:#0d1b28;color:#fff;font-family:var(--font);
  font-size:.78rem;font-weight:700;padding:6px 10px;border-radius:9px;
  white-space:nowrap;box-shadow:0 8px 22px rgba(0,0,0,.32);
}

/* --- telefon: striben forsvinder, ☰ åbner en skuffe --- */
/* 🔴 Programmet får HELE bredden. En 44 px stribe ville koste 11 % af en
   390 px skærm hele tiden — og bjælken i toppen har allerede en flade,
   der er stor nok at ramme. Grænsen er 820 px, samme som hfAppSmal(). */
@media(max-width:820px){
  #hfAppBar{height:46px}
  #hfAppMenuKnap{width:36px;height:36px}
  #hfAppLuk{font-size:.84rem;padding:8px 13px}
  #hfAppNavn{font-size:.86rem}
  .hfa-lang{display:none}
  .hfa-kort{display:inline}
  #hfAppKrop{padding-left:0}
  #hfAppSkygge{left:0}
  #hfAppSkinne{width:0;padding:0;box-shadow:none}
  #hfAppOverlay.hfa-aaben #hfAppSkinne{
    width:min(280px,84vw);padding:10px 8px 18px;
    box-shadow:14px 0 34px rgba(30,55,76,.34);
  }
}

/* ------------------------------------------------------------
   «skift område»-pillen er overflødig, når skinnen står der
   ------------------------------------------------------------
   Søren 09.08: «denne som kommer frem på web hvor man kan skifte område,
   er vel nu overflødig?» Målt på 1500 px: skinnen viser 23 punkter, og
   pillen viser den samme liste 56 px høj lige under overskriften.

   🔴 MEN KUN FRA 901 PX OG OP. Under 900 px er skinnen skjult, bundnavet
   har fire punkter plus «☰ Mere» — og «Mere» åbner NETOP denne liste
   (#omrSkift bor inde i #admOmrBar). Skjules den på telefonen, mister man
   18 områder og ødelægger «Mere» på én gang.

   🔴 OG DEN SKJULES, IKKE FJERNES. admOmrTitel() finder områdets overskrift
   via bjælkens forælder — rives bjælken ud af dokumentet, forsvinder
   overskriften «Intern kommunikation» med den.
   ------------------------------------------------------------ */
@media(min-width:901px){
  #admOmrBar{display:none !important}
}

/* ================================================================
   17) 🆕 NYT I SYSTEMET                              09.08.2026
   ----------------------------------------------------------------
   🔴 ALT ER PRÆFIKSET «sn-». Huset har brændt sig tre gange på et
   klassenavn, der allerede var taget: .ds-sek, .tal (nøgletal-fliserne
   blev 34 px brede i DRIFT) og .nu. Et klassenavn er husets ejendom,
   ikke skærmens — derfor sn-.

   Farver, rundinger og skygger er husets egne tokens, så skærmen
   følger med af sig selv, når mørkt tema slår til.
   ---------------------------------------------------------------- */
/* 🔴 Kasserne regner selv med border-box. Prøveriggen viste, at et kort blev
   360 px bredt i en 322 px spalte og flød ud over telefonens skærm, fordi
   indpakningen ikke selv satte det. Vi sætter det for VORES eget træ — ikke
   for husets, som ikke skal ændre sig, fordi vi kom forbi.

   🔴 Og husets farver får en reserve med. --blaa, --groen, --roed, --gul og
   --moerk står IKKE i designlaget; de sættes i universets egne sider. Uden
   reserven bliver et mærkat usynligt dér, hvor de ikke er sat — og det ville
   ingen prøve fange, for reglen ER der, den peger bare på ingenting. */
#sysnytWrap, #sysnytWrap *{box-sizing:border-box}
#sysnytWrap{margin:0 0 26px}
.sn-rum{max-width:1180px}
.sn-u{color:var(--ds-ink2);font-size:.9rem;font-weight:600;margin:0}

.sn-top{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin:0 0 16px}
.sn-top-t{flex:1;min-width:250px}
.sn-top h2{margin:0 0 4px;font-size:1.5rem;letter-spacing:-.02em}
.sn-siden{display:flex;align-items:center;gap:5px;background:rgba(60,180,229,.10);
  border:1px solid rgba(60,180,229,.34);border-radius:999px;padding:8px 15px;
  font-size:.87rem;font-weight:750;color:#12546e}
.sn-siden b{font-weight:850}
.sn-siden.sn-ajour{background:rgba(147,213,0,.13);border-color:rgba(147,213,0,.4);color:#3f5c00}
/* 🔴 11.08.2026 — tallet er en KNAP, når der er noget at se. «font:inherit»
   er ikke pynt: uden den arver en <button> browserens egen skrift, og flisen
   skifter udseende, alt efter om der er nyt eller ej. */
button.sn-siden{font:inherit;font-size:.87rem;font-weight:750;cursor:pointer;text-align:left;
  transition:background .22s cubic-bezier(.2,.7,.3,1),color .22s cubic-bezier(.2,.7,.3,1),
             border-color .22s cubic-bezier(.2,.7,.3,1)}
button.sn-siden:hover{background:rgba(60,180,229,.2);border-color:rgba(60,180,229,.55)}
button.sn-siden.sn-siden-paa{background:var(--moerk,#1e374c);border-color:var(--moerk,#1e374c);color:#fff}
button.sn-siden.sn-siden-paa:hover{background:#16293a}
/* 🔴 VEJVISEREN. Alt er set HER, men ikke derovre. Den maa ikke ligne den
   blaa «du har noget til gode» — den er en henvisning, ikke en opgave. */
button.sn-siden.sn-siden-vej{background:rgba(147,213,0,.10);border-color:rgba(147,213,0,.38);
  color:#3f5c00}
button.sn-siden.sn-siden-vej:hover{background:rgba(147,213,0,.22);border-color:rgba(147,213,0,.6)}
.sn-laes.sn-let{background:var(--ds-kort);color:var(--ds-ink);border:1px solid var(--ds-linje2)}
.sn-laes.sn-let:hover{background:var(--ds-flade)}

/* ══════ 🔎 ØNSKELISTENS TRE GREB — omraade, art og sortering ══════
   Egen linje UNDER statusraekken. Blandet ind i den kunne man ikke se,
   hvilken knap der goer hvad — og omraaderaekken ville vokse, hver gang
   huset faar en ny funktion. En rulleliste vokser ikke. */
.sn-vaelgere{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:0 0 16px}
.sn-vaelg{display:flex;flex-direction:column;gap:4px;min-width:0}
.sn-vaelg>span{font-size:.76rem;font-weight:800;color:var(--ds-ink2);
  text-transform:uppercase;letter-spacing:.04em;padding-left:2px}
.sn-vaelg select{font:inherit;font-size:.86rem;font-weight:700;color:var(--ds-ink);
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:10px;
  padding:8px 12px;box-shadow:var(--ds-s1);cursor:pointer;max-width:270px}
.sn-vaelg select:hover{background:var(--ds-flade)}
.sn-vaelgere .sn-knap{margin-bottom:1px}

/* 🏷 ARTEN. Tre farver, der siger noget: roed for det, der er i stykker,
   blaa for det, der kan blive bedre, gul for det, der endnu kun er en idé.
   🔴 Maerkatet maa ikke skrige hoejere end statussen ved siden af — derfor
   samme stoerrelse og samme runding som husets oevrige maerkater. */
.sn-m.sn-art-fejl{background:rgba(231,0,76,.12);color:#a4003a;border:1px solid rgba(231,0,76,.28)}
.sn-m.sn-art-bedre{background:rgba(60,180,229,.13);color:#12546e;border:1px solid rgba(60,180,229,.3)}
.sn-m.sn-art-ny{background:rgba(255,183,0,.16);color:#7a5200;border:1px solid rgba(255,183,0,.36)}
/* ✨ «Noget helt nyt» — samme famile som «ny idé», men det er et STED, ikke
   en art, saa den er tydeligere afgraenset. */
.sn-m.sn-nyt{background:rgba(147,213,0,.16);color:#3f5c00;border:1px solid rgba(147,213,0,.4)}
.sn-artvalg{margin-top:18px}

/* ══════ ✨ PLACÉR ØNSKERNE ══════
   🔴 Baandet er DAEMPET, ikke roedt. «7 oensker mangler et omraade» er en
   oprydningsopgave, ikke noget, et menneske venter paa svar om — og et roedt
   baand, der staar der hver dag, holder op med at betyde noget. */
.sn-venter.sn-venter-let{background:var(--ds-flade);border-color:var(--ds-linje2);
  color:var(--ds-ink2);font-weight:750}
.sn-venter.sn-venter-let b{color:var(--ds-ink);font-weight:850}
.sn-venter.sn-venter-let .sn-knap{margin:0}

.sn-plliste{display:flex;flex-direction:column;gap:12px;margin:16px 0 0}
.sn-plrk{padding:14px 16px;border-radius:var(--ds-r);background:var(--ds-flade);
  border:1px solid var(--ds-linje)}
.sn-plrk>b{display:block;font-size:.98rem;line-height:1.35}
.sn-plrk>p{margin:5px 0 0;font-size:.85rem}
/* Rullelisterne staar SIDE OM SIDE og bryder foerst, naar der ikke er plads.
   To felter under hinanden pr. raekke ville goere syv oensker til en side,
   man skal rulle igennem to gange for at overskue. */
.sn-plfelt{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:10px 0 0}

.sn-tlfilt{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 12px}
.sn-tlfilt-h{font-size:.82rem;font-weight:700;color:var(--ds-ink2);padding:0 2px}
.sn-tlfilt button{border:1px solid var(--ds-linje);background:var(--ds-kort);font:inherit;
  font-size:.84rem;font-weight:750;color:var(--ds-ink2);padding:7px 14px;border-radius:999px;
  cursor:pointer;box-shadow:var(--ds-s1);
  transition:background .22s cubic-bezier(.2,.7,.3,1),color .22s cubic-bezier(.2,.7,.3,1),
             border-color .22s cubic-bezier(.2,.7,.3,1)}
.sn-tlfilt button:hover{background:var(--ds-flade);color:var(--ds-ink)}
.sn-tlfilt button.sn-paa{background:var(--moerk,#1e374c);border-color:var(--moerk,#1e374c);color:#fff}
.sn-tlfilt-n{display:inline-block;min-width:17px;height:17px;line-height:17px;border-radius:9px;
  background:var(--ds-flade);color:var(--ds-ink2);font-size:.7rem;font-weight:850;text-align:center;
  margin-left:6px;padding:0 5px}
.sn-tlfilt button.sn-paa .sn-tlfilt-n{background:rgba(255,255,255,.28);color:#fff}

.sn-faner{display:flex;gap:6px;align-items:center;background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:14px;padding:4px;
  box-shadow:var(--ds-s1);margin:0 0 12px;flex-wrap:wrap}
.sn-faner button{border:0;background:none;font:inherit;font-weight:750;font-size:.9rem;
  color:var(--ds-ink2);padding:9px 16px;border-radius:10px;cursor:pointer;
  transition:background .22s cubic-bezier(.2,.7,.3,1),color .22s cubic-bezier(.2,.7,.3,1)}
.sn-faner button:hover{background:var(--ds-flade);color:var(--ds-ink)}
.sn-faner button.sn-paa{background:var(--moerk,#1e374c);color:#fff}
.sn-fyld{flex:1;min-width:8px}
.sn-filt{font-size:.82rem;font-weight:700;color:var(--ds-ink2);padding:0 4px 0 10px}
.sn-tal{display:inline-block;min-width:18px;height:18px;line-height:18px;border-radius:9px;
  background:var(--blaa,#3cb4e5);color:#fff;font-size:.7rem;font-weight:850;text-align:center;
  margin-left:7px;padding:0 5px}
.sn-faner button.sn-paa .sn-tal{background:rgba(255,255,255,.28)}

.sn-sog{display:flex;align-items:center;gap:8px;background:var(--ds-kort);
  border:1px solid var(--ds-linje);border-radius:12px;padding:8px 13px;
  box-shadow:var(--ds-s1);margin:0 0 8px}
.sn-sog input{border:0;outline:0;font:inherit;font-size:.92rem;flex:1;background:none;color:inherit}
.sn-hint{color:var(--ds-ink2);font-size:.78rem;font-weight:650;margin:0 0 18px}
.sn-fod{margin:26px 0 0;color:var(--ds-ink2);font-size:.82rem}
.sn-tomt{padding:30px 20px;text-align:center;color:var(--ds-ink2);font-weight:700;
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r)}

/* ---- tidslinjen ---- */
.sn-tl{position:relative;padding-left:30px}
.sn-tl::before{content:"";position:absolute;left:9px;top:6px;bottom:16px;width:2px;
  background:linear-gradient(var(--ds-linje2),rgba(18,41,60,.04))}
.sn-dag{font-size:.76rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ds-ink2);margin:22px 0 10px}
.sn-dag:first-child{margin-top:0}
.sn-pind{position:relative;margin:0 0 12px}
.sn-pind::before{content:"";position:absolute;left:-25px;top:22px;width:12px;height:12px;
  border-radius:50%;background:var(--ds-kort);border:2.5px solid var(--ds-linje2)}
.sn-pind.sn-vigtigt::before{border-color:var(--gul,#f5a623)}
.sn-pind.sn-handling::before{border-color:var(--roed,#e7004c)}
.sn-pind.sn-ulaest::before{border-color:var(--blaa,#3cb4e5);box-shadow:0 0 0 4px rgba(60,180,229,.16)}
.sn-kort{display:block;width:100%;text-align:left;font:inherit;color:inherit;
  background:var(--ds-kort);border:1px solid var(--ds-linje);border-radius:var(--ds-r);
  box-shadow:var(--ds-s1);padding:15px 18px;cursor:pointer;
  transition:box-shadow .22s cubic-bezier(.2,.7,.3,1),border-color .22s cubic-bezier(.2,.7,.3,1),transform .22s cubic-bezier(.2,.7,.3,1)}
.sn-kort:hover{box-shadow:var(--ds-s2);border-color:rgba(60,180,229,.5);transform:translateY(-1px)}
.sn-kort.sn-fast{cursor:default}
.sn-kort.sn-fast:hover{box-shadow:var(--ds-s1);border-color:var(--ds-linje);transform:none}
.sn-kort.sn-skjult{background:repeating-linear-gradient(135deg,
  var(--ds-kort),var(--ds-kort) 9px,var(--ds-flade) 9px,var(--ds-flade) 18px)}
.sn-linje{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:0 0 6px}
.sn-linje .sn-navn{font-weight:850;font-size:.95rem}
.sn-linje .sn-ik{font-size:1.05rem}
.sn-dt{color:var(--ds-ink2);font-size:.85rem;font-weight:700}
.sn-pind h3{margin:2px 0 5px;font-size:1.06rem;letter-spacing:-.01em}
.sn-pind p{margin:0;color:var(--ds-ink2);font-size:.92rem}
.sn-prik{display:inline-block;width:8px;height:8px;border-radius:50%;
  background:var(--blaa,#3cb4e5);margin-left:8px;vertical-align:middle}

/* ---- mærkater ---- */
.sn-m{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:2px 10px;
  font-size:.73rem;font-weight:850;white-space:nowrap}
.sn-omr{background:rgba(18,41,60,.06);color:#3d5468}
.sn-hus{background:rgba(18,41,60,.06);color:#3d5468}
.sn-ver{background:var(--moerk,#1e374c);color:#fff;font-variant-numeric:tabular-nums}
.sn-afd{background:rgba(147,213,0,.20);color:#4a6b00}
.sn-niv-info{background:rgba(18,41,60,.06);color:#3d5468}
.sn-niv-vigtigt{background:rgba(245,166,35,.20);color:#8a5a00}
.sn-niv-handling{background:rgba(231,0,76,.13);color:#a8003a}
.sn-ny{background:rgba(60,180,229,.18);color:#0d5b7a}
.sn-drift{background:rgba(147,213,0,.20);color:#4a6b00}
.sn-udv{background:rgba(122,90,248,.14);color:#4a2ec0}
.sn-bpa{background:rgba(60,180,229,.16);color:#0d5b7a}
.sn-sy-intern{background:rgba(18,41,60,.10);color:#3d5468;border:1px dashed rgba(18,41,60,.3)}
.sn-sy-kladde{background:rgba(245,166,35,.16);color:#8a5a00;border:1px dashed rgba(245,166,35,.6)}
/* 📥 11.08.2026 — «Ny — ikke set af HF endnu».
   Ønsker er synlige for alle fra første øjeblik, men det er ikke det samme
   som at nogen har set på dem. Mærket arver den stiplede kant fra
   kladde-mærket, det afløser: stiplet betyder «ikke afgjort endnu».
   🔴 .sn-sy-kladde bliver stående — den bruges stadig til «Kladde · vN» i
   skrivefladen, og det er en anden ting. */
.sn-sy-ny{background:rgba(245,166,35,.16);color:#8a5a00;border:1px dashed rgba(245,166,35,.6)}
/* 🔒🗑 11.08.2026 — skjult og papirkurv.
   Skjult er MØRK og fast: det er en afgørelse, nogen har taget. Papirkurven
   er grå og stiplet: det er en midlertidig tilstand, der udløber af sig selv.
   Formen fortæller forskellen, før man læser ordene. */
.sn-sy-skjult{background:rgba(18,41,60,.85);color:#fff}
/* 📷 11.08.2026 — vedhæftede skærmbilleder.
   🔴 Advarslen om persondata står OVER filvælgeren og i husets røde, fordi
   den skal læses FØR man vælger filen. En advarsel, man møder bagefter, er
   ingen advarsel. Serveren kan måle filens type og størrelse — den kan ikke
   se, om der står et borgernavn i billedet. */
.sn-bilvarsel{display:block;margin:2px 0 8px;padding:8px 10px;border-radius:8px;
  background:rgba(231,0,76,.10);border-left:3px solid var(--hf-roed,#e7004c);color:#8a1a3a;font-size:.83rem}
.sn-valgfri{font-weight:400;opacity:.6}
.sn-bilvalgt{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.sn-bilchip{display:inline-flex;align-items:center;gap:7px;padding:5px 8px 5px 10px;border-radius:999px;
  background:var(--sn-bund2,#f0f3f5);font-size:.84rem}
.sn-bilchip button{border:0;background:none;cursor:pointer;color:var(--sn-graa,#6b7b88);font-size:.9rem;padding:0 2px}
.sn-bilchip button:hover{color:var(--hf-roed,#e7004c)}
.sn-sy-kurv{background:transparent;color:var(--sn-graa,#6b7b88);border:1px dashed var(--sn-graa,#9aa7b1)}
.sn-styr-mere{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px;
  padding-top:12px;border-top:1px solid rgba(255,255,255,.14)}
.sn-styr-mere .sn-fare{color:#ffb4a8}
.sn-styr-mere .sn-fare:hover{background:rgba(231,0,76,.18)}
.sn-kurvnote{font-size:.85rem;opacity:.85}
.sn-skjulgrund{margin-top:10px;padding:9px 12px;border-radius:9px;background:rgba(255,255,255,.10);font-size:.87rem}

/* ✨ 11.08.2026 — TRIN 2: DINE EGNE ORD OG ASSISTENTENS FORSLAG.
   De to kasser skal kunne kendes fra hinanden på et halvt sekund, uden at
   man læser overskrifterne. Derfor: originalen står i husets almindelige
   skrift på hvid bund — det er «det rigtige». Forslaget står i kursiv på
   en tonet bund med en blå kant i venstre side, som alt andet i huset, der
   er et forslag og ikke en afgørelse.
   🔴 Kursiv ALENE ville ikke være nok: den, der læser hurtigt, ser kun to
   afsnit. Kanten og bunden gør forskellen synlig, før teksten læses. */
.sn-egne{margin:18px 0 0;padding:14px 16px;border:1px solid var(--sn-linje,#e4e8ec);border-radius:12px;background:#fff}
.sn-egne h3{margin:0 0 8px;font-size:.82rem;letter-spacing:.02em;text-transform:uppercase;color:var(--sn-graa,#6b7b88)}
.sn-egne b{display:block;font-size:1.04rem;line-height:1.35;margin-bottom:6px}
.sn-egne p{margin:0;white-space:pre-wrap}
.sn-aiforslag{margin:12px 0 0;padding:14px 16px 12px;border-radius:12px;background:rgba(60,180,229,.07);
  border-left:3px solid var(--hf-blaa,#3cb4e5)}
.sn-aiforslag h3{margin:0 0 8px;font-size:.82rem;letter-spacing:.02em;text-transform:uppercase;color:#0d5b7a}
.sn-aiforslag b{display:block;font-style:italic;font-size:1.04rem;line-height:1.35;margin-bottom:6px}
.sn-aiforslag p{margin:0 0 8px;font-style:italic;white-space:pre-wrap}
.sn-aiforslag small{display:block;font-size:.78rem;color:var(--sn-graa,#6b7b88)}
/* ✨ Forslaget er FELTER, ikke tekst — det skal kunne rettes. De arver den
   kursive skrift, så det stadig kan ses på et halvt sekund, at det er et
   forslag og ikke ens egne ord. Kanten er lys, så feltet ikke råber. */
.sn-aiforslag .sn-aitit,.sn-aiforslag textarea{width:100%;box-sizing:border-box;font:inherit;font-style:italic;
  border:1px solid rgba(60,180,229,.45);border-radius:9px;padding:9px 11px;background:#fff;color:inherit;margin-bottom:8px}
.sn-aiforslag .sn-aitit{font-size:1.02rem;font-weight:700}
.sn-aiforslag textarea{resize:vertical;line-height:1.5;min-height:88px}
.sn-aiforslag .sn-aitit:focus,.sn-aiforslag textarea:focus{outline:2px solid var(--hf-blaa,#3cb4e5);outline-offset:1px}
/* den lille udgave på selve ønskesiden — samme idé, mindre vægt */
.sn-egne-lille{margin:14px 0 0;background:var(--sn-bund2,#f6f8f9);border-style:dashed}
.sn-egne-lille h4{margin:0 0 6px;font-size:.78rem;letter-spacing:.02em;text-transform:uppercase;color:var(--sn-graa,#6b7b88)}
.sn-egne-lille b{font-size:.98rem}
.sn-egne-lille small{display:block;margin-top:6px;font-size:.76rem;color:var(--sn-graa,#6b7b88)}

/* ---- funktionslisten ---- */
.sn-blok{margin:0 0 24px}
.sn-blokh{display:flex;align-items:center;gap:10px;margin:0 0 10px;flex-wrap:wrap}
.sn-blokh b{font-size:1.02rem}
.sn-blokh span{color:var(--ds-ink2);font-size:.85rem;font-weight:650}
.sn-frk{display:grid;gap:10px}
.sn-frk button{display:flex;align-items:center;gap:14px;text-align:left;width:100%;
  font:inherit;color:inherit;background:var(--ds-kort);border:1px solid var(--ds-linje);
  border-radius:12px;padding:13px 16px;cursor:pointer;
  transition:border-color .22s cubic-bezier(.2,.7,.3,1),box-shadow .22s cubic-bezier(.2,.7,.3,1)}
.sn-frk button:hover{border-color:rgba(60,180,229,.5);box-shadow:var(--ds-s1)}
.sn-frk-ik{font-size:1.35rem;width:34px;text-align:center;flex:none}
.sn-frk-nv{flex:1;min-width:0}
.sn-frk-nv b{display:block;font-size:.98rem}
.sn-frk-nv small{color:var(--ds-ink2);font-weight:650;font-size:.83rem;display:block}
.sn-frk-h{text-align:right;color:var(--ds-ink2);font-size:.8rem;font-weight:700;flex:none}

/* ---- funktionssiden ---- */
.sn-retur{display:inline-flex;align-items:center;gap:7px;color:var(--ds-ink2);
  background:none;border:0;padding:0;cursor:pointer;font:inherit;font-weight:750;
  font-size:.88rem;margin:0 0 14px}
.sn-retur:hover{color:var(--ds-ink)}
.sn-kasse{background:var(--ds-kort);border:1px solid var(--ds-linje);
  border-radius:var(--ds-r);box-shadow:var(--ds-s1);padding:20px 22px}
.sn-hoved{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.sn-stort{width:62px;height:62px;border-radius:18px;flex:none;display:grid;place-items:center;
  font-size:1.9rem;background:var(--ds-flade);border:1px solid var(--ds-linje)}
.sn-hoved-t{flex:1;min-width:230px}
.sn-hoved-t h2{margin:0 0 6px;font-size:1.5rem;letter-spacing:-.02em}
.sn-chips{display:flex;gap:7px;flex-wrap:wrap;margin:8px 0 0}
.sn-band{display:flex;align-items:flex-start;gap:10px;margin:16px 0 0;padding:11px 15px;
  border-radius:12px;font-size:.9rem;font-weight:700}
.sn-band-ok{background:rgba(147,213,0,.13);color:#3f5c00}
.sn-band-udv{background:rgba(122,90,248,.10);color:#3f2a9e}
.sn-besk{margin:18px 0 0;padding:18px 20px;background:var(--ds-flade);
  border:1px solid var(--ds-linje);border-radius:var(--ds-r)}
.sn-besk h3{margin:0 0 8px;font-size:1rem}
.sn-besk h3+p{margin:0 0 12px}
.sn-besk ul{margin:0 0 4px;padding-left:20px;color:var(--ds-ink2)}
.sn-besk li{margin:0 0 5px}
.sn-besk h3:not(:first-child){margin-top:18px}
.sn-trin{margin:0;padding-left:22px}
.sn-trin li{margin:0 0 14px}
.sn-trin li span{display:block;font-weight:650}
.sn-foto{margin:10px 0 0;border:1px dashed var(--ds-linje2);border-radius:12px;
  background:var(--ds-flade);padding:15px;display:grid;place-items:center;
  color:var(--ds-ink2);font-size:.82rem;font-weight:700;text-align:center}
.sn-afsnit{margin:30px 0 12px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.sn-afsnit h3{margin:0;font-size:1.12rem;letter-spacing:-.01em}
.sn-afsnit span{color:var(--ds-ink2);font-size:.86rem;font-weight:650}
.sn-skelet{display:grid;gap:9px;margin:10px 0 0}
.sn-skelet div{display:flex;gap:11px;align-items:flex-start}
.sn-skelet dt{flex:none;width:132px;font-size:.78rem;font-weight:850;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ds-ink2);padding-top:2px}
.sn-skelet dd{margin:0;flex:1}
.sn-laes{margin:12px 0 0;display:inline-flex;align-items:center;gap:8px;font:inherit;
  background:var(--roed,#e7004c);color:#fff;border:0;border-radius:999px;padding:9px 18px;
  font-weight:800;font-size:.87rem;cursor:pointer}
.sn-laes.sn-gjort{background:rgba(147,213,0,.22);color:#3f5c00;cursor:default}
.sn-intro{margin:0 0 18px;padding:16px 20px;border-radius:var(--ds-r);
  background:linear-gradient(105deg,rgba(60,180,229,.13),rgba(60,180,229,.04));
  border:1px solid rgba(60,180,229,.3)}
.sn-intro b{display:block;margin:0 0 3px}
.sn-intro p{margin:0;color:#2c5568;font-size:.9rem;font-weight:650}
/* 🔴 «b» er kassens OVERSKRIFT (display:block ovenfor). Skal man fremhæve et
   tal MIDT i en sætning, er det et <strong> — ellers springer tallet ned på
   sin egen linje. To betydninger af ét mærke er en fælde; her er de skilt. */
.sn-intro strong{font-weight:850;color:#12293c}

@media(max-width:700px){
  /* 🔴 Nu står BÅDE «3 nyt» og «Under udvikling» i højre side. På en telefon
     skubbede de linjen 20 px ud over skærmen. Højresiden lægger sig derfor
     under navnet i stedet for at presse den. */
  .sn-frk button{flex-wrap:wrap}
  .sn-frk-nv{flex:1 1 100%;min-width:0}
  .sn-frk-h{flex:1 1 100%;text-align:left;margin:7px 0 0}
  .sn-skelet dt{width:auto}
  .sn-skelet div{display:block}
  .sn-skelet dd{margin-top:2px}
  .sn-faner button{padding:8px 12px;font-size:.85rem}
  .sn-tl{padding-left:24px}
  .sn-pind::before{left:-21px}
}

/* =====================================================================
   🎤🔊 TALE IND OG UD — ÉN kopi for begge chats            09.08.2026
   ---------------------------------------------------------------------
   🔴 Den lå inde i index.html og gjaldt kun borgernes chat. Da Søren bad om
   det samme i HF-assistenten, var valget: skrive den af, eller flytte den.
   To kopier af den samme knap driver fra hinanden inden for en måned — og
   så er der to steder at rette, næste gang der er en fejl som «Jeg lytter».
   Derfor: klasser (.hf-mik, .hf-lytter, .hf-talebar) i stedet for id'er,
   og den bor her, hvor begge sider i forvejen læser med.
   ===================================================================== */
/* ══════════════ 🎤🔊 TALE IND OG UD ══════════════
   Knapperne skal se ud som noget, man GERNE vil trykke på — det er dem,
   der afgør, om en borger med dårlig førlighed overhovedet kommer i gang.
   Store trykflader (44 px, som Apple og Google anbefaler), rolige farver
   fra husets palet, og en tydelig — men ikke larmende — tilstand, når den
   lytter.

   🔴 @prefers-reduced-motion respekteres. Bevægelse er ikke pynt for alle;
   for nogle er den ubehagelig. */
.hf-mik{
  width:44px;height:44px;flex:none;display:grid;place-items:center;
  border:1px solid rgba(30,55,76,.14);border-radius:14px;cursor:pointer;
  background:linear-gradient(180deg,#fff,#f5f8fb);
  font-size:1.2rem;line-height:1;color:#1e374c;
  box-shadow:0 1px 2px rgba(18,41,60,.06);
  transition:transform .16s cubic-bezier(.2,.7,.3,1),box-shadow .16s,border-color .16s,background .16s;
}
.hf-mik:hover{border-color:rgba(60,180,229,.55);box-shadow:0 6px 16px rgba(18,41,60,.10);transform:translateY(-1px)}
.hf-mik:active{transform:translateY(0) scale(.96)}
.hf-mik:focus-visible{outline:3px solid rgba(60,180,229,.55);outline-offset:2px}
.hf-mik.lytter{
  background:linear-gradient(160deg,#ff2d6f,#e7004c);
  border-color:#e7004c;color:#fff;
  box-shadow:0 6px 18px rgba(231,0,76,.34);
  animation:hfMikRing 1.6s ease-out infinite;
}
@keyframes hfMikRing{
  0%  {box-shadow:0 6px 18px rgba(231,0,76,.34), 0 0 0 0 rgba(231,0,76,.42)}
  70% {box-shadow:0 6px 18px rgba(231,0,76,.34), 0 0 0 12px rgba(231,0,76,0)}
  100%{box-shadow:0 6px 18px rgba(231,0,76,.34), 0 0 0 0 rgba(231,0,76,0)}
}

/* 🔴 09.08.2026 — «Jeg lytter» stod fremme, FØR nogen havde trykket.
   Grunden: `hidden` er kun en almindelig regel (display:none) fra
   browserens eget stilark, og en regel, JEG skriver, vinder over den.
   `.hf-lytter{display:flex}` slog den altså ihjel — og så lovede skærmen
   borgeren, at den lyttede, mens mikrofonen var slukket. Værre end en
   grim knap.

   Derfor: `hidden` skal betyde skjult HER, uanset hvad der ellers står.
   Skrevet som én regel for hele chatten, ikke som et plaster på det ene
   felt — næste gang jeg giver et skjult felt et `display`, er den der
   allerede. */
.hf-mik[hidden], .hf-lytter[hidden], .hf-talebar[hidden],
#chatWin [hidden], #aWin [hidden]{ display:none !important; }

/* «Jeg lytter» — en lille bølge, så man kan SE, at den er i gang.
   Uden den er der ingen forskel på «lytter» og «hængt». */
.hf-lytter{
  display:flex;align-items:center;gap:11px;margin:0 12px 8px;padding:10px 14px;
  border-radius:14px;background:rgba(231,0,76,.07);border:1px solid rgba(231,0,76,.22);
  color:#a8003a;font-weight:750;font-size:.86rem;
}
/* 🔴 Fejl-udgaven af bjælken. Søren 09.08: mikrofonen «slår til i 0,1 sek
   og slår fra igen» — fordi browserens afvisning blev slugt. Nu står
   grunden der, i rødt, til man selv lukker den. En knap, der blinker, er
   værre end en knap, der siger fra. */
.hf-lytter.fejl{background:rgba(231,0,76,.10);border-color:rgba(231,0,76,.42)}
.hf-lytter.fejl b{display:none}
.hf-lytter.fejl::before{content:"⚠️";font-size:1.1rem;flex:none}
.hf-lytter.fejl button{background:rgba(231,0,76,.16)}
.hf-lytter b{display:flex;gap:3px;align-items:flex-end;height:18px;flex:none}
.hf-lytter b i{display:block;width:3px;border-radius:2px;background:#e7004c;
  animation:hfBolge 1s ease-in-out infinite}
.hf-lytter b i:nth-child(1){height:7px;  animation-delay:0s}
.hf-lytter b i:nth-child(2){height:14px; animation-delay:.12s}
.hf-lytter b i:nth-child(3){height:18px; animation-delay:.24s}
.hf-lytter b i:nth-child(4){height:11px; animation-delay:.36s}
.hf-lytter b i:nth-child(5){height:6px;  animation-delay:.48s}
@keyframes hfBolge{0%,100%{transform:scaleY(.45)}50%{transform:scaleY(1)}}
.hf-lytter span{flex:1;min-width:0}
.hf-lytter button{border:0;background:rgba(231,0,76,.12);color:#a8003a;border-radius:999px;
  padding:7px 14px;font:inherit;font-weight:800;font-size:.82rem;cursor:pointer;flex:none}

/* «Læs svarene højt» — en rigtig kontakt, ikke et lille flueben */
.hf-talebar{padding:8px 12px 0}
.hf-talebar label{display:flex;align-items:center;gap:11px;cursor:pointer;
  padding:9px 12px;border-radius:14px;border:1px solid rgba(30,55,76,.10);
  background:rgba(30,55,76,.025);font-size:.88rem;font-weight:750;color:#1e374c;
  transition:border-color .16s,background .16s}
.hf-talebar label:hover{border-color:rgba(60,180,229,.45);background:rgba(60,180,229,.05)}
.hf-talebar input{position:absolute;opacity:0;width:0;height:0}
.hf-talebar .kontakt{width:42px;height:24px;flex:none;border-radius:999px;position:relative;
  background:rgba(30,55,76,.20);transition:background .2s cubic-bezier(.2,.7,.3,1)}
.hf-talebar .kontakt::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;
  border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(18,41,60,.28);
  transition:transform .2s cubic-bezier(.2,.7,.3,1)}
.hf-talebar input:checked + .kontakt{background:#93d500}
.hf-talebar input:checked + .kontakt::after{transform:translateX(18px)}
.hf-talebar input:focus-visible + .kontakt{outline:3px solid rgba(60,180,229,.55);outline-offset:2px}

/* 🔴 Husets egen «Læs højt» (den faste knap nederst til venstre, der læser
   SIDEN op, når man peger) lå oven i chattens nye kontakt. To knapper med
   samme navn, ét sted. Så længe en chat er åben, træder den til side —
   den handler alligevel om siden bagved, som man ikke kigger på lige nu. */
body.hf-chat-aaben #hfLaesHojt{ display:none !important; }

/* 🔊 på hvert svar — diskret, men altid til at ramme */
.c-laes{
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;margin:6px 0 0 6px;vertical-align:middle;
  border:1px solid rgba(30,55,76,.12);border-radius:50%;background:#fff;
  cursor:pointer;font-size:.9rem;line-height:1;opacity:.55;
  transition:opacity .16s,transform .16s,border-color .16s,box-shadow .16s}
.c-laes:hover{opacity:1;transform:scale(1.08);border-color:rgba(60,180,229,.55);
  box-shadow:0 4px 12px rgba(18,41,60,.12)}
.c-laes:focus-visible{opacity:1;outline:3px solid rgba(60,180,229,.55);outline-offset:2px}
.c-laes.taler{opacity:1;border-color:#93d500;box-shadow:0 0 0 4px rgba(147,213,0,.18)}
@media (hover:none){ .c-laes{opacity:.8} }

@media (prefers-reduced-motion:reduce){
  .hf-mik,.hf-mik.lytter,.hf-lytter b i,.c-laes{animation:none;transition:none}
}

