/* =============================================================================
   system.css — designsystemets fundament.

   Bygget 21. aug 2026 efter L16 (ORBIT-lys), L17 (typografisk hero med
   soegning), L18 (neutral pladsholder i header) og L15 (vaegtklasse-IA).

   Erstatter prototype/v2-*.html's varme raahvide verden. Beholdt DERFRA,
   fordi det var loest og ikke skal loeses igen:
     - de fire datatilstande som fire FORSKELLIGE visuelle sprog
     - de to billedklasser (miljoefoto = cover, plade paa hvid = contain)
     - den tomme plade, der laeses som et hul i vaerket, ikke et brudt billede

   ALLE farver er MAALT med prototype/kontrast-system.mjs. Tallene i
   prototype/system.html kommer derfra, ikke fra et skoen.

   Ingen tredjepartskald. Ingen cookies. Virker uden JavaScript.
   ========================================================================== */

/* --- 1. Skrift ------------------------------------------------------------
   TYPESKILT-fundament (spor/fundament, 31. aug 2026, L54/L57). Erstatter den
   gamle sans-og-skrivemaskineskrift-strategi, som ALDRIG selvhostede noget
   (maalt 21.08. og igen 31.08.2026: 0 woff2-filer i repoet foer det spor -
   kun local()+en ikke-eksisterende url() og et fallback til systemskrift).

   L80 (2. sep 2026) lukkede den sidste rest: der er nu TO skrifter, ikke
   tre. Saira Semi Condensed ("Pladen": etiketter, tal, navigation,
   overskrifter og broedtekst - se --mono) og Literata ("Manualen": loebende
   prosa - se --manual, 8 brugssteder). Det tredje token pegede paa en
   skrift uden fontfil og er fjernet; indtil da tegnede sitet sin body og
   alle sine overskrifter i operativsystemets standardskrift.
   Kilde: retninger/nyverden/skrift/ og typeskilt.css. Begge snit er
   SIL OFL 1.1, fri til selvhosting. 10 filer, latin + latin-ext hver,
   unicode-range delt som i comp'en. */
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/saira-400-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/saira-400-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:500;font-display:swap;
  src:url("fonts/saira-500-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:500;font-display:swap;
  src:url("fonts/saira-500-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:600;font-display:swap;
  src:url("fonts/saira-600-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:600;font-display:swap;
  src:url("fonts/saira-600-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:700;font-display:swap;
  src:url("fonts/saira-700-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"SairaSemiCondensed";font-style:normal;font-weight:700;font-display:swap;
  src:url("fonts/saira-700-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:"Literata";font-style:normal;font-weight:400 600;font-display:swap;
  src:url("fonts/literata-var-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Literata";font-style:normal;font-weight:400 600;font-display:swap;
  src:url("fonts/literata-var-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* --- 2. Poletter ---------------------------------------------------------- */
:root{
  /* Primitiver: farven, som den ER. spor/primitiv (LED 2, foerste del).
     Navnene er MANIFEST.md's Paletten (retninger/nyverden/MANIFEST.md §Paletten,
     "ni navngivne roller" - se kommentaren nedenfor). Deling af én hex mellem
     flere semantiske tokens var indtil nu IMPLICIT (samme tal skrevet flere
     gange); denne blok goer den EKSPLICIT uden at fjerne den - de semantiske
     tokens nedenfor peger paa disse elleve, og INGEN andet sted i CSS'en
     bruger en --p-* variabel direkte. To af dem (kridt, stans) har i dag kun
     ét semantisk navn hver, men staar med her for at daekke HELE paletten,
     ikke kun de navne med dubletter.

     ELLEVE, ikke ni: spor/tomstat (R8, 4. sep 2026) tilfoejede de to
     -2-trin nedenfor. De er IKKE nye kulører - de er punkter paa en akse,
     der allerede fandtes. Maalt: #E8EBED og #9AA3A9 har SAMME tone (hue 204
     grader) og samme kanalforhold, G-R : B-R = 3 : 5. Hele den rette linje
     mellem dem i RGB opfylder det forhold, og begge nye trin ligger paa
     netop den linje - eloxgraa-2 ved t=0,050, stoevgraa-2 ved t=1,50
     (t>1 = forlaengelsen ud over stoevgraa). Palettelaasen (TYPESKILT) er
     dermed ikke brudt: aksen er forlaenget, ingen farve opfundet.
     Regnemaskinen er fund/arkiv/2026-09/maal-vikke-kontrast.mjs. */
  --p-eloxgraa:#E8EBED;
  --p-eloxgraa-2:#E4E7EA;   /* ét trin ned ad elox-aksen. Fyldet bag "ikke oplyst".
                               1,04 : 1 for FLADEN #E4E7EA paa #E8EBED - bevidst
                               naesten usynlig, se dommen ved --tom nedenfor. */
  --p-eloxgraa-3:#D1D5D9;   /* SAMME akse, t=0,30 (spor/imp-robot, 7. sep 2026).
                               Den indfeldte flade: forbeholdenes plade, chippernes
                               fyld, maalpladens titelfelt, skemaets hover. MAALT:
                                 FLADEN paa bunden #E8EBED   1,23 : 1  (var 1,00)
                                 FLADEN paa panelet #FAFBFB  1,42 : 1  (var 1,16)
                                 FLADEN mod --tom #E4E7EA    1,19 : 1
                                 --blaek2 #545C63 PAA fladen 4,61 : 1  (kravet 4,5)
                                 --blaek  #22262A PAA fladen 10,32 : 1
                               Aksen er den samme som eloxgraa-2 og stoevgraa-2:
                               G-R : B-R = 3 : 5 mellem #E8EBED og #9AA3A9. Ingen
                               ny kulør, altsaa ingen brudt palettelaas.
                               ADVARSEL TIL DEN NAESTE: --blaek3 #5F686F staar kun
                               3,85 : 1 paa denne flade og maa derfor ALDRIG saettes
                               som tekst paa den. Maalt paa alle fem brugssteder
                               7. sep: ingen af dem bruger --blaek3. */
  --p-gunmetal:#22262A;
  --p-kridt:#FAFBFB;
  --p-blaek-2:#545C63;
  --p-afmaerkningsgul:#F2C400;
  --p-rille:#C6CCD1;
  --p-stoevgraa:#9AA3A9;
  --p-stoevgraa-2:#737F87;  /* stoevgraa foert videre ad samme akse, til den naar
                               WCAG 1.4.11. 3,43 : 1 for KANTEN #737F87 paa
                               bunden #E8EBED, og 3,31 : 1 for KANTEN paa sit
                               eget fyld #E4E7EA. Begge naboer over 3,0.
                               Stadig lysere end teksten (--blaek3, 4,74 : bund),
                               saa konturen ikke konkurrerer med ordet. */
  --p-stoev-blaek:#5F686F;
  --p-stans:#FFFFFF;

  /* Flader. TYPESKILT (spor/fundament, L54/L57): eloxeret plade, ikke
     ORBIT-lysets bloede panel. VAERDIERNE ER NYE, NAVNENE ER DE GAMLE - jf.
     briefets 3.3: navnene bevares, og hele siden skifter farve uden at
     noget knaekker. RETTET af spor/primitiv (2. sep 2026): paastanden om
     at "ingen test matcher en hex-farve" var allerede forkert, da den blev
     skrevet - tests/dele/34-typeskilt-fundament.mjs (34.11, 34.13-34.15) og
     tests/dele/58-designmd.mjs laaser flere af disse tokens til literal hex.
     Se fund/arkiv/2026-09/FUND-primitiv.md for den fulde konsekvens: disse tokens peger nu
     paa primitiver (var()) i stedet, og de laasende tests falder derfor rødt
     - ikke rettet her, da ingen af de to testfiler er dette spors eje.
     Kortlaegningen fra
     MANIFEST.md's ni navngivne roller (ikke otte - se rapporten) til de
     14 gamle tokens, dér hvor rollen var entydig:
       --bund/--tom/--panel-ro/--accent-ro -> eloxgraa (pladen selv, og de
         receded/rolige flader ORBIT ikke havde et TYPESKILT-modstykke til -
         se dommen nedenfor)
       --panel -> kridt (kortflade)   --blaek/--fod -> gunmetal (blaekket)
       --blaek2 -> blaek-2            --blaek3 -> stoev-blaek (samme rolle
         som "ikke oplyst"-teksten allerede havde: .v-ikke, .status--udgaaet)
       --accent -> afmaerkningsgul    --linje -> rille
       --hegn/--paafod2 -> stoevgraa  --paafod -> eloxgraa (lys tekst paa moerk bund) */
  --bund:var(--p-eloxgraa);
  --panel:var(--p-kridt);
  --panel-ro:var(--p-eloxgraa-3);      /* AENDRET 7. sep 2026 (spor/imp-robot,
                                 colorize). JPK frigav udtrykkeligt dette ene token
                                 fra palettelaasen, fordi forbeholdene ellers ikke
                                 kan ses. Her stod --p-eloxgraa, altsaa NOEJAGTIG
                                 samme hex som --bund: 30 forbehold pr. robotside
                                 laa 1,00 : 1 paa bunden og 1,16 : 1 paa panelet.
                                 En plade, der markerer, at et tal er TOLKET og
                                 ikke aflaest, var dermed usynlig som plade.
                                 Nu 1,23 : 1 paa bunden og 1,42 : 1 paa panelet.

                                 HVORFOR IKKE 3,0, som WCAG 1.4.11 beder om:
                                 fordi fladen ikke kan naa 3,0 og samtidig baere
                                 sin egen tekst. Maalt: den moerkeste flade, hvor
                                 --blaek2 stadig holder 4,5 : 1, staar 1,26 : 1 paa
                                 bunden. Praecis samme loft som --tom (se dommen
                                 nedenfor). Derfor baerer KANTEN tilstanden:
                                 .advarsel--gyldighed er flyttet fra --hegn
                                 (2,14 : 1) til --hegn-baerende (3,43 : 1 paa bunden,
                                 3,96 : 1 paa panelet). Fladen er genkendelse,
                                 kanten er kravet.

                                 Her stod ogsaa den gamle begrundelse: "TYPESKILT
                                 har ingen rolig flade INDE i kridt-panelet - de
                                 faa steder, comp'en gaar dybere end kridt, bruger
                                 eloxgraa. Mindst risikable valg." Den var sand som
                                 valg, men den maalte aldrig, hvad fladen saa gjorde
                                 paa BUNDEN, hvor den ogsaa staar. */
  --tom:var(--p-eloxgraa-2);           /* fyldet bag "ikke oplyst". VAR eloxgraa, altsaa
                                 nøjagtig samme hex som --bund: 1,00 : 1 for
                                 FYLDET paa BUNDEN. JPK 4. sep 2026: "giv --tom
                                 sin egen primitiv" (R8). Nu #E4E7EA -> 1,04 : 1.

                                 HVORFOR KUN 1,04, naar WCAG 1.4.11 kraever 3,0:
                                 fordi fyldet IKKE KAN naa 3,0 og samtidig baere
                                 sit eget ord. Maalt loft (fund/maal-vikke-
                                 kontrast.mjs, afsnit LOFTET): skal teksten holde
                                 4,50 : 1 PAA fyldet, er det moerkeste lovlige
                                 fyld begraenset af tekstfarven -
                                   --blaek3 #5F686F: fyldet naar hoejst 1,05 : bund
                                   --blaek2 #545C63: hoejst 1,26 : bund
                                   --blaek  #22262A: hoejst 2,83 : bund
                                 Selv med palettens MOERKESTE blaek naar fyldet
                                 aldrig 3,0. Et fyld, der bestaar 1.4.11, gør
                                 altsaa ordet i chippen ulaeseligt - tilstanden
                                 ville blive synlig som firkant og forsvinde som
                                 ord. Derfor baerer KANTEN tilstanden
                                 (--hegn-baerende nedenfor), og fyldet er kun
                                 chippens flade. */

  /* Blaek. Rollerne er MAALT i MANIFEST.md §Paletten, ikke skoennet her. */
  --blaek:var(--p-gunmetal);           /* gunmetal - 12,72 : eloxgraa (maalt i manifestet) */
  --blaek2:var(--p-blaek-2);          /* blaek-2 - 5,68 : eloxgraa */
  --blaek3:var(--p-stoev-blaek);          /* stoev-blaek - 4,74 : eloxgraa. --blaek3 bruges i
                                 dag praecis der, "ikke oplyst" allerede staar
                                 (.v-ikke, .status--udgaaet), saa rollen matcher */

  /* DOM: ingen test og intet i MANIFEST binder --accent-ro til en vaerdi.
     TYPESKILT har ingen "rolig gul flade i hvile" - .valg--standard bruger
     transparent+kontur, ikke en gul tone. At give --accent-ro en gul tint
     ville bryde "gult bruges ALDRIG dekorativt" paa alle ni steder, den
     bruges (4 i system.css, 5 i generator.css), foer runde 2 har rettet
     brugsstederne. Saettes derfor til eloxgraa - samme dom som --panel-ro. */
  --accent:var(--p-afmaerkningsgul);          /* afmaerkningsgul - 9,19 (gunmetal PAA gul) */
  --accent-ro:var(--p-eloxgraa);

  --linje:var(--p-rille);           /* rille - "rillen mellem stansede felter. Haarstreger." */
  --hegn:var(--p-stoevgraa);            /* stoevgraa - KUN kontur. 2,14 : eloxgraa, maa
                                 ALDRIG baere tekst (se --paafod2 og --blaek3,
                                 som IKKE er stoevgraa, praecis derfor).
                                 SKAERPET af spor/tomstat: den maa heller ikke
                                 baere en OPLYSNING. 2,14 : 1 for KANTEN paa
                                 bunden er under WCAG 1.4.11's 3,0, saa en kant,
                                 der er den eneste baerer af en tilstand, skal
                                 bruge --hegn-baerende. --hegn bliver staaende
                                 uroert paa sine oevrige 40 brugssteder (efter
                                 spor/hegn2 4. sep 2026 rettede de to sidste
                                 baerende kanter, .stribe--intet og .typeskilt
                                 .maerke--tom): den er stadig den rigtige polet
                                 til en kontur, der kun afgraenser. Genmaal med
                                 grep -roE "var\(--hegn\)" assets/ --include=*.css | wc -l
                                 - denne ESCAPEDE form og dens uescapede udgave
                                 (fjern begge backslash'er foran parenteserne)
                                 giver begge 40 i dag. SKRIV ALDRIG den
                                 uescapede udgave bogstaveligt ind i DENNE
                                 kommentar: et tidligere udkast gjorde det, og
                                 saa taalte grep udkastets eget citat af
                                 moensteret med og gav 41 (selv-reference-
                                 faelden, CLAUDE.md's "raat grep i CSS: ogsaa
                                 klammer i kommentarer"). Se DESIGN.md konflikt 6. */
  --hegn-baerende:var(--p-stoevgraa-2); /* NY, spor/tomstat 4. sep 2026. Kanten, der
                                 SELV er oplysningen - i dag kun ".v-ikke" og
                                 dens 9x9 stiplede firkant. 3,43 : 1 for KANTEN
                                 #737F87 paa BUNDEN #E8EBED og 3,31 : 1 for
                                 KANTEN paa sit eget FYLD #E4E7EA; begge naboer
                                 over 1.4.11's 3,0. Regel: en kontur, der
                                 forsvinder uden at en oplysning forsvinder med
                                 den, bruger --hegn; ellers --hegn-baerende. */

  --fod:var(--p-gunmetal);             /* gunmetal ogsaa som moerk flade - "strimlens bund"
                                 i typeskilt.css er samme farve som blaekket */
  --paafod:var(--p-eloxgraa);          /* eloxgraa - lys tekst paa gunmetal-bund */
  --paafod2:var(--p-stoevgraa);         /* stoevgraa - 5,94 : gunmetal (MANIFEST: paa
                                 strimlens gunmetalbund BRUGES stoevgraa frit
                                 til tekst - modsat paa eloxgraa, se --hegn) */

  /* Nye TYPESKILT-roller uden et gammelt modstykke (briefets eksempler). */
  --stans:var(--p-stans);           /* lyskanten i en stansning, 1px indfaeldet */
  --stoev-blaek:var(--p-stoev-blaek);     /* samme vaerdi som --blaek3 - se ovenfor. Ny,
                                 tydeligt navngivet token til KOMMENDE kode
                                 (fx 3.6's SVG-maerker), der ikke skal gaette
                                 sig til, at --blaek3 er den rigtige */
  --ring:var(--blaek);                  /* DP1b: semantisk alias for fokusringen (12,72:1 paa lys flade) */

  /* Skrift. L79's soesterregel L80: der er TO skrifter paa sitet og ikke
     tre. Saira til maskinen, Literata til mennesket.

     HER STOD ET TREDJE TOKEN, --sans, og det var en fantomskrift. Det
     pegede paa en familie, der ikke havde én eneste fontfil paa disken
     (maalt: assets/fonts/ rummer 8 saira- og 2 literata-filer og NUL af
     den tredje). Skriftens navn staar i DESIGN.md's ## Konflikter, hvor
     historikken hoerer hjemme - det er med vilje ikke gentaget her, saa
     filen ikke selv holder et doedt navn i live.
     Stakken faldt derfor helt igennem til "Segoe UI".
     Tokenet stod paa body, saa konsekvensen var ikke lille: HVER
     overskrift og AL broedtekst paa sitet blev tegnet i operativsystemets
     standardskrift - mens den forrige kommentar her forsikrede, at det var
     "en gyldig, uskadt CSS-tilstand, ikke en fejl". Den var uskadt for
     CSS-parseren og forkert for enhver, der saa paa siden.

     De tre brugssteder (body, .sog input, .v-tekst) peger nu paa --mono.

     OM NAVNET --mono: det er historisk og passer ikke laengere til
     indholdet - tokenet er ikke en fastbredde-skrift, det ER maskinens
     skrift. Et navneskift beroerer 62 brugssteder og to tests, der kraever
     strengen `font-family:var(--mono)` ordret (31-pudsning.mjs og
     37-topbar.mjs 37.11), og det er ikke det, L80 beder om. Noteret som
     kandidat i DESIGN.md's ## Konflikter, ikke gjort her. */
  /* --mono: MANIFEST §"Hvorfor ingen skrivemaskineskrift" - paa et rigtigt
     typeskilt staar tallene i SAMME skrift som etiketterne. Tokenet
     beholdes (17 brugssteder i system.css alene, og
     tests/dele/31-pudsning.mjs:141-142 kraever ordret
     font-family:var(--mono)), men peges nu paa Saira i stedet for en
     fastbredde-stak. Tabulartal loeser justeringen - se
     font-variant-numeric:tabular-nums paa body nedenfor, som daekker ALLE
     --mono-brugssteder paa én gang uden at opsoege dem enkeltvis. */
  --mono:"SairaSemiCondensed",ui-sans-serif,system-ui,-apple-system,
         "Segoe UI Variable Text","Segoe UI","Helvetica Neue",Arial,sans-serif;

  /* --manual: MANUALEN. Literata blev selvhostet af spor/fundament (3.1,
     @font-face ovenfor), men fik aldrig et token - fundamentets egen note
     siger, at "runde 2 kobler kroppens tekstroller til Saira/Literata".
     Dette ER den kobling, og den er TILFOEJET, ikke en aendring: ingen
     eksisterende regel skifter skrift, fordi ingen brugte Literata foer nu.
     Katalogsidens prosa (ledetekster, noter, forbehold) er det foerste
     brugssted; MANIFEST "Skriftrollerne" saetter den ALDRIG som display. */
  --manual:"Literata",Georgia,"Times New Roman",serif;

  /* --- Skriftskala (R5, 4. sep 2026) ---------------------------------------
     Én samlet, harmoniseret skala for hele sitet (Operate og Read).
     Erstatter 29 spredte rene px-trin med en navngiven skala forankret i
     DESIGN.md: Hierarki, DP3b (14px Raekke) og DP3c (10.5px Skriftgulv). */

  /* Display og store overskrifter (flydende clamps) */
  /* --fs-hero, --fs-robot og --fs-display-titel ER FJERNET HER 9. sep 2026
     (L111, spor/h1-noegle). JPK, ordret: "Den stoerrelsen skal vaere
     konsistent paa tvaers af alle sider." Sitet bar fire h1-grader ved
     1440 px - 76 (Om os), 84 (robotnavnet), 46 (producent, sammenligning,
     404) og 44 (katalogets aabning) - og fem ved 390 px, fordi katalogets
     titel faldt til 20 px i en medieforespoergsel. Nu er der ÉN, og det er
     --fs-h1, som allerede hed "Sidetitler og H1-overskrifter".
     Tokens uden forbrugere er doedvaegt og faelder test 82.7, saa de tre er
     slettet frem for at staa tomme.

     GULVET ER HAEVET 27px -> 34px i samme rettelse, og det er selve prisen
     for én grad. Robotnavnet er en navneplade, der skal staa over skiltets
     noegletal; de er maalt til 22 px i browseren (ikke 29, som DESIGN.md og
     test 36.5's navn stadig siger). Ved 27 px foerte navnet knap nok - maalt
     ved 390 px paa /robotter/boston-dynamics-spot/. Ved 34 px foerer det med
     1,55 gange. Loftet 46 px er uroert.

     BEMAERK, at en selektor med sin klammeblok ER SKREVET UD AF denne
     kommentar med vilje, og det er et fund i sig selv: test 36.4 finder
     robotnavnets regel med et regex paa den RAA fil og tager FOERSTE traef.
     En kommentar, der citerer selektoren med klamme, staar tidligere i filen
     end reglen selv - og saa laeser testen kommentaren i stedet for koden og
     melder rødt paa en rigtig regel. Det skete 4. sep 2026. Enhver fremtidig
     kommentar her skal derfor undgaa moensteret `selektor{...}`, indtil
     testene stripper kommentarer foerst. */
  --fs-h1:clamp(34px,3.6vw,46px);          /* Sitets ENESTE h1-grad (L111) */
  --fs-h2:clamp(23px,2.8vw,34px);          /* Sektionsoverskrifter (H2) */
  --fs-display-stor:clamp(34px,4vw,52px);  /* Aarstempel (.aarstempel__tal) */
  /* --fs-display-tal ER SLETTET HER (spor/flader pas 2, 4. sep 2026).
     Den var clamp(26px,2.6vw,34px) med kommentaren "Store EU-fundtal", og
     EU-sektionen forsvandt med spor/prodpolish tidligere i dag. Maalt foer
     sletningen: `grep -rho "var(--fs-display-tal)" assets/*.css | wc -l` = 0,
     og tokenet blev brugt paa NUL af de seks flader ved 390 px. Ved 1440 px
     kolliderede den desuden med --fs-h2 paa praecis 34 px, saa to trin gjorde
     samme arbejde — den kollision er vaek nu. 21 trin bliver til 20. */
  --fs-display-lille:clamp(20px,2.1vw,27px); /* Kompakt display / pladetitler */

  /* Tabulaere figurtal og mellemoverskrifter */
  --fs-figur-l:38px;                       /* Store regnskabstal (Om-regnskab) */
  --fs-figur-m:30px;                       /* Mellemstore regnskabs- og noegletal */
  --fs-figur-s:22px;                       /* Noegletal / taellertal i stribe og katalog */
  --fs-h3:19px;                            /* H3 underoverskrifter og fremhaevede led */
  --fs-manual:18px;                        /* Literata manual-broed (Om os) */

  /* Tekstkrop, taette raekker og mikrotypografi */
  --fs-broed:17px;                         /* Standard broedtekst (body, .t-broed) */
  --fs-felt:16px;                          /* Inputfelter (iOS Safari zoom-sikring), modelnavne */
  --fs-lille:15px;                         /* Sekundaer tekst (.t-lille) */
  --fs-raekke:14px;                        /* DP3b (laast): Taet liste- og tabelraekke */
  --fs-mikro:13px;                         /* Kompakte noter, chips, tegnforklaring (.t-mikro) */
  --fs-etiket:11.5px;                      /* Versaletiketter, kildelister, metadata */
  --fs-data:11px;                          /* Datatilstande (.v-ikke, .v-billede) */
  --fs-gulv:11px;                          /* DP3c: Skriftgulvet (.v-nej, maerkater) loeftet til 11px kvalitetsgulv */

  /* Rum. Ottetalsskala — MED SIN EGEN FOD (spor/flader, pas 1, 4. sep 2026).
     SYSTEMREGEL, ikke en enkeltrettelse: skalaen havde 4 px granularitet
     hele vejen ned, men sitet er TAETTEST dernede. Chips, celler, mærker og
     datatilstande lever i spændet 2-16 px, og dér er 4 px et helt trin — så
     hver komponent fandt sin egen værdi udenom skalaen. Målt før dette pas:
     132 raa px-afstande fordelt paa 19 forskellige tal (1,2,3,4,5,5.5,6,7,
     8,9,10,11,12,13,14,16,18,22,30), hvoraf kun 4/8/12/16 laa PAA skalaen.

     Foden er skalaens egne halvtrin, ikke en ny familie: --r0 er --r1
     halveret, og --r1h/--r2h/--r3h ligger midt mellem de trin, de er
     opkaldt efter. 2 px-granularitet fra 2 til 16, 8 px derover:

       --r0 2 · --r1 4 · --r1h 6 · --r2 8 · --r2h 10 · --r3 12 · --r3h 14
       · --r4 16 · --r5 24 · --r6 32 · --r7 48 · --r8 64 · --r9 96

     De ni oprindelige trin har UAENDREDE vaerdier, saa ingen af de 227
     bestaaende var(--rN)-brug flytter sig en eneste pixel.

     impeccable/reference/layout.md siger det generelt: "A 4-unit base
     usually provides the useful middle steps that an 8-only scale misses."
     Her var 4 selv for groft i bunden. */
  --r0:2px;
  --r1:4px; --r1h:6px; --r2:8px; --r2h:10px; --r3:12px; --r3h:14px;
  --r4:16px; --r5:24px; --r6:32px;
  --r7:48px; --r8:64px; --r9:96px;
  --kant:clamp(16px,3.4vw,44px);   /* sidens ydre luft */
  --maal:68ch;                     /* broedtekstens maal */

  /* L78: maaltro-pladens sideforhold - IKKE en smagsvaerdi, men den ene
     halvdel af en maaleenhed. Den anden halvdel er
     tools/skabelon/side.mjs:1728's `PLADE_MM_HOEJ = PLADE_MM_BRED * 10/16`.
     Produktfotos er 4:3 uden undtagelse; pladen er ikke et foto, men en
     tegning i maalestok, og de to tal SKAL flytte sig sammen.
     tests/dele/61-extract.mjs laeser begge og fejler, hvis de skrider. */
  --plade-forhold:16/10;

  /* Form. L79: ÉT hjoerne, ikke en skala.
     JPK, 2. sep 2026: "der skal vaere konsistens i websiden" - derfor ét
     trin, ikke to. Stansningen vinder: 2 px er TYPESKILT's radius
     (MANIFEST §Layouttesen, "det stansede udtryk").

     Foer i dag levede to formsprog side om side: den bloede, tokeniserede
     treleddede skala (--rund 12, --rund-ind 8, --rund-lille 6) paa 31
     brugssteder, og en haardkodet 2px paa 26. Tre regler i §16b-2 ophaevede
     endda --rund tilbage til 2px, scopet under .typeskilt - altsaa
     rettede systemet allerede sig selv i haanden. De tre er slettet, fordi
     2 px NU er standarden og ikke laengere en undtagelse.

     NAVNET: --stans var det oplagte valg og er OPTAGET - det er en FARVE
     (lyskanten i en stansning, :root ovenfor). --hjoerne var ledigt.

     Alle 57 brugssteder (26 haardkodede + 31 tokeniserede) peger nu her;
     54 staar tilbage, efter at tre selvophaevende regler er slettet.

     TO ting er IKKE hjoerner og beholder derfor deres egen vaerdi:
     en radius paa nul er en anden PAASTAND end "systemets hjoerne" (fx de
     to sekundaere kildemaerker, der skal vaere klammer - 31-pudsning.mjs
     31.14), og 99px-pillen paa kontakt, rullebjaelke og prik er en fuldt
     afrundet ENDE, ikke et hjoerne.

     Bemaerk for den naeste, der skriver her: 31-pudsning.mjs' radius-vagt
     laeser filen UDEN at fjerne kommentarer foerst, saa selve teksten
     "border-" + "radius:" i en kommentar taeller med som en erklaering.
     Derfor er ordene ovenfor skrevet i prosa i stedet for som kode. */
  --hjoerne:2px;

  /* Dybde. TYPESKILT §Layouttesen: "Ingen slagskygge findes paa siden" -
     materiale, ikke skeuomorf teater. Tokenerne bevares (11 brugssteder:
     5 i system.css, 6 i generator.css - se rapporten), men saettes til
     none, saa hvert brugssted holder op med at tegne skygge uden at skulle
     opsoeges enkeltvis. Runde 2 kan fjerne tokenerne helt, naar ingen
     brugssteder er tilbage at bryde. */
  --skygge:none;
  --skygge-loeft:none;

  /* Bevaegelse. Eksponentiel udgang fra en allerede synlig tilstand. */
  --slyng:cubic-bezier(.16,1,.3,1);
  --tid:.42s;
}

/* --- 3. Grund ------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scrollbar-color:var(--hegn) var(--bund)}
body{
  margin:0;background:var(--bund);color:var(--blaek);
  /* L80: sat EKSPLICIT og til en skrift, der findes paa disken. Det var
     denne ene erklaering, der sendte hele sitet i Segoe UI. */
  font-family:var(--mono);font-size:var(--fs-broed);line-height:1.55;
  font-weight:400;letter-spacing:-.006em;
  -webkit-font-smoothing:antialiased;
  /* 3.4: daekker alle var(--mono)-brugssteder paa én gang, jf. kommentaren
     ved --mono i :root. Arves ned gennem hele siden (font-variant-numeric
     er en nedarvet egenskab), saa intet af de 17 brugssteder skal roeres. */
  font-variant-numeric:tabular-nums;
}
/* L80, BEVIDST VALG: h1-h4 saetter INGEN font-family og arver body's Saira.
   Overvejet og fravalgt at saette den eksplicit. Grunden er, at det ikke
   ville have forhindret den fejl, L80 retter: overskrifterne stod i Segoe
   UI, fordi BODY's token var en fantomskrift - en eksplicit erklaering her
   ville have arvet det samme token eller gentaget det, altsaa vaeret lige
   saa forkert. Duplikatet koeber ingen sikkerhed, og det er netop den slags
   gentagelse, dette spor er sat i verden for at fjerne. Én kilde til
   sidens skrift: body. */
h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.08;letter-spacing:-.022em;text-wrap:balance}
p,dl,dd,dt,ul,ol,figure,blockquote{margin:0}
ul,ol{padding:0;list-style:none}
img,svg{max-width:100%;display:block}
b,strong{font-weight:700}

/* Browserfladerne baerer ogsaa designet. */
/* L76: tekst PAA accent er ALTID --blaek, aldrig hvid. Maalt (kontrol
   sort/hvid = 21,00): hvid paa accent 1,66 : 1, --blaek paa accent 9,19 : 1.
   ::selection er den mest oversete af de syv brugssteder, fordi den kun ses
   i det oejeblik nogen markerer tekst - og derfor aldrig paa et skaermbillede. */
::selection{background:var(--accent);color:var(--blaek)}
/* accent-color er den sidste utegnede browserflade. VAER PRAECIS OM, HVAD DEN
   GOER: maalt 28. aug 2026 tegner browseren i dag NUL kontroller selv - alle
   220 afkrydsningsfelter og radioer i bygget (214 checkbox, 6 radio) staar
   1x1 px med opacity:0, fordi chippen ER etiketten, og der findes hverken
   <progress>, <select> eller type="range" paa nogen side. Erklaeringen
   flytter altsaa ingen pixel i dag. Den staar her, fordi den ellers foerst
   bliver opdaget den dag, nogen tilfoejer en kontrol, der TEGNES - og saa i
   form af et blaat felt, ingen har valgt. En flade, man ikke har tegnet,
   baerer stadig designet. */
:root{caret-color:var(--accent);accent-color:var(--accent)}
/* L76: --accent er BAGGRUND og MARKOER, aldrig tekst paa en lys flade.
   Linkets farve var accent: 1,38 : 1 mod --bund og 1,60 : 1 mod --panel,
   paa 7.892 <a>-elementer over 216 sider. Kravet er 4,5.
   Linket er nu --blaek (12,72 : 1) og baerer sin rolle paa UNDERSTREGNINGEN
   i stedet for paa farven - understregning er en af de fire former, L76
   udtrykkeligt tillader accent i paa lys flade (baggrund, kant,
   understregning, fokusring).
   Accent flytter til hover og fokus som understregningens FARVE, ikke som
   tekstens: en gul tekstfarve paa hover ville vaere DAARLIGERE end hvile
   (1,38 mod 12,72), altsaa det stik modsatte af hensigten. Tykkelsen goer
   arbejdet for den, der ikke ser farve. */
a{color:var(--blaek);text-decoration-thickness:1.5px;text-underline-offset:3px}
a:hover{text-decoration-thickness:2.5px;text-decoration-color:var(--accent)}
/* Fokusringen paa et element uden egen radius. Maalt paa fire sider: hvert
   eneste element, den rammer, er gennemsigtigt (prosalink, kildemaerke,
   .url, summary), saa kun ringens FORM skifter.
   L79: her stod foer 6 px med begrundelsen "samme familie som chippens ring
   (6) og knappens (8)". Den familie findes ikke laengere - der er ét
   hjoerne, og ringen deler det med alt andet. Begrundelsen er altsaa ikke
   faldet vaek; den er blevet triviel, hvilket var hele meningen med L79.
   Springlinket beholder sin egen form: `.spring` staar senere i filen med
   samme specificitet og vinder. */
:focus-visible{outline:3px solid var(--ring);outline-offset:3px;
  border-radius:var(--hjoerne)}
.sidefod,.klaebebar{--ring:var(--accent)}
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-track{background:var(--bund)}
::-webkit-scrollbar-thumb{background:var(--hegn);border:3px solid var(--bund);border-radius:99px}

.kunskaerm{position:absolute!important;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

.spring{position:absolute;left:-9999px;top:0;z-index:99;background:var(--blaek);
  color:var(--stans);padding:var(--r3h) var(--r4);font-family:var(--mono);font-size:var(--fs-raekke);
  text-decoration:none;border-radius:0 0 var(--hjoerne) 0}
.spring:focus{left:0;top:0}

.rum{max-width:1440px;margin:0 auto;padding-inline:var(--kant)}
.maal{max-width:var(--maal)}

/* --- 4. Typografi ---------------------------------------------------------
   Skalaen blev haevet 21.08.2026. Den gamle gik 56 / 42 / 30 / 19 / 17 og lod
   forsiden flyde sammen: mellem hero og sektionshoved var der 26 px, og mellem
   sektionshoved og kortnavn 8. Trinnene er nu store nok til at ses uden at
   sammenligne to overskrifter ved siden af hinanden.
   Ved 1440 px: 76 / 46 / 34 / 19 / 17 / 15 / 13 / 11,5 — forhold 1,65, 1,35,
   1,79, 1,12, 1,13, 1,15, 1,13. Gulvet paa 10,5 px er uroert.

   VAEGTEN ER 700, IKKE 800 (rettet 31. aug 2026, spor/kort). Saira Semi
   Condensed selvhostes i 400/500/600/700 (afsnit 1) — 800 findes ikke i
   filerne, saa browseren SYNTETISERER den ved at fortykke 700'eren, og
   stregen bliver ujaevn i netop de store grader, hero'en bruger. Maalt paa
   forsiden foer rettelsen: computed font-weight 800, mens document.fonts
   kun rummer 400/500/600/700 — ingen 800-fil at ramme.

   Det her var den FJERDE forekomst af samme fejl. Robotsidens skilt og rodens
   sprogvaelger var allerede rettet hver for sig, med hver sin kopi af
   begrundelsen; .t-hero stod tilbage og ramte 206 sider. Rettet paa skalaen i
   stedet for paa den femte flade.

   .t-hero ER FJERNET 9. sep 2026 (L111, spor/h1-noegle). JPK, ordret: "Den
   stoerrelsen skal vaere konsistent paa tvaers af alle sider." Klassen var
   sitets femte h1-grad; nu er der én, og den hedder .t-h1. Vaegten 700 er
   ikke gaaet tabt med klassen - h1 er fed i browserens egen stilart, og
   robotskiltets egen regel skriver den ud - linje 478 saetter font-weight:700
   og line-height:1.08 paa h1 til h4, og den regel er uroert. */
.t-h1{font-size:var(--fs-h1);letter-spacing:-.03em}
.t-h2{font-size:var(--fs-h2);letter-spacing:-.026em}
.t-h3{font-size:var(--fs-h3);letter-spacing:-.014em}
.t-broed{font-size:var(--fs-broed);line-height:1.6;color:var(--blaek2)}
.t-lille{font-size:var(--fs-lille);line-height:1.55;color:var(--blaek2)}
.t-mikro{font-size:var(--fs-mikro);line-height:1.5;color:var(--blaek3)}

/* Den lille versaletiket. Fra ORBIT — men KUN som funktionel etiket, der
   navngiver en datagruppe eller en enhed. ALDRIG som indholdstom optakt
   over en overskrift ("BUILT FOR THE FUTURE"). Se system.html, afsnit 2. */
.etiket{
  display:block;font-family:var(--mono);font-size:var(--fs-etiket);font-weight:500;
  letter-spacing:.15em;text-transform:uppercase;color:var(--blaek3);
  line-height:1.3;
}
.etiket--blaek{color:var(--blaek)}

/* --- Gyldighedsmaerket (D18 · C · ETIKET) ---------------------------------
   Maerket rider paa FELTNAVNET, aldrig paa vaerdien. A · KANT blev fravalgt,
   fordi den lagde indrykket paa selve talcellen og dermed skubbede de
   maerkede tal ud af talkolonnen; feltlisten er et to-kolonne-gitter, hvor
   vaerdikolonnen begynder paa samme x i hver raekke.

   Det siger: "dette felts forbehold paavirker sammenligneligheden". Kun de
   259 gyldigheds-forbehold faar det. De 303 uddybninger og de 328
   uklassificerede faar det ikke — maerkes alle 890, betyder maerket intet.

   INGEN NY FARVE: --hegn er den polet, systemet allerede kalder
   "BETYDNINGSBAERENDE kant" (3,68 : hvid · 3,32 : bund, begge over WCAG
   1.4.11's 3,0 for ikke-tekst). INGEN NY KULOER: --hegn er neutral graa, og
   maerket er en STREG — en form, ikke et fyld — saa det baerer ikke farve
   alene. INGEN NY GLYF: de fire datatilstande bruger allerede tre 9x9-marker,
   og en femte lille figur kunne ikke skelnes fra dem. En streg kan.

   2 px og HELT, aldrig stiplet: stiplet er hullets og den sekundaere kildes
   sprog (.v-ikke, .kildemaerke--sek), og et tredje stiplet tegn ville smelte
   sammen med dem. */
.etiket.m-etiket{
  color:var(--blaek);position:relative;padding-left:var(--r3h);
}
.etiket.m-etiket::before{
  content:"";position:absolute;left:0;top:.12em;bottom:.12em;
  width:2px;background:var(--hegn);
}

/* Paa det kompakte kort staar etiketten i en smal kanal ved siden af ikonet.
   Med robotsidens indryk satte marken sig MELLEM ikon og navn og laeste som
   et lodret streg-TEGN i teksten frem for som en mark. Her faar den luft nok
   til at staa for sig selv. */
.stribe--kompakt .etiket.m-etiket{padding-left:var(--r2);margin-left:1px}
.stribe--kompakt .etiket.m-etiket::before{top:.05em;bottom:.05em}

/* Tal saettes i mono med tabulaere cifre, saa kolonner flugter. */
.figur{font-family:var(--mono);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}

/* TYPESKILT-primitiv (3.5, spor/fundament): den stansede kant. 2px radius,
   1px indfaeldet kant i --linje (=rille), hvid lyskant foroven (--stans).
   Materiale, ikke skeuomorf teater - MANIFEST §Layouttesen: "Ingen
   slagskygge findes paa siden". Kilde: retninger/nyverden/typeskilt.css
   .stans, tilpasset til systemets EGNE tokens (var(--linje) i stedet for
   comp'ens loesrevne var(--rille), som ikke findes her). Genbrugelig paa
   ethvert kort/felt, runde 2 bygger. Navngivet UDEN et parallelt
   "pladen"-primitiv: .plade findes allerede (linje ~920, .intetfoto .plade
   - en 52px dashed ikon-plads), og at genbruge navnet til noget andet
   ville have skabt to modstridende betydninger af samme klasse. */
.stans{
  border-radius:var(--hjoerne);
  box-shadow:inset 0 0 0 1px var(--linje), inset 0 1px 0 var(--stans);
}

/* --- 6. Daekket oeverst --------------------------------------------------- */
/* TYPESKILT-daekket (spor/topbar, 31. aug 2026). Erstatter `.baand`, som var
   L18's neutrale pladsholder fra 21. aug. Formen er comp'ens
   (retninger/nyverden/katalog.html + typeskilt.css, afsnit 4), men skrevet om
   til systemets EGNE tokens - samme greb som spor/fundament brugte paa
   `.stans`: comp'en er en fritstaaende fil med loesrevne variabler
   (--rille, --gunmetal, --eloxgraa), og de findes ikke her. Oversaettelsen er
   ikke et skoen: den staar allerede i :root's kommentar (linje ~89-96), hvor
   spor/fundament kortlagde comp'ens palet til systemets navne.

   FIRE STEDER ER COMP'EN BEVIDST IKKE FULGT, og hvert af dem koster noget,
   hvis det rulles tilbage:

   1. MAALET. Comp'en saetter `max-width:1320px;padding:0 24px` paa
      `.daek__ramme`. Sidens egne sektioner staar i `.rum` (1440 px,
      `--kant`-gutter, der vokser med skaermen). To forskellige maal betyder,
      at ordmaerket IKKE flugter med overskriften under det paa nogen af de
      213 sider. Derfor baerer elementet BEGGE klasser - `.rum` giver maal og
      gutter, `.daek__ramme` giver kun raekken - og flugten kan ikke drive
      fra hinanden, fordi den ikke er skrevet to steder.

   2. TRYKFLADEN. Comp'ens navigationslaenke er ren tekst med
      `padding-bottom:3px` - ca. 20 px hoej. Sidens gulv er 44 px (vagt
      31.12, maalt ind 28. aug). Laenken faar derfor `min-height:44px`, og
      understregningen tegnes af `::after` UNDER TEKSTEN i stedet for som en
      `border-bottom` paa 44 px-kassens underkant. Comp'ens udseende, sidens
      trykflade. En `border-bottom` ville have lagt maerket 12 px under
      ordet, hvor det laeser som en loesrevet streg.

   3. BASISLINJEN. Comp'ens `.daek__ramme` staar paa `align-items:baseline`.
      Rullesporet (punkt 4) goer `.daek__nav` til en scroll container, og en
      scroll containers basislinje er IKKE dens indholds basislinje - den
      synthesiseres fra kassens underkant. Baseline-flugt ville derfor
      braekke i samme oejeblik sporet blev lagt ind. Raekken staar paa
      `center`; ordmaerket og stemplet beholder deres indbyrdes basislinje i
      `.daek__mark`, hvor der ingen scroll container er.

   4. RULLESPORET. Comp'en har fire punkter og ingen overflow. L58 lagde
      Nyheder, Services og Om os TIL de bestaaende fire, saa raekken ender
      paa syv, naar de tre sider findes. De to ting, et rullespor koster,
      er begge tastaturfejl og begge usynlige paa et skud - de er maalt
      28. aug 2026 og staar uaendret her, fordi mekanismen er den samme:

      a. `scroll-padding-inline`. Blink ruller KUN et fokuseret element frem,
         naar det ligger HELT uden for rulleporten - 17 px synligt regnes som
         synligt nok. Maalt: en tastaturbruger, der naaede den sidste laenke
         ved 390 px, fik den staaende paa 17 af 76 px, og sporet blev paa
         scrollLeft 0. Rullefyldet skubber laenken ud af den "optimale
         visningszone", saa browseren beslutter at rulle.
      b. `outline-offset:-3px`. `overflow-x:auto` klipper ogsaa fokusringen -
         OGSAA ved 1440 px, hvor der intet er at rulle, for en overflow-boks
         klipper uanset om den ruller. Ringen tegnes derfor INDE i laenken.

   FLADEN: comp'ens `.daek` har ingen baggrund. Daekket ER pladen (--bund,
   eloxgraa), ikke en lysere krombjaelke ovenpaa den; kun haarstregen skiller
   det fra indholdet. `.baand` stod paa `--panel` og laeste som en separat
   etage. Det er comp'ens valg, ikke en forglemmelse - MANIFEST'ens
   layouttese er faerre streger, ikke flere flader.

   SKRIFTEN: hele daekket saettes i `--mono` (SairaSemiCondensed, "Pladen").
   Comp'ens body-skrift ER Saira; sidens er stadig `--sans`. Uden dette
   staar topbaren i en anden skrift end den comp, den er bygget efter. */
.daek{
  font-family:var(--mono);border-bottom:1px solid var(--linje);
  position:relative;z-index:5;
}
.daek__ramme{display:flex;align-items:center;gap:4px var(--r5);padding-block:var(--r2)}

/* .daek__mark bar indtil 9. sep 2026 ET PAR: ordmaerket og et stempel med
   teksten "working title". Stemplet er vaek med L112 - navnet er besluttet -
   men beholderen bliver: den baerer basislinjen og braekket, og en flex-boks
   med ét barn er ikke en fejl. */
.daek__mark{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px var(--r2);flex-shrink:0}
.daek__navn{
  font-size:var(--fs-raekke);font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  text-decoration:none;color:var(--blaek);white-space:nowrap;
}
.daek__navn:hover{color:var(--blaek2)}

/* HER STOD .daek__stempel - maerket "WORKING TITLE" ved siden af ordmaerket.
   FJERNET 9. sep 2026 (L112). JPK, ordret: "embodied.guide bliver domaene
   navnet. taenker at de kan erstatte placeholderen." Stemplet var den aabne
   navnebeslutning gjort synlig (PRODUCT.md, Brand Commitments); da
   beslutningen faldt, var maerket ikke laengere sandt, og en regel for en
   klasse, ingen side skriver, er doed vaegt, som test 57 faelder.

   DET, DER BLEV LAERT, OG SOM GAELDER NAESTE MAERKE I CHROMEN: to former var
   fravalgt, og begge af en grund. Den ene var en STIPLET ramme - stiplet er i
   dette designsystem "ikke oplyst"-tilstandens eget sprog (.v-ikke,
   .kildemaerke--sek), og to betydninger paa ét tegn er en, ingen kan laese.
   Den anden var comp'ens gule flade: daekket er MONOKROMT, gult optraeder
   foerst laengere nede, hvor det betyder "her", og et permanent gult felt i
   chromen paa alle sider bruger sidens ENESTE kuloer paa noget, der aldrig
   skifter. Maerket stod derfor i det neutrale register, --blaek3, 4,74:1 mod
   pladen. .stans - den stansede kant - staar uroert og bruges andre steder. */

.daek__nav{
  margin-left:auto;min-width:0;
  overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;
  scroll-padding-inline:var(--r9);
}
.daek__nav::-webkit-scrollbar{display:none}
.daek__nav>ul{display:flex;flex-wrap:nowrap;gap:var(--r5);list-style:none;margin:0;padding:0}
.daek__nav li{flex:0 0 auto}
.daek__nav a{
  position:relative;display:inline-flex;align-items:center;min-height:44px;
  color:var(--blaek2);text-decoration:none;font-size:var(--fs-raekke);font-weight:500;
  letter-spacing:.05em;white-space:nowrap;
}
/* Understregningen sidder under TEKSTEN, ikke under 44 px-kassen: 50 % er
   linjens midte, +.3em er basislinjen (Sairas ascent/descent centreret i
   linjeboksen), +3px er comp'ens eget spring fra basislinje til streg. */
.daek__nav a::after{
  content:"";position:absolute;left:0;right:0;top:calc(50% + .3em + 3px);
  height:2px;background:transparent;
}
.daek__nav a:hover{color:var(--blaek)}
.daek__nav a:hover::after{background:var(--accent)}
.daek__nav a[aria-current]{color:var(--blaek)}
.daek__nav a[aria-current]::after{background:var(--blaek)}
.daek__nav a:focus-visible{outline-offset:-3px}

/* SPROGSKIFTERENS SEKS REGLER ER FJERNET HER (spor/topbar, 2. sep 2026,
   JPK: "Desuden skal DA/ENG knappen vaek") sammen med deres markup i
   side.mjs, saa der staar hverken doed CSS eller ustylet markup tilbage.
   Hvilke regler det var, og hvorfor skraastregens egen regel fulgte med
   selvom briefet ikke naevnte den, staar i sporets commit-besked ved siden
   af diffen - KLASSENAVNENE SKRIVES BEVIDST IKKE HER, fordi sporets
   acceptkriterium er et grep paa dem, og en kommentar, der naevner dem,
   ville faa kriteriet til at maale sin egen forklaring. Samme greb som
   side.mjs' begrundelse for ikke at efterlade en HTML-kommentar, hvor
   sidefoden stod. */

/* Under 420 px (systemets eget kompakt-brudpunkt) er ordmaerke, stempel og
   navigationslaenker tilsammen bredere end skaermen. Navigationen faar sin
   egen raekke - præcis som comp'ens eget brudpunkt goer det ved 720 px - og
   bliver dér ét spor, der kan rulles. ÉT SPOR, ALDRIG TO RAEKKER:
   `flex-wrap:nowrap` paa listen staar UDEN FOR brudpunktet, fordi braekket
   ikke hoerer til én bredde.

   STEMPLET STABLEDES UNDER ORDMAERKET, og det var en MAALING, ikke en
   smagssag: med stemplet paa ordmaerkets linje var `.daek__mark` 306 px bred
   mod 343 px raadighed ved 390 px; stablet var den 168 px. Maalingen blev
   oprindeligt skrevet med sprogskifterens 62 px som den anden halvdel af
   regnestykket - den er vaek nu, og stemplet er ogsaa vaek med L112
   (9. sep 2026). BRUDDET BLIVER: enhedspillen (.daek__enhed, 300 px ved
   1440) staar paa de sider, hvor der er en kontakt at vise, og
   `flex-direction:column` paa en beholder med ét barn koster ingenting.
   Se sporets egen maaling ved 390 px i fund/arkiv/2026-09/FUND-topbar.md.

   Skifterens egen `margin-left:auto` stod ogsaa her og er fjernet med den.
   Hoejrestillingen paa foerste raekke baeres nu af `.daek__enhed`s egen
   auto-margen (spor/oversigt-blokken, sidst i filen). */
@media (max-width:768px){
  .daek__ramme{flex-wrap:wrap}
  .daek__mark{flex-direction:column;align-items:flex-start}
  .daek__nav{width:100%;margin-left:0;order:3}
  .daek__nav>ul{gap:var(--r4)}
}

/* --- 8. De fire datatilstande --------------------------------------------- */
/* Reglen, hele kataloget hviler paa: "ikke oplyst", "nej", "0" og
   "kun vist paa billede" er FIRE forskellige ting. De deler ikke
   skriftstoerrelse, ikke bogstavform, ikke flade og ikke maerke. */
.v{font-family:var(--mono);font-variant-numeric:tabular-nums;line-height:1.2;
  display:inline-flex;align-items:baseline;gap:.34em;flex-wrap:wrap}

/* TAL — den eneste tilstand med stor, fed, moerk figur. */
.v-tal{color:var(--blaek)}
/* GRADERNE HAR ET GULV, praecis som kildemaerket (afsnit 9). Samme sygdom,
   samme kur: en em-andel af en foraelder, der selv kan skrumpe, ender under
   det, en skaerm kan saette et bogstav paa. Maalt 28. aug 2026 paa kataloget
   FOER gulvet: .enhed ned til 5,70 px og .op ned til 6,00 px ved 390 px,
   6,46/6,80 px ved 1440 — mens den samme .enhed staar paa 8,40 px i cellen
   ved siden af. Det er ikke en grad, det er en fejl i kaskaden.
   max() goer gulvet uafhaengigt af arven og lader graden vokse med figuren
   dér, hvor figuren er stor: paa forsidens store tal staar enheden stadig paa
   .56em, saa rangordenen — enheden markant mindre end tallet — er uroert dér,
   hvor der ER en figur at vaere mindre end. */
.v-tal .op{font-size:max(8px,.72em);font-weight:500;color:var(--blaek3);letter-spacing:0}
.v-tal .num{font-size:1em;font-weight:700;letter-spacing:-.02em}
.v-tal .enhed{font-size:max(8px,.56em);font-weight:500;color:var(--blaek2);letter-spacing:.02em}

/* NUL — ET TAL. Saettes praecis som ethvert andet tal, saa det aldrig kan
   forveksles med et hul. Faar ingen daempning, ingen stiplet kant. */
.v-nul{color:var(--blaek)}

/* NEJ — et SVAR. Versaler, spatieret, udfyldt firkant. Fuld blaek.
   FAST SATS (spor/samlvaelg): var .62em. Se noten ved .v-ikke nedenfor —
   em'en lod satsen svinge med den arvede skrift, og 10,5 px er den vaerdi,
   afsnit 14b allerede havde bestemt for netop denne tilstand. */
.v-nej{font-size:var(--fs-gulv);font-weight:700;text-transform:uppercase;letter-spacing:.13em;
  color:var(--blaek)}
.v-nej .mrk{width:9px;height:9px;background:var(--blaek);flex:none;align-self:center}

/* JA — samme vaegt som NEJ, aaben firkant med fyldt kerne.
   FAST SATS (L101, Konflikt 9 afgjort): var .62em. Deler nu --fs-gulv med
   .v-nej, saa tilstandsfamilien hviler paa to faste tokens:
   svar (.v-nej, .v-ja) i --fs-gulv (10,5 px), metadata (.v-ikke, .v-billede)
   i --fs-data (11 px). Ingen tilstand svinger med arvet skrift. */
.v-ja{font-size:var(--fs-gulv);font-weight:700;text-transform:uppercase;letter-spacing:.13em;
  color:var(--blaek)}
.v-ja .mrk{width:9px;height:9px;flex:none;align-self:center;
  background:var(--blaek);box-shadow:inset 0 0 0 2px var(--panel),inset 0 0 0 3px var(--blaek)}

/* IKKE OPLYST — et HUL. Minuskler, lille, daempet flade, stiplet hegn.
   Aldrig usynligt, aldrig lige saa stort som et tal.

   FAST SATS OG OMREGNETS KASSE (spor/samlvaelg). JPK: "'NOT STATED' font og
   kasse er for stort. Brug samme format som 'CONVERTED'."

   AARSAGEN VAR `em`. Satsen var .46em og svingede derfor med den arvede
   skrift, mens .omregnet (linje ~1660) er laast til 9 px. Maalt paa
   /en/sammenligning/ foer aendringen:
       .v-ikke i matricen   16 px      .omregnet   9 px
       .v-ikke i laesenoeglen 7,82 px  (under sitets eget 8 px-gulv)
   Samme chip stod altsaa i to stoerrelser med en faktor 2 imellem, paa
   samme side. Kassen fulgte med: 3px 9px 4px og 6 px radius mod
   .omregnets 1px 5px og 2 px.

   KASSEN er nu .omregnets: samme padding, samme radius, samme stiplede
   hegn. SATSEN er 11 px, ikke .omregnets 9 px - det er en bevidst afvigelse
   fra en bogstavelig laesning af "samme format", og begrundelsen er, at
   afsnit 14b allerede havde bestemt 11 px for netop denne tilstand i
   .raekke/td, og holder et gulv paa 10,5 px. Katalogsiden og robotsiden
   staar allerede i 11 px; 9 px ville have flyttet DEM i stedet, og et hul
   er en VAERDI (det staar hvor et tal skulle staa), mens "omregnet" er en
   fodnote paa et tal. Se den maalte tabel i commit-beskeden.

   DEN BEVIDST BEVAREDE FORSKEL TIL .omregnet er det 9x9 px STIPLEDE
   KVADRAT (.mrk nedenfor). Hvorfor netop det, og ikke vaegt eller farve:
   det er STRUKTURELT, ikke typografisk, saa det overlever enhver
   skriftstoerrelse, ethvert zoom og ethvert sprog, og det ses ogsaa af en
   laeser, der ikke kan skelne 9 fra 11 px. Vigtigere: kvadratet er sitets
   TRE-TILSTANDS-ALFABET - .v-nej har et FYLDT kvadrat, .v-ja et aabent med
   fyldt kerne, .v-ikke et STIPLET. Sloejfede man det, ville haard
   begraensning 5 briste mellem de tre tilstande indbyrdes, ikke bare mellem
   "ikke oplyst" og "omregnet". Og .omregnet kan aldrig faa et: det er en
   fodnote paa et tal, ikke et svar.
   Sekundaert bevaret: minuskler (mod .omregnets versaler) og den daempede
   flade (mod .omregnets gennemsigtige).

   R8, spor/tomstat 4. sep 2026: KANTEN ER NU DEN, DER BAERER TILSTANDEN,
   og den har faaet sin egen polet, --hegn-baerende.

   Hvad der var galt: chippens fyld var --tom, sidens flade var --bund, og
   BEGGE pegede paa den samme primitiv - 1,00 : 1 for FYLDET paa BUNDEN.
   Paa --panel-flader kunne man se chippen, fordi panelet er lysere end
   fyldet; paa alle --bund-flader (producentsiden, katalogets flader) kunne
   man ikke. Hele tilstanden hvilede saa paa en stiplet --hegn-kant paa
   2,14 : 1 for KANTEN paa BUNDEN, under WCAG 1.4.11's 3,0. Det er haard
   begraensning 5, der brister: "ikke oplyst" saa ud som ingenting.

   Hvorfor rettelsen ligger i KANTEN og ikke i fyldet: fordi fyldet ikke KAN
   rettes. Maalt (fund/arkiv/2026-09/maal-vikke-kontrast.mjs): skal ordet holde 4,50 : 1
   PAA sit eget fyld, kan fyldet hoejst naa 1,05 : 1 mod bunden med --blaek3,
   1,26 med --blaek2 og 2,83 selv med palettens moerkeste --blaek. Et fyld,
   der bestaar 1.4.11, goer ordet ulaeseligt. Tilstanden ville blive synlig
   som firkant og forsvinde som ord.

   Efter rettelsen, med laeseretningen skrevet ud hver gang:
     KANTEN #737F87 paa BUNDEN #E8EBED         3,43 : 1   (var 2,14)
     KANTEN #737F87 paa sit eget FYLD #E4E7EA  3,31 : 1
     9x9-firkantens KANT paa FYLDET            3,31 : 1
     ORDET #5F686F paa FYLDET #E4E7EA          4,58 : 1   (var 4,74)
     FYLDET #E4E7EA paa BUNDEN #E8EBED         1,04 : 1   (var 1,00)

   Ordet taber 0,16 og bliver over kravet; kanten vinder 1,29 og kommer over
   det. Chippen er stadig den STILLESTE af de tre tilstande: .v-nej har et
   FYLDT kvadrat i --blaek (12,72 : 1), .v-ja et aabent med fyldt kerne, og
   .v-ikke's stiplede kant paa 3,43 er bevidst holdt lysere end selve ordet
   (4,74 : bund), saa konturen ikke konkurrerer med teksten.

   .mrk beholder --hegn-baerende af samme grund som kassen: 9x9-firkanten
   ER tre-tilstands-alfabetets bogstav, ikke en dekoration. En kontur, der
   forsvinder uden at en oplysning forsvinder med den, bruger --hegn. */
.v-ikke{font-size:var(--fs-data);font-weight:500;letter-spacing:.01em;color:var(--blaek3);
  background:var(--tom);border:1px dashed var(--hegn-baerende);border-radius:var(--hjoerne);
  padding:1px 5px;align-items:center}
.v-ikke .mrk{width:9px;height:9px;border:1px dashed var(--hegn-baerende);flex:none}

/* KUN VIST PAA BILLEDE — fjerde tilstand. Halvt fyldt firkant, kursiveret
   ord, ingen daempet flade: oplysningen FINDES, den staar bare ikke skrevet. */
/* FAST SATS (spor/samlvaelg), samme aarsag og samme vaerdi som .v-ikke:
   de to er samme familie og staar i 11 px i .raekke/td i forvejen. */
.v-billede{font-size:var(--fs-data);font-weight:500;color:var(--blaek2);align-items:center}
.v-billede .ord{font-style:italic}
.v-billede .mrk{width:9px;height:9px;flex:none;border:1px solid var(--blaek2);
  background:linear-gradient(90deg,var(--blaek2) 0 50%,transparent 50%)}

/* --- tilstandene i sammenligningsmatricen (spor/samlvaelg) ----------------
   Den faste sats ovenfor er ikke nok i matricen, og det er en kaskadesag,
   ikke en smagssag. generator.css:719 saetter

       .saml-raekke__celle .v{font-size:var(--fs-felt)}

   som er TO klasser (0,0,2,0) og dermed slaar baade tilstandenes egne regler
   (0,0,1,0) OG afsnit 14b's `td .v-ikke{font-size:var(--fs-data)}` (0,0,1,1) - og
   generator.css indlaeses EFTER system.css, saa selv et uafgjort ville tabe.
   Alle fire tilstande arvede derfor 16 px: praecis samme sats som tallet.

   MAALT paa /en/sammenligning/ foer rettelsen:
       .v-tal 16 px (83 stk) · .v-ikke 16 px (21) · .v-ja 16 px (4)
   Et hul, et ja og et maalt tal saa altsaa ud som tre lige tunge ting i
   samme tabel. Det er haard begraensning 5's fejltilstand, ikke kun JPK's
   "for stort" - og det er samme fejl, afsnit 14b beskriver og loeser ét lag
   laengere nede, og som generator.css:947 allerede loeser paa robotsiden med
   `:not(...)`.

   Reglerne her genindsaetter 14b's EGNE vaerdier (11 px / 10,5 px) med
   (0,0,2,1) - ét element mere end den generiske regel. Ingen nye tal er
   opfundet, og .v-tal beholder sine 16 px, for VAERDIEN skal vaere stoerst.

   .v-ja staar med, selv om den ikke var naevnt i mit filejerskab: den deler
   basisregel og udseende med .v-nej, og at rette den ene og lade den anden
   staa i 16 px ville have set ud som en fejl i stedet for en rettelse.
   Kun matrix-satsen roeres - .v-ja's egen regel er uroert. */
td.saml-raekke__celle .v-ikke,
td.saml-raekke__celle .v-billede{font-size:var(--fs-data)}
td.saml-raekke__celle .v-nej,
td.saml-raekke__celle .v-ja{font-size:var(--fs-gulv)}

/* Lastbetingelse og andre forbehold haenger paa vaerdien, ikke ved siden af. */
.forbehold{font-family:var(--mono);font-size:var(--fs-data);font-weight:500;color:var(--blaek3);
  border:1px solid var(--hegn-baerende);border-radius:var(--hjoerne);padding:1px var(--r1h) var(--r0);
  letter-spacing:.02em;cursor:help;text-decoration:none;align-self:center}
.forbehold:hover{border-color:var(--hegn);color:var(--blaek2)}

/* Forbeholdet INTERIM UDEN SYNLIGT MAERKE (JPK 27. aug 2026) - erstatter den
   haevede stjerne fra 24.08.2026, som stablede sig hulter til bulter under
   og ved siden af tallene paa kortene (skaermbillede i briefet). D14
   (STATUS.md) vil give forbehold to niveauer - kun gyldighedstruende skal
   have et synligt maerke - men klassifikationen af de 562 er endnu ikke
   flettet. Indtil da: INTET synligt her. Teksten forsvinder ikke, den staar
   stadig fuldt ud i title (museklik) og i .kunskaerm (skaermlaeser) - kun
   den tredje, altid-synlige gengivelse (foerst ordet "Advarsel", saa
   stjernen) er fjernet. NAAR klassifikationen lander, er det HER det
   designede gyldigheds-maerke skal saettes ind - klassenavnet er det, en
   fremtidig soegning efter ".forbehold--skjult" skal finde. */
.forbehold--skjult{display:inline;border:0;padding:0;background:none}

/* --- 8b. KILDEMAERKET ------------------------------------------------------
   Maalt: 23 af 46 poster henter tal fra mere end én URL. Boston Dynamics Spot
   har seks felter fra et datablad i pdf og resten fra produktsiden — deriblandt
   ét af stribens seks tal. En samlet saetning ("alle tal er laest paa
   producentens produktside") ville derfor vaere usand paa halvdelen af
   kataloget. Kilden hoerer til TALLET, ikke til siden.

   Formen: et haevet BOGSTAV efter vaerdien, der peger paa kildelisten
   nedenfor. Bogstav og ikke tal, saa det aldrig kan laeses som en del af
   figuren. Beroeringsmaalet er hele vaerdien, ikke bogstavet. */
/* HAEVNINGEN, RETTET 27. aug 2026. Reglen sagde `vertical-align:super`, og den
   linje har aldrig virket: .v er `display:inline-flex` (afsnit 8), og
   vertical-align har ingen virkning paa et flex-element. Formen ovenfor lover
   "et haevet BOGSTAV efter vaerdien"; det var ikke det, siden viste.

   Maalt paa /da/robotter/ ved 1440 - bogstavets underkant mod figurens
   grundlinje, over de 141 kortceller, der baerer et kildemaerke:
     FOER    0 af 141 stod over grundlinjen, i snit 14,6 px UNDER den.
     EFTER 141 af 141 staar over, i snit 8,2 px over.
   De 14,6 px er ikke haevningen alene: i de fleste celler var vaerdilinjen
   braekket, saa bogstavet var faldet ned paa linje to og stod UNDER tallet i
   stedet for efter det. Denne rettelse og aflaesningslinjen i afsnit 10 tager
   derfor fat i den samme fejl fra hver sin ende.

   `align-self:flex-start` er haevningen, der virker i en flexboks
   (samme greb som det gamle forbeholdstegn brugte), og den er
   layout-bevidst: bogstavet loefter sig uden at kunne flyde ud over cellen,
   som en relativ forskydning ville. Kun i .v-tal - i "ikke oplyst"-chippen
   skal bogstavet blive staaende midt i. */
/* GULVET, sat 28. aug 2026 (spor/haerd). CSS'en havde allerede DOEMT sin egen
   grundregel fem afsnit laengere nede (se ".34em af 17 px er 5,8 px - under
   det, en skaerm kan saette et versalt bogstav paa"), men rettelsen naaede kun
   ÉN flade: `.stribe--kompakt .v-tal`. Maalt paa tre flader x to bredder foer
   rettelsen (forside, katalog, robotside ved 1440 og 390 px):

     robotsiden      22 af 22 maerker paa 5,78 px  (.34em af 17 px)
     kataloget        4 maerker paa 3,74 px        (.34em af 11 px, .v-ikke-chippen
                                                    - og de fire ER links)
                      2 maerker paa 5,78 px        (.raekke .v-tal, som .47em-reglen
                                                    aldrig daekkede)
                    141 maerker paa 7,99 px        (.47em af 17 px - selve
                                                    "rettelsen" ramte 0,01 px UNDER
                                                    de 8,0 px, den lovede)
     forsiden        16 maerker paa 7,99/7,05 px

   Et gulv i em kan ikke loese det, for fejlen ER at graden arves fra en
   foraelder, der selv kan vaere lille. `max()` goer gulvet uafhaengigt af
   arven og lader maerket vokse med figuren, hvor figuren er stor: paa
   forsidens store tal staar det stadig paa .34em (15,64 px ved 1440), saa
   rangordenen - maerket markant mindre end figuren - er uaendret dér, hvor der
   ER en figur at vaere mindre end.

   px og ikke rem: gulvet er en RENDERINGSGRAENSE ("hvad en skaerm kan saette
   et versalt bogstav paa"), ikke en andel af laeserens tekststoerrelse. Det er
   ogsaa den enhed, CSS'ens egen begrundelse ovenfor regner i. Browserzoom
   skalerer px med; -webkit-text-size-adjust:100% staar allerede paa <html>. */
.kildemaerke{
  position:relative;
  font-family:var(--mono);font-size:max(8px,.34em);font-weight:700;line-height:1;
  /* L76: maerket stod i accent paa panel = 1,60 : 1 og var i praksis
     usynligt (se fund/arkiv/skud/skud-extract/foer-robot-fold.png, hvor haevetegnene
     efter hvert tal ikke kan ses). --blaek2 giver 5,68 : 1 mod --bund og
     6,56 : 1 mod --panel: laesbart, men stadig et haevetegn og ikke en
     overskrift. */
  letter-spacing:.02em;color:var(--blaek2);
  text-decoration:none;padding:0 1px;
}
.v-tal > .kildemaerke{align-self:flex-start}
/* Bogstavet er 6x8 px. Selve MAALET er 24x24 og ligger centreret om det,
   saa WCAG 2.5.8 holdes uden at bogstavet vokser. Uden det her ville
   maerket vaere et link, ingen kan ramme. */
.kildemaerke::before{content:"";position:absolute;left:50%;top:50%;
  width:24px;height:24px;transform:translate(-50%,-50%)}
.kildemaerke:hover{text-decoration:underline;text-decoration-thickness:1px}
/* Sekundaer kilde (L21): producentens eget domaene, men ikke produktsiden —
   datablad, manual, JS-bundle. SKAL kunne ses som noget andet. Samme sprog
   som hullet: stiplet hegn. */
/* RADIUS 0, IKKE 6, og det er set og ikke regnet. Maerket er 12,9 x 11,0 px.
   Ved 6 px moedes hjoernerne naesten: browseren skalerer dem til 5,5 px, de
   stiplede streger bliver til buer, og maerket laeser som en prik — den
   "runde klump", skalaen skulle forhindre. Ved 0 px staar de fire streger
   som en KLAMME om bogstavet, dashet lander paa lige stykker, og formen er
   den samme som det primaere `.kildemaerke`, der ogsaa staar paa 0.
   Forskellen mellem primaer og sekundaer skal baeres af det stiplede hegn,
   ikke af hjoernerne. */
.kildemaerke--sek{color:var(--blaek3);border:1px dashed var(--hegn);border-radius:0;
  padding:0 var(--r0) 1px}

/* Kildelisten. Staar under striben paa robotsiden og som én linje paa kortet. */
.kildeliste{display:flex;flex-direction:column;gap:7px;padding-top:var(--r3);
  border-top:1px solid var(--linje)}
.kildeliste li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px;
  font-family:var(--mono);font-size:var(--fs-mikro);line-height:1.5;color:var(--blaek3)}
.kildeliste li:target{outline:2px solid var(--accent);outline-offset:3px;background:var(--panel);border-radius:var(--hjoerne)}
/* L76: bogstavet er kildelistens noegle og skal kunne LAESES - accent gav
   1,60 : 1 paa panel. --blaek (14,69 : 1 paa panel) goer det til raekkens
   anker, hvilket ogsaa er rigtigt: resten af linjen staar i --blaek3. */
.kildeliste .bogstav{font-weight:700;color:var(--blaek);align-self:start}
/* Samme maerke, samme sprog: 0, ikke 3. Kassen er 17,2 x 21,8 px og taaler
   godt nok 6 px uden at blive rund, men den er den SAMME oplysning som
   `.kildemaerke--sek` — to former for ét maerke er en form for oevrigt. */
.kildeliste .sek .bogstav{color:var(--blaek3);border:1px dashed var(--hegn);
  border-radius:0;padding:0 var(--r1) 1px;justify-self:start}
.kildeliste .hvad{color:var(--blaek2)}
.kildeliste .url{overflow-wrap:anywhere}
.kildeliste .dato{color:var(--blaek3)}
.kildeliste .type{color:var(--blaek3)}

/* --- 9. Ikonerne ---------------------------------------------------------- */
/* Tegnede SVG, ét stroegtykkelse (1,6), ét 24-net. Ingen emoji, intet
   unicode-tegn som ikon. Symbolerne ligger i sidens sprite. */
.ikon{width:26px;height:26px;flex:none;fill:none;stroke:currentColor;
  stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ikon--lille{width:18px;height:18px;stroke-width:1.8}

/* --- 10. NOEGLETALSSTRIBEN ------------------------------------------------ */
/* ORBIT's vandrette baand med ikon + tal + etiket, med vores seks tal.
   Det svaere, ORBIT aldrig skulle loese: cirka halvdelen af rubrikkerne er
   tomme. Loesningen er, at CELLEN BLIVER STAAENDE. Den beholder sin plads,
   sit ikon og sin etiket — kun figuren skiftes ud med et synligt hul.
   Laeseren laerer positionerne og kan se paa tvaers af robotter, HVAD der
   mangler, ikke bare at noget mangler. */
.stribe-hylster{display:flex;flex-direction:column;gap:var(--r2)}

.stribe-hoved{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px}
.stribe-hoved .etiket{flex:1 1 auto}
/* Taelleren. Den er ikke pynt: den er sidens eneste maal for aabenhed,
   flyttet ned paa den enkelte robot. */
.stribe-taeller{font-family:var(--mono);font-size:var(--fs-mikro);font-weight:500;
  letter-spacing:.04em;color:var(--blaek2);white-space:nowrap}
.stribe-taeller b{font-weight:700;color:var(--blaek)}
.stribe-taeller .mangler{color:var(--blaek3)}

.stribe{
  display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
  background:var(--panel);border:1px solid var(--linje);border-radius:var(--hjoerne);
  box-shadow:var(--skygge);overflow:hidden;
}
.stribe > li{
  display:flex;align-items:flex-start;gap:12px;padding:var(--r4) var(--r4) 17px;
  border-left:1px solid var(--linje);min-width:0;
}
.stribe > li:first-child{border-left:0}
/* column-reverse: figuren staar OEVERST visuelt, mens DOM-raekkefoelgen bliver
   etiket foer vaerdi — som er den raekkefoelge, en skaermlaeser skal have dem i. */
.stribe .krop{display:flex;flex-direction:column-reverse;gap:5px;min-width:0;flex:1}
.stribe .krop > .v{min-height:30px;display:flex;align-items:center}
.stribe .v{font-size:var(--fs-figur-m)}

/* Ikonets to tilstande: oplyst = blaek, hul = hegn.
   Farven er den samme oplysning som figuren, ikke en ekstra.
   L76: "oplyst" var accent. Det gjorde kodningen OMVENDT af hensigten -
   maalt paa panel stod oplyst paa 1,60 : 1 og hul paa 2,47 : 1, altsaa var
   HULLET det tydeligste af de to. Nu: oplyst 14,69 : 1, hul 2,47 : 1, og
   forskellen er den, figuren allerede paastod. */
.stribe .ikon{color:var(--blaek);margin-top:1px}
.stribe .hul .ikon{color:var(--hegn)}

/* Under 6 spalter: 3, saa 2. Cellerne beholder deres raekkefoelge. */
@media (max-width:1180px){
  .stribe{grid-template-columns:repeat(3,minmax(0,1fr))}
  .stribe > li:nth-child(3n+1){border-left:0}
  .stribe > li:nth-child(n+4){border-top:1px solid var(--linje)}
}
@media (max-width:680px){
  .stribe{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stribe > li{border-left:1px solid var(--linje);border-top:1px solid var(--linje)}
  .stribe > li:nth-child(2n+1){border-left:0}
  .stribe > li:nth-child(-n+2){border-top:0}
  .stribe .v{font-size:var(--fs-figur-s)}
}

/* Nulstilling af striben: naar INGEN af de seks er oplyst, ville seks huller
   vaere stoej. Maalt 21.08.2026: 5 af 46 robotter er i den tilstand.
   Da faar den ét udsagn i stedet — og udsagnet siger hvorfor. */
.stribe--intet{
  display:flex;gap:14px;align-items:flex-start;
  background:var(--tom);border:1px dashed var(--hegn-baerende);border-radius:var(--hjoerne);
  box-shadow:none;padding:var(--r4) 20px 20px;
}
.stribe--intet .ikon{color:var(--hegn);margin-top:var(--r0)}
.stribe--intet .tekst{display:flex;flex-direction:column;gap:5px}
.stribe--intet .hoved{font-size:var(--fs-lille);font-weight:700;letter-spacing:-.012em;color:var(--blaek)}
.stribe--intet p{font-size:var(--fs-raekke);line-height:1.5;color:var(--blaek2);max-width:76ch}

/* Kompakt udgave: samme celler, mindre sats. Til robotkortet og til
   sammenligningsraekker, hvor striben ikke er sidens hovedsag.
   TO spalter ved ALLE bredder (24.08.2026), ikke tre. Maalt med Playwright
   over alle 46 kort paa /da/ ved 1440 px: tre spalter gav en krop paa
   ca. 95-115 px, og etiketterne NYTTELAST og DRIFTSTID (66-77 px i 10,5 px
   mono med spatiering) klippede paa hvert kort - 284 synlige fund. Ved
   360 px, hvor reglen under 420 px allerede brugte to spalter, var der 0.
   Det smalle layout var det rigtige; nu gaelder det hele vejen op.

   FIRE celler, ikke fem (JPK, 24. aug 2026): ip_klasse er fjernet fra
   kortets stribe i tools/skabelon/side.mjs — maalt daekning 23/46, mod de
   fire tilbageblevnes 37/46, 36/46, 36/46, 36/46. Fire celler i to spalter
   fylder gitteret praecist (2x2), saa den tidligere "femte celle faar hele
   sidste raekke"-regel er fjernet som doed kode.

   RETNING INSTRUMENT (spor/instrument2, punkt 3, 26. aug 2026):
   retninger/instrument/instrument.css's AFLAESNINGSLINJE fjerner hårstregen
   MELLEM cellerne — kanalerne adskilles af luft og vaegtforskel, ikke af en
   streg (facit-filens §"AFLAESNINGSLINJEN"-kommentar, linje 187-190). De to
   `border-top`/`border-left`-regler herunder er derfor fjernet og erstattet
   af et rigtigt `gap` paa selve gridet. De STIPLEDE "ikke oplyst"-huller
   (.v-ikke, afsnit 8 ovenfor) er UAENDREDE — det er cellens EGEN kant, ikke
   striben-mellem-celler-kanten, og haard begraensning 5 forbyder at røre
   ved den. Typografien er strammet mod facit: .v 20px -> 18px (facit 16px
   i en bredere kort-kontekst; 18px er den smalleste sats, der stadig
   holder "33,8 kg" paa én linje ved 5 katalogkolonner, maalt med
   maalevaerktoej/maal.mjs). .etiket BEHOLDER sine 10,5 px (gulvet, se
   kommentaren lige ovenfor - IKKE efterproevet paa ny her, saa reglen om
   telefon-laesbarhed staar ved magt); kun letter-spacing er strammet.
   Padding strammet fra 12px/11px til 10px/9px. */
.stribe--kompakt{grid-template-columns:repeat(2,minmax(0,1fr));box-shadow:none;
  border-radius:var(--hjoerne);gap:8px 12px}

/* AFLAESNINGEN FAAR HELE CELLENS BREDDE (JPK 27. aug 2026, ordre med
   skaermbillede: "* stabler sig hulter til bulter").

   Maalt i browseren paa /da/robotter/ ved 1440 foer rettelsen: cellen er
   105 px, men vaerdilinjen havde kun 60 px at staa paa - ikonet (18) og dets
   gab (7) tog 25 af de 85 px indhold, og krop fik resten. Medianen af det,
   vaerdilinjerne har BRUG for, var 75 px, 90-percentilen 105 px. Foelgen:
   175 af 261 talceller braekkede i to linjer, og vaerdiblokken optraadte i
   15 forskellige hoejder (22, 28, 34, 40 ... 83 px) i det samme gitter. Et
   instrument har én aflaesningshoejde, ikke femten.

   Rettelsen er ikke en finjustering af gab og skriftgrad, men en flytning:
   ikonet er en KANALMARKOER og hoerer til etiketten, ikke ved siden af
   figuren, hvor det konkurrerer med den om bredden. Cellen bliver derfor to
   raekker - aflaesningen oeverst i fuld bredde, kanalen (ikon + navn)
   nedenunder - og vaerdilinjen gaar fra 60 til 91 px uden at cellen vokser.
   `display:contents` paa .krop lader .etiket og .v blive gitterets egne
   felter, saa HTML'en er uaendret og skaermlaeserens raekkefoelge (etiket
   foer vaerdi) bevares praecis som column-reverse gav den.

   Ikonet gaar 18 -> 13 px: det staar nu ved siden af en 10,5 px etiket, ikke
   ved siden af en 18 px figur, og skal maale sig med DEN. */
/* --kanal er ikonets maal OG kanalspaltens bredde: ét tal ét sted, saa de to
   ikke kan komme fra hinanden.

   Spalten skal vaere FAST, ikke `auto`. Med `auto` bidrager aflaesningen i
   raekken ovenover - som spaender over BEGGE spalter - til spaltens
   intrinsiske bredde, saa en bred vaerdi puster ikonspalten op og sulter
   etiketten. Maalt paa en producentside ved 1440, hvor etiketterne er de
   lange feltnavne ("Maks. hastighed", "Nyttelast, gaaende"): med `auto` satte
   de 52 celler SEKSTEN forskellige spaltepar, fra 13px+73px til 73px+12px, og
   20 af 52 etiketter blev klippet. Med et fast maal er der ét spaltepar
   (13px + 72,8px) og 0 klippede. Katalogsiden skjulte fejlen, fordi den
   bruger de KORTE etiketter (stribe_*) - producentkortet bruger felt_*. */
.stribe--kompakt > li{--kanal:13px;border:0;padding:var(--r2h) var(--r2) var(--r2);
  display:grid;grid-template-columns:var(--kanal) minmax(0,1fr);
  grid-template-areas:"vaerdi vaerdi" "ikon etiket";
  align-items:center;column-gap:5px;row-gap:3px}
.stribe--kompakt .krop{display:contents}
.stribe--kompakt > li > .ikon{grid-area:ikon;width:var(--kanal);height:var(--kanal);
  stroke-width:1.7;margin-top:0}
.stribe--kompakt .etiket{grid-area:etiket;font-size:var(--fs-gulv);letter-spacing:.09em}
.stribe--kompakt .krop > .v{grid-area:vaerdi;min-height:21px}
/* 18 -> 17 px. Den gamle grad blev valgt som "den smalleste sats, der stadig
   holder 33,8 kg paa én linje" - maalt dengang mod de 60 px, cellen havde.
   Maalt nu mod de 91: ved 18 px skyder 24 af 261 vaerdier ud over cellen,
   ved 17 px gaar 0 ud. */
.stribe--kompakt .v{font-size:var(--fs-broed)}

/* Aflaesningen bryder ALDRIG. Kun .v-tal: "ikke oplyst"-chippen (haard
   begraensning 5) skal stadig kunne bryde ved sit mellemrum frem for at
   skyde ud af cellen. */
.stribe--kompakt .v-tal{flex-wrap:nowrap;gap:.22em}

/* FIGUR OG ENHED PAA SAMME GRUNDLINJE. .v saetter selv `align-items:baseline`
   (afsnit 8), men stribens egen `.stribe .krop > .v{align-items:center}`
   vinder paa specificitet og midterstillede enheden i forhold til figuren -
   "kg" svaevede midt ud for cifrenes hoejde i stedet for at staa paa deres
   linje. Maalt over de 261 talceller: afstanden mellem de to grundlinjer
   flyttede sig 3,2 px, da align-items blev sat tilbage til baseline.
   Kun .v-tal: chipperne (v-ikke, v-ja, v-nej, v-billede) har et lille
   firkantmaerke, der SKAL staa midt i ordet, og de beholder derfor center. */
.stribe .krop > .v-tal,.stribe--kompakt .krop > .v-tal{align-items:baseline}

/* OPTISK TILPASNING, ikke en smagsdom. For hver af de 261 talceller blev den
   stoerste hele skriftgrad, der faktisk passer i cellen, maalt i browseren.
   Kravet grupperede sig efter SYNLIGE TEGN (operator + figur + enhed): 3-8
   tegn passer alle ved fuld grad (195 celler), 9-10 tegn kraevede et trin ned,
   11 og derover to. Klasserne saettes i skabelonen (side.mjs' tal()) og er
   inerte uden for den kompakte celle.

   TRINNET ER SAA LILLE SOM MULIGT, og det er en RETTELSE af foerste forsoeg:
   der stod .67/.58, og paa skaermen laeste "15 kg" ved siden af "13,32 km/h"
   som to forskellige RANGE af oplysning - de fire aflaesninger paa et kort er
   lige vigtige, og et stoerrelsesspring paa en tredjedel paastaar noget andet.
   Pladsen til et blidere trin blev hentet tre steder i stedet: strammere sats
   i figuren, mindre enhed og mindre gab - alle tre er ting, en lang vaerdi
   taaler, fordi den alligevel laeses som én blok. Maalt over 261 celler ved
   1750/1440: 0 vaerdier skyder ud over cellen, og alle 261 vaerdiblokke har
   NOEJAGTIG samme hoejde. Kildebogstavet skifter aldrig grad - det er
   signaturen og skal staa ens paa hver eneste celle. */
/* Hvert trin baerer gulvet med sig (max(8px,…)). Uden det arver enheden og
   operatoren trinnets skrump OVEN PAA foraeldrens - to multiplikationer, som
   ingen af de to erklaeringer kan se hver for sig. */
.stribe--kompakt .v-tal--lang{gap:.15em}
.stribe--kompakt .v-tal--lang .num{font-size:.80em;letter-spacing:-.045em}
.stribe--kompakt .v-tal--lang .enhed{font-size:max(8px,.5em)}
.stribe--kompakt .v-tal--xlang{gap:.12em}
.stribe--kompakt .v-tal--xlang .num{font-size:.70em;letter-spacing:-.05em}
.stribe--kompakt .v-tal--xlang .enhed{font-size:max(8px,.46em)}
.stribe--kompakt .v-tal--xlang .op{font-size:max(8px,.5em)}
/* Fjerde trin: kun sproget udloeser det. Fem af de seks operatorer er TEGN
   (≥ ≤ > < ±), men 'cirka' er et ord - "ca." paa dansk, "approx." paa
   engelsk. Maalt paa katalogsiden: dansk naar 14 tegn i den laengste vaerdi,
   engelsk 18, og de to laengste engelske skoed 111 og 96 px ud i en 91 px
   celle, mens dansk gik fri. Fire celler i hele kataloget rammer trinnet
   (3 engelske, 1 dansk). */
.stribe--kompakt .v-tal--xxlang{gap:.1em}
.stribe--kompakt .v-tal--xxlang .num{font-size:.56em;letter-spacing:-.055em}
.stribe--kompakt .v-tal--xxlang .enhed{font-size:max(8px,.38em)}
.stribe--kompakt .v-tal--xxlang .op{font-size:max(8px,.4em)}

/* Kildebogstavet er sidens signatur og skal kunne LAESES. Her stod indtil
   28. aug 2026 undtagelsen `.stribe--kompakt .v-tal > .kildemaerke{.47em}`
   med begrundelsen ".34em af 17 px er 5,8 px - under det, en skaerm kan saette
   et versalt bogstav paa. I den kompakte celle staar det derfor paa .47em
   (8,0 px)."

   BEGRUNDELSEN HOLDT; UNDTAGELSEN GJORDE IKKE. To ting maalt samme dag:
   (1) .47em af 17 px er 7,99 px - reglen ramte 0,01 px under sit eget maal,
   og (2) den daekkede ÉN af de fem sammenhaenge, maerket optraeder i, saa
   robotsiden (5,78 px), `.raekke`-cellen (5,78 px) og `.v-ikke`-chippen
   (3,74 px, et link) stod tilbage under gulvet.

   Gulvet er derfor flyttet op i grundreglen som `max(8px,.34em)` (se afsnit
   ovenfor), og denne undtagelse er FJERNET frem for rettet: den er blevet
   overfloedig. `.stribe--kompakt .v` staar paa 17 px (15 px under 420 px), saa
   grundreglens max() giver 8,00 px i praecis den celle, undtagelsen fandtes
   for - og i de fire andre sammenhaenge, den aldrig naaede. Én regel i stedet
   for to, og ingen flade tilbage under gulvet. */

@media (max-width:420px){
  .stribe--kompakt{gap:5px 8px}
  .stribe--kompakt > li{--kanal:12px;padding:var(--r1h) var(--r1h) var(--r1h);column-gap:4px;row-gap:2px}
  /* Kanalspalten er 1 px smallere her (column-gap 5 -> 4), saa maerket
     rykkes 1 px laengere ind for at holde samme luft til ikonet. */
  .stribe--kompakt .etiket.m-etiket{padding-left:var(--r2);margin-left:var(--r0)}
  .stribe--kompakt .v{font-size:var(--fs-lille)}
  .stribe--kompakt .krop > .v{min-height:17px}
  .stribe--kompakt .etiket{letter-spacing:.04em}

  /* LAENGDESTIGEN FALDER TIL ÉT TRIN HER, og det er en maaling, ikke en smag.
     Stigen blev bygget mod den TRANGE celle: 91 px indre bredde ved 1440 px,
     hvor den bredeste vaerdiblok maaler 84 px — 7 px luft. Under 420 px er
     den samme celle 147 px bred (132 px ved 360 px), mens den bredeste blok
     maaler 75 px: 72 px luft. Stigen komprimerede altsaa dér, hvor der var
     mest plads, og skubbede enhed og operator under 8 px for at spare en
     plads, ingen manglede. Alle tre trin saettes derfor paa --lang's grad;
     maalt efter rettelsen ved 390 px: bredeste blok 107 px i en 147 px celle
     (40 px luft), 0 overskud, uaendret cellehoejde. */
  .stribe--kompakt .v-tal--xlang,
  .stribe--kompakt .v-tal--xxlang{gap:.15em}
  .stribe--kompakt .v-tal--xlang .num,
  .stribe--kompakt .v-tal--xxlang .num{font-size:.80em;letter-spacing:-.045em}
  .stribe--kompakt .v-tal--xlang .enhed,
  .stribe--kompakt .v-tal--xxlang .enhed{font-size:max(8px,.5em)}
  .stribe--kompakt .v-tal--xlang .op,
  .stribe--kompakt .v-tal--xxlang .op{font-size:max(8px,.6em)}
}
/* Vaerdien maa hellere ombryde end skubbe cellen ud af sit spor. break-word
   (ikke anywhere) proever et mellemrum foerst — "ikke oplyst" bryder til to
   linjer i stedet for elleve, ét bogstav pr. linje.

   RETTET (K8, JPK 27. aug 2026, forstaerket af L41's laengere km/h-tal):
   den gamle regel accepterede BEVIDST at "rene tal uden mellemrum bryder
   midt i, naar der intet andet er at bryde ved" - men det var netop fejlen.
   .v er allerede inline-flex+flex-wrap:wrap (afsnit 8, linje 195-196), saa
   .num er en flex-item med automatisk minimumsbredde regnet ud fra sit eget
   indhold - MEDMINDRE overflow-wrap:break-word (arvet fra .v) giver den lov
   til at skrumpe under den bredde ved at knaekke sin egen tekst. Det er
   PRAECIS det, der knaekker "0–14,4" til "0–"/"14,4": flexboxen bruger
   friheden i break-word til at proppe tallet i den smalle celle, i stedet
   for at lade .enhed falde til naeste flex-linje for sig selv - hvilket
   .v's egen flex-wrap allerede haandterer uden hjaelp fra break-word.
   Et tal er ALDRIG et sted, et linjeskift maa laegges - kun ordmellemrum
   (fx i "ikke oplyst") er det. Derfor tager .num sin egen regel HER, efter
   .v's brede regel, saa .num vinder ved specificitet: */
.stribe .v,.stribe--kompakt .v{overflow-wrap:break-word}
.stribe .num,.stribe--kompakt .num{overflow-wrap:normal;word-break:keep-all;white-space:nowrap}

/* --- 11. ROBOTKORTET ------------------------------------------------------ */
/* Fotografiet fylder toppen. Navnet ligger UNDER billedet, ikke paa det.
   Grunden er maalt: i v2 daekkede det paalagte navnebaand de nederste
   27,7 % af fotografiet (baandets hoejde 69 px mod en 4:3-billedhoejde paa
   250 px ved kortbredde 333 px) og skar foedderne af paa 27 af 41 kort.
   Med navnet under billedet er tallet 0,0 %. */
/* L101 (Konflikt 8 afgjort): kortet taler TYPESKILT overalt. Grundreglen
   har border:0, radius nul og box-shadow:none - den tokeniserede
   ORBIT-ramme (.kort i system.css) og nulstillingen (.net .kort i generator.css)
   er samlet her. Haarlinjens afgraensning baeres af .net-gitterets 1px gab, og
   af box-shadow: 0 0 0 1px var(--linje) paa fritstaaende gittere. */
.kort{
  display:flex;flex-direction:column;background:var(--panel);
  border:0;border-radius:0;box-shadow:none;
  overflow:hidden;position:relative;
}
.kort:hover{background:var(--stans)}
.kort:focus-within{outline:2px solid var(--blaek);outline-offset:-2px}
.kort:hover,.kort:focus-within{border-color:var(--linje);box-shadow:var(--skygge-loeft)}

/* L78: ET produktfoto beskaeres ALDRIG. Ét sideforhold (4:3) og én fit
   (contain) for hele sitet - det er DEN regel, og den staar kun her.
   Foer i dag var grundreglen 16:10 + cover, mens kataloget (.net .billedled)
   selv rettede til 4:3 + contain. Kortene gjorde altsaa det rigtige, og
   robotsiden - fladen hvor man netop vil SE maskinen - gjorde det forkerte.
   Maalt: med cover mistede 40 af 65 fotos over 10 % af billedet,
   gennemsnit 18,3 %, vaerst 59 %. */
.billedled{
  position:relative;overflow:hidden;aspect-ratio:4/3;background:var(--panel);
  border-bottom:1px solid var(--linje);display:grid;place-items:center;
}
.billedled img{width:100%;height:100%;object-fit:contain;object-position:center}

/* PRINT/PDF: kataloget bruges som haandout, og en udskrift uden billeder er
   ubrugelig. `loading="lazy"` paa kortene under folden er ALLEREDE ignoreret
   af Chromium og Firefox ved print — begge motorer tvangsindlaeser dovne
   billeder foer selve udskriften (shippet adfaerd, ikke noget CSS kan styre
   eller forstaerke: der findes ingen CSS-egenskab, der udloeser en
   netvaerkshentning). Den regel her loeser derfor IKKE indlaesningen — det
   goer browseren allerede — men de to ting, CSS RENT FAKTISK kan styre for
   et katalogudskrift: at et kort ikke splittes over et sideskift, og at
   fotografiet printes i sin fulde farve i stedet for browserens
   blaekbesparende udskrifts-graatoning. */
@media print{
  .kort{break-inside:avoid}
  .billedled img{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .klaebebar{display:none!important}
}

/* PLADE: maskinen er fotograferet fri paa hvid, og den faar ekstra luft
   omkring sig paa kortets egen hvide flade.
   L78: klassens `object-fit:contain` er SLETTET herfra - ikke fordi den var
   forkert, men fordi den nu er systemets grundregel. Da den stod her, var
   den en fladespecifik undtagelse fra en cover-standard; nu ville den vaere
   en gentagelse, og en gentaget vaerdi er den, der en dag skrider.
   Tilbage staar det, der faktisk er pladens eget: luften. */
.billedled--plade img{padding:6% 7%}

/* BILLEDMAERKE: staar PAA fotografiet, nede i venstre hjoerne, og kun paa de
   kort hvor billedet ikke sikkert er den maskine, kortet handler om.
   Maalt: 15 af 43 robotter deler 7 filer (SHA-256 i MANIFEST.tsv). Lite3
   vejer 12 kg og X20 vejer 53 kg — samme foto kan ikke vaere begge dele.
   Maerket fylder ca. 3 % af billedfladen. Det maa staa paa billedet, fordi
   det er PAA billedet, loegnen ville ske. */
.billedmaerke{
  position:absolute;left:9px;bottom:9px;z-index:2;
  display:inline-flex;align-items:center;gap:6px;
  background:var(--panel);border:1px dashed var(--hegn);border-radius:var(--hjoerne);
  padding:var(--r0) var(--r2) var(--r1);font-family:var(--mono);font-size:var(--fs-gulv);font-weight:500;
  letter-spacing:.06em;color:var(--blaek3);
}
.billedmaerke .mrk{width:8px;height:8px;flex:none;border:1px solid var(--blaek3);
  background:linear-gradient(135deg,var(--blaek3) 0 45%,transparent 45%)}

/* --- MAALEPLADEN ER FJERNET HERFRA 9. sep 2026 ---------------------------
   L113 blev afgjort den anden vej: JPK saa .intetfoto og maalepladen side
   om side og valgte .intetfoto. 31 plader mistede dermed deres
   maalestokstegning og de kildebelagte tal i titelfeltet.

   HELE BLOKKEN ER SLETTET, ikke kommenteret ud og ikke ladt doed:
   tests/dele/57-doed-css.mjs kraever, at aegte doede klasser er PRAECIS de
   12 kendte undtagelser. Blev reglerne staaende uden kaldere, ville
   billedled--maal, maalplade, jord, kasse og titelfelt blive nummer 13-17,
   og listen er undtagelser fra en detektorsvaghed - ikke en parkeringsplads.
   Test 57's eget punkt 13 kalder sletning "den normale vej for en aegte
   doed klasse".

   SKAL DEN TILBAGE, staar den ordret i git:
     git show ab6e535:assets/system.css   (blokken "--- MAALEPLADEN ---")
     git show ab6e535:tools/skabelon/side.mjs   (pladeHTML og afsnit 8b)
   --plade-forhold i :root BLIVER staaende: tests/dele/61-extract.mjs'
   punkt 61.10 og 61.11 laaser den til PLADE_MM_HOEJ i side.mjs. */

/* DEN TOMME PLADE - den ENESTE billedtilstand for "intet brugbart
   fotografi" efter L113's afgoerelse 9. sep 2026. JPK saa den ved siden af
   maalepladen og valgte den, ordret: "Personligt kan jeg bedst lide denne
   tilstand for manglende billede... Dog skal den lange tekst vaek".

   Den skal laeses som en TOM PLADS i vaerket, ikke som et brudt billede:
   samme sprog som "ikke oplyst". Ikonet BLIVER - forslaget om at fjerne det
   er ophaevet af JPK samme dag.

   .grund ER FJERNET, og det er hele tekstaendringen: broedteksten sagde
   noejagtig det samme som overskriften plus ordene "available for this
   model". i18n-noeglen billede_ingen_egen er slettet med den.

   Samme flade baerer 404-sidens signatur (fejl404.mjs:92), som skriver
   .intetfoto med .plade og INGEN .hoved. */
.intetfoto{
  position:relative;width:100%;height:100%;background:var(--tom);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;text-align:center;padding:var(--r5) 20px;
}
.intetfoto::before{content:"";position:absolute;inset:10px;
  border:1px dashed var(--hegn);border-radius:var(--hjoerne)}
/* Pladen er 52 x 52 px og sidder INDE i den stiplede ramme
   `.intetfoto::before`. Argumentet var foer, at en hard firkant inden i en
   rundet ramme laeser som to systemer, mens "6 inden i 8" laeser som ét.
   L79 goer det til det staerkest mulige tilfaelde af netop det argument:
   pladen og rammen deler nu SAMME hjoerne. */
.intetfoto .plade{width:52px;height:52px;flex:none;border:2px dashed var(--hegn);
  border-radius:var(--hjoerne);
  background:repeating-linear-gradient(135deg,transparent 0 7px,var(--hegn) 7px 8px)}
/* Overskriften - nu den ENESTE tekst paa pladen. `.intetfoto .grund` stod
   her indtil L113 og er slettet med sin i18n-noegle. */
.intetfoto .hoved{font-size:var(--fs-raekke);font-weight:700;letter-spacing:.02em;color:var(--blaek)}

/* RETNING INSTRUMENT (spor/instrument2, punkt 2+3): kortkroppens luft og
   navnesats strammet mod facit-filens .kort-krop (padding 12/16/16px) og
   .kort-navn (18,5px, 700). Gap 12px -> 6px, top-padding 16px -> 10px,
   navn 22px -> 18px - stadig tydeligt stoerre end .kort-ophav (13,5px),
   saa hierarkiet (ophav < navn) er uaendret, blot haardere/tættere. */
.kort-krop{display:flex;flex-direction:column;gap:6px;padding:var(--r2h) var(--r4) 0}
.kort-ophav{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}
.kort-ophav .prod{font-size:var(--fs-raekke);font-weight:600;color:var(--blaek2)}
.kort-ophav .land{font-family:var(--mono);font-size:var(--fs-etiket);color:var(--blaek3)}
.kort-navn{font-size:var(--fs-manual);letter-spacing:-.018em}
.kort-navn a{color:var(--blaek);text-decoration:none}
.kort-navn a::after{content:"";position:absolute;inset:0;z-index:1}
.kort-navn a:hover{text-decoration:underline;text-decoration-thickness:2px}
.kort-hoved{display:flex;flex-direction:column;gap:2px}

/* Statusmaerket er en oplysning, ikke en udmaerkelse. Ingen "featured". */
.status{font-family:var(--mono);font-size:var(--fs-gulv);font-weight:500;letter-spacing:.12em;
  text-transform:uppercase;color:var(--blaek2);border:1px solid var(--linje);
  border-radius:var(--hjoerne);padding:var(--r0) var(--r2) var(--r0);white-space:nowrap}

/* Anvendelsesmaerket. Producentens egen inddeling, gengivet — ikke vores. */
.maerker{display:flex;flex-wrap:wrap;gap:6px}
.maerke{font-size:var(--fs-mikro);font-weight:600;color:var(--blaek2);background:var(--panel-ro);
  border:1px solid var(--linje);border-radius:var(--hjoerne);padding:var(--r1) var(--r2h) var(--r1h)}
.maerke--tom{color:var(--blaek3);background:var(--tom);border-style:dashed;
  border-color:var(--hegn);font-weight:500;font-family:var(--mono);font-size:var(--fs-etiket)}

/* (fjernet 26.08.2026: kortets fodnote-sektion (.kort-fod, .led, .prik) -
   JPK bad om at fodnoten under katalogkortene forsvinder helt. Robotsidens
   egen .billedfod (assets/generator.css) staar uaendret. Se side.mjs kort(). */

/* L78 (2. sep 2026): et produktfoto beskaeres ALDRIG. De to scale()-regler,
   der stod her (1.024 paa fotografier, 1.04 paa .billedled--plade - BEGGE
   ægte fotografier, ikke maaleplader, se rettelsen af den fejl i
   fund/arkiv/2026-09/FUND-zoom.md), beskar vandret med det samme: 0 % breddeslaek under
   object-fit:contain.
   spor/zoom (3. sep 2026) maalte to erstatninger og fravalgte begge:
   (A) at skalere RAMMEN eller KORTET i stedet for billedet er kun crop-frit,
   hvis intet ydre element klipper den forstoerrede boks - men i den
   VIGTIGSTE flade, katalogets eget gitter (.net, assets/generator.css),
   er kort-mellemrummet kun 1 px. Et kort paa ~267 px, skaleret 1.024,
   raekker 3-5 px ud over sin egen kant paa hver side - langt mere end de
   1 px, der er at give af. Signalet ville daekke naboens hjoerne.
   (B) at flytte billedet LODRET inden for det slaek, object-fit:contain
   allerede efterlader, er maalt til minimum 1,98 % af rammens hoejde paa
   tvaers af kataloget (~2 px ved kortbredde 267 px) - for lille en
   bevaegelse til at vaere et synligt signal.
   Ingen erstatning er bygget. Kortets border-color (denne regel) og i
   .net-gitteret baggrundsfarve+fokusring (assets/generator.css) baerer
   hover-/fokussignalet nu alene. */
@media (prefers-reduced-motion:no-preference){
  .kort{transition:box-shadow var(--tid) var(--slyng),border-color .2s ease}
}

/* KORTETS HOVER-/FOKUS-INVITATION (spor/indgang, punkt 3, 26. aug 2026).
   Fotografiets daværende scale(1.024) var 2,4 % — maalt usynligt, ikke et
   signal, og reglen er siden fjernet helt (L78, spor/zoom 3. sep 2026, se
   afsnittet ovenfor). Ét ekstra, klart greb: en tekst+pil toner ind oppe
   i billedet. (Denne klasse staar paa dead-CSS-vagtens BESKYTTET-liste,
   tests/dele/57-doed-css.mjs: markup'et den kraever, findes ikke i noget
   byg — urørt af dette spor.)
   TOPPEN, ikke bunden: bunden af billedet er allerede optaget af to andre
   overlays paa netop de kort, hvor de findes — `.maalplade .titelfelt`
   (LAENGDE x HOEJDE) og `.billedmaerke` (delt-foto-maerket) sidder begge
   `bottom:`. Et hover-signal dernede ville daekke de to, som IKKE er
   hover-kun og altid skal kunne laeses.
   `.kort-billed` er en ren wrapper om billede() (urort - alle tre
   billedtilstande: foto, maaleplade og tom flade faar signalet uden at
   nogen af dem selv er aendret).
   Reglen om det ubevaegelige hul gaelder stadig: signalet ligger OVEN PAA
   billedet (position:absolute), saa det kan aldrig aendre kortets hoejde
   eller skubbe teksten under det - ingen "hop" i gitteret.
   Synligheden (opacity) virker UDEN for media queryen, saa signalet findes
   for alle, ogsaa naar bevaegelse er slaaet fra; kun SELVE BEVAEGELSEN
   (transform, transition) er lagt inde i `no-preference`-blokken ovenfor,
   samme moenster som fotografiets egen scale. */
.kort-billed{position:relative;overflow:hidden}
.kort-invit{
  position:absolute;left:0;right:0;top:0;z-index:1;
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:var(--r3) var(--r3h);background:var(--panel);color:var(--blaek);
  font-size:var(--fs-mikro);font-weight:600;letter-spacing:-.008em;
  border-bottom:1px solid var(--linje);
  opacity:0;pointer-events:none;
}
/* L76: ikonet staar paa --panel (1,60 : 1 som accent). --blaek deler farve
   med invitationens egen tekst, som allerede er --blaek. */
.kort-invit .ikon{width:15px;height:15px;stroke-width:2;color:var(--blaek)}
.kort:hover .kort-invit,.kort:focus-within .kort-invit{opacity:1}

@media (prefers-reduced-motion:no-preference){
  .kort-invit{transform:translateY(-100%);
    transition:transform var(--tid) var(--slyng),opacity var(--tid) var(--slyng)}
  .kort:hover .kort-invit,.kort:focus-within .kort-invit{transform:translateY(0)}
}

/* --- 12. Gitteret ---------------------------------------------------------
   26 og 22 px stod uden for ottetalsskalaen — de var opfundet ved siden af
   den. Nu 32 / 24, som er skalaens egne trin. Ved 1440 px gav det fire
   spalter: 4 x 310 + 3 x 24 = 1312 <= 1352 px indhold.

   RETNING INSTRUMENT (spor/instrument2, punkt 2, 26. aug 2026): D15's
   fund var TAETHEDEN, ikke paletten/skrifterne (uaendrede). Minimumsbredden
   sat ned 310px -> 250px giver FEM spalter ved 1440 px i stedet for fire
   (5 x 250 + 4 x 16 = 1314 <= 1352 px indhold). Raekke-gap 32->24,
   spalte-gap 24->16 - stadig skalaens egne trin (r5/r4), ikke opfundne tal.
   250px er IKKE et gaet: 24.08.2026's egen maaling fandt klipning ved
   TRE underspalter paa 95-115px, og INGEN klipning ved TO underspalter helt
   ned til 360 px viewport-bredde. Et 250px kort med den kompakte striben
   (stadig kun TO underspalter, uaendret) giver mindst ca. 115px pr.
   underspalte i det snaevreste tilfaelde lige foer et spaltespring - i den
   nedre ende af det, der historisk var sikkert, ikke under det. Efterproevet
   empirisk (ikke kun regnet) med maalevaerktoej/maal.mjs's stoersteSpringIRaekke
   ved begge kraevede bredder, se rapportens maalinger. */
.gitter{display:grid;gap:var(--r5) var(--r4);
  grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
/* Under 679 px er der kun ÉN spalte, saa "spalte-gap" er ligegyldig - kun
   raekke-gappet (afstanden mellem kort, stablet) taeller for sidehoejden.
   Strammet til r2 (8px) her, to trin under r4 - maalt noedvendigt for at
   naa densitetskravet ved 390 px (spor/instrument2, punkt 2), se rapporten. */
@media (max-width:679px){.gitter{grid-template-columns:1fr;gap:var(--r2)}}

/* --- FRITSTAAENDE KORTGITTER (spor/kort, 31. aug 2026) -------------------
   Forsidens "Fra kataloget" og producentsidernes modelliste bruger katalogets
   kortgitter (.net i generator.css), saa kortet har ÉN kilde og ikke tre
   haandkopier. Men katalogets to gitterbunde passer ingen af dem:

   `.net` laegger linjefarven i BUNDEN og lader kortene staa som huller i den.
   Det giver haarstregerne mellem kortene gratis - men kun naar raekkerne gaar
   op, som katalogets 77 goer.

   `.net--seneste` maler bunden med panelfarven i stedet. Det virker paa
   katalogets aabning, fordi den ligger PAA en panelflade, saa en tom celle
   forsvinder ind i baggrunden.

   MAALT paa forsiden 31. aug 2026, og det var her, jeg tog fejl foerste gang:
   forsiden har 6 kort i 5 spalter ved 1440 px = 4 tomme celler, og gitteret
   ligger paa sidens graa bund (rgb 232,235,237), ikke paa en panelflade. Med
   `.net--seneste` blev de fire celler til ét naesten-hvidt felt (rgb
   250,251,251) paa 1070 px - det modsatte af usynligt. Skaermbilledet viste
   det; ingen af maaletallene (overloeb, hoejdespring, beskaering) kunne.

   Derfor en tredje bund: INGEN. Gitteret er gennemsigtigt, og hvert kort
   baerer selv sin haarstreg. En tom celle viser da sidens egen bund og er
   dermed faktisk usynlig - uanset hvor mange kort raekken har, og uanset hvad
   fladen under gitteret er malet med. Det er ogsaa den eneste af de tre, der
   holder for producentsiderne, hvor modelantallet gaar fra 1 til 13.

   Specificiteten er ikke tilfaeldig: generator.css indlaeses EFTER system.css,
   saa `.net{background:var(--linje)}` (0,1,0) ville vinde over en regel med
   samme vaegt her. `.net.net--fritstaaende` er (0,2,0), og kort-reglen
   (0,3,0) slaar `.net .kort{box-shadow:none}` (0,2,0). */
.net.net--fritstaaende{background:transparent;box-shadow:none}
.net.net--fritstaaende .kort{box-shadow:0 0 0 1px var(--linje)}

/* Forsidens smagsproeve "Fra kataloget" viser SEKS kort. auto-fill ovenfor
   giver praecis fem spalter ved 1440 (250*5 + 16*4 = 1314 <= 1352, seks ville
   kraeve 1580), saa raekke 2 stod med ét kort og fire tomme pladser ved siden
   af - maalt med maal.mjs: kort 6, raekker 2. Den forældreløse laeses som en
   fejl, ikke som en sektionsafslutning, og den staar lige over sidens
   vigtigste gentagne CTA (KRITIK-4 fund 6).

   SEKS SPALTER ER IKKE EN MULIGHED: (1352 - 5*16)/6 = 212 px pr. kort, under
   det 250 px-gulv, linje 790 ovenfor saetter EFTER maaling - og 212 px kort
   ville lande de kompakte underspalter paa ~95 px, praecis det interval, hvor
   den maaling fandt klipning. To hele raekker a tre er derfor formen.
   Kataloget selv beholder auto-fill: dér er en kortere sidste raekke det
   normale for en lang liste, ikke en forældreløs. */
@media (min-width:1080px){
  .gitter--udvalg{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* --- 13. Betjening: soegefelt og filtre ----------------------------------- */
/* L17: begge skal staa i foerste viewport. Uden JavaScript virker feltet
   stadig som et almindeligt formularfelt, og filtrene som links. */
/* Loftet paa maalet (27. aug 2026): uden det strakte feltet sig til ca.
   1230 px ved 1440, og sorteringsetiketten blev skubbet helt ud til modsatte
   kant. Et soegefelt bliver ikke bedre af at vaere en meter bredt end
   den laengste soegning, nogen skriver i det. */
.sog{display:flex;flex-direction:column;gap:6px;flex:1 1 300px;min-width:250px;
  max-width:640px}
/* JPK 1. sep 2026: "soege feltet og teksten padding" - feltet var 50px hoejt
   med 12px lodret polstring, hvor kun to gulve er ufravigelige (katalog2):
   min-height 44px (sitets eget beroeringsmaal, jf. .kort__saml paa touch,
   .udtraek__greb) og font-size 16px (under den zoomer iOS Safari selv ved
   fokus). 16px og 9px lodret polstring lander lige paa gulvet - maalt med
   C:/Praktik/websites/maalevaerktoej/maal.mjs, ikke regnet i haanden. */
.sog input{
  font-family:var(--mono);font-size:var(--fs-felt);min-height:44px;padding:9px 14px;width:100%;
  background:var(--panel);color:var(--blaek);
  /* SYSTEMREGEL (spor/flader pas 3, 4. sep 2026): en kant, der er det ENESTE,
     der identificerer en betjeningsflade, skal vaere --hegn-baerende eller
     moerkere. Her stod var(--hegn), og det er #9AA3A9 PAA --panel #FAFBFB =
     2,47 : 1 mod WCAG 1.4.11's krav paa 3 : 1 for meningsbaerende ikke-tekst.
     DESIGN.md's "## Konflikter" har baaret netop dette tal som en aaben
     konflikt; det er nu lukket. --hegn-baerende #737F87 paa --panel = 3,96 : 1.
     Paletten er UROERT - begge poletter fandtes i forvejen, og
     --hegn-baerende er den lyseste, der klarer 3 : 1 paa alle tre bundfarver
     (panel 3,96 · bund 3,43 · tom 3,31). --hegn og --linje er derfor
     dekorative: skillelinjer, tegninger og fravaerssproget (stiplet). */
  border:1px solid var(--hegn-baerende);border-radius:var(--hjoerne);
}
.sog input::placeholder{color:var(--blaek3);opacity:1}
.sog input:focus-visible{border-color:var(--ring);outline-offset:1px}

/* --- J1: SOEGEFELTET FAAR SIT EGET BAAND (PLAN-katalog.md J1.1) -----------
   JPK 3. sep 2026, ordret: "Padding omkring 'Search by model, manufacturer or
   requirement'". MAALT FOER, 1440 px, /en/: luft OVER .sog = 0 px, luft UNDER
   = 0 px. Blokken stoeder direkte op mod <details class="udtraek">'s kant over
   og mod .facetter__net under, saa soegefeltet laeses som et LAAG svejset paa
   filtergitteret i stedet for som panelets foerste instrument.

   RETTELSEN ER UDVENDIG, OG DET ER MAALT FREM - ikke valgt. Indersiden er
   allerede paa sit gulv: 16 px skrift + 9 px lodret polstring = 44 px, sat af
   JPK selv 1. sep (se blokken lige ovenfor, med begge gulves begrundelse).
   Beder man om MINDRE polstring indeni, braekker man et gulv, der er to dage
   gammelt; beder man om polstring UDENOM, er der ingen at reducere - der er
   ingen. Derfor tilfoejes den her.

   INGEN NY STREG (L40: faerre streger, ikke flere). Facetgitterets foerste
   raekke har ingen overkant, og luften alene skiller de to instrumenter.

   `padding` OG IKKE `margin`: .udtraek er et <details> uden ramme og uden
   polstring (generator.css:1287), og .sog er dens foerste element i flow -
   summary'en over den er display:none. En margin-top ville derfor kunne
   KOLLAPSE ud gennem foraeldren og lande uden for panelet i stedet for inde i
   det. Polstring kollapser aldrig. .sog har hverken baggrund eller ramme, saa
   polstring og margin ser ens ud - kun kollapsrisikoen skiller dem.
   R2 (4. sep 2026): polstring sat til var(--r4) 0 (16px), som overholder
   acceptkriterium J1.1 (>= 16px) og sparer 8px i toppen. */
.udtraek > .sog{padding:var(--r4) 0}

/* --- J2: FILTERPANELETS SKRIFTSKALA (PLAN-katalog.md J2.1) ----------------
   JPK 3. sep 2026: "Faa styr paa skriftstoerrelse paa filter-tekst ... saa det
   ser mere stramt ud". MAALT FOER, 1440 px, /en/, kun elementer med deres EGEN
   synlige tekstknude inde i .udtraek: TI forskellige skriftgrader.

     17    kunskaerm(2)          - skaermlaesertekst, ses aldrig
     14    rk__navn(32)          <- SELVE filterteksten
     13,5  chip__navn(5)
     13    antal__tal(32) reserveret__ord(1) t-mikro(2) url(1)
     12,5  chip-fod(1) reserveret__note(1)
     12    d__tal(15) d__ord(15) skala__traef(2)
     11,5  etiket(1)             <- soegefeltets etiket
     11    facet__navn(9) skala__ord(2)   <- GRUPPETITLEN
     10,5  facet__tal(4)
     10    skala__ridse-tal(11)

   HIERARKIET VAR VENDT OM, og det er den egentlige fejl - ikke antallet.
   Gruppetitlen, hun skal laese FOERST for at vide, hvad gruppen er, stod paa
   11 px versaler med .17em sperring (maalt 1,87 px pr. mellemrum) - MINDRE og
   dyrere at laese end de valg, den introducerer (14 px). MODE Operate: den
   besoegende loeser en opgave, og orienteringen maa ikke koste mere end valget.

   PANELET HAR TO JOBS, OG FAAR DERFOR TO GRADER - ikke ti:
     14 px  VAELGE    - det, hun laeser for at traeffe valget
     12 px  ORIENTERE OG TAELLE - gruppetitler, optaellinger, undertekster

   De to skilles ikke ad af stoerrelse alene, men af versaler, vaegt og farve,
   som de allerede gjorde. INGEN NY VAERDI INDFOERES: 14 og 12 findes begge i
   stilarkene i forvejen, saa de to filers antal forskellige font-size-vaerdier
   kan ikke stige af denne blok. Det var briefets egen advarsel ("saa er den
   56"), og den er grunden til, at intet her er et nyt trin.

   PLANENS TABEL RAMTE IKKE HELE SANDHEDEN, og det er maalt: den tilskrev 11 px
   alene .facet__navn og 13 px alene .antal. Panelet baerer ogsaa .skala__ord
   paa 11, og .t-mikro/.url paa 13. Retter man kun de fem, planen navngav,
   staar der SEKS grader tilbage - ikke de "<= 4", dens acceptkriterium beder
   om. De oevrige er derfor med her.

   ALT ER SCOPET UNDER .udtraek, og det er ikke pynt: .t-mikro har 771
   forekomster i dist/ og .url 388. En uscopet aendring ville flytte skrift paa
   hver eneste side i kataloget. Scopet goer ogsaa, at generator.css er
   UROERT - et samtidigt spor ejer den fil, og .udtraek-leddet giver hoejere
   specificitet end dens rene klasser, saa den vinder uden at blive redigeret.
   Det er samme greb, `summary.facet__navn::after` allerede bruger i afsnittet
   om katalogets flader nedenfor. */
.udtraek .rk__navn{font-size:var(--fs-raekke)}
.udtraek .facet__navn,
.udtraek .rk .antal,
.udtraek .t-mikro,
.udtraek .etiket,
.udtraek .skala__ord,
.udtraek .skala__traef,
.udtraek .skala__ridse-tal{font-size:var(--fs-etiket)}
/* ÉN SPERRING TIL PANELETS TRE VERSALETIKETTER. .09em er IKKE et nyt tal -
   det er den vaerdi, `.typeskilt .maerke` allerede staar paa, saa et
   eksisterende trin genbruges i stedet for at et ellevte opfindes.
   Maalt foer: .facet__navn .17em (1,87 px), .skala__ord .13em, .etiket .15em -
   tre forskellige sperringer paa tre etiketter med samme job. */
.udtraek .facet__navn,
.udtraek .skala__ord,
.udtraek .etiket{letter-spacing:.09em}
/* J2's FJERDE VERSALETIKET, fundet ved min egen efterproevning og ikke i
   planen: `.udtraek__greb` er panelets haandtag og findes KUN under 720 px
   (generator.css §20l saetter den til display:flex dér). Maalt paa den
   byggede side: ved 1440 stod panelet paa 3 skriftgrader, ved 390 paa FIRE -
   haandtaget sad tilbage paa 11,5 px/.15em, mens de tre oevrige etiketter var
   flyttet til 12/.09em. Samme rolle, samme job, saa den foelger med; ellers
   var typeskalaen konsistent paa desktop og inkonsistent paa mobil.

   `details.udtraek > summary.udtraek__greb` og ikke `.udtraek > .udtraek__greb`:
   generator.css bruger PRAECIS den sidste selektor og indlaeses EFTER denne
   fil, saa de to ville staa lige (0-2-0) og generator vinde. Tagnavnene
   loefter til 0-2-2 uden at tilfoeje en klasse - og uden at roere den fil.
   Reglen er ubetinget, fordi elementet alligevel er display:none over 720. */
details.udtraek > summary.udtraek__greb{font-size:var(--fs-etiket);letter-spacing:.09em}

/* --- J3: LUFTEN MELLEM FILTERTEKSTERNE (PLAN-katalog.md J3.1) -------------
   JPK 3. sep 2026: "...saa det ser mere stramt ud". MAALT FOER, 1440 px:
   ni sammenfoldede facetter, syv paa 109 px og de to nederste paa 108 px -
   forskellen er praecis den `border-bottom`, `facet--sidste-raekke` fjerner.
   Titel til titel er 109 px; TOM LUFT mellem to filtertekster er 65 px.

   NEDBRYDNINGEN AF ÉN LUKKET FACET (maalt, ikke regnet):
     24  padding-top      .facetter__net .facet
     44  summary min-height   <- JPK's eget beroeringsgulv
     16  margin-bottom under titlen
     24  padding-bottom
      1  ramme
    109  i alt (108 nederst)   - tekstens egen hoejde inde i summary: 17 px

   TO AF DE FIRE TAL RETTES, ET ROERES ALDRIG:

   1. DE 16 PX ER DOEDVAEGT, NAAR FACETTEN ER LUKKET. Marginen findes for at
      skille titlen fra valgraekkerne - og er facetten lukket, ER der ingen
      raekker. Det er 16 px rent ingenting, ni gange. Derfor kun `:not([open])`:
      i AABEN tilstand goer marginen praecis det arbejde, den blev skrevet til.
   2. DE 2 x 24 PX er panelets ydre rytme og kan gaa ét trin ned til --r4.
      Det er ikke et nyt tal og heller ikke et gaet: generator.css saetter
      SELV `padding:var(--r4)` paa samme selektor under 720 px, saa 16 px er
      allerede panelets egen vaerdi paa den anden side af det knaek. Denne
      regel bringer blot desktop i takt med mobilen.
   3. DE 44 PX ER LAAST OG ROERES IKKE. Uden en egen min-height er <summary>s
      klikflade kun tekstlinjens 20 px, fordi .facet__navn ALDRIG arver hoejde
      fra facettens polstring - den ligger udenom. Begrundelsen staar i fuld
      laengde ved `summary.facet__navn` i afsnittet om katalogets flader.

   BEGGE REGLER ER SCOPET UNDER .udtraek af samme grund som J2: det giver
   hoejere specificitet end generator.css' egne selektorer, saa DEN FIL ER
   UROERT - et samtidigt spor ejer den. */
.udtraek .facetter__net .facet{padding:var(--r4)}
.udtraek .facetter__net details.facet:not([open]) > .facet__navn{margin-bottom:0}

/* --- R2: KATALOGETS FOERSTE SKAERM (BRIEF-katalogskaerm-gemini.md) -------
   MODE: Operate ("taethed slaar luft", DESIGN.md §Operate). Aabningens og
   pladens lodrette rytme strammes med skalaens tokens (--r*), saa betjeningen
   naar saa taet paa toppen som muligt, mens de ni kort--seneste i aabningen
   bliver staaende uroerte jf. briefets udelukkelse af PLAN-katalog §0.1.
   Specificitet: generator.css indlaeses EFTER system.css, saa reglerne
   scopes under .rum / .aabning / .plade (0,2,0) for at vinde uden at roere
   generator.css. */
.rum > .aabning{padding-top:var(--r3)}
.aabning .aabning__hoved{padding:var(--r4) var(--r5) var(--r3)}
.aabning .aabning__under{margin-top:var(--r2)}
.aabning .aabning__baand{padding:var(--r3) var(--r5)}
.aabning .aabning__note{margin-top:var(--r1)}
.rum .plade{padding-top:var(--r4)}
.plade .plade__hoved{padding:var(--r4) var(--r5) var(--r3)}
/* `.plade .strimmel{padding:var(--r2) var(--r5)}` STOD HER og er slettet
   9. sep 2026 (spor/valgbaand). JPK fjernede den moerke bar 8. sep; ingen af
   de 221 byggede sider har `class="strimmel"` mere, og test 57.1 talte den
   som aegte doed CSS. Chip-raekken, der afloeser den, har sin egen polstring
   i generator.css' `.valgbaand`. */

/* --- RESERVEKLASSEN `.filtre` ER SLETTET HER (Aa146's beslutning G) --------
   Her stod 11 regler for en filterchip-komponent: `.filtre`, `.filtre input`,
   `.filtre label` med sine hover/checked/focus-tilstande, og fire regler for
   `input[value="ikke_oplyst"]`, der gav hullet sit stiplede sprog.

   MAALT 3. sep 2026, med aegte tokengraense og positiv kontrol:
     class-tokenet "filtre" i dist/       0 forekomster i 0 af 216 HTML-filer
     positiv kontrol "facet__navn"       18 forekomster i 2 filer
     positiv kontrol "rk__mrk"           84 forekomster i 2 filer
     saetter noget JavaScript klassen?    nej - 0 traef i assets/*.js
   De to positive kontroller staar der, fordi et nul-resultat ellers ikke kan
   skelnes fra et moenster, der ikke virker. Metoden splitter class-attributten
   paa mellemrum og sammenligner token for token, saa `.filtre` hverken rammer
   `filtre-noget` eller ordet "filtre" i en kommentar.

   INGEN AF DE 11 REGLER DELTE SELEKTORLISTE MED EN LEVENDE SELEKTOR - alle 11
   begyndte paa `.filtre`, saa der er ikke slettet en regel, som ogsaa tjente
   noget andet. Det er efterproevet regel for regel, ikke antaget.

   HULLETS SPROG ER IKKE TABT. De fire `[value="ikke_oplyst"]`-regler blev
   afloest, da facetterne gik fra chips til raekker: `.rk--uoplyst`
   (generator.css) baerer i dag samme haarde begraensning 5 - stiplet kontur,
   ingen fyld, stoev-blaek, altid sidst efter en stiplet skillelinje. Det er
   den samme regel i en ny form, ikke en regel, der er faldet vaek.

   TILBAGE STAAR 7 SELEKTORDELE I 6 REGLER I generator.css, som dette spor
   IKKE ejer (et samtidigt spor har filen). De er lige saa doede som disse -
   klassen har 0 forekomster i hele dist/ - og boer fjernes af det spor, der
   ejer filen. Skrevet her, saa den naeste ikke konkluderer af generator.css
   alene, at `.filtre` stadig lever. */

/* --- 13b. KNAPPEN - ÉN PRIMITIV (L77, 2. sep 2026) -----------------------
   Her stod indtil nu `.videre`/`.videre--stille`, ORBIT-aeraens knap: massiv
   blaek, hvid tekst, 46 px, 15 px/600. Sitet talte i alt ELLEVE knapudtryk.
   Nu taler det ét.

   GRUNDFORMEN TALER TYPESKILT: mono, versaler, spaerret, systemets 2px-
   hjoerne (--hjoerne, L79). Retningen er LAAST og er ikke valgt efter
   udbredelse - `.videre` stod paa 158 sider og `.nulstil` paa 2. Udbredelse
   er et maal for oprydningens stoerrelse, ikke et argument for en retning.

   GRUNDFORMEN BAERER INGEN FARVE, og det er sporets vigtigste beslutning.
   `color:inherit` + `background:transparent` goer, at en `.knap` uden flade-
   variant arver den flade, den staar paa, og derfor ALDRIG kan blive
   usynlig ved et uheld. Det er praecis den fejl, spor/saml3 betalte for
   dagen foer: `.nulstil` var en MOERK-flade-knap (color:var(--paafod)), og
   genbrugt paa lys bund maalte den 1,16:1. En primitiv skal baere sin flade
   i sig - og den flade, man faar ved IKKE at vaelge, skal vaere den
   omgivende.

   FLADEN VAELGES EKSPLICIT, og de to flader hedder noget forskelligt:

     lys bund (--bund/--panel)   .knap--fyldt  .knap--kant  .knap--tekst
     moerk bund (--fod)                        .knap--kant-moerk
                                                     .knap--tekst-moerk

   INGEN af de fem er standarden; ordet "-moerk" i klassenavnet ER vaernet,
   for den forkerte flade kan ikke vaelges uden at have skrevet ordet.

   DEN FYLDTE VAEGT PAA MOERK FLADE FINDES BEVIDST IKKE ENDNU. Ingen af de
   elleve knapper, primitiven samler op, er en fyldt knap paa moerk bund, og
   en variant uden brugssted er doed CSS (tests/dele/57). Faar en kommende
   fladeplan brug for den, er pladsen udmaalt: `background:var(--paafod);
   color:var(--blaek)` = 12,72:1, og hover som resten af familien. Skriv den,
   naar der er en knap at saette den paa - ikke foer.

   HOVER ER ÉN GESTUS I HELE FAMILIEN: kassen fyldes med afmaerkningsgul, og
   teksten gaar til blaek - 9,19:1, uanset hvilken flade knappen stod paa.
   Undtaget er `--tekst`-vaegtene, som ingen kasse har at fylde; de skifter
   forgrund i stedet. Det er samme grammatik som links efter L76: accent er
   markoeren, aldrig hvileforgrunden paa lys.

   KONTRASTEN PAA HVER VARIANT, maalt med WCAG-formlen, laeseretning "X paa Y"
   (motoren valideret mod DESIGN.md's ti kendte svar, 10/10):
     --fyldt       panel paa blaek     14,69
     --kant        blaek paa bund      12,72   --kant-moerk   paafod paa fod    12,72
     --tekst       stoev-blaek paa bund 4,74   --tekst-moerk  paafod2 paa fod    5,94
     --tekst.frem  blaek paa bund      12,72   --tekst-moerk.frem accent paa fod 9,19
     hover, alle kasse-vaegte          blaek paa accent                         9,19
   Laveste er 4,74 mod WCAG's krav paa 4,5.

   INGEN KOEBSKNAP, ingen demo-knap, ingen prisforespoergsel (haard
   begraensning 1). Formen findes ikke i systemet, og primitiven maa ikke
   bruges til at indfoere den. */
.knap{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:44px;padding:0 var(--r4);
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:600;line-height:1.1;
  letter-spacing:.11em;text-transform:uppercase;
  color:inherit;background:transparent;
  border:0;border-radius:var(--hjoerne);
  text-align:center;text-decoration:none;cursor:pointer;
  -webkit-appearance:none;appearance:none;
}
/* INSTRUMENT tillader ét taktilt svar, ingen animation. Reglen stod foer kun
   paa kortets stempel; den er primitivens nu. */
.knap:active{transform:translateY(1px)}
@media (prefers-reduced-motion:reduce){.knap:active{transform:none}}
.knap .ikon{width:17px;height:17px;stroke-width:2}
/* Fokusringen er sidens globale (:focus-visible, afsnit 1). Ingen variant
   herunder maa saette outline:none - tests/dele/55.12 vogter det. */

/* LYS BUND ---------------------------------------------------------------- */
.knap--fyldt{background:var(--blaek);color:var(--panel)}
.knap--kant{color:var(--blaek);box-shadow:inset 0 0 0 1px var(--blaek2)}
/* Tekstvaegten har ingen kasse og derfor heller ingen polstring: den staar i
   klaebende raekker (.saml-taeller, .klaebebar), hvor 44 px hoejde ville
   skubbe raekken ned over indholdet - samme afvejning, som
   .specimen__fjern's ::after-felt loeser i generator.css. */
.knap--tekst{
  min-height:0;padding:0;
  color:var(--stoev-blaek);text-decoration:underline;text-underline-offset:3px;
}
/* MOERK BUND (--fod) ------------------------------------------------------- */
.knap--kant-moerk{color:var(--paafod);box-shadow:inset 0 0 0 1px var(--paafod2)}
.knap--tekst-moerk{
  min-height:0;padding:0;
  color:var(--paafod2);text-decoration:underline;text-underline-offset:3px;
}
/* FREM: tekstvaegtens oeverste trin, naar to tekstknapper staar side om side
   og den ene er handlingen ("aabn sammenligningen") og den anden fortrydelsen
   ("ryd"). Paa moerk flade er trinnet accent, ikke --paafod: L76 tillader
   udtrykkeligt accent som TEKST paa den moerke flade (9,19:1), og
   klaebebarens gaa-link har baaret den farve siden spor/kort. Skift den ikke
   til --blaek "for konsistensens skyld": det ville give 1,00 : 1. */
.knap--tekst.knap--frem{color:var(--blaek)}
.knap--tekst-moerk.knap--frem{color:var(--accent)}

/* HOVER: én gestus for kasse-vaegtene. */
.knap--fyldt:hover,.knap--kant:hover,.knap--kant-moerk:hover{
  background:var(--accent);color:var(--blaek);box-shadow:none;
}
.knap--tekst:hover,.knap--tekst.knap--frem:hover{color:var(--blaek)}
.knap--tekst-moerk:hover,.knap--tekst-moerk.knap--frem:hover{color:var(--paafod)}

/* --- 14. Raekker, tabel og sektionshoved ---------------------------------- */
/* Baerer bid 4-7: robotsidens feltliste og producentsidens EU-kolonne. */
.raekker{display:flex;flex-direction:column}
.raekke{display:grid;grid-template-columns:minmax(11ch,42%) minmax(0,1fr);gap:10px 16px;
  align-items:baseline;padding:var(--r3) 0;border-top:1px solid var(--linje)}
.raekke:first-child{border-top:0}
.raekke dt{font-size:var(--fs-raekke);font-weight:600;color:var(--blaek2)}
/* Gyldighedsmaerket i feltlisten (D18). Her bliver maerkerne til en KOLONNE:
   raekkerne staar under hinanden, marken staar i samme x i hver, og oejet
   kan loebe den ned uden at laese. Feltnavnets farve gaar fra --blaek2 til
   --blaek, saa den maerkede raekke ogsaa er lidt tungere end sine naboer.
   Vaerdikolonnen roeres IKKE — det er hele forskellen paa C og A. */
.raekke dt.m-etiket{position:relative;padding-left:var(--r3);color:var(--blaek)}
.raekke dt.m-etiket::before{content:"";position:absolute;left:0;top:.18em;bottom:.18em;
  width:2px;background:var(--hegn)}
.raekke .v{font-size:var(--fs-broed)}

/* L102 (4. sep 2026): Grundreglen for tabeller har min-width:0 som standard.
   min-width:620px laa tidligere paa den bare elementregel og tvang enhver
   ny tabel ud i 260px vandret overloeb paa mobil (390px). Tabeller der
   behoever specifik breddestyring deklarerer det lokalt. */
table{border-collapse:collapse;width:100%;min-width:0;font-size:var(--fs-lille)}
th,td{text-align:left;padding:var(--r3) var(--r4);border-top:1px solid var(--linje);vertical-align:baseline}
thead th{border-top:0;border-bottom:2px solid var(--blaek);white-space:nowrap;
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:500;letter-spacing:.13em;
  text-transform:uppercase;color:var(--blaek3)}
tbody th{font-weight:600;font-size:var(--fs-lille);color:var(--blaek)}
td .v{font-size:var(--fs-lille)}

/* --- 14b. Tilstandenes sats, i hver kontekst -------------------------------
   Maalt 24.08.2026: hver kontekst ovenfor (.stribe .v, .stribe--kompakt .v,
   .raekke .v, td .v) saetter figurens sats direkte paa .v-elementet. Den
   regel har to klasser (specificitet 0,0,2,0) og slaar dermed ALTID
   tilstandenes egen .v-ikke/.v-billede (.46em) og .v-nej/.v-ja (.62em), som
   kun har én (0,0,1,0) - uanset raekkefoelge i filen. Computed style i
   Chromium bekraeftede det: "ikke oplyst" i et kort stod ikke i .46em af
   20px (9,2px), men fladt i 20px - samme sats som tallet selv, hvilket er
   praecis den fejl, DESIGN.md's regel om de fire tilstande forbyder, og en
   medvirkende aarsag til klipningen (11 tegn ved 20px passer ikke i en
   ~95 px celle). Reglerne herunder vinder ved samme kaskadeteknik (to
   klasser) og holder desuden gulvet paa 10,5 px i alle fire kontekster. */
.stribe .v-ikke,.stribe .v-billede{font-size:var(--fs-mikro)}
.stribe .v-nej,.stribe .v-ja{font-size:var(--fs-manual)}
.stribe--kompakt .v-ikke,.stribe--kompakt .v-billede{font-size:var(--fs-data);padding:2px 6px 3px}
.stribe--kompakt .v-nej,.stribe--kompakt .v-ja{font-size:var(--fs-mikro)}
.raekke .v-ikke,.raekke .v-billede,td .v-ikke,td .v-billede{font-size:var(--fs-data)}
.raekke .v-nej,.raekke .v-ja,td .v-nej,td .v-ja{font-size:var(--fs-gulv)}
/* Hullet og "kun vist paa billede" maa ikke fylde mere end deres egen tekst:
   .krop's stretch (afsnit 10) stroek ellers chippen ud til hele cellens
   bredde, saa et hul saa bredere ud end det tal, det staar i stedet for. */
.stribe .krop > .v-ikke,.stribe .krop > .v-billede{align-self:flex-start}

/* Sektionshovedet. Versaletiketten faar sin egen linje OVER overskriften i
   stedet for at staa paa dens grundlinje — den navngiver datagruppen, og en
   etiket, der deler linje med det, den navngiver, laeses som en del af den.
   Skabeloner uden etiket (robot.mjs, producent.mjs) er uberoerte: reglen
   rammer kun et .etiket-barn, hvis der er ét. */
.sektion{padding-top:var(--r8)}
.sektion-hoved{display:flex;flex-wrap:wrap;gap:var(--r2) var(--r5);align-items:baseline;
  padding-bottom:var(--r4);border-bottom:1px solid var(--linje)}
.sektion-hoved > .etiket{flex:1 0 100%;margin-bottom:var(--r0)}
.sektion-hoved h2{flex:1 1 auto}
.sektion-hoved .tal{font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:var(--fs-mikro);color:var(--blaek3);white-space:nowrap}

/* =============================================================================
   16. TYPESKILTET PAA ROBOTSIDEN (spor/robot, 31. aug 2026 — L57/L60)

   Alt herunder er TILFOEJET. Ingen eksisterende regel i denne fil er aendret:
   hver regel er praefikset med `.typeskilt`, som robot.mjs saetter paa
   <article class="robotside typeskilt">. Der er to grunde, og kun den ene er
   ordentlighed:

     1. assets/generator.css indlaeses EFTER denne fil (side.mjs:1519-1520), saa
        en regel med SAMME specificitet dér vinder uanset hvad der staar her.
        `.typeskilt`-praefikset loefter hver regel til 0,2,0 mod generator.css'
        0,1,0 paa `.robot-top`, `.skema` og `.robot-noegletal` — og goer dermed
        raekkefoelgen ligegyldig i stedet for at kaempe med den.
     2. `spor/katalog` arbejder i generator.css lige nu. Ingen linje her
        roerer den fil.

   Roller og toner er MANIFEST.md's, laest gennem poletterne i afsnit 2:
   --bund eloxgraa (pladen), --panel kridt (kortfladen), --blaek gunmetal
   (blaekket), --linje rille (haarstregen), --hegn stoevgraa (KUN kontur,
   2,14:1 — maa aldrig baere tekst), --blaek3 stoev-blaek (teksten i "ikke
   oplyst", 4,74:1), --accent afmaerkningsgul (KUN markering).
   Radius holder sig til skalaen 0/2/6/8/12 + 99px-pillen, som
   tests/dele/31-pudsning.mjs vogter; 2 px er typeskiltets stansning.
   ========================================================================== */

/* --- 16a. Hovedet: NAVNET OVER BILLEDET -----------------------------------
   JPK 31. aug 2026: overskriften skal enten staa over billedet eller laengst
   til hoejre. Valgt: OVER (mulighed a) — se begrundelsen i robot.mjs' top().
   Gitteret er derfor to raekker, hvor foerste raekke spaender begge spalter:

       "navn navn"
       "foto tal"

   Under 900 px stakkes alle tre, og navnet er STADIG foerst — det er hele
   forskellen fra foer, hvor <h1> laa paa top=464 px ved 390, altsaa under
   fotografiet og dets billedtekst. */
.typeskilt .robot-top{
  display:grid;grid-template-columns:minmax(0,1fr);
  gap:var(--r5);align-items:start;padding-top:var(--r2);
}
@media (min-width:900px){
  .typeskilt .robot-top{
    grid-template-columns:minmax(0,1.06fr) minmax(300px,1fr);
    grid-template-areas:"navn navn" "foto tal";
    column-gap:var(--r6);row-gap:var(--r5);
  }
  .typeskilt .robot-navn{grid-area:navn}
  .typeskilt .robot-foto{grid-area:foto}
  .typeskilt .robot-noegletal{grid-area:tal}
}
/* Gitterets egen row-gap styrer afstanden. generator.css' margin-top paa
   striben ville laegge sig oven i den — den var sat, dengang striben laa
   som soeskende under hovedet. */
.typeskilt .robot-noegletal{min-width:0;margin-top:0}

/* Skiltets hoved: pladen har navnet stanset foerst og stoerst. */
.typeskilt .robot-navn{
  display:flex;flex-direction:column;align-items:flex-start;gap:var(--r3);
  padding-bottom:var(--r4);border-bottom:1px solid var(--linje);
}
/* Vaegten er 700, ikke 800. Saira Semi Condensed selvhostes i 400/500/600/700
   (afsnit 1) — 800 findes ikke i filerne, saa browseren SYNTETISERER den ved
   at fortykke 700'eren. En syntetisk fed er praecis den slags, et stanset
   skilt ikke har: stregen bliver ujaevn i store grader. Comp'ens .post__navn
   staar ogsaa paa 700.
   GRADEN er --fs-h1 siden 9. sep 2026 (L111): navnet stod paa sitets eneste
   84 px-grad, og JPK bad om én h1-grad paa tvaers af alle sider. Reglen bliver
   staaende, selv om den nu saetter samme grad som .t-h1 - den baerer skiltets
   egen line-height (.94) og letter-spacing, som navnepladen har brug for, og
   test 36.4/36.5 laeser netop denne regel. */
.typeskilt .robot-navn h1{
  margin:0;font-weight:700;line-height:.94;letter-spacing:-.032em;
  font-size:var(--fs-h1);text-wrap:balance;overflow-wrap:break-word;hyphens:auto;
}
/* Producent, land og aar som stanset hovedlinje, ikke som broedtekst. */
.typeskilt .robot-navn .kort-ophav{gap:5px 12px}
.typeskilt .robot-navn .kort-ophav .prod,
.typeskilt .robot-navn .kort-ophav .land,
.typeskilt .robot-navn .kort-ophav .aar{
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--blaek3);
}
.typeskilt .robot-navn .kort-ophav .land::before,
.typeskilt .robot-navn .kort-ophav .aar::before{content:"\00B7";margin-right:var(--r3)}
.typeskilt .robot-navn .kort-ophav a.prod{color:var(--blaek2)}
.typeskilt .robot-navn .kort-ophav a.prod:hover{color:var(--blaek)}
.typeskilt .robot-videre{margin:0}

/* --- 16b. Maerkelinjen: ÉN raekke stansede maerker -------------------------
   Grammatikken er comp'ens `.mrk`: versaler, 2 px stansning, 1 px rille.
   Rammen (ikke en box-shadow) baerer BEGGE former, saa et stiplet
   "ikke oplyst"-maerke har noejagtig samme ydre maal som et heltrukket —
   ellers ville de tre tilstande ogsaa skille sig ved STOERRELSE, og en
   forskel, ingen har valgt, er svaerere at laese end ingen forskel. */
.typeskilt .skiltlinje{gap:8px;margin-top:var(--r0)}
.typeskilt .maerke{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--mono);font-size:var(--fs-data);font-weight:600;letter-spacing:.09em;
  text-transform:uppercase;color:var(--blaek2);
  background:none;border:1px solid var(--linje);border-radius:var(--hjoerne);padding:var(--r1h) var(--r2h);
}
/* "I produktion" er den ene forskel, kortet og skiltet skal kunne baere, og
   den faar derfor den fyldte plade. Alle andre statusser staar som kontur —
   en udgaaet model er ikke en advarsel, den er en oplysning. */
.typeskilt .maerke--drift{background:var(--blaek);border-color:var(--blaek);color:var(--paafod)}
/* STATUS SKILLER SIG UD PAA KANTENS VAEGT, IKKE PAA EN FARVE ELLER EN FLADE
   (spor/kort-hierarki 10. sep 2026, JPK: "Robotsiden: Discontinued-tag skal
   vaere tydeligere").

   Skiltlinjen har fem chips, og status var chip 1 af 5 uden ét eneste
   traek, der skilte den fra en vaegtklasse eller en anvendelse: samme 1px
   --linje-kant (1,56 : 1 paa --panel), samme --blaek2-tekst, samme grad.
   Laeseren skulle LAESE fem chips for at finde den ene, der siger, om
   maskinen overhovedet saelges.

   FORSKELLEN ER FORM, ikke farve - haard begraensning 5's logik
   (DESIGN.md "De fire datatilstande"): dobbelt kantvaegt og fuld blaek,
   begge tokens systemet allerede har. Ingen ny farve, ingen ny grad, intet
   nyt symbol. `box-sizing:border-box` er global (linje 461), saa chippen
   beholder noejagtig samme ydre maal som sine naboer - samme grund, som
   afsnittets egen indledning giver for at lade RAMMEN baere begge former.

   MAALT 10. sep 2026 paa --panel #FAFBFB:
     kant  --blaek #22262A  14,69 : 1   (var --linje #C6CCD1  1,56 : 1)
     tekst --blaek #22262A  14,69 : 1   (var --blaek2 #545C63  6,56 : 1)

   `maerke--drift` ("i produktion") er UROERT: den beholder sin fyldte
   plade, og reglen ovenfor staar stadig. */
.typeskilt .maerke--status:not(.maerke--drift){
  border-width:2px;border-color:var(--blaek);color:var(--blaek);
}
.typeskilt .maerke--tom{
  background:none;border:1px dashed var(--hegn-baerende);
  color:var(--blaek3);font-weight:500;font-size:var(--fs-data);
}
/* 16b-2. L79 SLETTEDE TRE REGLER HER, og det er den bedste slags sletning:
   de var blevet sande af sig selv.

   Fotorammen, "intet foto"-pladen og noegletalspladen arvede --rund (12 px)
   fra den gamle ORBIT-verden, og TYPESKILT ville have 2 px. De tre regler
   ophaevede derfor --rund tilbage til 2 px - i haanden, med lange selektorer,
   scopet under .typeskilt. Systemet rettede sig selv ét sted ad gangen.
   Nu ER 2 px systemets radius (--hjoerne), saa alle tre sagde praecis det
   samme som grundreglerne, de overskrev. Efterprovet enkeltvis foer
   sletningen: generator.css' `.billedled--stor` og
   `.billedled--stor .intetfoto` samt system.css' `.stribe` staar alle tre
   paa var(--hjoerne).

   TILBAGE staar ÉN regel, og den er ikke en gentagelse: det indre <picture>
   skal vaere skarpt (0), ikke stanset. Den er beholdt med vilje.
   Selektoren er lang med vilje: den skal vinde over generator.css' egen
   regel for det samme <picture> uden at roere den fil.

   VAGTEN `:not(.billedled--maal)` ER FJERNET FRA BEGGE SIDER 9. sep 2026
   (spor/pil, instruksen i tests/dele/57-doed-css.mjs grund 14). Maaltro-
   pladen udgik med L113, saa vagten matchede altid. SPECIFICITETEN FALDT
   PAA BEGGE, OG RANGORDENEN STAAR: generator.css gik fra 0,3,0 til 0,2,0
   (`.billedled--stor picture`), denne fra 0,4,0 til 0,3,0. Forskellen er
   den samme, saa reglen her vinder stadig. */
.typeskilt .robot-foto .billedled--stor picture{border-radius:0}

.typeskilt .maerke__mrk{width:10px;height:10px;flex:none;color:var(--blaek3);display:block}
.typeskilt .maerke--drift .maerke__mrk{color:var(--paafod2)}

/* --- 16c. Enhedsomskifteren (L60) -----------------------------------------
   Uden JavaScript. `.enhedsskift__boks` er en rigtig afkrydsning som foerste
   barn af <article>; alt indhold ligger i SOESKENDE efter den, saa
   `:checked ~ * .x` naar hver eneste figur paa siden. Etiketten kan derfor
   staa hvor som helst — den staar to steder (noegletalshovedet og skemaets
   hoved), fordi flere <label for=…> til samme kontrol er gyldig HTML og
   sidens tal staar to steder.

   Boksen selv er .kunskaerm (1x1 px, clip-path) og altsaa stadig i
   tabuleringsraekkefoelgen; fokusringen tegnes paa etiketten i stedet, saa
   den ses dér, hvor kontrollen ser ud til at vaere. */
.enhedsskift{
  display:inline-flex;align-items:center;gap:10px;cursor:pointer;
  font-family:var(--mono);font-size:var(--fs-data);font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--blaek3);white-space:nowrap;
  padding:var(--r1h) var(--r3);min-height:44px;
  border:1px solid var(--linje);border-radius:var(--hjoerne);background:var(--panel);
}
.enhedsskift:hover{color:var(--blaek);border-color:var(--hegn)}
.enhedsskift__spor{
  position:relative;display:block;flex:none;width:30px;height:14px;
  /* Samme systemregel som .sog input ovenfor: kontaktens SPOR er selve
     affordancen - der er ingen anden grafik, der siger "det her er en
     kontakt". var(--hegn) #9AA3A9 paa --bund #E8EBED = 2,14 : 1, altsaa endnu
     laengere under 1.4.11's 3 : 1 end inputrammen var. --hegn-baerende paa
     --bund = 3,43 : 1. Knoppen selv staar i --blaek3 (4,74 : 1 paa bund) og
     var aldrig problemet. */
  border:1px solid var(--hegn-baerende);border-radius:99px;background:var(--bund);
}
.enhedsskift__knop{
  position:absolute;top:1px;left:1px;width:10px;height:10px;
  border-radius:99px;background:var(--blaek3);
}
/* Gult er markering og intet andet (MANIFEST §Paletten): den valgte
   tilstand er praecis ét af de fire steder, kuloeren maa optraede. */
.typeskilt .enhedsskift__boks:checked ~ * .enhedsskift{color:var(--blaek);border-color:var(--blaek)}
.typeskilt .enhedsskift__boks:checked ~ * .enhedsskift__spor{background:var(--accent);border-color:var(--blaek)}
.typeskilt .enhedsskift__boks:checked ~ * .enhedsskift__knop{left:auto;right:1px;background:var(--blaek)}
.typeskilt .enhedsskift__boks:focus-visible ~ * .enhedsskift{
  outline:3px solid var(--ring);outline-offset:3px;border-radius:var(--hjoerne);
}

/* Selve skiftet. `display:contents` er valgt frem for inline/block, fordi
   wrapperen saa slet ingen kasse har: den METRISKE visning tegnes noejagtig
   som foer dette spor, og acceptkriteriet "metrisk uroert" er dermed en
   egenskab ved formen frem for noget, der skal maales frem hver gang. */
.enhedsvis{display:contents}
.enhedsvis--imperial{display:none}
.typeskilt .enhedsskift__boks:checked ~ * .enhedsvis--metrisk{display:none}
.typeskilt .enhedsskift__boks:checked ~ * .enhedsvis--imperial{display:contents}

/* Maerket paa VORES omregning. Stiplet ramme — samme sprog som "ikke
   oplyst": begge siger "her staar ikke et tal, producenten har oplyst".
   9 px er over skriftgulvet paa 8 px (tests/dele/31-pudsning.mjs). */
.omregnet{
  display:inline-block;margin-left:var(--r2);vertical-align:1px;
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:700;letter-spacing:.13em;
  text-transform:uppercase;color:var(--blaek3);
  border:1px dashed var(--hegn);border-radius:var(--hjoerne);padding:1px 5px;
}
.enhedsnote{display:none}
.typeskilt .enhedsskift__boks:checked ~ * .enhedsnote{display:block;margin:0 0 var(--r4)}

/* --- 16d. Skemaet: AABEN tabel, ikke en sammenklapning --------------------
   Tre kolonner som paa comp'ens robotside: felt / vaerdi / kilde og
   forbehold. Sidens 890 forbehold laa foldet bag <details>; briefets punkt
   5.5 siger, at et redesign ikke maa gemme dem for at faa et renere layout.
   generator.css' §9f tegner stadig den gamle sammenklapning — de regler
   rammer ikke laengere noget paa robotsiden, og de overskrives her, hvor de
   ellers ville slaa igennem. */
.typeskilt .skema{
  margin-top:0;padding-top:var(--r7);background:none;border:0;border-radius:0;
  border-top:1px solid var(--linje);
}
.typeskilt .skema__hoved{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--r3) var(--r5);
  padding-bottom:var(--r4);
}
.typeskilt .skema__hoved h2{flex:0 0 auto}
.typeskilt .skema-taeller{
  font-family:var(--mono);font-size:var(--fs-mikro);font-weight:500;color:var(--blaek3);margin-right:auto;
}
/* `min-width:0` er IKKE pynt. system.css' bare `table{…min-width:620px…}`
   (afsnit 14) er skrevet til sammenligningsmatricen og rammer ENHVER tabel
   paa sitet. Maalt 31. aug 2026 ved 390 px, foer denne linje: skematabellens
   computed min-width var 620px, body.scrollWidth 636 — altsaa 246 px vandret
   overloeb paa hver eneste robotside, uden at nogen regel saa forkert ud.
   generator.css:644 nulstiller den samme faelde for `.saml-matrix` med
   praecis samme begrundelse ("paa en telefon ville den give…"), saa fælden
   er kendt — den var bare ikke skrevet ned et sted, en ny tabel ville
   snuble over den. Nu er den det to steder. */
.typeskilt .skema-tabel{width:100%;min-width:0;border-collapse:collapse;font-size:var(--fs-raekke)}
.typeskilt .skema-tabel__kap{
  text-align:left;padding:0 0 var(--r4);max-width:86ch;
  font-size:var(--fs-mikro);line-height:1.55;color:var(--blaek2);
}
.typeskilt .skema-tabel th,.typeskilt .skema-tabel td{
  text-align:left;padding:var(--r2h) var(--r3h);border-top:1px solid var(--linje);vertical-align:baseline;
}
.typeskilt .skema-tabel th:first-child,.typeskilt .skema-tabel td:first-child{padding-left:0}
.typeskilt .skema-tabel td:last-child{padding-right:0}
.typeskilt .skema-tabel thead th{
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:700;letter-spacing:.15em;
  text-transform:uppercase;color:var(--blaek3);
  padding-top:0;padding-bottom:var(--r2);border-top:0;
}
.typeskilt .skema-gruppenavn th{
  padding-top:var(--r6);border-top:0;
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:700;letter-spacing:.15em;
  text-transform:uppercase;color:var(--blaek3);
}
.typeskilt .skema-tabel tbody th[scope="row"]{width:24%;font-weight:500;color:var(--blaek2)}
.typeskilt .skema-v{width:26%;font-weight:600;overflow-wrap:anywhere}
.typeskilt .skema-k{width:50%;font-size:var(--fs-mikro);line-height:1.55;color:var(--blaek2)}
.typeskilt .skema-tabel tr.uoplyst th[scope="row"]{color:var(--blaek3)}
/* Kildebogstavet i tredje kolonne: comp'ens stansede firkant. Ankeret er
   UROERT — det er stadig side.mjs' kildemaerke() med href="#kilde-<bogstav>",
   saa maerket og kildelistens id'er ikke kan skride fra hinanden. */
.typeskilt .skema-k .kildemaerke{
  position:relative;display:inline-grid;place-items:center;width:17px;height:17px;
  margin:0 var(--r2) 0 0;padding:0;vertical-align:1px;top:0;
  font-size:var(--fs-gulv);font-weight:700;line-height:1;text-decoration:none;
  background:var(--blaek);color:var(--paafod);border:0;border-radius:var(--hjoerne);
}
.typeskilt .skema-k .kildemaerke::before{
  content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  min-width:28px;min-height:28px;width:max(100%,28px);height:max(100%,28px);
}
.typeskilt .skema-k .kildemaerke--sek{
  background:none;color:var(--blaek2);border:1px dashed var(--hegn);border-radius:0;
}
.typeskilt .skema-k .advarsel,.typeskilt .skema-k .feltnote,
.typeskilt .skema-k .varianter{margin-top:var(--r1h)}

/* --- 16e. Under 720 px: tabellen bliver til stablede blokke ---------------
   Comp'ens mobilform. Tabelrollerne staar skrevet paa elementerne i
   robot.mjs, saa display:block ikke tavst tager raekker og celler ud af
   tilgaengelighedstraeet. */
@media (max-width:720px){
  .typeskilt .skema-tabel,.typeskilt .skema-tabel tbody,.typeskilt .skema-tabel tr,
  .typeskilt .skema-tabel th,.typeskilt .skema-tabel td{display:block;width:auto}
  .typeskilt .skema-tabel thead{display:none}
  .typeskilt .skema-tabel tr{border-top:1px solid var(--linje);padding:var(--r3) 0}
  .typeskilt .skema-tabel th,.typeskilt .skema-tabel td{border-top:0;padding:1px 0}
  .typeskilt .skema-tabel tbody th[scope="row"]{
    width:auto;font-family:var(--mono);font-size:var(--fs-data);font-weight:700;
    letter-spacing:.13em;text-transform:uppercase;color:var(--blaek3);
  }
  .typeskilt .skema-v{width:auto;font-size:var(--fs-felt);padding-top:var(--r0)}
  .typeskilt .skema-k{width:auto;padding-top:var(--r1h)}
  .typeskilt .skema-gruppenavn{padding-top:var(--r5)}
  .typeskilt .skema-gruppenavn th{padding-top:0}
}

/* --- 16f. Robotsidens sektioner staar paa en FLADE (spor/robotflade, 7. sep 2026)
   JPK, 7. sep 2026: "Robotsiden staar tekst direkte paa baggrund. Den skal
   rettes til at vaere lige som de oevrige sider."

   KROGEN ER `.robotside`, OG DEN FANDTES I FORVEJEN. robot.mjs:1147 udsteder
   <article class="robotside typeskilt">; maalt i dist/ baerer 282 sider den
   (141 robotter x 2 sprog) og 0 sider uden for /robotter/. `.side` paa <main>
   duer IKKE som selektor - producentsiderne baerer samme klasse.
   generator.css:2105 bruger allerede `.robotside > .sektion` til lodret rytme,
   saa dette er samme scope, ikke et nyt.

   HVORFOR `> .sektion` OG IKKE `.sektion`: `.sektion` er delt af syv
   sidetyper - Om os, katalogsiden, sammenligningen, producentoversigten, de
   132 producentSIDER, 404 og robotsiden. En baggrund i `.sektion{}` ville
   aendre hele sitet i én linje.

   HVORFOR `:not(.produktside)`: den sektion HAR allerede sin flade
   (generator.css:1830, --panel med 3px accent-kant i venstre side). Uden
   :not() ville den kun beholde sit udseende, fordi generator.css indlaeses
   sidst - altsaa af filraekkefoelge frem for af hensigt. :not() goer
   undtagelsen laesbar og uafhaengig af, hvilken fil der kommer sidst.

   NOEGLETALSSTRIBEN ROERES IKKE af denne regel, og det er ikke et held:
   maalt i browseren ligger dens .sektion i
   header.robot-top > div.robot-noegletal, altsaa ikke som direkte barn af
   .robotside. Striben staar i forvejen paa --panel (.stribe, linje 1071).

   FORMEN ER SYSTEMETS EGEN, IKKE EN NY: --panel er DESIGN.md's "den loeftede
   flade - kort, striber, tabeller", --hjoerne er de 2px, der gaelder overalt
   (L79), og den 1px hvide lyskant foroven er TYPESKILTs stansning. Praecis
   samme tre led baerer `.stribe` (1071), `.produktside` (generator.css:1830)
   og `.prod-tabel-wrap` (generator.css:2125). Ingen ny farve, ingen ny radius.

   SKYGGE ER IKKE BRUGT: DESIGN.md's afsnit "Dybde" siger, at systemet er
   fladt, punktum - dybde signaleres af fladeskift og streger. Lyskanten er en
   INDFAELDET kant, ikke en slagskygge.

   MAALT PAA `.v-ikke` ("ikke oplyst"), alle tal genkoert med en egen
   WCAG-beregner, ikke afskrevet fra DESIGN.md:

     FORGRUND / MAERKE          paa --bund     paa --panel
     tekst blaek  #22262A        12,72 : 1      14,69 : 1
     tekst blaek2 #545C63         5,68 : 1       6,56 : 1
     tekst blaek3 #5F686F         4,74 : 1       5,48 : 1
     STIPLET KANT hegn-baerende   3,43 : 1       3,96 : 1
     chipfyld --tom #E4E7EA       1,04 : 1       1,20 : 1
     raekkestreg --linje          1,35 : 1       1,56 : 1

   Laeseretningen er MAERKE PAA FLADE hele vejen. Ingen tekst falder; alle
   seks stiger. Kanten, der BAERER tilstanden (R8, DESIGN.md), gaar fra
   3,43 til 3,96 og har dermed mere luft til WCAG 1.4.11's 3 : 1 end foer.
   Fladeskiftet goer altsaa de fire datatilstande LETTERE at skelne, ikke
   svaerere. Teksten inde i chippen staar paa chippens eget fyld og er
   uroert: blaek3 paa --tom, 4,58 : 1.

   (Et haandregnet 1,08 stod her i et udkast. Den maalte vaerdi er 1,20.
   Et kontrasttal, ingen har koert, er et gaet.)

   `padding` og `margin-top` vinder over generator.css:2105's
   `padding-top:var(--r6)` og over `.typeskilt .skema{margin-top:0}`, fordi
   selektoren her er 0,3,0 mod deres 0,2,0. Det er bevidst: de 32px
   padding-top var sektionernes eneste adskillelse, og naar sektionen faar en
   ramme, skal luften ligge MELLEM rammerne, ikke inde i dem.
   -------------------------------------------------------------------------- */
.robotside > .sektion:not(.produktside){
  background:var(--panel);
  border:1px solid var(--linje);
  border-radius:var(--hjoerne);
  box-shadow:inset 0 1px 0 var(--stans);
  padding:var(--r5);
  margin-top:var(--r5);
}

/* --- robotsiden (spor/robotside) --------------------------------------------
   JPK punkt 2, 1. sep 2026: "'The manufacturer's own page' - goer denne del
   mindre." Sektionen arvede .sektion{padding-top:var(--r8)} (64px) - samme
   lodrette vaegt som de STORE sektioner (skema, anvendelse) - selvom den kun
   baerer én kildehenvisning nederst paa siden. Linket og adressen forbliver
   uaendrede og laesbare; kun luften omkring dem krymper.

   Maalt med Playwright ved 1440 px, dist/en/robotter/unitree-aliengo/:
   FOER 237,65 px (padding-top 64 + overskrift 33,75 + to-linjers forklaring
   54,4 + link 46+12 margin + adresse 19,5+8 margin). EFTER disse tre regler
   plus den korte tekst (se data/i18n/*.json's produktside_forklaring, som
   samtidig fjerner dobbeltfoeringen af forhandler-forbeholdet, punkt 3 fund
   b): maal selv, tallet staar i commit-beskeden og agentrapporten.

   Specificiteten `.typeskilt .produktside …` er BEVIDST hoejere end
   generator.css' `.produktside .knap{margin-top:var(--r3)}` og
   `.produktside-url{margin-top:8px}` - den gang laa stilarket uden for
   sporets filejerskab, saa vaegten blev flyttet ved at VINDE cascaden i
   stedet for at rette kilden. Begge selektorer hed `.videre` indtil L77;
   knappen er nu primitiven, og begge er fulgt med. */
.typeskilt .produktside{padding-top:var(--r5)}
.typeskilt .produktside .knap{margin-top:var(--r2)}
.typeskilt .produktside .produktside-url{margin-top:var(--r1)}

/* --- filterskala og pris (spor/filter) --------------------------------------
   Skalaen til nyttelast (L65c) og prisen omregnet til USD (L66).

   HVOR DEN LIGGER OG HVORFOR: fire spor deler system.css i denne runde, og et
   flet i filens HALE kostede allerede en tabt klamme i dag. Blokken staar
   derfor FOER spor/korts blok og roerer ingen eksisterende regel.

   generator.css indlaeses EFTER system.css. Den kender ingen af klassenavnene
   herunder (.skala*, .valg--skala) og har ingen .facet--s6, saa der
   er intet at overskrive og ingen kaskadekamp at tabe.
   -------------------------------------------------------------------------- */

/* 1. SKALAENS PLADS I FACETGITTERET
   Seks kolonner, fordi en skala er en VANDRET betjening: klemt ned i tre ville
   dens bane vaere kortere end dens egen aflaesning. */
.facetter__net .facet--s6{grid-column:span 6}

/* 2. DE TO OPLOESNINGER, OG SKIFTET IMELLEM DEM (P0)
   Skalaen staar `hidden` i HTML'en og taendes af assets/katalog.js.
   Trinlisten gaar den modsatte vej: den staar altid, og SLUKKES foerst, naar
   formularen har faaet `data-levende` - altsaa naar JavaScript rent faktisk
   koerer og har overtaget filtreringen. Raekkefoelgen er med vilje den:
   fejler scriptet halvvejs, staar trinnene tilbage, og filteret virker. */
.skala[hidden]{display:none}
.styr[data-levende] .skala__trin{display:none}

.skala{margin:0 0 var(--r3)}

/* 3. AFLAESNINGEN
   Ordet, tallet og enheden paa én linje, tallet i pladens egen skrift og med
   TABULAERE cifre: skalaen traekkes hen over 101 stillinger, og et tal, der
   skifter bredde undervejs, faar hele linjen til at vippe. */
.skala__aflaes{
  display:flex;align-items:baseline;gap:6px;margin:0 0 var(--r1h);min-height:26px;
}
.skala__ord{
  font-family:var(--mono);font-size:var(--fs-data);font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;color:var(--blaek3);
}
.skala__tal{
  font-family:var(--mono);font-size:var(--fs-figur-s);font-weight:700;line-height:1;
  color:var(--blaek);font-variant-numeric:tabular-nums;
}
.skala__enhed{
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:600;color:var(--blaek2);
}

/* 4. SELVE BANEN (L110, 9. sep 2026: TO haandtag, ét spor)
   `--f0`/`--f1` saettes af assets/katalog.js og er nu de to haandtags
   stillinger i procent - altsaa DET UDSNIT, filteret slipper igennem,
   afgraenset i begge ender. Foer L110 var den ene ende altid 0 % eller
   100 %, fordi der kun var ét haandtag at afgraense med.

   STREGEN ER FLYTTET FRA FELTET TIL FORAELDEREN, og det er ikke pynt: to
   overlejrede <input type=range> ville ellers tegne hver sin identiske
   streg oven i hinanden, og den ene af dem ville skulle vaelges vilkaarligt
   til at baere den gule strimmel. Nu er begge felters egne spor
   gennemsigtige, og banen er én baggrund paa deres faelles forael.
   Uden JavaScript findes hverken banen eller variablene; standardvaerdierne
   her er kun til, saa en halvt indlaest side ikke tegner en sort bane. */
.skala__bane{
  --f0:0%;--f1:100%;
  position:relative;height:22px;
}
.skala__bane::before{
  content:"";position:absolute;left:0;right:0;top:10px;height:2px;
  background:linear-gradient(to right,
    var(--hegn) 0 var(--f0), var(--accent) var(--f0) var(--f1), var(--hegn) var(--f1) 100%);
}

/* DE TO FELTER LIGGER OVEN PAA HINANDEN i fuld bredde. `pointer-events:none`
   paa selve feltet og `auto` paa klodsen er det, der goer begge klodser
   gribelige: uden det ville det oeverste felts usynlige flade daekke det
   nederstes klods, og det ene haandtag kunne aldrig tages. Prisen er, at et
   klik PAA BANEN ikke laengere flytter noget - se katalog.mjs' skalaBlok for
   hvorfor det er et gaet, der falder bort, og ikke en betjening der mistes.
   z-index paa --min saettes af assets/katalog.js, naar de to moedes. */
.skala__greb{
  -webkit-appearance:none;appearance:none;
  position:absolute;left:0;top:0;
  display:block;width:100%;height:22px;margin:0;padding:0;
  background:transparent;cursor:pointer;pointer-events:none;
  /* Nulstillet med vilje: outline foelger elementets radius, og uden denne
     linje tegnede fokusringen sig som en PILLE om banen (set paa
     skaermbillede). TYPESKILT har ingen bloede kanter - heller ikke paa den
     ene ting, der kun vises for tastaturet. */
  border-radius:0;
}
.skala__greb--min{z-index:2}
.skala__greb--maks{z-index:3}

/* Begge felters egne spor er GENNEMSIGTIGE - stregen tegnes af .skala__bane
   ovenfor. Reglerne bliver staaende (i stedet for at forsvinde), fordi en
   browser uden dem tegner sit eget default-spor i sin egen farve oven i
   vores. */
.skala__greb::-webkit-slider-runnable-track{
  height:2px;border:0;border-radius:0;background:transparent;
}
.skala__greb::-moz-range-track{
  height:2px;border:0;border-radius:0;background:transparent;
}

/* Haandtaget er en STANSET KLODS, ikke en knap: et rektangel i gunmetal med
   den indfaeldede lyskant, resten af pladen bruger. 13x22 er maalt mod
   traerskelridserne nedenfor, saa klodsen daekker en ridse praecist, naar den
   staar paa den. */
.skala__greb::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;
  width:13px;height:22px;margin-top:-10px;
  border:0;border-radius:0;background:var(--blaek);
  box-shadow:inset 0 0 0 1px var(--stans);
  pointer-events:auto;
}
.skala__greb::-moz-range-thumb{
  width:13px;height:22px;
  border:0;border-radius:0;background:var(--blaek);
  box-shadow:inset 0 0 0 1px var(--stans);
  pointer-events:auto;
}

/* FOKUS SIDDER PAA KLODSEN, IKKE OM HELE BANEN (L110). Med ét haandtag var
   en ramme om banen entydig. Med to ville den vaere den SAMME ramme, uanset
   hvilket haandtag der har fokus - altsaa en fokusmarkering, der ikke siger,
   hvor fokus er. Ringen tegnes derfor om selve klodsen, i `--ring` som
   resten af sitet, og bliver dermed ogsaa den ene ting, der skiller de to
   haandtag ad for en tastaturbruger. */
.skala__greb:focus-visible{outline:none}
.skala__greb:focus-visible::-webkit-slider-thumb{
  box-shadow:inset 0 0 0 1px var(--stans),0 0 0 2px var(--stans),0 0 0 4px var(--ring);
}
.skala__greb:focus-visible::-moz-range-thumb{
  box-shadow:inset 0 0 0 1px var(--stans),0 0 0 2px var(--stans),0 0 0 4px var(--ring);
}

/* 5. RIDSERNE
   De ER traersklerne fra den JavaScript-frie udgave - ikke pynt, men den
   grovere maalestok tegnet ind paa den fine. Aksen mellem dem er ikke-lineaer
   (se katalog.mjs' skalaBlok), og ridserne er derfor jaevnt fordelt. */
.skala__ridser{
  position:relative;height:18px;margin:var(--r0) 0 0;
}
.skala__ridse{
  position:absolute;top:0;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:2px;
}
.skala__ridse::before{
  content:"";width:1px;height:4px;background:var(--hegn);
}
.skala__ridse-tal{
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:600;
  color:var(--stoev-blaek);font-variant-numeric:tabular-nums;white-space:nowrap;
}

/* 6. TAELLINGEN UNDER SKALAEN
   Siger hvad den taeller ("28 af 65 med oplyst tal"), praecis som sidens
   oevrige statiske taellere goer. Naevneren er de OPLYSTE, ikke alle 77 - de
   robotter, der tier, kan ikke vaere over eller under en graense. */
.skala__traef{
  margin:var(--r1h) 0 0;font-size:var(--fs-etiket);font-weight:600;color:var(--blaek2);
  font-variant-numeric:tabular-nums;min-height:1em;
}
.skala__note{margin:var(--r2) 0 0;color:var(--blaek2)}
.skala__note .url{color:var(--blaek2)}

/* 7. STRIMLENS SKALA-CHIP
   Findes kun under JavaScript (se katalog.mjs' valgListe), og arver alt af
   .valg.

   HER STOD `.valg--skala .valg__fjern` med en <button>-nulstilling
   (border:0, background:none, padding:0, font:inherit, cursor:pointer),
   fordi krydset er en <button> her og en <label> paa de oevrige chips.
   Primitiven `.knap` baerer nulstillingen nu, saa reglen er vaek.

   DEN RETTEDE SAMTIDIG EN UTILSIGTET FORSKEL: `background:none` var skrevet
   som en del af nulstillingen, men den slettede ogsaa krydsets tonede flade,
   saa skala-chippens kryds som det eneste stod uden fordybning. De to slags
   chips ser nu ens ud, hvilket var hensigten hele tiden ("arver alt af
   .valg"). */
.valg--skala[hidden]{display:none}

/* 9. SMALLE SKAERME
   Under 700 px falder facetgitteret i én kolonne (generator.css), og de to
   skalaer foelger med. Ridsetallene er da det foerste, der bliver trangt:
   200 og 85.000 staar i hver sin ende af en 320 px bane. */
@media (max-width:700px){
  .skala__ridse-tal{font-size:var(--fs-gulv)}
  .skala__tal{font-size:var(--fs-h3)}
}

/* --- katalogets flader (spor/katalog2) --------------------------------- */
/* PUNKT 4 (JPK 1. sep 2026): filtergrupperne er <details>/<summary> og
   COLLAPSED SOM STANDARD - paa alle bredder, ikke kun under 720 px som den
   AELDRE ydre .udtraek-panel-toggle (generator.css §20l). To ting foelger
   heraf:

   1. tools/skabelon/katalog.mjs byttede hver gruppes <fieldset>+<legend> til
      <details>+<summary> UDEN at aendre klassenavnene (stadig `facet
      facet--sN` og `facet__navn`) - generator.css's grid/polstrings-regler
      (§20e) kender kun klasser, ikke tags, og roeres derfor slet ikke.
   2. Denne blok tilfoejer kun det, <details>/<summary> IKKE arver gratis:
      markoeren, markeringens to tilstande, og fokusringen. */
/* PUNKT 5R/7R (JPK 1. sep 2026, RETTELSE): "kolonnegraenserne" var kun halvdelen
   af uroen. Mærkets x-position VARIEREDE ogsaa, fordi det stod EFTER
   `.facet__tal` - en undertekst med ni forskellige laengder ("ja · nej ·
   ikke oplyst" mod "reserveret") - saa mærket landede et nyt sted i hver
   celle. Og STATUS' egen undertekst ("standard: udgåede skjult") var lang
   nok til at braekke om, hvilket gjorde netop dén raekke hoejere end de
   oevrige otte i sammenfoldet tilstand - det modsatte af "compact".

   BEGGE RETTES MED SAMME GREB: `flex-wrap:nowrap` paa raekken saa intet
   braekker om, `min-width:0` + ellipsis paa undertekten saa den forkortes i
   stedet, og `margin-left:auto` paa BEGGE udgaver af maerket, saa det altid
   flugter mod cellens HOEJRE kant - en fast afstand fra kanten, ikke en
   position der afhaenger af teksten foer den (brief-punkt 5R's egen
   accepterede loesning: "fast afstand fra cellens hoejre kant for alle
   ni"). Kun ét af de to maerker er nogensinde synligt (display:none paa det
   andet), saa `margin-left:auto` paa begge er sikkert - det virker kun paa
   det, der faktisk deltager i flex-layoutet. */
/* MAALT GULV, DER ELLERS VAR BRUDT: uden en egen min-height er <summary>s
   klikbare boks kun sin tekstlinjes egen hoejde (maalt 20 px foer denne
   linje - .facet__navn arver ALDRIG hoejde fra .facet's polstring, den
   ligger kun UDENOM). 44 px er den samme graense, sitets soegefelt og
   .udtraek__greb allerede staar paa (CLAUDE.md/JPK's egen graense, punkt
   7R: "berøringsmål paa mindst 44 px maa ikke brydes"). */
summary.facet__navn{
  cursor:pointer;list-style:none;-webkit-tap-highlight-color:transparent;
  flex-wrap:nowrap;min-height:44px;
}
summary.facet__navn::-webkit-details-marker{display:none}
/* MAALT FEJL, RETTET HER: `margin-left:auto` paa maerket gjorde INGENTING
   foerst - generator.css's `.facet__navn::after{flex:1}` (den dekorative
   haarstreg mod hoejre) vinder ALTID kaploebet om fri plads, fordi
   flex-grow fordeles FOER auto-margener i CSS' egen algoritme (ikke omvendt,
   som man skulle tro). Maalt med Playwright: status' maerke stod 83 px fra
   kanten, land's 161 px - to forskellige afstande, ikke den faste afstand,
   punkt 5R kraever. Denne regel slaar KUN `flex` fra paa haarstregen inde i
   en summary (hoejere specificitet end generator.css's rene klasse, saa
   generator.css selv er uroert); med ingen grow tilbage at vinde med
   skrumper den til 0 (indhold er tomt), og `margin-left:auto` faar sin frie
   plads. Genmaalt efter rettelsen, se sporets rapport for de faktiske tal. */
summary.facet__navn::after{flex:none}
/* Samme "+"/"–"-sprog som .skema og .stribe-under-fold allerede bruger
   (generator.css) - ét visuelt sprog for "denne gruppe kan foldes ud",
   genkendt fra resten af siden i stedet for opfundet paa ny. */
summary.facet__navn::before{
  content:"+";flex:none;order:-1;
  font-family:var(--mono);font-size:var(--fs-mikro);font-weight:700;color:var(--blaek3);
}
details[open] > summary.facet__navn::before{content:"–"}
summary.facet__navn:hover::before{color:var(--blaek)}
summary.facet__navn:focus-visible{outline:2px solid var(--ring);outline-offset:2px}
/* UNDERTEKSTEN PAA FACET-KNAPPEN FINDES IKKE MERE. Her stod
   summary.facet__navn > .facet__tal med text-overflow:ellipsis - JPK's 5R om,
   at underteksten forkortes frem for at braekke om. JPK 8. sep 2026, ordret:
   "Fjern teksten '... state a figure'", saa f.mrk renderes ikke laengere i
   nogen <summary> (spor/filterbaand). Reglen er SLETTET og ikke efterladt:
   test 57 taeller klasser, ingen side bruger, og en regel uden element ville
   have gjort test 48.21 groen paa ingenting. 48.21 er i stedet VENDT, saa den
   beviser den nye regel - at ingen facet-summary baerer en undertekst. */

/* Gruppens "mindst ét valgt"-maerke, to tilstande der ALDRIG staar samtidig
   (samme "sand, men ikke praecis / erstattes af det praecise"-par som
   §6e's omfangsmaerker allerede bruger et andet sted paa denne side):
     .facet__aktiv      CSS-udgaven ([data-facet-aktiv], tekst = strimlens
                         "Valgt"/"Selected" - en tilstedevaerelse, ikke et
                         tal, fordi CSS ikke kan taelle.
     .facet__aktiv-tal   JavaScript-udgaven ([data-facet-antal]), fyldt af
                         assets/katalog.js' facetgruppeAntal() med det
                         eksakte tal. Staar `hidden` i markup'en, indtil
                         scriptet saetter et tal - en tom taeller ville vaere
                         en paastand uden daekning (P0). */
.facet__aktiv{
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--blaek);background:var(--accent-ro);
  padding:var(--r0) var(--r2);border-radius:var(--hjoerne);flex:none;margin-left:auto;
}
.facet__aktiv-tal{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:18px;height:18px;padding:0 var(--r1h);flex:none;margin-left:auto;
  background:var(--accent);color:var(--blaek);
  font-family:var(--mono);font-size:var(--fs-gulv);font-weight:700;
  font-variant-numeric:tabular-nums;border-radius:var(--hjoerne);
}
/* Samme faelde som .kort__saml (afsnit 2 ovenfor, allerede kommenteret):
   `display:inline-flex` er en FORFATTERregel og slaar ALTID UA-arkets
   `[hidden]{display:none}`, uanset specificitet - kun oprindelsen taeller i
   kaskaden. Maalt med Playwright FOER denne linje blev tilfoejet: en tom
   `.facet__aktiv-tal` stod synlig (computedDisplay "flex") paa en gruppe
   uden ét eneste afkrydset filter, fordi min egen display-regel vandt over
   `hidden` - P0 brudt for en tom taeller, ikke kun kosmetik. */
.facet__aktiv-tal[hidden]{display:none}

/* HUL, PUNKT 4R AABNEDE: `.facet--s6` (nyttelast, pris - OG nu ogsaa
   Egenskaber, som denne rettelse flyttede fra s5 til s6) har ALDRIG faaet en
   mobiludgave i generator.css §20l - kun s3/s4/s5 staar i den regels liste
   (linje 1569). Foer denne rettelse var det usynligt, fordi Egenskaber var
   s5 og dermed DAEKKET; nu den er s6, arver den samme hul, som nyttelast og
   pris allerede havde (denne fils egen kommentar paastod fejlagtigt
   "de to skalaer foelger med" - maalt med Playwright ved 390 px: 172 px
   bred, side om side, IKKE fuld bredde). Rettes her for alle tre s6-grupper
   under samme graense generator.css selv bruger (720 px), saa deres tekst
   IKKE afkortes af ellipsis-reglen ovenfor i en kolonne, der er for smal
   til den overhovedet. `!important` er IKKE noedvendigt - reglen har hoejere
   specificitet end generator.css's `.facet--s3,-s4,-s5{grid-column:1/-1}`,
   fordi den staar i EGEN klasse (s6) uden konkurrence, og selektoren i sig
   selv slaar `.facetter__net .facet--s6{grid-column:span 6}` (samme fil,
   tidligere i kaskaden - senere regel med samme specificitet vinder). */
@media (max-width:720px){
  .facetter__net .facet--s6{grid-column:1 / -1}
}

/* PUNKT 6 (JPK 1. sep 2026, L67): den klaebende bjaelke. JPK omgjorde det
   fravalg, spor/kort skrev ind i .saml-taeller ovenfor - "en compact bar i
   bunden af skaermbilledet, der viser valgte robotter som en adgangsknap
   til compare mode". Elementet findes KUN, naar assets/katalog.js bygger
   det (se dens KLAEBEBAR-afsnit); der staar intet i denne skabelons HTML,
   saa uden JavaScript er bjaelken ikke `hidden` - den er FRAVAERENDE, ét
   niveau strengere end resten af sidens P0-monster (samlknappen staar
   `hidden` i markup'en, fordi kort() deles med producentsider, der aldrig
   faar JavaScript; klaebebaren har intet saadant genbrugskrav).

   SAMME MOERKE SPROG SOM .strimmel (--fod/--paafod), ikke et nyt: bjaelken
   er en soesterflade til strimlen ("sidens aktive valg"), ikke en ny
   komponentfamilie. `position:fixed;bottom:0` er det ene, der adskiller
   den - strimlen klaeber til TOPPEN under scroll, denne til BUNDEN, saa
   udvalget er synligt uanset hvor i de 77 kort laeseren staar.

   HAARD BEGRAENSNING 1 I FORMEN: NAVNE (`.klaebebar__valg`), ikke et
   optalt maerke ved siden af - se assets/katalog.js' byggValgLed().
   Ét link ("Åbn sammenligningen"), ingen knap med "fortsaet" eller "næste
   trin". Ingen symboler af nogen art - kun tekst, som resten af sidens
   betjening. (Den saetning er en KOMMENTAR, og koden paa samme side
   modsiger den allerede: kortets stempel .knap--maerkat tegner content:"+"
   i hvile og content:"\00d7" naar robotten er valgt, linje 2692 og 2712
   foer dette spor. Modstriden er NOTERET som fund til designplanen af
   spor/bundbar 4. sep 2026 - den er ikke rettet her, for en systemregel om
   symboler hoerer ikke i en bjaelke. Fjern-knappen baerer ordet "Fjern",
   saa bjaelken overholder reglen uanset hvordan den ender.)

   RETNING B, "SKINNEN" (spor/bundbar, 4. sep 2026, punkt 3; D1 i
   fund/arkiv/2026-09/PLAN-klaebebar.md, valgt af JPK). Bjaelken var et BAAND: left:0,
   right:0, bottom:0, altsaa 1.440 px bred uanset hvad den bar, med
   58-74 % af sin flade tom - maalt 65.790 px2 massiv gunmetal for at baere
   605 px blaek. Den er nu en GENSTAND: saa bred som sit indhold,
   centreret over gitteret, loeftet fri af skaermkanten.

   CENTRERINGEN ER `margin-inline:auto` MED left:0;right:0 - IKKE planens
   `left:auto;right:auto`. Maalt, ikke antaget: paa et position:fixed
   element betyder left:auto "brug den statiske position", altsaa dér hvor
   elementet ville have staaet i floedet - venstrekanten. Planens egen
   formulering ville have givet en venstrestillet bjaelke og dermed brudt
   JPK's beslutning J1 (centreret over gitteret, 3. sep 2026). Med left og
   right paa 0 faar elementet et fuldt bredt "indeholdende felt", og
   margin-inline:auto deler resten lige - den eneste form, der centrerer et
   fixed element, hvis bredde er indholdets.

   INGEN SLAGSKYGGE (DESIGN.md:745, "Systemet er fladt, punktum" - begge
   skyggetokens er none). En flydende genstand kunne friste til én; den
   faar i stedet en HAARSTREG, som er DESIGN.md's egen formulering af
   dybde: "fladeskift og streger". `inset 0 0 0 1px var(--paafod2)`
   erstatter samtidig `box-shadow:0 -1px 0 rgba(0,0,0,.2)`, som var hele
   stilarkets ENESTE raa rgba-skygge.

   HJOERNET ER TOKENET, ikke et nyt tal: --hjoerne = 2px, DESIGN.md:761,
   "det gaelder overalt". Baandet havde intet hjoerne, fordi et baand ikke
   har nogen - en genstand har fire, og de faar sidens ene radius.

   INGEN BEVAEGELSE - JPK's beslutning J2, og det er et forbud, ikke en
   udeladelse. Ingen transition, ingen @keyframes. Sitet har i dag ingen
   bevaegelsesgrammatik ud over .knap:active{transform:translateY(1px)}, og
   en sammenfoldning her ville vaere sidens eneste animerede tilstandsskift
   - en systembeslutning forklaedt som en detalje. */

/* BUNDPLADSEN (spor/bundbar punkt 4, planens D4). Bjaelken staar
   position:fixed og er derfor ude af floedet: intet under den ved, at den
   findes, saa dokumentets sidste px laa foer sporet under den.

   HVORFOR ET TAL, JS MAALER, OG IKKE ET, VI SKRIVER: bjaelkens hoejde er
   ikke én vaerdi. Maalt paa denne gren: 33,2 px paa én raekke, 62,4 px naar
   den ombroed, 91,6 px ved 320 px bredde foer punkt 6. Et haandskrevet
   "46px" ville have efterladt indhold daekket paa mobil - praecis
   D7/L30-faelden, et haandskrevet tal ved siden af et udledt.
   assets/katalog.js maaler i stedet afstanden fra bjaelkens OVERKANT til
   skaermens bund (window.innerHeight - rect.top), som ogsaa taeller de
   16 px, den er loeftet med, og laegger en fuge paa 12 px.

   FUGEN LIGGER I JS OG IKKE I ET calc() HER, og det er ikke en smagssag:
   `calc(var(--barplads) + var(--r3))` ville give ALLE 215 andre sider 12
   px bundpolstring, de ikke har i dag - grundvaerdien skal kunne vaere
   praecis 0px. Prisen paa flader uden bjaelken skal vaere nul.

   TO EGENSKABER, TO FORSKELLIGE PROBLEMER. `padding-bottom` paa <body>
   goer dokumentets bund LAESELIG. `scroll-padding-bottom` paa <html> goer
   :target-hoppet rigtigt - og det er ikke teoretisk her: katalogsiden har
   links med href="#tegn", og afsnittet "Saadan laeses tallene" er netop
   det, bjaelken skaerer af. Den gamle kommentar nedenfor paastod, at
   scroll-padding "ikke er noedvendig her"; den paastand er vendt.

   EGET :root OG IKKE TOKENBLOKKEN paa linje 86: dér ligger palet og
   skala, som flere spor redigerer samtidig, og en komponentvariabel dér
   er en flettekonflikt, der venter. Den staar hos den komponent, der
   ejer den. */
   SCROLL-PADDING-REGLEN ER BETINGET, OG DET BLEV DEN AF EN MAALING.
   Foerste udgave var et ubetinget `html{scroll-padding-bottom:...}`. Den
   gav ganske vist 0px paa de andre sider - men deres beregnede vaerdi
   gik fra `auto` til `0px` paa alle 216 sider. De to opfoerer sig ens i
   dag, fordi browsere bruger 0 for `auto`, men `auto` er per
   specifikation UA'ens valg og maa vaere noget andet (fx for en fast
   vaerktoejslinje). Prisen paa flader uden bjaelken skal vaere NUL, ikke
   "0 i praksis". :has() paa <html> holder de 215 andre sider ordret
   uroerte. Body-reglen kan godt staa ubetinget: 0px var ogsaa dens
   vaerdi foer sporet, saa dér er der intet at aendre. */
:root{--barplads:0px}
body{padding-bottom:var(--barplads)}
html:has(.klaebebar:not([hidden])){scroll-padding-bottom:var(--barplads)}

.klaebebar{
  position:fixed;left:0;right:0;bottom:var(--r4);z-index:50;
  margin-inline:auto;
  width:max-content;max-width:calc(100% - 2*var(--kant));
  display:flex;flex-wrap:nowrap;align-items:center;gap:var(--r3);
  padding:var(--r1) var(--r3);
  background:var(--fod);color:var(--paafod);
  border-radius:var(--hjoerne);
  box-shadow:inset 0 0 0 1px var(--paafod2);
}
/* Samme faelde som §2/§4's andre skjulte elementer: en forfatterregel med
   `display:flex` slaar altid UA-arkets `[hidden]{display:none}`. */
.klaebebar[hidden]{display:none}
/* UDVALGET SOM LISTE (spor/bundbar, 4. sep 2026, punkt 1). Her stod
   `.klaebebar__navne` - ét afsnit med `navne.join(' · ')`,
   `text-overflow:ellipsis` og `flex:1 1 auto`, altsaa en tekst der strakte
   sig ud over hele bjaelkens bredde og efterlod 775-1.008 px doedt hul hen
   til handlingerne. Nu er hvert navn sit eget led med sin egen Fjern-knap,
   og listen fylder praecis sit indhold.

   SKRIFTGRADEN ER UAENDRET: 14px/600, og 13px under 460px. DESIGN.md's
   DP3b (4. sep 2026) gav netop de to vaerdier hjemmel - "det, der
   manglede, var ikke en anden vaerdi, men hjemmel til den" - og
   acceptkriteriet dér er, at denne omskrivning kan ske UDEN at én
   font-size aendrer sig. Der er ikke aendret én. */
/* TRE AFSTANDE, TRE BETYDNINGER - de er det, der goer tre knapper med
   samme navn laeselige. Alle er trin paa skalaen, ingen haandskrevne tal:
     --r1  (4px)   navn <-> DETS egen Fjern-knap  - de hoerer sammen
     --r3 (12px)   mellem to valgte robotter      - de er sideordnede
     --r5 (24px)   listen <-> "Ryd udvalget"      - udvalgets fortrydelse
     --r3 + --r5   rullesporet <-> "Åbn sammenligningen" (bjaelkens gap
                   plus marginen paa __gaa)       - vejen fremad staar alene
   Uden trappen laeser oejet "navn navn navn Fjern Fjern Fjern". */
/* ÉT VANDRET RULLESPOR (spor/bundbar punkt 6, planens D7, JPK's J3) -
   OG DET GAELDER VED ALLE BREDDER, ikke under en graense.

   Planen skrev "< 700 px". Maalt paa den byggede gren: bjaelkens indhold
   er i vaerste tilfaelde 845,8 px (da) / 928,3 px (en), saa den ombryder
   allerede omkring 900 px viewport - ved 700 px var den 62,4 px hoej,
   altsaa VAERRE end de 45,7 px, klagen handlede om. En graense sat efter
   planens tal ville have efterladt hele spandet 700-900 px i den fejl,
   den skulle loese. Og graensen ville selv have vaeret et haardkodet tal,
   der aendrer sig med sprogets ordlaengde: engelsk "Remove" er bredere
   end "Fjern", saa dansk og engelsk ombryder ikke ved samme bredde.

   `flex-wrap:nowrap` paa bjaelken plus et rullespor her loeser begge dele
   uden et tal: bjaelken kan ikke ombryde ved NOGEN bredde, og listen
   ruller, naar - og kun naar - der ikke er plads. Ved 1440 er der intet
   at rulle, og sporet ses ikke.

   MOENSTERET ER DAEKKETS, ikke et nyt (system.css:554-561), og de to
   tastaturfejl, det koster, er allerede maalt og loest dér:
     scroll-padding-inline - Blink ruller kun et fokuseret element frem,
       naar det ligger HELT uden for rulleporten; 17 px synligt regnes som
       nok, og sporet blev staaende paa scrollLeft 0.
     outline-offset:-2px  - en overflow-boks klipper fokusringen, OGSAA
       ved 1440 hvor der intet er at rulle. Ringen tegnes derfor indad.
   Se .klaebebar__fjern:focus-visible nedenfor. */
.klaebebar__spor{
  min-width:0;
  display:flex;flex-wrap:nowrap;align-items:center;gap:var(--r5);
  overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;
  scroll-padding-inline:var(--r6);
}
.klaebebar__spor::-webkit-scrollbar{display:none}
.klaebebar__valg{
  list-style:none;margin:0;padding:0;
  display:flex;flex-wrap:nowrap;align-items:center;gap:var(--r3);
}
.klaebebar__valg li{
  flex:0 0 auto;
  display:flex;align-items:center;gap:var(--r1);
  white-space:nowrap;
}
.klaebebar__navn{font-size:var(--fs-raekke);font-weight:600}
/* BEROERINGSMAALET BLIVER STOERRE, MENS BJAELKEN BLIVER MINDRE.
   `.knap--tekst-moerk` saetter `min-height:0;padding:0` - bjaelkens to
   handlinger er derfor 13,2 px hoeje i dag og klarer kun WCAG 2.5.8 via
   afstandsundtagelsen. Fjern-knappen faar sin egen kasse og opfylder
   24x24 direkte. Reglen staar EFTER primitiven i kaskaden (1783) med
   samme specificitet, saa den vinder uden !important. */
.klaebebar__fjern{
  flex:none;
  padding:var(--r1h) var(--r2);min-height:24px;
}
/* BJAELKENS TO HANDLINGER er knapprimitivens TEKST-vaegt paa MOERK flade:
   `knap knap--tekst-moerk knap--frem` paa gaa-linket og `knap
   knap--tekst-moerk` paa ryd-knappen (klasserne saettes i assets/katalog.js,
   som bygger bjaelken).

   Her stod foer to fulde regler: gaa-linkets accent-farve og en hel
   <button>-nulstilling paa ryd. Begge er primitivens nu, og FARVERNE ER DE
   SAMME som foer - accent (9,19:1) paa handlingen, --paafod2 (5,94:1) paa
   fortrydelsen. L76's note om, hvorfor accent MAA staa som tekst her, er
   flyttet med til `.knap--tekst-moerk.knap--frem` i afsnit 13b: bjaelken
   staar paa --fod (= gunmetal), og accent PAA blaek er 9,19:1. Skift den
   ikke til --blaek "for konsistensens skyld": det ville give 1,00 : 1.

   TILBAGE STAAR KUN `flex:none`, som er LAYOUT i en flexbox og ikke noget,
   en knap baerer i sig - bjaelken er `display:flex`, og uden den kunne de
   to handlinger blive klemt eller strakt af listen ved siden af. (Her stod
   "af navnelisten, der har flex:1 1 auto" indtil 4. sep 2026; den
   voksende navnetekst er vaek, men de to handlinger skal stadig maale sig
   selv og ikke deles om resten.) */
/* min-height:24px OGSAA HER, ikke kun paa Fjern. `.knap--tekst-moerk`
   nulstiller primitivens 44 px, saa bjaelkens to handlinger var 13,2 px
   hoeje og klarede kun WCAG 2.5.8 gennem afstandsundtagelsen. De 24 px
   koster NUL px i bredden (polstringen er stadig 0) og nul px i hoejde,
   fordi Fjern-knappen ved siden af allerede er 25 px - bjaelken er lige
   saa hoej med dem som uden. */
.klaebebar__gaa,.klaebebar__ryd{flex:none;min-height:24px}
/* Den ekstra luft foran handlingerne (se afstandstrappen ved __valg): den
   staar HER og ikke som en stoerre `gap` paa bjaelken, fordi gap ville
   ramme ALLE mellemrum - ogsaa det mellem "Åbn sammenligningen" og "Ryd
   udvalget", som er to handlinger, der hoerer sammen. */
.klaebebar__gaa{margin-inline-start:var(--r5)}
/* GRAENSEBESKEDEN INDE I BJAELKEN (punkt 5). Elementet er skabelonens
   eget .saml-graense; assets/katalog.js flytter det herind ved koersel.

   FARVEKOMMENTAREN HER VAR FORAELDET INDTIL 9. sep 2026, og det staar med
   vilje: der stod, at bjaelken er en MOERK flade (--fod), og at beskeden
   derfor skulle have --paafod som forgrund. Bjaelken blev lys med
   spor/valgbaand (Å209, 9. sep 2026), og generator.css:4212 havde allerede
   overstyret hele reglen. Maalt i browseren samme dag, foer denne aendring:
   den viste besked var rgb(34,38,42) paa rgb(250,251,251) - altsaa blaek paa
   panel, ikke paafod paa fod. En kommentar, der beskriver en flade, der ikke
   findes mere, er vaerre end ingen kommentar.

   BESKEDEN ER NU ET ACCENTFELT (JPK 9. sep 2026: "'You can compare at most 3
   robots' skal vaere tydeligere"). Den bar foer bjaelkens EGET materiale -
   samme panel-hvide flade, samme haarstreg - og laeste derfor som endnu en
   raekke af bjaelken frem for som et svar paa det klik, der lige blev afvist.
   Nu er den den samme accentflade som .valg-chippen: baggrund --accent,
   forgrund --blaek (9,19 : 1, blaek PAA gul - den maalte, tilladte retning,
   DP1's "accent som baggrund er altid tilladt"). Ingen ny farve, ingen ny
   skriftgrad: --fs-mikro er R5-skalaens eget trin over --fs-data.

   DEN STAAR position:absolute OVER bjaelken OG IKKE SOM ET FLEXLED I DEN,
   og det blev afgjort af en maaling. Foerste udgave var et almindeligt led
   med flex-basis:100%. Resultat, maalt: bjaelken sprang fra 869,8 til
   1.121,7 px bred (da) / 1.180,3 (en) og fra 33,2 til 70,2 px hoej, fordi
   `width:max-content` regner beskedens fulde saetning med paa linjen - og
   --barplads var maalt paa den lave bjaelke, saa den hoeje daekkede
   indhold igen. Uden for floedet koster beskeden bjaelken NUL px, og
   geometrien er den samme, uanset om den staar eller ej. Det er ogsaa det
   roligste: J2 forbyder bevaegelse, og en bjaelke, der vokser, er
   bevaegelse - bare uden en transition til at undskylde sig med.

   Den deler bjaelkens hjoerne og dens vandrette udstraekning, saa den staar
   som bjaelkens egen stemme og ikke som en fremmed notifikation - men den
   deler ikke laengere dens FLADE, for det var netop det, der gjorde den
   umulig at faa oeje paa. */
.klaebebar .saml-graense{
  position:absolute;left:0;right:0;bottom:100%;
  /* 4px -> 8px: paa sin egen flade skal beskeden kunne ses som en egen
     genstand over bjaelken, ikke som en raekke, der er groet fast paa den. */
  margin-bottom:var(--r2);
  padding:var(--r1h) var(--r3);
  border-bottom:0;
  color:var(--blaek);
  background:var(--accent);
  border-radius:var(--hjoerne);
  box-shadow:none;
}
/* Fokusringen er accent og tegnes UDAD med 2px i stedet for sidens globale
   3px: bjaelken er kun ~44 px hoej, og en 3px ring med 3px offset ville
   skaere ud over dens kant. */
.klaebebar__gaa:focus-visible{
  outline:2px solid var(--ring);outline-offset:2px;
}
/* RINGEN TEGNES INDAD PAA ALT, DER LIGGER I RULLESPORET - de tre
   Fjern-knapper og "Ryd udvalget". En overflow-boks klipper alt uden for
   sin kasse, ogsaa en fokusring, og ogsaa ved 1440 px, hvor der intet er
   at rulle: en overflow-boks klipper uanset om den ruller. Samme
   rettelse som daekkets navigation (system.css:501, hvor den er maalt paa
   en tastaturbruger). "Åbn sammenligningen" staar uden for sporet og
   beholder derfor sin udadtegnede ring. */
.klaebebar__fjern:focus-visible,.klaebebar__ryd:focus-visible{
  outline:2px solid var(--ring);outline-offset:-2px;
}
/* HER STOD EN PAASTAND, DER VAR FORKERT, OG DEN ER BEVARET SOM ADVARSEL,
   ikke slettet: "Bjaelken daekker IKKE sidefoden ... scroll-padding-bottom
   er ikke noedvendig her: ... :target-hop paa denne side gaar til
   facetter, ikke til sidefoden."

   Ingen af de to led holdt. Katalogsiden HAVDE ingen sidefod, da saetningen
   blev skrevet - saa den var sand ved en tilfaeldighed og holdt op med at
   vaere det, da foden kom tilbage. Og siden har links med href="#tegn",
   saa :target-hoppet gaar netop ikke kun til facetter. Maalt af AA136:
   baren daekkede 89 px indhold ved 390 px. Begge dele er loest af
   --barplads ovenfor.

   Formfejlen er vaerd at huske: en kommentar, der begrunder et FRAVALG med
   en tilstand i resten af siden, foraeldes tavst, naar den tilstand
   aendrer sig. */
@media (max-width:460px){
  .klaebebar__navn{font-size:var(--fs-mikro)}
}

/* --- sammenligningens vaelger (spor/samlvaelg, FJERNET spor/doedcss 1. sep
   2026): CSS'en for .vaelgernet/.vc* var doed - klasserne stod i intet
   class="..." paa nogen bygget side. Denne linje er bevidst bevaret som
   grænsemaerke: tests/dele/48-katalogets-flader.mjs's udsnit() bruger den
   literale streng "/* --- sammenligningens vaelger" som SLUT-graense for
   klaebebar-ordforraadstjekket (48.28-48.29) og ejes ikke af dette spor. --- */

/* --- topbar og sprogrod (spor/oversigt) -------------------------------------
   PUNKT 2 (JPK, 1. sep 2026): "Burde Unit-vaelgeren ikke vaere en del af
   topbaren?" Maalt foer sporet: kontakten stod ét sted paa robotsiden og et
   ANDET sted paa sammenligningssiden - to forskellige adresser for samme
   valg. Den her blok flytter den SYNLIGE etiket op i daekket (side.mjs),
   saa den staar ét fast sted paa alle 213 sider.

   DEN FYSISKE <input id="enhedsskift"> FLYTTER IKKE. Den staar stadig,
   hvor tools/skabelon/robot.mjs og tools/skabelon/sammenligning.mjs skriver
   den - de to filer er uden for dette spors filejerskab (CLAUDE.md,
   DIT FILEJERSKAB). Kun <label class="enhedsskift" for="enhedsskift"> i
   daekket er nyt, og flere <label for=...> til samme kontrol er allerede
   sitets egen praksis (16c ovenfor: "den staar to steder"). Der tilfoejes
   INGEN ny <input> - grep -c enhedsskift__boks er stadig 1 pr. side, ikke 2.

   16c's `~`-soeskende-mekanik (.typeskilt/.sammenligning-app-praefikset)
   rammer STADIG selve INDHOLDS-skiftet (.enhedsvis--imperial/--metrisk)
   uaendret, fordi boksen ikke har flyttet sig - kun sin etiket. Den kan
   derimod IKKE style DENNE nye etiket: `~` virker kun FREMAD i DOM'et, og
   daekket staar FOER <main> paa hver side, saa etiketten ligger nu FOER
   boksen, ikke efter. Loesningen er :has() - stadig ren CSS, stadig
   P0-lovligt (JavaScript maa forbedre sandheden; den maa aldrig vaere
   forudsaetningen for den). */
.daek__enhed{display:none;margin:0}
/* Vis KUN topbarens kontakt, naar siden faktisk HAR en #enhedsskift at
   style paa - ellers ville producent-, om- og 404-siderne vise
   en kontakt, intet klik goer noget ved (der findes slet ingen boks der).
   Robotsiden: boksen findes, naar robotten har omregnelige felter (uaendret
   fra foer dette spor). Sammenligning: boksen findes i DOM'et fra foerste
   byg, men ligger i en `hidden`-plade, indtil assets/sammenligning.js
   fjerner attributten - :not([hidden]) holder derfor topbarens kontakt
   usynlig lige saa laenge, den var det FOER dette spor (P0: ingen kontakt
   er rigtigere end en doed kontakt, naar der ingen matrix er at skifte
   paa). CSS-selektorer gen-evalueres automatisk, naar JS fjerner
   attributten - ingen ny scriptkobling er noedvendig for det.

   TREDJE LINJE ER NY (opgave 2, spor/billedfilter, 10. sep 2026). JPK, ordret:
   "SKIFTEREN ... SKAL VAERE SYNLIG I TOPBAREN PAA ALLE SIDER" - betingelsen
   udvides, den slettes ikke (se filens filhoved). `.enhedsskift__boks--baand`
   staar KUN paa boksen, side.mjs selv saetter for kataloget (sti === '',
   ÉN side i dag - producentsiden viser endnu ingen tal, se side.mjs' egen
   kommentar for hvorfor den er udeladt), saa reglen kan ikke ved en fejl
   ramme robotsidens eller sammenligningens EGNE, allerede daekkede boxe. */
body:has(.robotside.typeskilt .enhedsskift__boks) .daek__enhed,
body:has(.sammenligning-app:not([hidden]) .enhedsskift__boks) .daek__enhed,
body:has(.enhedsskift__boks--baand) .daek__enhed{
  display:flex;
}
/* Pillen genbruger 16c's ETABLEREDE udseende (samme tre klasser -
   .enhedsskift/__spor/__knop). Flytningen er ikke en ny komponent, kun en
   ny adresse for den samme; kun tallene er strammet til daekkets lavere
   raekkehoejde. */
.daek__enhed .enhedsskift{padding:var(--r1h) var(--r2h) var(--r1h) var(--r2);min-height:36px;gap:8px}
/* DE GAMLE IN-PAGE ETIKETTER SKJULES. Uden denne regel viser en robotside
   OP TIL TRE synlige kontakter samtidig (topbaren + robot.mjs' to egne
   enhedsskifter()-kald, 16c's kommentar: "den staar to steder") - praecis
   det, punkt 2 skulle GOERE OP MED ("ÉN kontakt paa fast plads i stedet for
   to forskellige steder"). Den fysiske <input> og dens SOESKENDE-kontekst
   (16c's `~`-regel, som skifter selve tallene) er UROERT - kun de GAMLE
   ETIKETTERS EGEN SYNLIGHED slaas fra. Samme regel daekker sammenligningens
   JS-indsatte etiket (assets/sammenligning.js' enhedslinjeHTML(), en anden
   fil uden for dette spors ejerskab) - den indsaettes som efterkommer af
   .sammenligning-app, saa selektoren rammer den automatisk, uden en aendring
   i JS'en. */
.robotside.typeskilt .enhedsskift,
.sammenligning-app .enhedsskift{display:none}
/* Tilstand + fokusring paa DENNE etiket - :has() i stedet for `~`, jf.
   forklaringen ovenfor. Samme farver og samme regel-tekst som 16c, saa de
   to steder (boksens gamle soeskende-omgivelse og denne) ikke kan skride
   fra hinanden i udseende, selvom mekanikken er forskellig. */
body:has(.enhedsskift__boks:checked) .daek__enhed .enhedsskift{color:var(--blaek);border-color:var(--blaek)}
body:has(.enhedsskift__boks:checked) .daek__enhed .enhedsskift__spor{background:var(--accent);border-color:var(--blaek)}
body:has(.enhedsskift__boks:checked) .daek__enhed .enhedsskift__knop{left:auto;right:1px;background:var(--blaek)}
body:has(.enhedsskift__boks:focus-visible) .daek__enhed .enhedsskift{
  outline:3px solid var(--ring);outline-offset:3px;border-radius:var(--hjoerne);
}
/* BEGGE ENHEDER STAAR SAMTIDIG (JPK, 2. sep 2026: "Unit-knappen skal vise
   baade metric og imperial som der toggles mellem"). Markuppens raekkefoelge
   og hvorfor enhedsvis--klasserne IKKE staar paa topbarens to ord: se
   side.mjs. Her staar kun MARKERINGEN af, hvilket af de to der gaelder.

   MARKERINGEN ER ET BLAEK-TRIN, IKKE EN KULOER. L76: --accent maa aldrig
   baere forgrund paa lys bund (1,38:1 mod WCAG's 4,5), saa det aktive ord
   kan ikke vaere gult. Trinnet er systemets eget: --blaek (12,72:1) paa det
   gaeldende ord, --blaek3 (4,74:1 - selv over 4,5) paa det andet. INGEN af
   dem er en "slukket" tilstand: begge ord skal kunne laeses, det er hele
   pointen med aendringen.

   HVORFOR IKKE FED SKRIFT SOM ANDET SIGNAL: en vaegtaendring ville aendre
   ordets BREDDE, saa pillen hoppede ved hvert klik - paa en topbar, der
   allerede braekker ved 420 px. Det ikke-farvebaarne signal er i stedet
   KNOPPENS SIDE (WCAG 1.4.1): den staar til venstre ved ukrydset og til
   hoejre ved krydset og peger dermed paa det ord, der gaelder. Det er den
   ene grund til, at markuppen har metrisk-ordet FOER kontakten.

   FARVEN STAAR DIREKTE PAA ORDENE, ikke paa etiketten. Ellers ville
   `.enhedsskift:hover` (1786) og :checked-reglen fire linjer herover -
   begge saetter --blaek paa HELE etiketten - udjaevne trinnet ved svaev og
   ved krydsning, og markeringen ville forsvinde netop naar den bruges.
   De to :has()-regler er 0,4,1 mod grundreglens 0,2,0 og vinder uden
   !important. */
.daek__enhed .enhedsskift__ord{color:var(--blaek3)}
.daek__enhed .enhedsskift__ord--metrisk{color:var(--blaek)}
body:has(.enhedsskift__boks:checked) .daek__enhed .enhedsskift__ord--metrisk{color:var(--blaek3)}
body:has(.enhedsskift__boks:checked) .daek__enhed .enhedsskift__ord--imperial{color:var(--blaek)}
/* Under 420 px braekker daekket allerede (16-topbar-blokken, flex-wrap).
   Kontakten faar samme hoejrestillede logik som sprogskifteren, naar den
   selv staar paa foerste raekke - staar den paa sin egen (fordi pillen +
   mark + sprog samlet er bredere end 343 px), samler auto-margenen den
   stadig til hoejre i stedet for at flyde til venstre under mark. */
@media (max-width:420px){
  .daek__enhed{margin-left:auto}
}

/* OMREGNINGEN PAA KATALOGSIDEN (opgave 2, spor/billedfilter, 10. sep 2026).
   Robotsiden og sammenligning byggede deres egen tvilling-mekanik lokalt
   (`.typeskilt …:checked ~ * .enhedsvis--imperial` og `.sammenligning-app
   …`), bundet af `~` til at staa I SAMME container som tallene selv.
   Kataloget kan ikke bruge samme form: boksen staar i TOPBAREN, foer
   <main>, og facetternes vaegtklassetal staar langt nede i gitteret - ikke
   soeskende i nogen fornuftig forstand. `body:has()` er uafhaengig af
   raekkefoelge og container og laeser derfor lige saa let paa tvaers af
   <header> og <main>. `.enhedsvis--imperial{display:none}` staar allerede
   globalt (uden for dette spors filejerskab); reglerne her tilfoejer kun
   NAAR den skal vises igen, praecis som de to aeldre spors egne :checked-
   regler goer det lokalt. */
body:has(.enhedsskift__boks--baand:checked) .enhedsvis--metrisk{display:none}
body:has(.enhedsskift__boks--baand:checked) .enhedsvis--imperial{display:contents}

/* --- kortets vaerdi og samlknap (spor/kort) ---------------------------------
   ÉN AFGRAENSET BLOK, SIDST I FILEN, fordi assets/system.css deles med
   spor/enhed. Ingen eksisterende regel er roert.

   HVORFOR HER OG IKKE I generator.css, hvor kortets oevrige klasser bor
   (.kort__tekst, .kort__prod, .kort__savn): filejerskabet i briefet gav dette
   spor system.css, ikke generator.css. Det er en reel omkostning - to
   soeskende i to filer - og den er foert i sporets rapport. Kaskaden gaar fri:
   generator.css indlaeses EFTER system.css, men den kender ingen af de fire
   klassenavne herunder, saa der er intet at overskrive.

   Sorteringens vis-regler genereres i katalog.mjs (hovedStil, 6d - afsnittet
   hed 5d, indtil spor/filter skoed en sektion ind foran) og staar i
   sidens inline <style> - altsaa efter begge filer. De vinder derfor over
   `display:none` herunder uden !important.
   -------------------------------------------------------------------------- */

/* 1. VAERDIEN PAA KORTET (JPK 1. sep 2026, punkt 2)
   Skjult i hvile praecis som .kort__savn: alfabetisk sortering har ingen
   sorteret vaerdi at vise, og standardvisningen skal se ud som foer. */
.kort__vaerdi{
  display:none;margin-top:var(--r1h);
  align-items:baseline;flex-wrap:wrap;gap:2px 8px;
}
/* Etiketten deler bogstavform med savn-maerket - det er MENINGEN. De to er
   samme raekke; kun det, de baerer, er forskelligt (haard begraensning 5). */
.kort__vaerdi-mrk{
  font-size:var(--fs-gulv);font-weight:600;letter-spacing:.06em;
  text-transform:uppercase;color:var(--stoev-blaek);
}
/* Figuren saettes ét trin under robotnavnet (17px): den skal kunne laeses
   som kortets ANDET tal, ikke konkurrere med navnet om at vaere det foerste. */
.kort__vaerdi .v-tal{font-size:var(--fs-lille)}
/* Baandet foer denne linje kunne braekke etiket og figur fra hinanden paa
   smalle kort. `flex:1 0 auto` paa figuren holder den samlet paa egen linje,
   naar de to ikke kan staa ved siden af hinanden. */
.kort__vaerdi .v{flex:0 1 auto;min-width:0}

/* 2. SAMLKNAPPEN (JPK 1. sep 2026, punkt 1)
   `hidden` staar i HTML'en og fjernes af assets/katalog.js. UDEN JavaScript
   er knappen derfor ikke bare usynlig - den findes ikke for laeseren, og
   sammenligningssidens egne afkrydsningsfelter er uroert den eneste vej ind
   (arkitekturregel P0: JavaScript maa forbedre sandheden, aldrig baere den).
   Den eksplicitte [hidden]-regel staar, fordi `display:flex` nedenfor ellers
   ville slaa attributtens egen display:none i kaskaden. */
.kort__saml[hidden]{display:none}
/* Stemplet i det MODSATTE hjoerne af statusstemplet (.kort__mrk, top/left).
   De to laeses da som pladens to maerker: hvad fabrikanten oplyser, og hvad
   laeseren selv har afsat. Knappen ligger i billedfeltet og koster derfor
   ingen hoejde i tekstblokken - 77 kort taaler ikke en raekke mere.
   z-index:3 er ikke pynt: .kort__navn a::after daekker hele kortet som
   klikmaal (z-index:1), og .kort__mrk ligger paa 2. Uden 3 ville knappen
   ligge UNDER navnelinket og ikke kunne rammes. */
/* PLACERINGEN er kortets, ikke knappens: `.kort__saml` baerer efter L77 KUN
   hvor stemplet sidder. Alt det, der handler om, hvordan en knap SER UD, er
   flyttet til varianten `.knap--maerkat` herunder. */
.kort__saml{position:absolute;top:0;right:0;z-index:3}

/* .knap--maerkat: knapprimitivens MIKROPLADE - en til/fra-knap, der sidder
   oven i en flade i stedet for ved siden af den. Den er den ene variant, der
   IKKE staar oppe hos de andre i afsnit 13b, og grunden er kaskaden: reglerne
   for hvile, hover og valgt tilstand har alle vaegten (0,2,0), saa det er
   KILDERAEKKEFOELGEN, der afgoer, om et afsat kort forbliver gult, naar musen
   koerer hen over det. De skal derfor blive staaende samlet og i denne
   raekkefoelge - hover foerst, [aria-pressed] sidst. Flyttes de op til
   primitiven, skal `.kort:hover`-reglen med, og saa vinder den over valgt.

   Fladen er LYS (kortet), og varianten siger det ikke i sit navn, fordi den
   kun findes ét sted. Skal den nogensinde bruges paa moerk bund, skal der
   laves en `--maerkat-moerk`; arv den ikke. */
.knap--maerkat{
  gap:5px;
  padding:var(--r1) var(--r2);min-height:24px;
  font-size:var(--fs-gulv);font-weight:700;letter-spacing:.13em;
  /* HVILETILSTANDEN VAR DAEMPET MED VILJE, OG DAEMPNINGEN ER OPHAEVET
     10. sep 2026 (spor/kort-hierarki, JPK: "maaske skal compare-knapper
     ogsaa vaere lidt mere tydelig").

     Her stod: "Knappen staar paa 83 kort samtidig og er dermed sidens mest
     gentagne element; i fuld blaek med ramme blev den den foerste ting,
     oejet maatte gennem, foer det naaede en robot." TALLET ER MAALT PAA NY
     10. sep 2026 og er 170 knapper paa katalogsiden
     (grep -o 'class="knap knap--maerkat kort__saml"' dist/index.html | wc -l
      = 170: 150 kort i gitteret + 20 i aabningsstriben).

     BEGRUNDELSEN FALDT, FORDI DEN ANDEN HALVDEL AF HJOERNET FALDT.
     Daempningen blev valgt, mens statusstemplet laa som en FYLDT blaek-blok
     i det modsatte hjoerne; sammen med den var en fuld blaek knap for meget.
     Stemplet er nu en konturchip i kortets fod (generator.css .kort__mrk),
     og den oeverste kant baerer kun handlingen. Maalt paa den gamle udgave:
     stemplets flade 14,69 : 1 mod knappens flade 1,16 : 1 paa kortfladen -
     oplysningen stod 13 gange staerkere end handlingen.

     HVILETILSTANDEN ER STADIG IKKE FYLDT BLAEK: fladen bliver --bund, og
     knappen faar en synlig hvilekant plus blaek tekst. Maalt 10. sep 2026:
       tekst  --blaek         #22262A paa --bund #E8EBED  12,72 : 1 (var 4,74)
       kant   --hegn-baerende #737F87 paa --bund          3,43 : 1 (var: ingen)
     Fladen er fortsat ugennemsigtig og ikke transparent: kortets billede kan
     naa helt op i hjoernet, og en transparent knap ville da staa paa et foto. */
  color:var(--blaek);background:var(--bund);
  box-shadow:inset 0 0 0 1px var(--hegn-baerende);
}
/* Krydset er et REN CSS-tegn, ikke et ikon: ét glyf mindre at hente, og det
   skifter betydning med tilstanden (+ afsat, x fjern igen). */
.knap--maerkat::before{content:"+";font-size:var(--fs-etiket);line-height:1;font-weight:700}
/* Kortet under musen har KUN én knap, saa dér maa den godt traede frem.
   HOVER ER IKKE FAMILIENS GULE FLADE HER, og det er med vilje: den fyldte
   gule flade er allerede taget - den betyder AFSAT paa dette kort.

   SAGEN BLEV AFGJORT TO GANGE 10. sep 2026, OG BEGGE AFGOERELSER STAAR HER,
   fordi den anden kun giver mening med den foerste:
     kl. 13.0x  JPK: "compare-knappen maa gerne vaere gul ved hover(naar
                markoeren er over den)". Hover blev en FYLDT gul flade.
     kl. 13.5x  JPK, efter at prisen var forelagt ham: "Du har ret i forhold
                til hover effekten. Det skal bare vaere en accent streg i
                siden." Den fyldte gule hover er TRUKKET TILBAGE.

   HOVER ER DERFOR: uaendret flade (--bund arves fra hvilereglen ovenfor),
   ringen loeftet til --blaek, og en 3 px ACCENTSTREG i knappens VENSTRE side.
   Reglen saetter med vilje INGEN `background`: goer den det, kan fladen ikke
   vaere "uaendret fra hvile", og reglen ville desuden overtage den afsatte
   tilstands gule flade paa specificitet (se vaernet nedenfor).

   HVORFOR VENSTRE OG IKKE HOEJRE. Knappen sidder i kortets oeverste hoejre
   hjoerne (`.kort__saml`: top:0;right:0), saa dens hoejre kant falder sammen
   med kortets egen kant og med gitterets haarstreg. En streg dér ville
   laese som en kant paa KORTET, ikke paa knappen. Venstre side er fri, og
   sidens oevrige accentstreger sidder allerede til venstre - elleve regler i
   generator.css baerer `border-left: 3px solid var(--accent)`.

   HVORFOR box-shadow OG IKKE border-left. `.knap` har `border:0`, og
   `box-sizing:border-box` er global: en 3 px kant, der kun findes ved hover,
   ville skubbe knappens indhold 3 px ved hver musebevaegelse. En indfaeldet
   skygge tegner den samme streg uden at flytte noget.

   KANTEN ER LOEFTET FRA --linje TIL --blaek 10. sep 2026: hvilekanten er
   --hegn-baerende, og en hover-kant i --linje (1,56 : 1 paa --panel) ville
   vaere SVAGERE end hvilen.

   REKKEFOELGEN AF DE TO SKYGGER ER IKKE LIGEGYLDIG: den foerste tegnes
   OVERST. Accentstregen staar derfor foerst, saa den ikke daekkes af
   1 px-ringen i sine tre yderste pixels.

   MAALT I BROWSEREN 10. sep 2026 (pixels i et skud af knappen ved 1440 px,
   venstre kant og indefter, midt i knappens hoejde):
     hvile  x0 115,127,135 (--hegn-baerende)  x1-x4 232,235,237 (--bund)
     hover  x0-x2 242,196,0 (accent)          x4    232,235,237 (--bund) */
/* JPK 10. sep 2026, ordret: "Jeg kan se at stregen er synlig naar hele kortet
   beroeres. Det burde kun vaere naar at knappen til compare er beroert."

   De tre selektorer stod i ÉN gruppe, saa accentstregen blev tegnet, saa
   snart musen ramte kortet nogen steder - 220 x 300 px flade for et maerke,
   der hoerer til en knap paa 89 x 24 px. Gruppen er delt i to:

   1. KORTETS hover goer knappen laesbar (blaek tekst + ring). INGEN streg.
   2. KNAPPENS egen hover/fokus tilfoejer accentstregen. */
.kort:hover .knap--maerkat{
  color:var(--blaek);
  box-shadow:inset 0 0 0 1px var(--blaek);
}
/* `.kort`-varianterne SKAL med, og det er samme specificitetsfaelde som
   afsat-vaernet nedenfor: `.kort:hover .knap--maerkat` ovenfor er (0,3,0),
   og en bar `.knap--maerkat:hover` er (0,2,0). Uden `.kort ...`-parret ville
   reglen ovenfor vinde, netop naar musen er paa knappen - for da er den ogsaa
   paa kortet - og stregen ville aldrig kunne ses. De to (0,3,0)-selektorer
   afgoeres af raekkefoelgen, og denne staar sidst. */
.knap--maerkat:hover,.knap--maerkat:focus-visible,
.kort .knap--maerkat:hover,.kort .knap--maerkat:focus-visible{
  color:var(--blaek);
  box-shadow:inset 3px 0 0 0 var(--accent),inset 0 0 0 1px var(--blaek);
}
/* AFSAT: afmaerkningsgul. Farven er sidens markeringsfarve (D15), ikke en
   handelsfarve - og gunmetal paa gul maaler 9,19:1, saa teksten baerer.
   Den er OGSAA det eneste sted paa kortet, gult optraeder, saa et afsat kort
   kan ses paa tvaers af gitteret uden at laese en eneste etiket.
   STAAR SIDST MED VILJE, MEN RAEKKEFOELGEN ER IKKE NOK - MAALT 10. sep 2026.
   Her stod: "den har samme vaegt (0,2,0) som hover-reglen ovenfor, saa kun
   kilderaekkefoelgen holder et afsat kort gult under musen." DET ER FORKERT
   for den foerste af hover-reglens tre selektorer:

     .knap--maerkat[aria-pressed="true"]   klasse + attribut     (0,2,0)
     .knap--maerkat:hover                  klasse + pseudoklasse (0,2,0)
     .kort:hover .knap--maerkat            TO klasser + pseudokl. (0,3,0)  <-

   Den sidste vinder over denne regel UANSET raekkefoelge. Maalt i browseren
   10. sep 2026 med den GAMLE hover-flade (--panel): et afsat kort blev
   KRIDT, mens musen var over det, ikke gult - stik imod det, kommentaren
   paastod. FEJLEN VAR DER FOER DETTE SPOR og er rettet her.

   VAERNET er derfor specificitet OG raekkefoelge: `.kort ...`-varianten
   nedenfor staar paa (0,3,0) og sidst, saa den slaar `.kort:hover ...`. Den
   bare selektor bliver staaende for knapper uden for et kort.

   VAERNET GOER MERE END AT HOLDE FLADEN GUL: det holder ogsaa hover-reglens
   ACCENTSTREG vaek fra en afsat knap. Uden det ville stregen blive tegnet
   paa den gule flade - accent paa accent, altsaa usynlig, og et
   hover-maerke, der ikke kan ses, er stoej i kilden. */
.knap--maerkat[aria-pressed="true"],
.kort .knap--maerkat[aria-pressed="true"]{
  background:var(--accent);color:var(--blaek);
  /* Kanten skrives igen her, fordi hvilereglen (10. sep 2026) saetter
     --hegn-baerende: 2,48 : 1 paa gult, altsaa svagere end paa --bund.
     Gunmetal paa gul er 9,19 : 1 og holder chippen skarp i det ene hjoerne,
     hvor gult overhovedet optraeder paa kortet.

     1px, UAENDRET. Her stod kortvarigt 2px, mens hover var en fyldt gul
     flade og vaegten skulle baere skellet. JPK trak den gule hover tilbage
     samme eftermiddag, og den afsatte tilstand er derfor uroert. */
  box-shadow:inset 0 0 0 1px var(--blaek);
}
.knap--maerkat[aria-pressed="true"]::before{content:"\00d7"}
/* Fokusringen tegnes INDAD og i blaek, ikke sidens globale 3px accent-ring
   udad: stemplet sidder i kortets hjoerne, og en udad-ring ville blive
   klippet af billedfeltet. Samme greb som daekkets rullespor. */
.knap--maerkat:focus-visible{outline:2px solid var(--blaek);outline-offset:-2px}
/* (`:active`-svaret er primitivens nu - se `.knap:active` i afsnit 13b.
   Her stod foer et duplikat plus dets egen prefers-reduced-motion-regel.) */

/* 3. TAELLEREN I STRIMLEN
   Udvalget taelles DÉR, hvor sidens oevrige aktive valg allerede staar, og
   ikke i et svaevende baand. Det er et bevidst valg mod haard begraensning 1:
   en fastklaebet "N valgt"-bjaelke med en fremad-knap ER indkoebskurvens form,
   uanset hvad der staar paa den. Her er den en chip blandt chips. */
.saml-taeller{
  display:none;align-items:center;gap:8px;flex-wrap:wrap;
  /* EGEN RAEKKE PAA PLADEN, med strimlens egen vandrette indrykning
     (var(--r5)), saa den flugter med baandet ovenover i stedet for at ligge
     og klemme sig mellem baandet og soegefeltets etikette. Hairline foroven
     og forneden: raekken er en stansning i pladen som de oevrige. */
  margin:0;padding:var(--r2h) var(--r5);
  border-bottom:1px solid var(--linje);
  font-family:var(--mono);font-size:var(--fs-data);font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;color:var(--blaek);
}
.saml-taeller[data-aktiv]{display:flex}
.saml-taeller__tal{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:20px;height:20px;padding:0 var(--r1h);
  background:var(--accent);color:var(--blaek);
  font-variant-numeric:tabular-nums;
}
/* RAEKKENS TO HANDLINGER er begge knapprimitiven i dens TEKST-vaegt, den ene
   med `--frem` (aabn sammenligningen) og den anden uden (ryd). Her stod foer
   to selvstaendige regler, hvoraf `.saml-taeller__ryd` var en hel
   <button>-nulstilling; primitiven baerer det hele nu.

   ÉN LINJE BLIVER: raekken saetter SIN EGEN typeskilt-grad (11 px / 700 /
   .13em), og primitivens er 12 px / 600 / .11em. Uden denne linje ville de
   to handlinger staa i en anden grad end raekkens egen etiket lige ved
   siden af - to typeskilt-grader i én raekke, 1 px fra hinanden, hvilket
   laeser som en fejl frem for som et hierarki. Knapper i en raekke, der
   allerede TALER typeskilt, foelger raekkens grad. */
.saml-taeller .knap{font-size:inherit;font-weight:inherit;letter-spacing:inherit}
/* Graensebeskeden. `role="status"` i HTML'en, saa en skaermlaeser hoerer den;
   den staar kun, naar et klik faktisk blev afvist.

   GRUNDFORMEN ER ET ACCENTFELT (9. sep 2026, JPK: beskeden skal vaere
   tydeligere). Den samme flade og den samme grad som .valg-chippen, sitets
   eksisterende "det her er valgt lige nu"-udtryk - ikke et nyt. 11px ->
   --fs-mikro (13px, R5's naeste trin) og accentfelt i stedet for en 3px
   accentstribe i venstre kant: en stribe paa 3px er den svageste markering,
   sitet har, paa den ene besked, der ikke maa overses.

   FLADEN BAERER OPLYSNINGEN, IKKE KANTEN, og det er derfor accenten maa
   staa her: DP1 forbyder accent som FORGRUND paa lys flade (1,38 : 1) og
   tillader den altid som BAGGRUND med blaek ovenpaa (9,19 : 1). Den gamle
   3px stribe var netop type 4 i DP1's tabel - en betydningsbaerende markoer
   i accent paa lys flade - og altsaa forbudt paa sine egne praemisser. */
.saml-graense{
  margin:0;padding:var(--r1h) var(--r3);
  border-bottom:0;
  font-family:var(--mono);font-size:var(--fs-mikro);font-weight:600;
  letter-spacing:.02em;color:var(--blaek);
  background:var(--accent);
  border-radius:var(--hjoerne);
  /* KANTEN ER IKKE PYNT, OG DEN ER MAALT. Gult felt mod bjaelkens hvide
     flade er 1,60 : 1 og mod sidens bund 1,38 : 1 - altsaa en forskel, der
     baeres af KULOEREN og ikke af lysheden. En laeser med en kraftig
     farvesynsdefekt ser da et lysegraat felt paa en hvid bjaelke. Den ene
     blaek-haarstreg giver feltet en kant paa 12,72 : 1 mod begge flader,
     uafhaengigt af kuloer. Ingen ny farve; --blaek er samme token som
     teksten i feltet. */
  box-shadow:inset 0 0 0 1px var(--blaek);
}
/* Tom besked = ingen raekke. `:empty` rammer kun, naar der ikke er ét eneste
   tegn - og det er praecis tilstanden "intet klik er blevet afvist". */
.saml-graense:empty{display:none}

@media (max-width:1024px), (pointer:coarse){
  /* Knappen er et 24 px maal paa 1440. Paa touch og tablets skal den op paa 44 px, som
     resten af sidens betjening (samme graense som .udtraek__greb). */
  .knap--maerkat{min-height:44px;padding:var(--r1h) var(--r3);font-size:var(--fs-etiket);font-weight:700;letter-spacing:.08em}
  .klaebebar__gaa,.klaebebar__ryd{min-height:44px}
  .klaebebar__chip .klaebebar__fjern{position:relative}
  .klaebebar__chip .klaebebar__fjern::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);min-width:44px;min-height:44px}
}

/* 460 PX-REGLEN ER SLETTET 10. sep 2026 (spor/kort-hierarki). HISTORIKKEN
   BLIVER STAAENDE, fordi den forklarer, hvorfor ordet "Compare" var vaek paa
   smaa skaerme i tre uger.

   Her stod: "460 PX ER MAALT, IKKE VALGT EFTER SMAG. Fra 720 px og ned staar
   kortene 2-op (generator.css:1572), og kortbredden falder derfor med
   viewporten. Maalt ved 390 px: kort 171 px · statusstempel 'Annonceret'
   85 px · knap 106 px = 190 px, som skal dele den samme oeverste kant."
   Reglen klippede derfor `.kort__saml-ord` vaek med `clip-path:inset(50%)`
   under 460 px, saa knappen blev et umaerket "+": "Det er statusstemplet,
   der skal have pladsen."

   MAALINGEN VAR RIGTIG. FORUDSAETNINGEN ER VAEK. Statusstemplet deler ikke
   laengere den oeverste kant med knappen - det er flyttet til kortets fod
   (generator.css .kort__mrk, 10. sep 2026), og den oeverste kant baerer nu
   kun handlingen. Der er derfor ingen kollision at loese, og et umaerket "+"
   paa 56 kort var prisen for en kollision, der ikke findes mere.
   44 px-beroeringsmaalet under 720 px staar uroert i reglen ovenfor. */

/* --- enheder paa sammenligning (spor/samlenhed) --- */
/* Matricen tegnes af JavaScript, men SKIFTET er ren CSS, praecis som paa
   robotsiden: begge figurer staar i cellen, og `:checked ~ *` vaelger.
   Matricen tegnes derfor ikke om, naar laeseren skifter enhed.

   HVORFOR DE FIRE REGLER SKAL SKRIVES IGEN HER. §16c's skifteregler er
   scopet til `.typeskilt`, og MAALT 1. sep 2026 staar det ord NUL gange i
   dist/da/sammenligning/index.html - sammenligningssiden er ikke en
   typeskilt-flade. Grundformerne (.enhedsskift, .enhedsvis, .omregnet,
   .enhedsnote) er derimod uscopede og arves uaendret; kun de fire
   tilstandsregler mangler en vaert. Ét ord er aendret, resten er ordret
   §16c, saa de to flader ikke kan komme til at se forskellige ud. */
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsskift{color:var(--blaek);border-color:var(--blaek)}
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsskift__spor{background:var(--accent);border-color:var(--blaek)}
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsskift__knop{left:auto;right:1px;background:var(--blaek)}
.sammenligning-app .enhedsskift__boks:focus-visible ~ * .enhedsskift{
  outline:3px solid var(--ring);outline-offset:3px;border-radius:var(--hjoerne);
}
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsvis--metrisk{display:none}
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsvis--imperial{display:contents}
.sammenligning-app .enhedsskift__boks:checked ~ * .enhedsnote{display:block}

/* Strimlen over matricen. Kontakten staar til HOEJRE, paa linje med den
   spalte, oejet i forvejen ender i, og noten laegger sig under den i
   imperial tilstand i stedet for at skubbe tabellen ned i metrisk.
   `align-items:flex-end` frem for et gitter: noten findes kun halvdelen af
   tiden, og en tom raekke i et gitter ville efterlade et hul i metrisk. */
.saml-enhedslinje{
  display:flex;flex-direction:column;align-items:flex-end;gap:6px;
  margin:0 0 var(--r3);
}
/* Noten er tre linjer, ikke tre ord. Blokken staar til hoejre (flex-end),
   men TEKSTEN saettes venstrestillet: en hoejrestillet ragged-left brOEdtekst
   over tre linjer tvinger oejet til at lede efter linjestarten forfra hver
   gang. `--maal` er sitets egen laesebredde, saa linjelaengden bliver den
   samme som i enhver anden brOEdtekst. */
.saml-enhedslinje .enhedsnote{margin:0;text-align:left;max-width:var(--maal)}

/* Matricens celler er smalle, og maerket maa ikke braekke figuren fra sin
   enhed. Paa robotsiden staar `.omregnet` paa samme linje som tallet; her
   faar den lov at falde ned under, naar cellen er for smal - derfor
   `display:inline-block` (arvet) plus en egen margin, der ikke tegner et
   haengende indryk, naar den goer det. */
.saml-matrix .omregnet{margin-left:var(--r1h);margin-top:var(--r0)}

@media (max-width:700px){
  /* Under bruddet staar matricen i én spalte pr. robot, og en hoejrestillet
     kontakt ville lande milevidt fra tabellens venstrekant. */
  .saml-enhedslinje{align-items:stretch}
  .saml-enhedslinje .enhedsskift{justify-content:center}
  .saml-enhedslinje .enhedsnote{text-align:left}
}

/* --- om os (spor/omos) -----------------------------------------------------
   Om-siden (L61) er sitets ENESTE prosaside, og den eneste flade hvor
   sammenhaengende tekst baerer. Alt herunder hoerer til den; ingen regel
   ovenfor er roert.

   MANIFESTETS PAR, VENDT OM. retninger/nyverden/MANIFEST.md kalder Saira
   "pladen" og Literata "manualen" - de to tryksager en industrimaskine
   faktisk kommer med. Paa alle andre sider FOERER pladen, og Literata er
   henvist til noter paa 11-14 px (generator.css). Her foerer manualen: broed-
   teksten er Literata i 18 px, og pladen braekker ind som stansede tal i
   marginen. Det er sidens anden rytme, og den er hentet i retningen frem for
   fundet paa. Literata saettes STADIG aldrig som display - hver eneste
   overskrift her er Saira via .t-h1/.t-h2/.t-h3, som manifestet kraever.
   (Stod .t-hero indtil 9. sep 2026; klassen er fjernet med L111.)

   INGEN NYE FARVER, INGEN NYE SKRIFTER. D15 laaste paletten og snittene;
   hver eneste vaerdi herunder er en bestaaende polet. Ingen gradient, ingen
   gloed, ingen glasmorfisme, ingen slagskygge - .stans er den samme stansede
   kant, resten af sitet bruger (afsnit 5). */

.om-hero{padding-top:var(--r8);padding-bottom:var(--r2)}
.om-hero__ord{margin:var(--r2) 0 0;max-width:16ch}
/* Ledet er manualens foerste saetning og saettes derfor i Literata med det
   samme - ikke i .t-broed, som er Saira. 20px, fordi en serif paa samme
   px-tal som en grotesk laeser mindre. */
.om-lede{
  font-family:var(--manual);font-size:var(--fs-h3);line-height:1.5;
  color:var(--blaek2);max-width:54ch;margin:var(--r5) 0 0;
  text-wrap:pretty;
}

.om-sektion{padding-top:var(--r8)}
.om-sektion .sektion-hoved{margin-bottom:var(--r5)}

/* Broedteksten. 62ch og ikke systemets 68ch (--maal): --maal er sat for
   Saira, og Literata er bredere pr. tegn, saa 68ch ville give en laengere
   linje i px end resten af sitet har. Maalt i Chromium ved 1440:
   62ch Literata 18px = 636 px, 68ch Saira 17px = 629 px. */
.om-broed{
  font-family:var(--manual);font-size:var(--fs-manual);line-height:1.62;
  color:var(--blaek);max-width:62ch;margin:0 0 var(--r4);
  text-wrap:pretty;
}
.om-broed--bred{max-width:76ch}
/* Afsnittet, der baerer sidens argument, staar i broedstoerrelse - ikke som
   fodnote. Foerste udkast satte det i .t-lille 15px, og hierarkiet loej:
   den vigtigste saetning paa siden var den mindste. --slut fjerner kun den
   afsluttende margen, saa afsnittet ikke skubber sektionsluften. */
.om-broed--slut{margin-bottom:0}

/* LOEBET: prosaspor + margenspor. Pladen ligger i marginen som paa et
   opslag i en manual, ikke som et kort under teksten. Under 900 px falder
   den ned under prosaen - DOM-ordenen er allerede prosa foerst, saa der er
   ingen order/-omrokering og dermed ingen forskel paa laese- og
   skaermraekkefoelge. */
.om-lob{display:grid;gap:var(--r7) var(--r7);align-items:start}
@media (min-width:900px){
  .om-lob{grid-template-columns:minmax(0,1fr) minmax(260px,var(--om-mark,340px))}
}

/* --- regnskabet: sidens signatur ------------------------------------------
   Tre tal, der SKAL give hinanden. Det er den ene figur paa siden, hvor
   pladen faar lov at foere, og derfor det ene sted tallene saettes stort. */
.om-regnskab{background:var(--panel);padding:var(--r5);margin:0}
.om-regnskab__raekke{
  display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;
  gap:var(--r2) var(--r4);padding:var(--r3) 0;border-top:1px solid var(--linje);
}
.om-regnskab__raekke:first-child{border-top:0;padding-top:0}
.om-regnskab__raekke dt{
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:600;letter-spacing:.11em;
  text-transform:uppercase;color:var(--blaek2);
}
.om-regnskab__raekke dd{margin:0}
.om-regnskab__raekke dd .figur{font-size:var(--fs-figur-m);font-weight:700;letter-spacing:-.02em;line-height:1}
/* Summen er regnestykkets facit og faar den kraftige streg, systemet
   allerede bruger til "her slutter en optaelling" (.streg--kraftig). */
.om-regnskab__raekke--sum{border-top:2px solid var(--blaek);margin-top:var(--r2);padding-top:var(--r4)}
.om-regnskab__raekke--sum dt{color:var(--blaek);text-transform:none;font-size:var(--fs-mikro);letter-spacing:normal}
.om-regnskab__raekke--sum dd .figur{font-size:var(--fs-figur-l)}
.om-regnskab__ligning{
  margin-top:var(--r0);font-size:var(--fs-mikro);letter-spacing:normal;color:var(--blaek3);
  text-transform:none;font-weight:400;
}

/* --- metoden: fire trin i den raekkefoelge de sker i ----------------------- */
.om-trinliste{
  list-style:none;margin:0;padding:0;
  display:grid;gap:var(--r6);
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
}
.om-trin{display:grid;gap:var(--r3);align-content:start;
  padding-top:var(--r4);border-top:2px solid var(--blaek)}
/* Trinnummeret er stanset, ikke sat i en cirkel: en cirkel er
   SaaS-punktopstillingens sprog, og TYPESKILT har ingen runde marker.
   aria-hidden i markup'en - <ol> siger allerede raekkefoelgen til en
   skaermlaeser, og "01" ville blive laest to gange. */
.om-trin__nr{
  font-size:var(--fs-etiket);font-weight:700;letter-spacing:.16em;color:var(--blaek3);
  line-height:1;
}
.om-trin__titel{margin:0}
/* GRADEN ER FJERNET HER (spor/typeskala, 9. sep 2026). Reglen satte
   --fs-broed (17px), og det er Sairas broedgrad - men .om-broed er Literata,
   som saettes i --fs-manual (18px). De fire trinafsnit stod derfor som den
   ENESTE Literata-tekst paa 17px, maalt i browseren ved 1440: ti .om-broed
   paa 18 og fire paa 17. Samme klasse, to grader, afhaengigt af beholderen.
   Forskellen paa 1px laeses ikke som hierarki, kun som uro - JPK 8. sep:
   "Fonten paa Om Os siden ser uens ud". Margen og maalet bliver staaende;
   det er kun graden, der var en defekt. Ved 390px saetter medieforespoergslen
   nederst i denne fil alle .om-broed til --fs-broed, og det er en bevidst
   responsiv nedtrapning af HELE klassen, ikke af én beholder. */
.om-trin .om-broed{margin:0;max-width:44ch}

/* --- hvad siden ikke goer -------------------------------------------------
   Den haarde linje er PRODUCT.md's krav (linje 95-96, 119-120) og staar som
   afsnittets paastand, ikke som en fodnote. Gunmetalflade (var(--fod)),
   samme moerke overflade som .klaebebar bruger andre steder i systemet -
   sidefoden, der oprindelig bar denne farve paa hver side, er fjernet
   (spor/doedcss2, 3. sep 2026). */
.om-haard{
  background:var(--fod);color:var(--stans);margin:0 0 var(--r5);
  padding:var(--r4) var(--r5);max-width:62ch;
  font-family:var(--mono);font-size:var(--fs-h3);font-weight:600;line-height:1.4;
  letter-spacing:-.012em;text-wrap:pretty;
}
.om-ikke{list-style:none;margin:0;padding:0;display:grid;gap:var(--r4)}
.om-ikke > li{padding-left:var(--r4);border-left:2px solid var(--hegn-baerende)}
.om-ikke > li:last-child{margin-bottom:0}
.om-ikke .om-broed{margin:0}

/* --- udgiveren ------------------------------------------------------------
   Navn, by og kontakt. INTET om ydelser - L61, haard begraensning 1. */
.om-kort{background:var(--panel);padding:var(--r5);margin:0;display:grid;gap:var(--r4)}
.om-kort__raekke{display:grid;gap:var(--r0)}
.om-kort__raekke dd{margin:0;font-size:var(--fs-felt);color:var(--blaek);line-height:1.45}
.om-kort__navn{display:block;font-weight:700;letter-spacing:-.01em}
.om-kort a{color:var(--blaek);text-underline-offset:3px}

/* HER STOD .om-tegn .tegnforklaring, SOM NULSTILLEDE NOEGLENS EGEN
   sektionsluft, naar den laa inde i Om os' egen sektion. Reglen er fjernet
   9. sep 2026 (AA210, spor/h1-noegle): JPK, ordret, "laesenoeglen beholdes paa
   KATALOGSIDEN og fjernes fra Om os". Beholderen .om-tegn findes ikke laengere
   i om-os.mjs, og en CSS-regel for en klasse, ingen side skriver, er doed vaegt,
   som test 57 faelder.

   HER STOD OGSAA EN OM OS-UNDTAGELSE, DER SATTE NOEGLENS OVERSKRIFT TIL
   --fs-h3 og letter-spacing -.014em (fjernet af spor/typeskala, 9. sep 2026).
   Begge vaerdier er nu komponentens egne i generator.css' regel for
   .tegnforklaring .sektion-hoved h2. Undtagelsen var ikke forkert i sit
   resultat - den var forkert ved at vaere lokal: den samme komponent stod paa
   19px her og 27px paa katalogsiden, og ingen af de to steder vidste om det
   andet. */

@media (max-width:679px){
  .om-hero{padding-top:var(--r6)}
  .om-hero__ord{max-width:none}
  .om-lede{font-size:var(--fs-manual);margin-top:var(--r4)}
  .om-sektion{padding-top:var(--r7)}
  .om-broed{font-size:var(--fs-broed)}
  .om-regnskab,.om-kort{padding:var(--r4)}
  .om-regnskab__raekke dd .figur{font-size:var(--fs-figur-s)}
  .om-regnskab__raekke--sum dd .figur{font-size:var(--fs-figur-m)}
  .om-haard{font-size:var(--fs-broed);padding:var(--r4)}
  .om-trinliste{gap:var(--r5)}
}

/* --- 17. SIDEFODEN (spor/sidefod, 3. sep 2026) ----------------------------
   JPK: "Faa lavet en afslutning paa skaermbilledet" -> "Hele siden mangler en
   sidefod" -> "sidefoden skal gaa igen paa alle sider". Markuppen staar i
   tools/skabelon/side.mjs' skal(); dens lange kommentar baerer indholdets
   begrundelser. Her staar kun formen.

   MODE READ. En fod paa et opslagsvaerk skal ikke tiltraekke sig
   opmaerksomhed - den skal give siden en ende og sige, hvad vaerket er.
   Succeskriteriet er, at laeseren foeler sig faerdig, ikke at foden bliver
   set.

   MATERIALET ER SYSTEMETS EGET, ikke en ny flade: var(--fod) er gunmetal, og
   DESIGN.md's farveafsnit definerer tokenet ordret som "billednoten oeverst,
   sidefoden". Foden er den flade, tokenet er opkaldt efter. Siden faar dermed
   samme materiale i begge ender - den moerke plade lukker, hvad billednoten
   aabner - uden at der opfindes en farve.

   KONTRAST, MAALT MED WCAG'S EGEN FORMEL OG MED LAESERETNING (et kontrasttal
   uden en laeseretning er ikke et tal - se CLAUDE.md's L70). Alle tre
   reproducerede DESIGN.md's tal paa anden decimal:
     --paafod  #E8EBED PAA --fod #22262A = 12,72 : 1   broedtekst, krav 4,5
     --paafod2 #9AA3A9 PAA --fod #22262A =  5,94 : 1   etiket,    krav 4,5
     --accent  #F2C400 PAA --fod #22262A =  9,19 : 1   fokusring, krav 3,0
   KONTROLLEN, som er hele grunden til at laeseretningen skrives: den samme
   accent som TEKST paa lys bund er 1,38 : 1. Den maa aldrig staa som forgrund
   her paa nogen lys flade - og paa den moerke er den sikker. Samme farve, to
   tal, og kun retningen skiller dem.

   HAARSTREGEN ER IKKE var(--linje). Rille paa gunmetal maaler 9,40 : 1 og
   ville tegne en hvid streg tvaers over foden, ikke en fuge. Delelinjen er
   derfor en lav-alfa hvid, som .klaebebar allerede har fortilfaelde for
   (`box-shadow:0 -1px 0 rgba(0,0,0,.2)`). Den baerer ingen betydning alene og
   er dermed uden for WCAG 1.4.11.

   LYS TEKST PAA MOERK FLADE KOMPENSERES paa alle tre akser, fordi den samme
   graad optisk fedes op paa moerk bund: en anelse mere linjeafstand (1,6 mod
   sidens 1,55), en anelse mere spatiering (.004em mod broedtekstens -.006em),
   og vaegten holdes paa 400 frem for at blive skruet ned. */
/* FODEN SKAL LIGGE I BUNDEN, OGSAA NAAR SIDEN ER KORTERE END SKAERMEN.
   Maalt efter min foerste udgave: dist/da/404.html og dist/en/404.html er
   866 px ved 1440x900, saa foden sluttede 34 px oppe og efterlod en lys
   stribe under sig. FOER dette spor fandtes defekten ikke - der var ingen fod
   at flyde - saa den er min, ikke arvet. 2 af 216 sider ved 900 px viewport;
   paa en hoejere skaerm rammer den flere, og 404-siden er netop den, en
   fremmed lander paa.

   FLEX-KOLONNE PAA <body> ER SIKKER HER, fordi de eneste IN-FLOW-boern er tre:
   .daek, <main> og .sidefod. Kontrolleret paa alle tre oevrige:
     .spring    position:absolute (system.css §3)
     SPRITE     <svg style="position:absolute" width="0" height="0">
     <script>   display:none
     .klaebebar position:fixed, og indsat af JS
   `flex:1 0 auto` paa <main> lader den fri plads gaa TIL indholdet frem for
   til en margen. Fri plads regnes MED fodens margin-top, saa en kort side
   bliver praecis 100dvh - ikke 100dvh + 96 px, som `margin-top:auto` paa
   foden ville give. Derfor beholder foden ogsaa sin --r9-luft paa de lange
   sider, hvor der ingen fri plads er at fordele. */
body{min-height:100dvh;display:flex;flex-direction:column}
body > .daek{flex:none}
body > main{flex:1 0 auto}
body > .sidefod{flex:none}

.sidefod{
  background:var(--fod);color:var(--paafod);
  /* margin-top er fodens ENESTE forhold til indholdet ovenfor: den luft, der
     goer at siden slutter frem for at blive klippet. --r9 (96px) er skalaens
     stoerste trin og bevidst stoerre end nogen sektionsafstand paa siden -
     foden er ikke den naeste sektion, den er efter sektionerne. */
  margin-top:var(--r9);
}
/* Rytmen: rundhaandet OVER den haarde linje, tættere mellem de to loefter,
   rundhaandet igen ned til maerket. Tre trin (r7 / r5 / r6), ikke ét tal
   gentaget - ellers faar alt i foden samme vaegt. */
.sidefod__ramme{
  padding-block:var(--r7) var(--r6);
  display:grid;gap:var(--r5);
}
/* DEN HAARDE LINJE FOERER. Squint-testen skal give den foerst: den er stoerst,
   tungest og lysest af fodens tre roller. Det er haard begraensning 1 sagt
   hoejt - "vi er ikke forhandler" - og paa et katalog over andres produkter er
   det den vigtigste saetning, siden trykker.

   Ingen egen plade under den. Om os saetter den samme noegle paa .om-haard med
   var(--fod) som baggrund, fordi den dér staar paa en LYS side; her ER hele
   foden den plade, og en plade paa pladen ville vaere kasse-i-kasse. Samme
   saetning, samme materiale, ét lag faerre. */
.sidefod__haard{
  margin:0;max-width:46ch;
  font-family:var(--mono);font-size:var(--fs-h3);font-weight:600;line-height:1.34;
  letter-spacing:-.012em;text-wrap:pretty;color:var(--paafod);
}
/* De to loefter staar SIDE OM SIDE og ikke under hinanden: de er to ligestillede
   udsagn om samme ting (hvad siden goer ved tal, og hvad den ikke goer ved
   laeseren), og en lodret stak ville goere det ene til en underordnet fodnote
   af det andet.

   SPALTERNE ER max-content, IKKE 1fr, og det er en rettelse af min egen
   foerste udgave. Med `repeat(auto-fit,minmax(34ch,1fr))` maalte jeg
   sporene til 566,7 px, mens afsnittene inde i dem var 471 px (deres 54ch) -
   95 px doed plads inde i hvert spor, som saa ud som en spaltefuge paa 128 px
   og ikke som gappets 32. auto-fit lavede desuden et TREDJE spor paa 0 px.
   To spor, hver saa bred som sin egen laeselaengde, er det, formen paastod. */
.sidefod__loefter{display:grid;gap:var(--r4)}
@media (min-width:680px){
  .sidefod__loefter{grid-template-columns:repeat(2,minmax(0,max-content));gap:var(--r6)}
}
/* 54ch er maalt paa DENNE graad: `ch` oploeses mod elementets egen font-size,
   saa maalet skal staa paa afsnittet og ikke paa gitteret omkring det - der
   ville de 54 tegn vaere blevet regnet i body's 17px og givet en anden bredde
   end den, teksten faktisk saettes i. */
.sidefod__broed{
  margin:0;max-width:54ch;
  font-size:var(--fs-lille);font-weight:400;line-height:1.6;letter-spacing:.004em;
  color:var(--paafod);text-wrap:pretty;
}
/* Maerket er fodens sidste linje og systemets Etiket-rolle: versaler,
   spatieret, mindste vaegt i foden. Delelinjen over den er det eneste sted i
   foden, hvor der tegnes noget. */
.sidefod__mark{
  margin:0;padding-top:var(--r5);
  border-top:1px solid rgba(232,235,237,.18);
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--r3) var(--r5);
}
.sidefod__udgiver{
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:500;letter-spacing:.15em;
  text-transform:uppercase;color:var(--paafod2);
}
/* LINKET ER FODENS ENESTE KLIKMAAL og skal kunne ses som ét. Global `a` saetter
   color:var(--blaek) - gunmetal PAA gunmetal = 1,00 : 1 - saa farven SKAL
   overskrives her. Det er ikke en teoretisk fare: .nulstil blev genbrugt paa
   en flade, den ikke var skrevet til, og maalte 1,16 : 1 (DESIGN.md,
   Knapper). Understregningen bliver staaende, saa linket ikke kun kendes paa
   sin farve (WCAG 1.4.1). */
.sidefod__link{
  color:var(--paafod);
  font-family:var(--mono);font-size:var(--fs-etiket);font-weight:500;letter-spacing:.15em;
  text-transform:uppercase;
  text-decoration-thickness:1px;text-underline-offset:4px;
  /* Beroeringsmaalet: blaekket er 11,5 px, saa selve linjen er langt under
     sitets 44 px. Polstringen giver MAALET uden at flytte noget synligt -
     maalt til 47 px hoejt ved baade 1440 og 390. */
  display:inline-block;padding-block:calc((44px - 1.3em) / 2);
}
/* Sidens ene gestus, uaendret: kassen fyldes med afmaerkningsgul, teksten gaar
   til blaek. 9,19 : 1 med blaek PAA accent - den maalte, tilladte retning. */
.sidefod__link:hover{
  background:var(--accent);color:var(--blaek);
  text-decoration-color:transparent;
  box-shadow:0 0 0 4px var(--accent);
}
/* BUNDBAREN MAA IKKE DAEKKE FODEN - og reglen, der loeste det, staar ikke
   laengere her. Her stod indtil 4. sep 2026 en :has()-regel, der gav
   .sidefod__ramme en bundpolstring paa --r6 plus et haardkodet tal paa
   72 px, naar bjaelken var synlig. (Tallet skrives med mellemrum her, saa
   acceptkriterium 4c's grep efter det sammenskrevne kan give nul og
   forklaringen alligevel overleve - historikken maa ikke koste maalingen,
   og maalingen maa ikke koste historikken.)

   Den var rigtig i sin hensigt og midlertidig efter sin egen kommentar
   ("spor/barplan planlaegger den bar netop nu og ejer dens afsnit"). Det
   spor er nu koert, og de 72 px er erstattet af --barplads, som
   assets/katalog.js MAALER - se bundpladse-afsnittet ved .klaebebar.

   HVORFOR REGLEN FJERNES OG IKKE BARE FAAR var(--barplads) INDSAT:
   `body{padding-bottom:var(--barplads)}` reserverer allerede pladsen, og
   begge regler paa én gang ville reservere den TO gange - maalt: 104 px i
   foden plus 45 px paa body, hvor bjaelken fylder 49. De 72 px var
   desuden forkerte i begge retninger: bjaelken var 45,7 px foer sporet og
   er 33,2 px efter.

   OG DEN LOESER Å152's ANDET FUND SOM SIDEGEVINST: "bundbaren og foden er
   samme gunmetal og smelter sammen ved 390 px". Med foden paa sin egen
   polstring og bundpladsen paa <body> ligger der nu en stribe LYS
   bundfarve (--bund) mellem den moerke fod og den moerke, fritstaaende
   bjaelke. De to gunmetalflader roerer ikke laengere hinanden. */

@media (max-width:679px){
  .sidefod{margin-top:var(--r7)}
  .sidefod__ramme{padding-block:var(--r6) var(--r5);gap:var(--r4)}
  .sidefod__haard{font-size:var(--fs-broed)}
  /* Spalterne falder sammen af sig selv (auto-fit), men afstanden mellem de to
     loefter skal vokse, naar de gaar fra at staa ved siden af hinanden til at
     staa over hinanden - ellers laeses de som ét afsnit. */
  .sidefod__loefter{gap:var(--r4)}
  .sidefod__mark{padding-top:var(--r4)}
}

