/* =============================================================
   Sitets udseende.
   Kun aktiv paa sider med <body class="kp">. Alt er praefikset med .kp,
   saa resten af sitet ikke paavirkes.

   Greberne:
   - Reelt tofarvet. Ingen brandfarve i fladen, kun sort paa varmt papir
   - Ekstrem typografisk kontrast: display omkring 72px mod labels paa 11px,
     og naesten intet derimellem
   - Smal tekstspalte forskudt fra venstre, ikke fuld bredde
   - Mikro-labels i venstre margen, sat op ad sektionens overkant
   - Haarfine linjer som eneste inddeling
   ============================================================= */

.kp {
  /* Broedtekstens maal staar ét sted. Foer var det skrevet ind i elleve
     regler med tre forskellige vaerdier -- 16, 18 og 20 px -- og saa var
     det samme afsnit ikke lige stort paa artiklen og paa oversigten. */
  --kp-tekst: 1.125rem;    /* 18px */

  /* Oversigtens spalte. Bredere end laesespaltens 40rem -- en post er tre
     linjer uddrag, ikke en artikel, saa den taaler en laengere linje. Samme
     forhold som citatblokkene bruger. */
  --kp-oversigt: 52rem;

  --kp-paper: #f2efec;
  --kp-ink:   #171717;
  --kp-mute:  #6f6a66;
  --kp-line:  #d8d2cc;

  background: var(--kp-paper);
  color: var(--kp-ink);
  font-family: var(--md-sys-typescale-plain-font);
}


/* ---------------- Sidehoved: alt saa lille som muligt ---------------- */
.kp .site-header { background: var(--kp-paper); border-bottom: 1px solid var(--kp-line); }
.kp .site-header__inner { min-height: 64px; }
.kp .brand { color: var(--kp-ink); }
/* Navnetraekket paa én linje i én skrift og én stoerrelse. ADVISORY er ikke
   sat som label, men som en del af samme navn, kun daempet i farve. */
.kp .brand__lockup { display: flex; align-items: baseline; gap: .4em; white-space: nowrap; }
.kp .brand__name,
.kp .brand__kort,
.kp .brand__sub {
  font-family: var(--md-sys-typescale-plain-font);
  font-size: 1.0625rem; font-weight: 500; line-height: 1;
  letter-spacing: -.005em; text-transform: none; text-indent: 0;
  margin: 0; padding: 0; border: 0;
}
.kp .brand__name { color: var(--kp-ink); }
.kp .brand__kort { color: var(--kp-ink); display: none; }
/* Paa en telefon deler navnetraekket og burgeren en smal linje. Den korte
   form giver plads, uden at foden og de strukturerede data aendrer sig: der
   staar stadig hele navnet. Linkets aria-label er ogsaa uaendret. */
@media (max-width: 959px) {
  .kp .brand__name { display: none; }
  .kp .brand__kort { display: inline; }

  /* Navnetraek, burger og knap laa paa raekke med 24 px imellem sig. Paa en
     smal telefon blev summen bredere end linjen, og knappen skoed 27 px ud
     over marginen. Afstanden foelger nu skaermen, og knappen skubbes til
     hoejre i stedet for at ligge i forlaengelse af de to andre. */
  .kp .site-header__inner { gap: clamp(.5rem, 3vw, 1.5rem); }
  .kp .kp-header__hoejre { margin-left: auto; }
}
.kp .brand__sub { color: var(--kp-mute); }
.kp .footer__brand .brand__name,
.kp .footer__brand .brand__sub { font-size: 1.0625rem; }
.kp .nav__link { font-size: 1.0625rem; font-weight: 400; color: var(--kp-mute); }
.kp .nav__link:hover, .kp .nav__link[aria-current="page"] { color: var(--kp-ink); }
.kp .nav__link[aria-current="page"] { border-bottom-color: var(--kp-ink); }
/* Én knap paa hele siden: sidehovedets CTA og knapper i indholdet er
   samme komponent, saa der ikke opstaar to stoerrelser. */
.kp .header-cta,
.kp .kp-btn {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 40px; padding: .5rem 1.35rem;
  border-radius: 999px; border: 0;
  background: var(--kp-ink); color: var(--kp-paper);
  font-family: inherit; font-size: .75rem; font-weight: 600;
  /* Versaler kraever mere luft mellem bogstaverne end minuskler. */
  text-transform: uppercase; letter-spacing: .09em;
  text-decoration: none; white-space: nowrap;
}

/* Heroens knap er sidens foerste opfordring og maa fylde mere end de
   oevrige. Den er samtidig den, der oftest rammes med en finger. */
.kp .kp-hero .kp-btn {
  min-height: 52px; padding: .75rem 1.9rem;
  font-size: .8125rem; letter-spacing: .1em;
}
.kp .header-cta:hover,
.kp .kp-btn:hover { background: var(--kp-mute); }

/* Skiftet til den lysere graa er ellers et spring. Overgangen staar paa
   knappen selv og ikke paa :hover, saa den ogsaa fader tilbage igen, naar
   musen forlader knappen. */
@media (prefers-reduced-motion: no-preference) {
  .kp .header-cta,
  .kp .kp-btn {
    transition: background-color var(--md-sys-motion-duration-short4)
                var(--md-sys-motion-easing-standard);
  }
}

/* ---------------- Grundlaeggende rytme ----------------
   Referencen bruger hele skaermen med en smal kant og placerer indhold i et
   12-kolonne grid paa tvaers, i stedet for at samle alt i en midterspalte. */
.kp .container { max-width: none; padding-inline: clamp(1.25rem, 2.2vw, 2rem); }
.kp main { padding-bottom: clamp(5rem, 12vw, 10rem); }

.kp .kp-block {
  display: grid; gap: clamp(1.5rem, 3vw, 2.5rem);
  padding-block: clamp(4rem, 9vw, 8.5rem);
  border-top: 1px solid var(--kp-line);
}
@media (min-width: 900px) {
  .kp .kp-block {
    grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(1rem, 1.8vw, 2rem); row-gap: 0;
  }
  /* Én faelles startkolonne for alt indhold, saa rubrikkerne flugter
     ned gennem siden. Laengden styres af max-width, ikke af kolonnetallet. */
  .kp .kp-label { grid-column: 1 / 3; }
  .kp .kp-block > :not(.kp-label) { grid-column: 3 / 13; }
}
.kp .kp-label {
  font-size: .6875rem; font-weight: 500; letter-spacing: .1em;
  text-transform: uppercase; color: var(--kp-mute); margin: 0;
  padding-top: .5rem;
}

/* ---------------- Typografi ---------------- */
.kp .kp-display {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400;
  font-size: clamp(2.5rem, .9rem + 6.4vw, 5.5rem);
  /* Lora naar -.271 under baselinjen og .761 over. To linjer stoeder derfor
     sammen under 1.032. 1.14 giver luft nok til, at et j kan staa over et h. */
  line-height: 1.14; letter-spacing: -.03em;
  margin: 0; text-wrap: balance;
}
.kp .kp-h2 {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.5rem, 1.15rem + 1.3vw, 2rem);
  line-height: 1.14; letter-spacing: -.025em; margin: 0 0 1.75rem;
}
.kp .kp-h3 {
  font-family: var(--md-sys-typescale-plain-font);
  font-weight: 600; font-size: .9375rem; line-height: 1.45;
  letter-spacing: -.005em; margin: 0 0 .5rem;
}
.kp .kp-text { font-size: var(--kp-tekst); line-height: 1.56; color: var(--kp-ink); margin: 0 0 1.15em; }
/* Broedtekst og rubrikker holdes paa en laesbar bredde inde i kolonnen */
.kp .kp-block > div > .kp-text,
.kp .kp-block > div > .kp-small { max-width: 42rem; }
.kp .kp-block > div > .kp-h2 { max-width: 24ch; }
.kp .kp-text:last-child { margin-bottom: 0; }
.kp .kp-mute { color: var(--kp-mute); }
.kp .kp-small { font-size: .9375rem; line-height: 1.6; color: var(--kp-mute); }

/* ---------------- Hero ---------------- */
.kp .kp-hero { padding-block: clamp(4.5rem, 13vw, 11rem) clamp(3rem, 7vw, 6rem); }
.kp .kp-hero__display { max-width: 20ch; }
/* Paa en telefon staar rubrikken i tre-fire linjer i stedet for én eller to,
   og saa moedes de danske tegn: ringen paa å og prikkerne paa ø raekker
   hoejere end Loras versaler, mens g og j gaar dybere end 1.14 giver plads
   til. Linjerne staar derfor lidt laengere fra hinanden her end i bredden,
   hvor rubrikken sjaeldent bryder. */
@media (max-width: 899px) {
  .kp .kp-hero__display { line-height: 1.24; }
  .kp .kp-hero__manchet { line-height: 1.62; }
}
.kp .kp-hero__foot {
  display: grid; gap: clamp(1.5rem, 3vw, 2.5rem);
  margin-top: clamp(3rem, 7vw, 6rem);
}
@media (min-width: 900px) {
  .kp .kp-hero { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: clamp(1rem, 1.8vw, 2rem); }
  .kp .kp-hero__display { grid-column: 3 / 12; }
  .kp .kp-hero__foot {
    grid-column: 1 / 13;
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(2rem, 4vw, 4.5rem); row-gap: 0;
  }
  /* Navngivne placeringer frem for nth-child, saa et ekstra element ikke
     skubber knappen ud af griddet. */
  .kp .kp-hero__foot > * { grid-column: 3 / 9; }
  /* Er der kun ét element, bliver det staaende i indholdskolonnen */
  .kp .kp-hero__foot > :last-child:not(:only-child) { grid-column: 10 / 13; }
}

/* ---------------- Nummereret raekke, tynde linjer ---------------- */
.kp .kp-rows { border-top: 1px solid var(--kp-line); }
.kp .kp-row {
  display: grid; gap: .5rem 2rem; padding: clamp(1.25rem, 2.5vw, 1.75rem) 0;
  border-bottom: 1px solid var(--kp-line);
  text-decoration: none; color: inherit;
}
@media (min-width: 720px) {
  .kp .kp-row { grid-template-columns: 3.5rem minmax(0, 16rem) minmax(0, 1fr) 2rem; align-items: baseline; }
}
.kp .kp-num {
  font-size: .6875rem; font-weight: 500; letter-spacing: .1em;
  color: var(--kp-mute); font-variant-numeric: tabular-nums;
}
.kp a.kp-row .kp-arrow { justify-self: end; color: var(--kp-mute); font-size: 1rem; }
.kp a.kp-row:hover { background: rgba(23,23,23,.03); }
.kp a.kp-row:hover .kp-arrow { color: var(--kp-ink); }

/* ---------------- Tal ---------------- */
.kp .kp-figures { display: grid; gap: clamp(2rem, 4vw, 3rem); }
@media (min-width: 760px) { .kp .kp-figures { grid-template-columns: repeat(3, 1fr); } }
.kp .kp-figure__value {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(2.75rem, 1.9rem + 3.2vw, 4.5rem);
  line-height: .95; letter-spacing: -.04em; margin: 0 0 .9rem;
}
.kp .kp-figure__text { font-size: .9375rem; line-height: 1.55; color: var(--kp-mute); max-width: 26ch; margin: 0; }

/* ---------------- Navneliste, én linje ---------------- */

.kp .kp-names li { white-space: nowrap; }

/* ---------------- Citat ---------------- */
.kp .kp-quote { margin: 0; }
.kp .kp-quote blockquote {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.625rem, 1.15rem + 2.1vw, 2.75rem);
  line-height: 1.18; letter-spacing: -.022em; margin: 0 0 1.5rem;
}
.kp .kp-quote figcaption { font-size: .6875rem; letter-spacing: .06em; text-transform: uppercase; color: var(--kp-mute); }

/* ---------------- Billede ---------------- */
.kp .kp-media { margin: 0; }
.kp .kp-media img { width: 100%; height: auto; display: block; }
.kp .kp-media figcaption { margin-top: .75rem; font-size: .6875rem; letter-spacing: .12em; text-transform: uppercase; color: var(--kp-mute); }

/* ---------------- Link og knap ---------------- */
.kp .kp-link {
  display: inline-block; font-size: .9375rem; color: var(--kp-ink);
  text-decoration: none; border-bottom: 1px solid var(--kp-ink); padding-bottom: 1px;
}
.kp .kp-link:hover { color: var(--kp-mute); border-bottom-color: var(--kp-mute); }


/* ---------------- Fod ---------------- */
.kp .site-footer { border-top: 0; }
.kp .site-footer a { color: var(--kp-mute); }
.kp .site-footer a:hover { color: #fff; }
.kp .footer__title { color: #fff; font-size: .6875rem; letter-spacing: .12em; }
/* Punkter uden link arvede fodens hvide tekst og stod derfor kraftigere end
   linkene ved siden af. Adresse og CVR er oplysninger paa linje med resten,
   ikke noget der skal traekke blikket. */
.kp .footer__list { font-size: .875rem; color: var(--kp-mute); }
.kp .footer__bottom { border-top-color: var(--kp-line); color: var(--kp-mute); font-size: .75rem; }
/* Foden: navnetraek og tagline ud. Navnet staar allerede i sidehovedet og i
   kolonnen med selskabsoplysninger. Resten flugter med indholdskolonnen. */
.kp .footer__brand { display: none; }
@media (min-width: 900px) {
  .kp .footer__grid {
    grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(1rem, 1.8vw, 2rem);
  }
  /* Foerste barn er det skjulte navnetraek, saa taellingen starter ved 2 */
  .kp .footer__grid > :nth-child(2) { grid-column: 3 / 6; }
  .kp .footer__grid > :nth-child(3) { grid-column: 6 / 9; }
  .kp .footer__grid > :nth-child(4) { grid-column: 9 / 13; }

  .kp .footer__bottom {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(1rem, 1.8vw, 2rem);
  }
  .kp .footer__bottom > :nth-child(1) { grid-column: 3 / 8; }
  .kp .footer__bottom > :nth-child(2) { grid-column: 8 / 13; text-align: right; }
}


/* ---------------- Ordmaerker ----------------
   Genbruger logostribens klasser fra site.css, men i testens to farver. */
.kp .logogrid {
  display: grid; grid-template-columns: repeat(2, auto);
  justify-content: space-between; align-items: baseline;
  gap: clamp(1.5rem, 3vw, 2.25rem) clamp(1.25rem, 3vw, 2.5rem);
  list-style: none; margin: 0; padding: 0;
}
@media (min-width: 700px) { .kp .logogrid { grid-template-columns: repeat(4, auto); } }
.kp .logo { color: var(--kp-mute); }
.kp .logo__word { font-size: clamp(.9375rem, .85rem + .35vw, 1.125rem); }
.kp .logo__word small { font-size: .5em; letter-spacing: .18em; opacity: .75; }
.kp .case-logo { display: block; color: var(--kp-ink); }
.kp a:hover .case-logo { color: var(--kp-mute); }

/* ---------------- Billeder ----------------
   Store, rolige flader. Fuld bredde bryder tekstrytmen, som referencen goer. */
.kp-bleed { margin: 0; }
.kp-bleed img {
  width: 100%; height: clamp(18rem, 46vw, 38rem);
  object-fit: cover; object-position: 58% 34%; display: block;
}
/* Baandet faar dybde ved at billedet triller langsommere end siden selv.
   Billedet er 12 procent hoejere end rammen og ligger 6 procent over dens
   kant, saa det kan flytte sig op og ned uden at slippe nogen af siderne.
   Bevaegelsen er scroll-drevet i css: ingen lytter paa scroll, intet arbejde
   i JavaScript for hver eneste pixel. Kan browseren det ikke, staar billedet
   stille som foer, og .js-anim holder det vaek fra dem, der har fravalgt
   animation. Kun paa de brede skaerme -- paa telefonen er billedet et
   staaende udsnit, og der er ingen plads at trille i. */
@media (min-width: 641px) {
  @supports (animation-timeline: view()) {
    .js-anim .kp-bleed picture {
      display: block; position: relative; overflow: hidden;
      height: clamp(18rem, 46vw, 38rem);
      view-timeline-name: --kp-baand;
    }
    .js-anim .kp-bleed picture img {
      position: absolute; left: 0; top: -6%;
      width: 100%; height: 112%;
      animation: kp-parallakse linear both;
      animation-timeline: --kp-baand;
      /* Hele vejen fra baandet kommer til syne forneden, til det er ude foroven. */
      animation-range: cover 0% cover 100%;
    }
  }
}

@keyframes kp-parallakse {
  from { transform: translate3d(0, -5%, 0); }
  to   { transform: translate3d(0, 5%, 0); }
}

/* Paa en telefon i hoejformat leveres et staaende udsnit af det samme billede
   (se snitKilde i cms/blocks.js). Hoejden skal foelge udsnittet, ellers skaeres
   der to gange i det samme motiv -- én gang i tjenesten og én gang her. */
@media (max-width: 640px) {
  .kp-bleed img { height: auto; aspect-ratio: 4 / 5; }
}
.kp-bleed figcaption {
  margin-top: .75rem; font-size: .6875rem; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
}
.kp-portrait { margin: 0; }
.kp-portrait img { width: 100%; height: auto; display: block; }
@media (min-width: 900px) {
  /* Teksten holder sit maal, billedet faar den plads, der bliver tilovers.
     Med faste spaltebredder stod modulet stille, uanset hvor bred skaermen
     var; med 1fr til teksten stoppede den ved sin egen maksimalbredde, og
     billedet blev skubbet ud til hoejre kant med et hul imellem. */
  .kp-split {
    display: flex; align-items: center;
    gap: clamp(2.5rem, 4vw, 5rem);
  }
  .kp-split__tekst { flex: 1 1 34rem; max-width: 34rem; }
  /* Billedet maa gerne fylde. Det stod smallere end tekstspalten, og saa
     laa der samtidig tom plads ude til hoejre. */
  .kp .kp-portrait { flex: 0 1 clamp(20rem, 34vw, 42rem); }
}
.kp-split__tekst { max-width: 34rem; }

/* ---------------- Moerk flade ----------------
   Bruges kun af foden. Moerke moduler midt i en side laeser som en stopklods
   for scrollen, saa de er taget ud igen. */
.kp-dark, .kp .site-footer {
  background: #1a1a1a; color: #fff;
  --kp-ink: #fff; --kp-mute: #9a9490; --kp-line: #363636;
}
.kp-dark .kp-label { color: var(--kp-mute); }
.kp-dark .kp-display, .kp-dark .kp-h2, .kp-dark .kp-h3,
.kp-dark .kp-text, .kp-dark .kp-figure__value { color: #fff; }
.kp-dark .kp-small, .kp-dark .kp-figure__text, .kp-dark .kp-quote figcaption { color: var(--kp-mute); }
.kp-dark .kp-rows, .kp-dark .kp-row, .kp-dark .kp-block { border-color: var(--kp-line); }
.kp-dark .kp-btn { background: #fff; color: #1a1a1a; }
.kp-dark .kp-btn:hover { background: var(--kp-mute); }
.kp-dark .kp-link { color: #fff; border-bottom-color: #fff; }
.kp-dark .kp-link:hover { color: var(--kp-mute); border-bottom-color: var(--kp-mute); }
.kp-dark a.kp-row:hover { background: rgba(255,255,255,.04); }
.kp-dark .logo { color: var(--kp-mute); }
/* Foerste blok i et moerkt modul skal ikke have en streg over sig */
.kp-dark > .kp-block:first-child { border-top: 0; }

/* ---------------- Vandret billedstribe ----------------
   Fliser i 672x750 der ruller vandret, som referencen. */
.kp-strip {
  display: flex; gap: clamp(1rem, 2vw, 2rem);
  overflow-x: auto; scroll-snap-type: x mandatory;
  margin: 0; padding-bottom: 1rem;
  scrollbar-width: thin;
}
.kp-strip figure { margin: 0; flex: 0 0 auto; scroll-snap-align: start; }
.kp-strip img {
  width: clamp(16rem, 42vw, 42rem); height: clamp(18rem, 47vw, 47rem);
  object-fit: cover; display: block;
}
.kp-strip figcaption {
  margin-top: .75rem; font-size: .6875rem; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
}

/* ---------------- Ambient video ----------------
   Uden lyd, uden kontroller, i loop. Uden kildefil vises posterbilledet. */
.kp-video { margin: 0; }
.kp-video video, .kp-video img {
  width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block;
  background: #1a1a1a;
}
.kp-video figcaption {
  margin-top: .75rem; font-size: .6875rem; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
}

/* ---------------- Artikeltype ----------------
   Loebende prosa frem for lister. Marginlabelen fungerer som sidenote, og
   teksten holdes paa en laesbar bredde med mellemrubrikker og pull quotes. */
.kp-article { max-width: 40rem; }
.kp-article > * { max-width: 40rem; }


.kp-article p { font-size: var(--kp-tekst); line-height: 1.62; margin: 0 0 1.15em; }
.kp-article p:last-child { margin-bottom: 0; }
.kp-article strong { font-weight: 600; }

/* Mellemrubrik i teksten, ikke som eget modul */
.kp-sub {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.5rem, 1.2rem + 1.35vw, 2.25rem);
  line-height: 1.2; letter-spacing: -.02em;
  margin: 2.75em 0 .85em;
}
.kp-sub:first-child { margin-top: 0; }

/* Pull quote: bryder spalten uden at blive et selvstaendigt modul */
.kp-pull {
  margin: 2.5em 0; padding: 0; max-width: 46rem;
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.5rem, 1.15rem + 1.5vw, 2.25rem);
  line-height: 1.22; letter-spacing: -.025em;
}
.kp-pull footer {
  margin-top: .9rem; font-family: var(--md-sys-typescale-plain-font);
  font-size: .6875rem; letter-spacing: .12em; text-transform: uppercase;
  color: var(--kp-mute);
}

/* Citatet bryder ud til hoejre og bliver 30 % bredere end laesespalten.
   Dets eget max-width naaede aldrig at gaelde -- spalten er 40rem, og et
   barn kan ikke blive bredere end sin ramme. Derfor en bredde i procent af
   spalten i stedet.

   Foerst fra 1100 px. Under det er gitterfeltet selv smallere end de 130 %,
   og citatet ville skubbe siden bredere end skaermen. */
@media (min-width: 1100px) {
  .kp .kp-article > .kp-pull { width: 130%; max-width: none; }
}

/* Nummereret liste inde i en tekst: taller som en del af saetningen */
.kp-list { margin: 1.5em 0; padding: 0; list-style: none; counter-reset: kp; }
.kp-list li {
  counter-increment: kp; position: relative;
  padding-left: 2.5rem; margin-bottom: 1em;
  font-size: var(--kp-tekst); line-height: 1.62;
}
.kp-list li::before {
  content: counter(kp, decimal-leading-zero);
  position: absolute; left: 0; top: .35em;
  font-family: var(--md-sys-typescale-plain-font);
  font-size: .6875rem; font-weight: 500; letter-spacing: .12em;
  color: var(--kp-mute); font-variant-numeric: tabular-nums;
}

/* Billede inde i artiklen */
.kp-inline { margin: 2.5em 0; max-width: none; }
.kp-inline img { width: 100%; height: auto; display: block; }
.kp-inline figcaption {
  margin-top: .75rem; font-size: .6875rem; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
}

/* Faktalinje mellem afsnit */
.kp-fact {
  margin: 2.5em 0; padding: 1.5rem 0;
  border-top: 1px solid var(--kp-line); border-bottom: 1px solid var(--kp-line);
}
/* Selektoren skal veje mere end .kp-fact p, ellers bliver tallet lille og graat */
.kp-fact .kp-fact__value {
  font-family: var(--md-sys-typescale-brand-font);
  font-size: clamp(2.25rem, 1.6rem + 2.4vw, 3.5rem); line-height: 1;
  color: var(--kp-ink);
  letter-spacing: -.03em; margin: 0 0 .5rem;
}
.kp-fact p { font-size: var(--kp-tekst); line-height: 1.62; color: var(--kp-ink); margin: 0; }

/* ---------------- Ydelser paa én side ----------------
   Hver ydelse faar en hel raekke. Overskriften staar for sig, saa billedet til
   venstre og teksten til hoejre begynder i samme hoejde. Kolonnerne flugter
   med resten af sitet: label i kolonne 1, indhold fra kolonne 3. */
.kp-service {
  display: grid; gap: 2rem;
  padding-block: clamp(5rem, 11vw, 11rem);
  border-bottom: 1px solid var(--kp-line);
  scroll-margin-top: 4rem;
}
@media (min-width: 900px) {
  .kp-service {
    grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(2rem, 4vw, 4.5rem);
    row-gap: 0;
    align-items: start;
  }
  .kp-service .kp-num       { grid-column: 1 / 3;  grid-row: 1; margin: .55rem 0 0; }
  .kp-service__navn         { grid-column: 3 / 13; grid-row: 1; }
  .kp-service__media        { grid-column: 3 / 8;  grid-row: 2; }
  .kp-service__til          { grid-column: 3 / 8;  grid-row: 3; }
  .kp-service__body         { grid-column: 8 / 13; grid-row: 2 / span 2; }
}

.kp-service__navn {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(2rem, 1.3rem + 2.4vw, 3rem);
  line-height: 1.06; letter-spacing: -.028em;
  margin: 0 0 clamp(2.5rem, 4vw, 4rem);
}
.kp-service__media { margin: 0; }
.kp-service__til {
  margin: 2rem 0 0; font-size: .9375rem; line-height: 1.5; color: var(--kp-mute);
  max-width: 28rem;
}
.kp-service__til span {
  display: block; font-size: .6875rem; font-weight: 500; letter-spacing: .12em;
  text-transform: uppercase; margin-bottom: .4rem;
}
.kp-service__media img { width: 100%; height: auto; display: block; }

.kp-service__body p { font-size: var(--kp-tekst); line-height: 1.62; margin: 0 0 1.35em; max-width: 40rem; }
.kp-service__body p:last-of-type { margin-bottom: 0; }
.kp-service__listetitel {
  font-size: .6875rem !important; font-weight: 500; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
  margin: clamp(2.75rem, 4vw, 4rem) 0 1.25rem !important;
}
.kp-service__liste { display: grid; gap: 1rem 2.5rem; list-style: none; margin: 0; padding: 0; }
@media (min-width: 640px) { .kp-service__liste { grid-template-columns: repeat(2, 1fr); } }
.kp-service__liste li {
  font-size: .9375rem; line-height: 1.45;
  padding-top: .75rem; border-top: 1px solid var(--kp-line);
}

/* Kompetencefelter foldet ud */
.kp-felter { display: grid; gap: 2.25rem 2.5rem; margin-top: clamp(2.75rem, 4vw, 4rem); }
@media (min-width: 720px) { .kp-felter { grid-template-columns: repeat(2, 1fr); } }
.kp-felt { padding-top: 1.25rem; border-top: 1px solid var(--kp-line); }
.kp-felt__navn {
  font-family: var(--md-sys-typescale-plain-font);
  font-weight: 600; font-size: .9375rem; line-height: 1.35; margin: 0 0 .6rem;
}
.kp-felt p { font-size: .9375rem !important; line-height: 1.6; color: var(--kp-mute); margin: 0 !important; }

/* ---------------- Formular ----------------
   Ingen kasser. Felterne ligger i papirets egen farve og markeres kun med en
   hårlinje, saa formularen ikke bryder fladen. */
.kp .form { display: grid; gap: 2rem; max-width: 34rem; }
.kp .field { display: grid; gap: .5rem; }
.kp .field label {
  font-size: .6875rem; font-weight: 500; letter-spacing: .12em;
  text-transform: uppercase; color: var(--kp-mute);
}
.kp .field input,
.kp .field textarea,
.kp .field select {
  font: inherit; font-size: 1rem; line-height: 1.5;
  padding: .7rem .9rem;
  border: 1px solid var(--kp-line); border-radius: 4px;
  background: transparent; color: var(--kp-ink);
  transition: border-color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard);
}
.kp .field textarea { min-height: 8rem; resize: vertical; }
.kp .field input:hover,
.kp .field textarea:hover,
.kp .field select:hover { border-color: var(--kp-mute); }

/* Fokusmarkeringen er en rigtig ramme og ikke en enkelt streg. Feltet er det
   sted paa sitet, hvor en tastaturbruger har mest brug for at kunne se, hvor
   den staar. */
.kp .field input:focus,
.kp .field textarea:focus,
.kp .field select:focus {
  outline: none; border-color: var(--kp-ink);
  box-shadow: 0 0 0 1px var(--kp-ink);
}
/* Autofyld maa ikke laegge en hvid kasse ind i fladen */
.kp .field input:-webkit-autofill,
.kp .field textarea:-webkit-autofill {
  -webkit-text-fill-color: var(--kp-ink);
  -webkit-box-shadow: 0 0 0 3rem var(--kp-paper) inset;
}
/* Rammen skal ikke slaas ud af autofyldets egen indvendige skygge */
.kp .field input:-webkit-autofill:focus {
  -webkit-box-shadow: 0 0 0 3rem var(--kp-paper) inset, 0 0 0 1px var(--kp-ink);
}

/* ---------------- Oversigtstype ----------------
   Samme opbygning paa cases, brancher og indsigter: marginlabel, en lille
   kicker med logo eller laesetid, rubrikken, et afsnit og et link videre. */
.kp-article > .kp-kicker,
.kp-kicker {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: .35rem 1.5rem;
  font-size: .6875rem !important; font-weight: 500; letter-spacing: .12em;
  line-height: 1.4; text-transform: uppercase; color: var(--kp-mute);
  margin: 0 0 1.25rem !important;
}
.kp-kicker .case-logo { display: inline-block; }
.kp-kicker .logo__word { font-size: 1.125rem; letter-spacing: -.01em; text-transform: none; }
.kp-kicker .logo__word small { letter-spacing: .18em; }
.kp-article > .kp-sub:first-child,
.kp-kicker + .kp-sub { margin-top: 0; }

/* Detaljeliste paa ydelsessiderne: navnet og hvad der ligger i det */
.kp-detalje { margin: 0; display: grid; gap: 1.25rem; }
.kp-detalje > div { padding-top: .9rem; border-top: 1px solid var(--kp-line); }
.kp-detalje dt { font-weight: 600; font-size: .9375rem; line-height: 1.4; }
.kp-detalje dd { margin: .3rem 0 0; font-size: .9375rem; line-height: 1.55; color: var(--kp-mute); }

/* Rubrikken paa ydelsesoversigten er et link */
.kp-service__navn a { color: inherit; text-decoration: none; }
.kp-service__navn a:hover { color: var(--kp-mute); }
.kp-service__videre { margin: 2rem 0 0 !important; font-size: .9375rem !important; }

/* ---------------- Oversigtsposter ----------------
   Posterne er ikke lige store. Den foerste baerer et billede og en rubrik i
   stoerste grad, resten falder ned. Ingen haarlinje imellem dem: naerhed er en
   staerkere gruppering end en streg, og linjen gjorde raekken til en tabel. */
.kp-post {
  display: grid; gap: 1.5rem;
  padding-block: clamp(3rem, 6vw, 5.5rem);
}
.kp-post--lead { padding-block: clamp(3.5rem, 8vw, 7rem) clamp(4rem, 9vw, 8rem); }
@media (min-width: 900px) {
  .kp-post { grid-template-columns: repeat(12, minmax(0, 1fr));
             column-gap: clamp(2rem, 4vw, 4.5rem); row-gap: 0; }
  .kp-post .kp-label { grid-column: 1 / 3; margin-top: .5rem; }
  .kp-post__krop     { grid-column: 3 / 13; }
  .kp-post--lead .kp-post__krop { grid-column: 3 / 13; }
}
.kp-post__medie { margin: 0 0 clamp(2rem, 3.5vw, 3rem); }
.kp-post__medie img { width: 100%; height: clamp(15rem, 30vw, 26rem); object-fit: cover; display: block; }

.kp-post__navn {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.5rem, 1.2rem + 1.35vw, 2.25rem);
  line-height: 1.14; letter-spacing: -.022em; margin: 0 0 1rem; max-width: 30ch;
}
.kp-post--lead .kp-post__navn {
  font-size: clamp(2rem, 1.35rem + 2.4vw, 3rem);
  line-height: 1.06; letter-spacing: -.028em; margin-bottom: 1.25rem; max-width: 26ch;
}
.kp-post__krop p { font-size: var(--kp-tekst); line-height: 1.62; margin: 0 0 1.15em; max-width: var(--kp-oversigt); }
.kp-post--lead .kp-post__krop > p:not(.kp-kicker) { line-height: 1.55; }
.kp-post__krop .kp-link { margin-top: .75rem; }

/* Baandet, der giver siden en pause midtvejs */
.kp-band { margin: clamp(1rem, 3vw, 3rem) 0; }
.kp-band img { width: 100%; height: clamp(16rem, 34vw, 30rem); object-fit: cover; display: block; }

/* Billedtekster hoerer til labelniveauet, ikke til brroedteksten */
.kp figcaption { font-size: .6875rem; letter-spacing: .12em; text-transform: uppercase;
                 color: var(--kp-mute); line-height: 1.45; }
.kp .kp-sub:first-child { margin-top: 0; }

/* ---------------- Mobilmenu ----------------
   Panelet arvede den gamle palet. Her er det papir, haarlinjer og samme
   knap som i hovedet. */
@media (max-width: 959px) {
  .kp .nav {
    background: var(--kp-paper);
    border-bottom: 1px solid var(--kp-line);
    box-shadow: none;
  }
  .kp .nav__list { padding: .25rem clamp(1.25rem, 2.2vw, 2rem) 2rem; }
  .kp .nav__link {
    padding: 1.05rem 0; font-size: .9375rem; font-weight: 400;
    color: var(--kp-ink); border-bottom: 1px solid var(--kp-line);
  }
  .kp .nav__link[aria-current="page"] { color: var(--kp-ink); border-bottom-color: var(--kp-ink); }
  .kp .nav__list .btn {
    margin-top: 1.75rem; align-self: start;
    min-height: 34px; padding: .35rem 1.1rem; border-radius: 999px;
    background: var(--kp-ink); color: var(--kp-paper);
    font-family: inherit; font-size: .75rem; font-weight: 500; letter-spacing: .01em;
  }
  .kp .nav__list .btn:hover { background: var(--kp-mute); }
  .kp .nav-toggle { color: var(--kp-ink); }
}

/* ---------------- Kontakt i foden ----------------
   Opfordringen laa foer som et lyst modul over foden med meget luft omkring.
   Den er flyttet ind i det sorte felt, hvor sidste led er linket. */
.kp .kp-footer-cta {
  padding-bottom: clamp(3rem, 6vw, 5rem);
  margin-bottom: clamp(3rem, 6vw, 5rem);
  border-bottom: 1px solid rgba(255,255,255,.14);
}
.kp .kp-footer-cta__tekst {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.75rem, 1.1rem + 2.6vw, 3.25rem);
  line-height: 1.14; letter-spacing: -.026em;
  color: #fff; margin: 0; max-width: 26ch; text-wrap: balance;
}
/* Stregen tegnes med en baggrund i stedet for en kant. En kant er der enten
   eller ikke, mens en baggrund kan vokse fra venstre mod hoejre. Den kan
   samtidig brydes over flere linjer, hvad et pseudoelement ikke kan. */
.kp .kp-footer-cta__tekst a {
  font-style: italic;
  color: #fff; text-decoration: none;
  background-image: linear-gradient(rgba(255,255,255,.55), rgba(255,255,255,.55));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 100% 2px;
  padding-bottom: .06em;
}
.kp .kp-footer-cta__tekst a:hover {
  background-image: linear-gradient(#fff, #fff);
  text-decoration: none;
}

/* Mindre luft i selve foden, naar opfordringen ligger der */
.kp .site-footer { padding-block: clamp(3rem, 5.5vw, 4.5rem) 1.75rem; }
.kp .footer__grid { gap: 2rem 2.5rem; }
.kp .footer__list { gap: .45rem; }

/* Opfordringen skal starte i kolonne 3 som alt andet indhold. Linkspalterne
   og bundlinjen ligger allerede paa gitteret laengere oppe i arket. */
@media (min-width: 900px) {
  .kp .kp-footer-cta {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(1rem, 1.8vw, 2rem);
  }
  .kp .kp-footer-cta__tekst { grid-column: 3 / 13; max-width: 24ch; }
}

/* ---------------- Sidehovedet paa gitteret ----------------
   Navnetraekket staar i labelkolonnen som marginlabels laengere nede, og
   menuen slutter praecis paa kolonne 13 ligesom indholdet. */
@media (min-width: 960px) {
  .kp .site-header__inner {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: clamp(1rem, 1.8vw, 2rem); align-items: center;
  }
  .kp .site-header__inner > .brand { grid-column: 1 / 3; }

  /* Menuen skal staa midt i sidehovedet, ikke klemt op ad knappen. Wrapperen
     opløses, saa menu og knap bliver hver sin celle i gitteret: navnetraekket
     til venstre, menuen i midten, Kontakt i hoejre margin. */
  .kp .kp-header__hoejre { display: contents; }
  .kp .kp-header__hoejre > .nav {
    grid-column: 3 / 11; justify-self: center;
    /* css/site.css saetter margin-left: auto paa .nav. Den skubber menuen helt
       ud til hoejre og slaar justify-self ud. */
    margin-inline: 0;
  }
  .kp .kp-header__hoejre > .header-cta {
    grid-column: 11 / 13; justify-self: end;
  }
  .kp .nav__list { gap: clamp(1.5rem, 3vw, 2.75rem); }
}

}

/* Branchenavne er laengere end ydelsesnavne og maa bruge mere af linjen */
.kp-service--branche .kp-service__navn { max-width: 15ch; }

/* ---------------- Cases som kort ----------------
   To spalter med billede foerst. Hele kortet er klikbart via et straekket
   pseudoelement, saa rubrikken alene baerer linket for skaermlaesere. */
.kp-kortgitter { display: grid; gap: clamp(2.5rem, 4vw, 3.5rem); }
@media (min-width: 800px) { .kp-kortgitter { grid-template-columns: repeat(2, 1fr); } }

.kp-kort { position: relative; display: flex; flex-direction: column; }
.kp-kort__medie { margin: 0 0 1.5rem; overflow: hidden; }
.kp-kort__medie img {
  width: 100%; height: clamp(12rem, 22vw, 17rem); object-fit: cover; display: block;
  transition: transform var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-standard);
}
.kp-kort:hover .kp-kort__medie img { transform: scale(1.02); }

.kp-kort .kp-kicker { margin: 0 0 .85rem !important; }

.kp-kort__navn {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.375rem, 1.1rem + 1vw, 1.75rem);
  line-height: 1.18; letter-spacing: -.02em; margin: 0 0 .9rem;
}
.kp-kort__navn a { color: inherit; text-decoration: none; }
.kp-kort__navn a::after { content: ""; position: absolute; inset: 0; }
.kp-kort:hover .kp-kort__navn { color: var(--kp-mute); }

.kp-kort__tekst { font-size: var(--kp-tekst); line-height: 1.58; color: var(--kp-ink); margin: 0; }
.kp-kort__videre { margin: 1.25rem 0 0 !important; }
.kp-kort:hover .kp-link { color: var(--kp-mute); border-bottom-color: var(--kp-mute); }

@media (prefers-reduced-motion: reduce) {
  .kp-kort__medie img, .kp-kort:hover .kp-kort__medie img { transition: none; transform: none; }
}

/* Kommende artikler har intet link. De skal kunne ses, men ikke inviteres til. */
.kp-kort--kommende .kp-kort__medie img { opacity: .78; }
.kp-kort--kommende .kp-kort__navn { color: var(--kp-mute); }

/* Arten staar paa billedet, saa kortene kan skelnes uden filteret */
.kp-kort__medie { position: relative; }
.kp-kort__art {
  position: absolute; left: .75rem; bottom: .75rem; margin: 0;
  padding: .25rem .7rem; border-radius: 999px;
  background: var(--kp-paper); color: var(--kp-ink);
  font-size: .625rem; font-weight: 500; letter-spacing: .12em; text-transform: uppercase;
}

/* Listerne under ydelser og brancher staar som pills */
.kp .kp-service__liste {
  display: flex; flex-wrap: wrap; gap: .5rem;
  list-style: none; margin: 0; padding: 0;
}
.kp .kp-service__liste li {
  padding: .35rem 1.1rem; border: 1px solid var(--kp-line); border-radius: 999px;
  background: var(--kp-paper); font-size: .8125rem; line-height: 1.4; color: var(--kp-ink);
}

/* Ordmaerkerne stod for spinkelt i forhold til raekken omkring dem */
.kp .logo__word { font-size: clamp(1rem, .9rem + .5vw, 1.375rem); }
.kp .kp-kicker .logo__word { font-size: 1.25rem; }

/* display paa selve kortet slaar browserens [hidden], saa den skal siges her */
.kp-kort[hidden] { display: none; }

/* Metalinjen staar over rubrikken som label, ikke som en anden broedtekst */
@media (min-width: 900px) {
  .kp .kp-hero__kicker { grid-column: 3 / 13; }
}
.kp .kp-hero__kicker { margin: 0 0 1.25rem !important; }

/* ---------------- Mobilmenu i fuld skaerm ----------------
   Panelet skal begynde praecis dér, hvor hovedet slutter. --mw-header-h er
   hovedets fulde maal og er for stort paa en telefon, hvor hovedet er lavere.
   Med den stod der en stribe af siden tilbage lige over menuen. site.js maaler
   derfor hovedet og skriver --mw-header-maalt; tokenet er kun en bagstopper.

   Punkterne staar midt paa skaermen i begge retninger frem for oeverst i
   venstre hjoerne. Menuen har faa punkter, og klemt op i hjoernet af et
   ellers tomt felt saa de ud, som om resten manglede. */
@media (max-width: 959px) {
  .kp .nav {
    inset: var(--mw-header-maalt, var(--mw-header-h)) 0 0 0;
    height: auto; max-height: none; overflow-y: auto;
    border-bottom: 0;
    display: none;
  }
  .kp .nav[data-open="true"] { display: flex; flex-direction: column; }
  .kp .nav:focus { outline: none; }
  .kp .nav__list {
    /* safe: er punkterne hoejere end skaermen, skal de begynde foroven og
       kunne rulles -- ikke skaeres af i toppen af en centrering. */
    flex: 1 0 auto; justify-content: safe center;
    padding: 1.5rem clamp(1.25rem, 2.2vw, 2rem);
  }
  /* Punkterne staar midt i bredden ligesom i hoejden. Venstrestillet i et
     tomt felt haengte de fast i kanten uden noget at flugte med. */
  .kp .nav__link { padding: 1.35rem 0; font-size: 1.25rem; text-align: center; }
  /* Stregen, der vokser frem under et punkt, hoerer til raekken i
     sidehovedet, hvor der er en mus. Paa en telefon bliver :hover haengende
     efter et tryk, saa stregen stod tilbage under det punkt, fingeren sidst
     roerte -- ved siden af den streg, der markerer den aktuelle side. */
  .kp .nav__link::after { display: none; }
  /* Siden bagved maa ikke kunne scrolles, mens menuen er fremme */
  body:has(.nav[data-open="true"]) { overflow: hidden; }
}

/* Naar spalterne stables paa mobil, laa linket klods op ad portraettet */
.kp .kp-split__link { margin: 1.5rem 0 0; }

/* Kildenoten under et tal er ikke broedtekst, men en oplysning om metode */
.kp .kp-note { font-size: var(--kp-tekst); line-height: 1.62; color: var(--kp-ink); margin: 1.25rem 0 0; max-width: 42rem; }

/* Naar spalten stables paa mobil, skal teksten slippe billedet */
@media (max-width: 899px) { .kp .kp-split > :first-child { margin-bottom: 3rem; } }

/* Raekkerne paa forsiden er indhold nu, ikke navigation */
.kp div.kp-row { cursor: default; }
.kp .kp-rows__videre { margin: 2rem 0 0; }

/* Hovedet lukkes med en haarlinje paa alle sider. Foelger der et modul med
   sin egen toplinje, falder den vaek, saa der ikke staar to streger. */
.kp .kp-hero { border-bottom: 1px solid var(--kp-line); }
.kp .kp-hero + .kp-block { border-top: 0; }
/* Ligger der et fuldbredde-billede lige under, staar det op ad linjen */
.kp .kp-hero + .kp-bleed { margin-top: 0; }

/* ---------------- Vandrette baand paa mobil ----------------
   Tre resultater og tre indsigter under hinanden bliver en lang scroll paa
   en telefon. De ligger i stedet side om side og trilles vandret. Baandet
   loeber ud til skaermkanten, saa det er tydeligt, at der er mere. */
@media (max-width: 799px) {
  /* Gitterceller er min-width auto som udgangspunkt, saa et baand med
     overflow ville skubbe hele siden bredere end skaermen. */
  .kp .kp-block > * { min-width: 0; }
  .kp .kp-baand {
    min-width: 0;
    display: flex; gap: 1.25rem;
    grid-template-columns: none;
    overflow-x: auto; overscroll-behavior-x: contain;
    scroll-snap-type: x proximity;
    /* Uden dette snapper foerste kort forbi indrykningen og staar klods
       op ad skaermkanten i stedet for at flugte med labelen. */
    scroll-padding-inline: clamp(1.25rem, 2.2vw, 2rem);
    scrollbar-width: none;
    margin-inline: calc(clamp(1.25rem, 2.2vw, 2rem) * -1);
    padding-inline: clamp(1.25rem, 2.2vw, 2rem);
    padding-bottom: .5rem;
  }
  .kp .kp-baand::-webkit-scrollbar { display: none; }
  .kp .kp-baand > * { flex: 0 0 78%; scroll-snap-align: start; }
  .kp .kp-baand .kp-figure__text { max-width: none; }
}

/* Tre kort i baandet paa forsiden staar paa én raekke, saa der ikke bliver
   et enligt kort tilovers som paa oversigten */
@media (min-width: 800px) {
  .kp .kp-kortgitter.kp-baand { grid-template-columns: repeat(3, 1fr); }
  .kp .kp-kortgitter.kp-baand .kp-kort__medie img { height: clamp(9rem, 15vw, 12rem); }
}

/* ---------------- Fremhaevet del af rubrikken ----------------
   Lora har et rigtigt kursivt skaeret, saa det er tegnede bogstavformer og
   ikke en skraatstilling af den oprejste skrift. */
.kp .kp-em { font-style: italic; }

/* ---------------- Kort ----------------
   Indgangen til ydelserne. Ingen kasse: billedet giver kortet dets form,
   og teksten flugter med billedets kant som resten af sitet. */
.kp-produktgitter { display: grid; gap: clamp(1.5rem, 3vw, 2.5rem); }
@media (min-width: 720px) { .kp-produktgitter { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .kp-produktgitter { grid-template-columns: repeat(3, 1fr); } }

.kp-produkt { position: relative; display: flex; flex-direction: column; }

.kp-produkt__medie { margin: 0 0 1.25rem; overflow: hidden; }
.kp-produkt__medie img {
  width: 100%; height: clamp(13.5rem, 24vw, 18rem); object-fit: cover; display: block;
  transition: transform var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-standard);
}
.kp-produkt:hover .kp-produkt__medie img { transform: scale(1.03); }

.kp-produkt__nr {
  margin: 0; font-size: .6875rem; font-weight: 500;
  letter-spacing: .12em; color: var(--kp-mute); font-variant-numeric: tabular-nums;
}
.kp-produkt__navn {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.25rem, 1.05rem + .7vw, 1.5rem);
  line-height: 1.15; letter-spacing: -.02em; margin: .5rem 0 0;
}
.kp-produkt__navn a { color: inherit; text-decoration: none; }
/* Hele kortet er klikbart, men kun rubrikken baerer linket. */
.kp-produkt__navn a::after { content: ""; position: absolute; inset: 0; }
.kp-produkt__tekst {
  /* Broedtekst i samme blaek som resten af sitet. Den daempede graa hoerer
     til marginlabels og bylines, ikke til tekst, der skal laeses. */
  margin: .75rem 0 0; font-size: .9375rem; line-height: 1.55; color: var(--kp-ink);
}

@media (prefers-reduced-motion: reduce) {
  .kp-produkt__medie img, .kp-produkt:hover .kp-produkt__medie img {
    transition: none; transform: none;
  }
}

/* ---------------- Certifikater ----------------
   Linjer, ikke et gitter. Logoerne skaleres ind i en kasse af samme stoerrelse,
   saa et hoejt segl og et langt ordmaerke fylder det samme og venstrekanten
   staar lige. Navn og aarstal hoerer sammen i midten. Plus til hoejre paa dem,
   der kan foldes ud. Samme form som harmonikaen paa ydelser. */
.kp .kp-cert { display: block; --cert-logo: clamp(6rem, 13vw, 9rem); }
.kp .kp-cert__post { border-top: 1px solid var(--kp-line); }
.kp .kp-cert__post:last-child { border-bottom: 1px solid var(--kp-line); }

.kp .kp-cert__hoved {
  display: grid; gap: .5rem 2rem; align-items: center;
  padding: clamp(1.25rem, 2.5vw, 1.75rem) 0; list-style: none; cursor: pointer;
}
/* Samme spalter som de nummererede raekker laengere oppe paa siden, saa
   logoerne staar under numrene og navnene under raekkernes broedtekst. */
@media (min-width: 720px) {
  .kp .kp-cert__hoved {
    grid-template-columns: 3.5rem minmax(0, 16rem) minmax(0, 1fr) 2rem;
  }
  .kp .kp-cert__medie { grid-column: 1 / 3; }
  .kp .kp-cert__tekst { grid-column: 3; }
  .kp .kp-cert__tegn { grid-column: 4; justify-self: end; }
}
.kp .kp-cert__hoved::-webkit-details-marker { display: none; }
.kp .kp-cert__post--fast .kp-cert__hoved { cursor: default; }

/* Kassen er den samme for alle. object-fit klarer resten. */
.kp .kp-cert__medie {
  width: var(--cert-logo); height: 2.25rem;
  display: flex; align-items: center;
}
.kp .kp-cert__medie img {
  max-width: 100%; max-height: 100%; width: auto; height: auto;
  object-fit: contain; object-position: left center; display: block;
  filter: grayscale(1) contrast(1.08);
}

.kp .kp-cert__tekst { min-width: 0; display: block; }
.kp .kp-cert__navn {
  display: block;
  font-size: clamp(1rem, .94rem + .3vw, 1.125rem); line-height: 1.3;
  color: var(--kp-ink);
}
.kp .kp-cert__meta {
  display: block; margin-top: .2rem;
  font-size: .8125rem; line-height: 1.4; color: var(--kp-mute);
}
.kp .kp-cert__hoved:hover .kp-cert__navn { color: var(--kp-mute); }

/* Plusset bliver til et minus, ligesom paa ydelser. */
.kp .kp-cert__tegn {
  position: relative; width: .8rem; height: .8rem; justify-self: start;
}
.kp .kp-cert__tegn::before,
.kp .kp-cert__tegn::after {
  content: ''; position: absolute; inset: 0; margin: auto; background: var(--kp-ink);
}
.kp .kp-cert__tegn::before { width: 100%; height: 1.5px; }
.kp .kp-cert__tegn::after { width: 1.5px; height: 100%; }
.kp .kp-cert__post[open] .kp-cert__tegn::after { transform: scaleY(0); }
@media (prefers-reduced-motion: no-preference) {
  .kp .kp-cert__tegn::after { transition: transform .18s ease; }
}

/* Teksten flugter med navnet, ikke med logoet. */
.kp .kp-cert__ud { padding: 0 0 1.4rem; max-width: 52rem; }
@media (min-width: 720px) {
  /* 3.5rem + 2rem + 16rem + 2rem = tredje spaltes venstrekant */
  .kp .kp-cert__ud { padding-left: 23.5rem; max-width: 75.5rem; }
}
.kp .kp-cert__ud .kp-text { margin: 0; }
.kp .kp-cert__link { margin: .8rem 0 0; }

@media (max-width: 599px) {
  .kp .kp-cert { --cert-logo: 5rem; }
  .kp .kp-cert__hoved { gap: 1rem; }
  .kp .kp-cert__ud { padding-left: 0; }
}

/* ---------------- Harmonika ----------------
   Delydelser under en ydelse. Titel til venstre, plus til hoejre, streg over
   hver post. Én aaben ad gangen via details name. Ingen JavaScript. */
.kp .kp-fold { margin-top: 2rem; }
/* Staar harmonikaen oeverst i spalten, skal dens foerste streg flugte med
   billedets overkant. Ellers falder de to spalter fra hinanden. */
.kp .kp-service__body > .kp-fold:first-child { margin-top: 0; }
.kp .kp-fold__post { border-top: 1px solid var(--kp-line); }
.kp .kp-fold__post:last-child { border-bottom: 1px solid var(--kp-line); }

.kp .kp-fold__hoved {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  padding: 1.05rem 0; cursor: pointer; list-style: none;
}
.kp .kp-fold__hoved::-webkit-details-marker { display: none; }
.kp .kp-fold__titel {
  font-size: clamp(1rem, .94rem + .3vw, 1.125rem); line-height: 1.3;
  color: var(--kp-ink);
}
.kp .kp-fold__hoved:hover .kp-fold__titel { color: var(--kp-mute); }

/* Plusset bliver til et minus, naar posten er aaben. */
.kp .kp-fold__tegn { position: relative; width: .8rem; height: .8rem; flex: 0 0 auto; }
.kp .kp-fold__tegn::before,
.kp .kp-fold__tegn::after {
  content: ''; position: absolute; inset: 0; margin: auto;
  background: var(--kp-ink);
}
.kp .kp-fold__tegn::before { width: 100%; height: 1.5px; }
.kp .kp-fold__tegn::after { width: 1.5px; height: 100%; }
.kp .kp-fold__post[open] .kp-fold__tegn::after { transform: scaleY(0); }
@media (prefers-reduced-motion: no-preference) {
  .kp .kp-fold__tegn::after { transition: transform .18s ease; }
}

.kp .kp-fold__ud { padding-bottom: 1.35rem; max-width: 46rem; }
.kp .kp-fold__ud .kp-text { margin: 0; }

/* ---------------- Harmonikaernes tegn under foldningen ----------------
   Mens en post lukker, staar den stadig med open -- ellers ville indholdet
   forsvinde, foer bevaegelsen var faerdig. Tegnet skal derimod vende med det
   samme, saa det ikke springer bagefter. data-folder saettes af site.js. */
.kp [data-folder="lukker"] .kp-fold__tegn::after,
.kp [data-folder="lukker"] .kp-cert__tegn::after { transform: none; }
.kp .kp-mx__celle--fold[data-folder="lukker"] > summary::after {
  transform: translateY(-.15em) rotate(45deg);
}

/* ---------------- Baand med ordmaerker ----------------
   Én linje, der glider langsomt fra hoejre mod venstre. Sporet rummer
   raekken to gange og flyttes praecis en halv sporbredde, saa overgangen
   ikke kan ses. Uden animation staar raekken bare stille. */
.kp .kp-glid {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 11%, #000 89%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 11%, #000 89%, transparent);
}
.kp .kp-glid__spor { display: flex; width: max-content; }
.kp .kp-glid__raekke {
  display: flex; align-items: center; flex: 0 0 auto;
  gap: clamp(3.5rem, 8vw, 7rem); margin: 0 clamp(3.5rem, 8vw, 7rem) 0 0;
  padding: 0; list-style: none;
}
.kp .kp-glid .logo { white-space: nowrap; }

@media (prefers-reduced-motion: no-preference) {
  .kp .kp-glid__spor { animation: kp-glid 34s linear infinite; }
}
@keyframes kp-glid {
  from { transform: translateX(0); }
  /* En tredjedel af sporet er praecis én raekke, naar der er tre kopier. */
  to   { transform: translateX(-33.3333%); }
}

/* ---------------- Logoer ----------------
   Filerne kommer i hver sin farve og hvert sit format. De saettes i samme
   hoejde og i sorthvid, saa baandet staar roligt og ikke som en sponsorvaeg.
   Bredden har et loft, saa de lange ordmaerker ikke tager hele linjen. */
/* Maerkerne staar i samme hoejde og med samme afstand imellem sig. Kasser af
   fast bredde ville give ulige mellemrum, fordi et smalt maerke saa efterlader
   luft inde i sin egen kasse. Bredden foelger derfor maerket. */
.kp .kp-glid .logo { display: flex; align-items: center; }
.kp .kp-glid .logo img { height: 2.375rem; max-width: 13rem; }
.kp .logo img {
  width: auto; object-fit: contain; object-position: center; display: block;
  filter: grayscale(1) contrast(1.08);
}

/* ---------------- Udtalelser ----------------
   To spalter med citat, afsender og kundens maerke. Citatet staar i
   broedtekstgrad: det er kundens ord, ikke en rubrik. */
.kp .kp-udtalelser {
  display: grid; gap: clamp(2.5rem, 5vw, 4rem);
  align-items: start;
}
@media (min-width: 800px) {
  .kp .kp-udtalelser { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.kp .kp-udtalelse { margin: 0; display: flex; flex-direction: column; height: 100%; }
.kp .kp-udtalelse__citat { margin: 0; }
.kp .kp-udtalelse__citat p {
  margin: 0 0 1em; font-size: var(--kp-tekst); line-height: 1.62; color: var(--kp-ink);
  max-width: 42ch;
}
.kp .kp-udtalelse__citat p:last-child { margin-bottom: 0; }
.kp .kp-udtalelse__hvem {
  margin-top: 1.5rem; font-size: .875rem; font-style: italic; color: var(--kp-mute);
  max-width: 42ch;
}
/* Maerket staar nederst, saa de to spalter flugter, uanset citatets laengde. */
.kp .kp-udtalelse__maerke { margin: auto 0 0; padding-top: 1.75rem; }
.kp .kp-udtalelse__maerke img {
  height: 1.75rem; width: auto; max-width: 10rem;
  object-fit: contain; object-position: left center; display: block;
  filter: grayscale(1) contrast(1.08);
}

/* ---------------- Hero med billede ----------------
   Tekst til venstre, billede til hoejre. Billedet fylder sin spalte og
   beskaeres, saa forholdet holder, uanset hvad der bliver lagt op. */
.kp .kp-hero--delt {
  display: grid; gap: clamp(2rem, 5vw, 4rem);
  align-items: center;
  padding-top: clamp(3rem, 7vw, 6rem);
  padding-bottom: clamp(3rem, 7vw, 6rem);
}
@media (min-width: 900px) {
  .kp .kp-hero--delt { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
@media (min-width: 1200px) {
  .kp .kp-hero--delt { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }
}

.kp .kp-hero--delt .kp-hero__display { max-width: 16ch; }
.kp .kp-hero__manchet { margin-top: clamp(1.25rem, 2.5vw, 2rem); max-width: 42ch; }
.kp .kp-hero__knap { margin: clamp(1.5rem, 3vw, 2.25rem) 0 0; }

.kp .kp-hero__medie { margin: 0; }
.kp .kp-hero__medie img {
  width: 100%; height: auto; display: block;
  aspect-ratio: 3 / 2; object-fit: cover; object-position: 62% 35%;
}
@media (max-width: 899px) {
  /* Paa en telefon staar billedet lavere, saa rubrikken bliver det foerste. */
  .kp .kp-hero__medie img { aspect-ratio: 16 / 10; }
}

/* ---------------- Indtoning ----------------
   Selve mekanikken ligger i css/site.css og js/site.js. Her kobles den til
   de moduler, det her design bruger, saa elementerne kommer ind i raekke i
   stedet for paa én gang. Alt ligger bag prefers-reduced-motion, og uden
   JavaScript bliver .js-anim aldrig sat: saa staar alt synligt fra start. */
@media (prefers-reduced-motion: no-preference) {
  .kp .js-anim .reveal,
  .js-anim .kp .reveal { will-change: opacity, transform; }

  /* Bevaegelsen skal kunne naa at ses. En halv sekund og fjorten pixel gik
     for hurtigt til, at man opfattede den som andet end et glimt. */
  /* To kurver, ikke én. Bevaegelsen maa gerne slaa an og falde til ro, men
     med samme kurve paa gennemsigtigheden er tre fjerdedele af fadet
     overstaaet paa en femtedel af tiden, og saa naar man ikke at se det. */
  .kp {
    --kp-ind: 1000ms;
    --kp-ind-fade: 780ms;
    --kp-ind-kurve: cubic-bezier(.16, 1, .3, 1);
    --kp-fade-kurve: cubic-bezier(.33, .1, .3, 1);
  }

  /* Samme vaelgere som i css/site.css, saa .is-visible stadig kan vinde.
     Med .js-anim .kp .reveal vejede udgangspunktet tungere end .is-visible,
     og saa blev elementet staaende 34 px nede for altid. */
  .js-anim .reveal { transform: translate3d(0, 30px, 0); }
  .reveal.is-visible {
    opacity: 1; transform: none;
    transition: opacity var(--kp-ind-fade) var(--kp-fade-kurve),
                transform var(--kp-ind) var(--kp-ind-kurve);
  }

  /* Boern, der skal komme enkeltvis */
  .kp .reveal > div > .kp-produktgitter > .kp-produkt,
  .kp .reveal > div > .kp-rows > .kp-row,
  .kp .reveal > div > .kp-cert > .kp-cert__post,
  .kp .reveal > div > .kp-udtalelser > .kp-udtalelse,
  .kp .reveal > .kp-service__body > .kp-fold > .kp-fold__post,
  .kp .reveal > .kp-split > .kp-split__tekst,
  .kp .reveal > .kp-split > .kp-portrait {
    transition: opacity var(--kp-ind-fade) var(--kp-fade-kurve),
                transform var(--kp-ind) var(--kp-ind-kurve);
  }
  .js-anim .reveal:not(.is-visible) > div > .kp-produktgitter > .kp-produkt,
  .js-anim .reveal:not(.is-visible) > div > .kp-rows > .kp-row,
  .js-anim .reveal:not(.is-visible) > div > .kp-cert > .kp-cert__post,
  .js-anim .reveal:not(.is-visible) > div > .kp-udtalelser > .kp-udtalelse,
  .js-anim .reveal:not(.is-visible) > .kp-service__body > .kp-fold > .kp-fold__post,
  .js-anim .reveal:not(.is-visible) > .kp-split > .kp-split__tekst {
    opacity: 0; transform: translate3d(0, 26px, 0);
  }
  /* Portraettet kommer fra siden i stedet for nedefra, saa de to dele ikke
     bevaeger sig ens. */
  .js-anim .reveal:not(.is-visible) > .kp-split > .kp-portrait {
    opacity: 0; transform: translate3d(26px, 0, 0);
  }
  .kp .reveal.is-visible > .kp-split > .kp-portrait { transition-delay: 180ms; }
  .kp .reveal.is-visible > div > .kp-produktgitter > :nth-child(2),
  .kp .reveal.is-visible > div > .kp-rows > :nth-child(2),
  .kp .reveal.is-visible > div > .kp-cert > :nth-child(2),
  .kp .reveal.is-visible > div > .kp-udtalelser > :nth-child(2),
  .kp .reveal.is-visible > .kp-service__body > .kp-fold > :nth-child(2) { transition-delay: 130ms; }
  .kp .reveal.is-visible > div > .kp-produktgitter > :nth-child(3),
  .kp .reveal.is-visible > div > .kp-rows > :nth-child(3),
  .kp .reveal.is-visible > div > .kp-cert > :nth-child(3),
  .kp .reveal.is-visible > .kp-service__body > .kp-fold > :nth-child(3) { transition-delay: 260ms; }
  .kp .reveal.is-visible > div > .kp-rows > :nth-child(4),
  .kp .reveal.is-visible > div > .kp-cert > :nth-child(4),
  .kp .reveal.is-visible > .kp-service__body > .kp-fold > :nth-child(4) { transition-delay: 390ms; }
  .kp .reveal.is-visible > div > .kp-rows > :nth-child(n+5),
  .kp .reveal.is-visible > .kp-service__body > .kp-fold > :nth-child(n+5) { transition-delay: 520ms; }

  /* Ved indlaesning bygges siden op oppefra i stedet for at staa faerdig med
     det samme. Trinnene saettes af js/site.js paa de moduler, der allerede er
     i billedet, naar siden kommer frem. */
  .kp .reveal[data-ind] { transition-delay: calc(var(--ind-trin, 0) * 150ms); }
  .kp .reveal[data-ind].is-visible > * { transition-delay: inherit; }

  /* Heroen bygges op af sine egne dele i stedet for at komme som én blok.
     Rubrikken foerst, saa manchetten, saa knappen. Billedet ligger under det
     hele og kommer roligere, saa det ikke traekker blikket til sig foerst.

     Det koeres af CSS alene. Heroen maa ikke afhaenge af, at JavaScript naar
     frem: gaar det galt, staar sidens foerste skaerm tom. */
  .kp .kp-hero__kicker,
  .kp .kp-hero__display,
  .kp .kp-hero__foot > div,
  .kp .kp-hero__manchet,
  .kp .kp-hero__knap {
    /* To animationer, ikke én. Bevaegelsen maa gerne skyde af sted og falde
       til ro, men med den kurve paa gennemsigtigheden er fadet halvt
       overstaaet efter en tiendedel af tiden. */
    animation: kp-hero-fade 820ms var(--kp-fade-kurve) both,
               kp-hero-op 1150ms var(--kp-ind-kurve) both;
  }
  .kp .kp-hero__kicker  { animation-delay:  40ms; }
  .kp .kp-hero__display { animation-delay: 120ms; }
  .kp .kp-hero__manchet,
  .kp .kp-hero__foot > div:first-child { animation-delay: 330ms; }
  .kp .kp-hero__knap,
  .kp .kp-hero__foot > div:nth-child(2) { animation-delay: 450ms; }

  @keyframes kp-hero-fade {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
  @keyframes kp-hero-op {
    from { transform: translate3d(0, 28px, 0); }
    to   { transform: none; }
  }

  /* Billedet toner ind og falder samtidig en anelse til ro. Laengere tid end
     teksten, saa de to ting ikke lander paa samme slag. */
  .kp .kp-hero__medie {
    animation: kp-hero-fade 1000ms var(--kp-fade-kurve) both,
               kp-hero-ro 1600ms var(--kp-ind-kurve) both;
    animation-delay: 180ms;
  }
  @keyframes kp-hero-ro {
    from { transform: scale(1.05); }
    to   { transform: none; }
  }
  .kp .kp-hero__medie { overflow: hidden; }
  /* Hovedet toner roligt ind oven paa. Det staar der i forvejen, saa der er
     ingen ombrydning at vente paa. */
  .kp .site-header { animation: kp-hoved-ind 800ms var(--kp-ind-kurve) both; }
  @keyframes kp-hoved-ind {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
}

/* ---------------- Stregen under opfordringen ----------------
   Den tegnes fra venstre, naar opfordringen kommer i billedet. Langsomt: det
   er sidens sidste bevaegelse, og den skal have lov at tage sin tid. */
@media (prefers-reduced-motion: no-preference) {
  .kp .kp-footer-cta__tekst a {
    transition: background-size 1600ms cubic-bezier(.22, .61, .36, 1) 260ms,
                background-image 200ms linear;
  }
  .js-anim .kp .kp-footer-cta.reveal:not(.is-visible) .kp-footer-cta__tekst a {
    background-size: 0 2px;
  }
  /* Efter museover skal stregen svare med det samme, ikke tegne sig igen. */
  .kp .kp-footer-cta__tekst a:hover { transition: background-image 200ms linear; }
}

/* ---------------- Baandet reagerer ikke paa musen ----------------
   Det gamle designs .logo-regler ligger stadig i css/site.css og loefter
   maerket to pixel og lyser det op ved museover. I et baand, der glider af
   sig selv, ser det ud som en fejl. Maerkerne er ikke til at klikke paa. */
.kp .logo { transition: none; }
.kp .logo:hover,
.kp .kp-glid .logo:hover { transform: none; color: var(--kp-mute); }
.kp .logo:hover img { filter: grayscale(1) contrast(1.08); opacity: 1; }

/* ---------------- Kontaktformular ----------------
   Honningkrukken skal vaere skjult for oejet, men ikke via display:none.
   En robot, der laeser CSS, springer den slags over; en der udfylder alt,
   afsloerer sig selv. */
.kp .kp-form__krukke {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}
.kp .kp-form { position: relative; }
.kp .kp-form__note { margin: 1.25rem 0 0; }
.kp .kp-form__status {
  margin: 1.25rem 0 0; font-size: .9375rem; min-height: 1.5em;
}
.kp .kp-form__status--god  { color: var(--kp-ink); font-weight: 500; }
.kp .kp-form__status--fejl { color: #9B3B2F; }
.kp .kp-form button[disabled] { opacity: .55; cursor: progress; }

/* ---------------- Artikelhoved ----------------
   Samme hoved som resten af sitet -- kicker, display, manchet -- men med en
   underrubrik under rubrikken og en byline i stedet for knappen. Kategori,
   dato og laesetid staar paa metalinjen og deler dens uppercase-form. */
.kp .kp-artikel__under {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.125rem, .95rem + .75vw, 1.5rem);
  line-height: 1.3; letter-spacing: -.015em; color: var(--kp-mute);
  margin: clamp(1rem, 2vw, 1.5rem) 0 0; max-width: 34ch;
}
@media (min-width: 900px) {
  .kp .kp-artikelhoved .kp-artikel__under { grid-column: 3 / 12; }
}
/* Manchetten er indgangen til teksten og skal kunne staa alene */
/* Manchetten er stadig indgangen til teksten, men det er vaegten der
   siger det, ikke graden. */
.kp .kp-artikel__manchet { font-size: var(--kp-tekst); line-height: 1.55; font-weight: 500; }

@media (min-width: 900px) {
  /* Manchetten og broedteksten er den samme spalte og skal ligge oven i
     hinanden. Der var to ting i vejen: heroens fod har en bredere
     kolonneafstand end modulerne, saa spalte 3 begyndte seks pixels laengere
     inde, og manchettens maal var sat i ch -- og et ch i 20 px er et andet
     maal end i 18. Begge dele saettes her til det, resten af artiklen
     bruger: samme afstand, og 40rem. */
  .kp .kp-artikelhoved .kp-hero__foot { column-gap: clamp(1rem, 1.8vw, 2rem); }
  .kp .kp-artikelhoved .kp-artikel__manchet { max-width: 40rem; }
}

.kp .kp-byline { display: flex; align-items: center; gap: .875rem; }
.kp .kp-byline img {
  width: 3.25rem; height: 3.25rem; border-radius: 50%;
  object-fit: cover; flex: none; display: block;
}
.kp .kp-byline__navn {
  margin: 0; font-size: .9375rem; font-weight: 600; line-height: 1.35;
}
.kp .kp-byline__titel {
  display: block; font-weight: 400; color: var(--kp-mute);
}

@media (min-width: 900px) {
  /* Bylinen stod og svaevede midt i spalten, fordi gitterets celle er lige
     saa hoej som manchetten. Den flugter nu med manchettens foerste linje --
     samme margin som den -- og staar én kolonne taettere paa teksten end
     knappen goer i den almindelige hero. */
  .kp .kp-hero.kp-artikelhoved .kp-hero__foot > .kp-byline {
    grid-column: 9 / 13;
    align-self: start;
    margin-top: clamp(1.25rem, 2.5vw, 2rem);
  }
}

/* ---------------- Sammenligning ----------------
   Tema for tema holdt op mod to eller tre kolonner. Den foerste kolonne er
   svaret -- det, laeseren skal gaa hjem med -- og staar derfor foerst og
   altid aaben. De oevrige er details-felter: fra 900 px staar de aabne ved
   siden af den, og paa telefonen er de foldet sammen, saa temaerne kan
   overskues uden at rulle igennem tre spalter tekst pr. raekke.

   Uden JavaScript staar de sammenfoldede felter der stadig og kan aabnes med
   et klik. Intet indhold gaar tabt, og det er summary-elementet, der baerer
   kolonnens navn, saa en skaermlaeser faar det med. */
.kp .kp-mx__temaer { border-top: 1px solid var(--kp-line); }
.kp .kp-mx__tema {
  padding-block: clamp(1.75rem, 3.5vw, 2.75rem);
  border-bottom: 1px solid var(--kp-line);
}
.kp .kp-mx__navn {
  font-family: var(--md-sys-typescale-brand-font);
  font-weight: 400; font-size: clamp(1.25rem, 1.05rem + .85vw, 1.75rem);
  line-height: 1.2; letter-spacing: -.02em;
  margin: 0 0 clamp(1.25rem, 2.5vw, 1.75rem);
  display: flex; align-items: baseline; gap: .9rem;
}
.kp .kp-mx__nr { flex: none; }

.kp .kp-mx__celler { display: grid; gap: 1rem; }
@media (min-width: 900px) {
  .kp .kp-mx__celler {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(1.5rem, 2.5vw, 2.5rem);
    align-items: start;
  }
}
.kp .kp-mx__celle { border-top: 1px solid var(--kp-line); padding-top: .8rem; }
/* Svaret er den, kolonnerne peger hen imod. Kun linjen og labelen skiller
   den ud -- ingen flade, ingen ramme. */
.kp .kp-mx__celle--svar { border-top-color: var(--kp-ink); }
.kp .kp-mx__kol {
  font-size: .6875rem; font-weight: 500; letter-spacing: .1em;
  text-transform: uppercase; color: var(--kp-mute); margin: 0 0 .75rem;
}
.kp .kp-mx__celle--svar .kp-mx__kol { color: var(--kp-ink); }
.kp .kp-mx__tekst { font-size: .9375rem; line-height: 1.6; margin: 0; }

/* Foldefeltet: hele labelen er klikfladen, og vinklen viser tilstanden */
.kp .kp-mx__celle--fold > summary {
  list-style: none; cursor: pointer;
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  margin: 0; padding-block: .5rem .65rem;
}
.kp .kp-mx__celle--fold > summary::-webkit-details-marker { display: none; }
.kp .kp-mx__celle--fold > summary::after {
  content: ''; flex: none; width: .5rem; height: .5rem;
  border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor;
  transform: translateY(-.15em) rotate(45deg);
  transition: transform var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard);
}
.kp .kp-mx__celle--fold[open] > summary::after {
  transform: translateY(.1em) rotate(-135deg);
}
.kp .kp-mx__celle--fold[open] > summary { padding-bottom: .5rem; }
/* Fra 900 px er der plads til alle tre. Saa er feltet en celle som de andre,
   og labelen skal hverken kunne klikkes eller baere en vinkel. */
@media (min-width: 900px) {
  .kp .kp-mx__celle--fold > summary {
    cursor: default; pointer-events: none;
    padding-block: 0; margin-bottom: .75rem;
  }
  .kp .kp-mx__celle--fold > summary::after { display: none; }
}

/* ---------------- Kilder og noter ----------------
   Staar under artiklen og er en oplysning om, hvor tallene kommer fra --
   ikke broedtekst. Derfor daempet og i den lille grad. */
.kp .kp-noter { margin: 0; padding-left: 1.5rem; display: grid; gap: .65rem; }
.kp .kp-noter li { font-size: .9375rem; line-height: 1.6; color: var(--kp-mute); }
.kp .kp-noter a { color: inherit; }

/* ---------------- Artiklens rytme ----------------
   En artikel er én sammenhaengende tekst, ikke en side af selvstaendige
   baand. Paa oversigtssiderne skiller haarlinjerne ét emne fra det naeste og
   skal blive; her ville de skaere teksten over. Samtidig staar modulerne
   taettere, saa afsnittene laeses i forlaengelse af hinanden.

   Artikelhovedet er kendetegnet. Det sparer en klasse paa <main>, som skulle
   have vaeret foert igennem baade layoutet, build.py og renderingen. */
.kp main:has(.kp-artikelhoved) .kp-hero { border-bottom: 0; }
.kp main:has(.kp-artikelhoved) .kp-block {
  border-top: 0;
  padding-block: clamp(1.75rem, 3vw, 3rem);
}
/* Luften over rubrikken bliver staaende. Det er kun vejen ned i teksten,
   der bliver kortere. */
.kp .kp-artikelhoved {
  padding-block: clamp(4.5rem, 13vw, 11rem) clamp(1.75rem, 3vw, 3rem);
}

/* ---------------- Deleknapper ----------------
   Runde flader i sitets egen blaek, saa de laeses som knapper uden at blive
   en farve, sitet ellers ikke har. Ikonerne er tegnet i to slags: mail og
   link i tynde streger som resten af sitets ikoner, de tre maerker som de
   fyldte former, logoerne skal have. */
.kp .kp-del__liste {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: .625rem;
}
.kp .kp-del__disc {
  display: grid; place-items: center;
  width: 3rem; height: 3rem; border-radius: 50%;
  padding: 0; cursor: pointer;
  /* Haarlinje som resten af sitets inddeling. Ingen flade -- ringen alene
     giver knappen dens form og dens klikflade. */
  background: none; border: 1px solid var(--kp-line); color: var(--kp-ink);
  transition: border-color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),
              background var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),
              color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard);
}
.kp .kp-del__disc svg { width: 1.25rem; height: 1.25rem; display: block; }
/* De tre maerker er fyldte former og vejer tungere end de tegnede ikoner ved
   samme maal. De saettes en tak mindre, saa raekken har samme vaegt hele
   vejen henover. */
.kp .kp-del__disc svg.kp-del__maerke { width: 1.0625rem; height: 1.0625rem; }
.kp .kp-del__disc:hover { border-color: var(--kp-ink); }
.kp .kp-del__disc:focus-visible { outline: 2px solid var(--kp-ink); outline-offset: 3px; }

/* Kvitteringen paa kopiér: fluebenet afloeser kaeden i to sekunder */
.kp .kp-del__tegn { display: grid; place-items: center; }
.kp .kp-del__tegn--ok { display: none; }
.kp .kp-del__kopi[data-ok] .kp-del__tegn { display: none; }
.kp .kp-del__kopi[data-ok] .kp-del__tegn--ok { display: grid; }
.kp .kp-del__kopi[data-ok] {
  background: var(--kp-ink); border-color: var(--kp-ink); color: var(--kp-paper);
}

/* Modulet nederst har ingen marginlabel at flugte med. Knapperne staar i
   stedet centreret over tekstspalten. */
.kp .kp-del__liste--midt { justify-content: center; }
.kp .kp-del__rubrik { text-align: center; }

/* Raekken under bylinen. Samme knapper, mindre -- den skal ikke tage magten
   fra manchetten, den staar ved siden af. */
.kp .kp-del__liste--lille { gap: .375rem; margin-top: .875rem; }
.kp .kp-del__liste--lille .kp-del__disc { width: 2rem; height: 2rem; }
.kp .kp-del__liste--lille .kp-del__disc svg { width: .875rem; height: .875rem; }
.kp .kp-del__liste--lille .kp-del__disc svg.kp-del__maerke { width: .75rem; height: .75rem; }

/* Bylinen har nu to dele: navnet med portraettet, og knapperne under */
.kp .kp-byline { display: block; }
.kp .kp-byline__navne { display: flex; align-items: center; gap: .875rem; }
/* Bylinen peger paa om-siden. Den skal ikke se ud som et link i broedteksten
   -- stregen kommer frem, naar man er ved den. */
.kp a.kp-byline__navne { color: inherit; text-decoration: none; }
.kp a.kp-byline__navne:hover .kp-byline__navn { color: var(--kp-mute); }
.kp a.kp-byline__navne:focus-visible { outline: 2px solid var(--kp-ink); outline-offset: 4px; border-radius: 4px; }

/* ---------------- Artikeloversigten ----------------
   Bruger oversigtsposterne, sitet allerede har: marginlabel, metalinje,
   rubrik, uddrag og et link videre. Den foerste post staar stoerst. */
.kp .kp-artikler { padding-block: clamp(1rem, 2vw, 2rem) clamp(2rem, 5vw, 4rem); }
/* Marginlabelen og metalinjen er samme grad og samme form, og saa skal de
   ogsaa staa paa samme linje. Labelen baerer ellers en luft, der er sat til
   at flugte med en rubrik, ikke med en linje i labelgrad. */
@media (min-width: 900px) {
  .kp .kp-post:has(.kp-kicker) .kp-label {
    margin-top: 0; padding-top: 0; line-height: 1.4;
  }
}
/* Posten er ét link, men kun saa bredt som teksten. Et link paa tvaers af
   hele skaermen bliver ramt ved et uheld. Maalene er de samme, som
   afsnittene i posten har i forvejen, saa klikfladen slutter praecis dér,
   hvor teksten slutter. Ingen hovereffekt: markoeren er signalet, og
   «Læs artiklen» baerer i forvejen sin streg. */
.kp a.kp-post__krop {
  display: block; max-width: var(--kp-oversigt);
  color: inherit; text-decoration: none;
}

.kp a.kp-post__krop:hover .kp-link { color: var(--kp-ink); border-bottom-color: var(--kp-ink); }
.kp a.kp-post__krop:focus-visible { outline: 2px solid var(--kp-ink); outline-offset: 6px; }
/* Underrubrikken er et span inde i linket og skal selv sige, at den er en
   blok. Metalinjen holdes udenfor: den er flex i forvejen. */
.kp a.kp-post__krop .kp-post__under { display: block; }
.kp .kp-post__under {
  font-family: var(--md-sys-typescale-brand-font);
  font-size: 1.125rem !important; line-height: 1.35; color: var(--kp-mute);
  margin: -.35rem 0 1rem !important; max-width: 34ch;
}
.kp .kp-post--lead .kp-post__under { font-size: 1.375rem !important; }
