/*
 * Kirkepakka — main.css (ETT tema, fem akser)
 * ============================================================
 * TILPASNINGSSYSTEM. Alle farger/fonter/radier er CSS custom properties
 * som redefineres per attributt paa <html>. INGEN hardkodede farger i
 * komponent-CSS.
 *
 * FEM ORTOGONALE AKSER (B7-beslutning 2026-08-25, fase 10b):
 *   data-mode     lys | moerk
 *   data-farge    13 kuraterte paletter — eller «egen» (fri farge, avledet
 *                 server-side med garantert AA; se inc/farge.php)
 *   data-fontpar  10 self-hostede fontpar (kategorinavn, aldri fontnavn i UI)
 *   data-form     skarp | myk | rund (radius-skala)
 *   data-uttrykk  rolig | markant | varm — SIGNATUREN: grunnflater, skygge-
 *                 stil, hero-form, typografi-tone. Ikke farge, ikke font.
 *
 * `data-uttrykk="rolig"` er standard og roerer ingenting (basislaget under
 * ER rolig). Fram til 2026-08 het aksen `data-profil` og bar OGSAA farge og
 * fonter — de er nå egne akser, slik at enhver kombinasjon er mulig.
 *
 * Attributtene settes server-side av temaet (kp_profile_attrs()), ikke av
 * localStorage — kirken velger utseende via konfigurasjon.
 * Fonter self-hostet (WOFF2 i assets/fonts/) — ingen Google Fonts-kall
 * (ytelse + GDPR). De fleste er variable: ett woff2 per subset dekker hele
 * vektspennet (font-weight-range).
 * ============================================================
 */

/* —— Self-hostede fonter (variable, latin + latin-ext) —— */
@font-face{font-family:'Bricolage Grotesque';font-style:normal;font-weight:700 800;font-display:swap;src:url(../fonts/bricolage-grotesque-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:'Bricolage Grotesque';font-style:normal;font-weight:700 800;font-display:swap;src:url(../fonts/bricolage-grotesque-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:'Figtree';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/figtree-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:'Figtree';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/figtree-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;}

/* —— Fontpar «massiv» og «lun» (latin-subset dekker norsk æøå) ——
   massiv: Archivo Black (display, statisk sort-master → vidt vektspenn hindrer
   syntetisk bold) + Archivo (body, variabel). lun: Fraunces (display, variabel serif)
   + Karla (body, variabel). Én woff2 per familie, self-hostet (ingen Google Fonts-kall). */
@font-face{font-family:'Archivo Black';font-style:normal;font-weight:400 900;font-display:swap;src:url(../fonts/archivo-black-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:'Archivo';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/archivo-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:'Fraunces';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/fraunces-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:'Karla';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/karla-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;}

/* —— Oevrige fontpar (self-hostet; kun lastet naar valgt) ——
   Ett latin-subset woff2 per familie (æøå dekket av U+0000-00FF); variable der mulig,
   statiske display-familier (Anton/Bebas Neue) og Barlow 400/700. Ingen Google Fonts-kall.
   Par: sonisk=Sora/Inter · kinetisk=Chivo/Manrope · plakat=Anton/Inter ·
   smal=Bebas Neue/Barlow · roleg=Newsreader/Mulish · naer=Bitter/Source Sans 3. */
@font-face{font-family:'Sora';font-style:normal;font-weight:400 800;font-display:swap;src:url(../fonts/sora-latin.woff2) format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/inter-latin.woff2) format('woff2')}
@font-face{font-family:'Chivo';font-style:normal;font-weight:400 900;font-display:swap;src:url(../fonts/chivo-latin.woff2) format('woff2')}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(../fonts/manrope-latin.woff2) format('woff2')}
@font-face{font-family:'Anton';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/anton-latin.woff2) format('woff2')}
@font-face{font-family:'Bebas Neue';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/bebas-neue-latin.woff2) format('woff2')}
@font-face{font-family:'Barlow';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/barlow-400-latin.woff2) format('woff2')}
@font-face{font-family:'Barlow';font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/barlow-700-latin.woff2) format('woff2')}
@font-face{font-family:'Newsreader';font-style:normal;font-weight:400 600;font-display:swap;src:url(../fonts/newsreader-latin.woff2) format('woff2')}
@font-face{font-family:'Mulish';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/mulish-latin.woff2) format('woff2')}
@font-face{font-family:'Bitter';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/bitter-latin.woff2) format('woff2')}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/source-sans-3-latin.woff2) format('woff2')}

/* —— EKTE KURSIV for de tre antikva-parene (roleg/lun/naer) ——
   Paletten «pergament» markerer med SKRIFTSNITTET (--aksent-stil, se :root).
   Uten en selvhostet kursiv skraastiller nettleseren den rette fila
   syntetisk — en skjev antikva, ikke en kursiv: ingen enkeltetasjes «a»,
   ingen kalligrafiske forbindelser, og seriffene blir staaende feil vei. Paa
   en serif ser det billig ut, og det var nettopp derfor den kursive aksenten
   ikke kunne leveres paa noen av de ni foerste parene.

   AKSEVALGET ER MAALT, ikke prinsipielt. Nettleseren slaar optisk stoerrelse
   paa av seg selv (font-optical-sizing:auto), saa en kursiv UTEN `opsz` ved
   siden av en rett MED `opsz` kan sprike. Vi maalte bredden paa aksentordet
   ved 56 px, med og uten aksen:

     Newsreader   44,41 px uten opsz  vs  44,91 px med   → 1,1 % — ikke verdt 83 kB
     Fraunces     52,90 px uten opsz  vs  49,85 px med   → 5,8 % — verdt 36 kB

   Derfor: Newsreader-kursiven er hentet med bare `wght` (64,5 kB i stedet for
   147 kB), Fraunces-kursiven MED `opsz` (81,7 kB) fordi opsz-spennet der er
   9–144 og faktisk endrer formene. Bitter har ingen opsz-akse i det hele tatt.

   KOSTNADEN ER BETINGET: nettleseren laster en @font-face-fil foerst naar en
   regel faktisk ber om det snittet. Ingen av disse tre lastes ned paa et
   palett som ikke bruker kursiv — altsaa paa alt annet enn pergament i dag.

   Deskriptorene er FAMILIENES EGNE spenn, ikke de rette filenes: Newsreader
   rett er deklarert `400 600` (for smalt, se KPX-aliasene i
   uttrykk-preview.css), mens kursiven her er sann fra foerste stund. */
@font-face{font-family:'Newsreader';font-style:italic;font-weight:200 800;font-display:swap;src:url(../fonts/newsreader-italic-latin.woff2) format('woff2')}
@font-face{font-family:'Fraunces';font-style:italic;font-weight:100 900;font-display:swap;src:url(../fonts/fraunces-italic-latin.woff2) format('woff2')}
@font-face{font-family:'Bitter';font-style:italic;font-weight:100 900;font-display:swap;src:url(../fonts/bitter-italic-latin.woff2) format('woff2')}

/* —— Fontpar «katedral»: EN antikva til alt, rett og kursiv ——
   Source Serif 4 (Adobe, OFL). Samme familie i display og broedtekst er hele
   poenget med paret — se begrunnelsen i kp_akse_fontpar() i inc/akser.php.
   Variabel 200–900, saa en display-vekt paa 400 er ekte og ikke en klemt bunn.
   latin-ext foelger med fordi paret skal baere navn som «Krakow» uten aa
   falle til Georgia; unicode-range gjoer at den aldri lastes paa en ren
   norsk side.

   BEGGE snittene er hentet uten `opsz` — det er DET som teller: rett og
   kursiv har samme aksesett, saa nettleserens automatiske optiske stoerrelse
   ikke kan faa de to til aa sprike (fella vi maalte paa Fraunces over). Vil
   vi ha optisk stoerrelse her, maa BEGGE filene hentes paa nytt, og paret
   vokser fra 184 kB til 463 kB. */
@font-face{font-family:'Source Serif 4';font-style:normal;font-weight:200 900;font-display:swap;src:url(../fonts/source-serif-4-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:'Source Serif 4';font-style:normal;font-weight:200 900;font-display:swap;src:url(../fonts/source-serif-4-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:'Source Serif 4';font-style:italic;font-weight:200 900;font-display:swap;src:url(../fonts/source-serif-4-italic-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:'Source Serif 4';font-style:italic;font-weight:200 900;font-display:swap;src:url(../fonts/source-serif-4-italic-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;}

/* ============================================================
   TOKEN-ARKITEKTUR
   ============================================================ */
:root{
  /* Spacing (8px-grid) */
  --s-1:8px;--s-2:16px;--s-3:24px;--s-4:40px;--s-5:64px;--s-6:104px;

  /* Lerret og takt (uttrykks-notatet 07.09, §4.3). NYE tokens med DAGENS
     verdier som standard: `varm` og `markant` skal være pikselidentiske, så
     alt som avviker bor bak preview-flagget i uttrykk-preview.css.
     --wrap-pad leses KUN fra 900px og opp (se .kp-wrap under) — under det
     beholder lerretet dagens --s-3, slik at mobilmargen aldri kan bli et
     uttrykksvalg. --sect-y/--s-6 røres ikke: Nucleus-målingen sier de har
     MINDRE vertikal luft enn oss, luften skal bli bredere, ikke høyere.
     --grid-gap eies av KORTRADENE som i dag står på --s-3: .kp-taler__grid,
     .kp-stab__grid, kalenderens «kort»-variant og fellesskapets «flis».
     .kp-steg-grid (--s-2) og de responsive nedtrappingene er ikke med — de er
     egne beslutninger om tettere raster, ikke om lerretets luft. */
  --wrap-max:1200px;
  --wrap-pad:var(--s-3);
  --grid-gap:var(--s-3);

  /* Motion */
  --ease-out:cubic-bezier(0.16,1,0.3,1);
  --ease-smooth:cubic-bezier(0.25,0.46,0.45,0.94);
  --dur-fast:150ms;--dur-normal:250ms;--dur-slow:450ms;

  /* Finish (fase 9b) — elevasjon/heving/gloed. Profil-uavhengig standard;
     data-mode setter skygge-styrken, profil-lagene (Frimodig/Bygd) redefinerer
     signaturen (hard offset vs. myk lagvis). --signal-rgb/--shadow-rgb loeses
     ved bruk (satt i modus-lagene). */
  --kp-lift:translateY(-3px);         /* kort-heving ved hover */
  --kp-btn-lift:translateY(-1px);     /* knapp-heving ved hover */
  --kp-skygge:transparent;            /* solid offset-skygge (kun Frimodig) */
  --kp-signal-glow:0 12px 34px rgba(var(--signal-rgb),.32);

  /* Aksent-STIL paa markerte ord i overskrifter (.kp-merk). Uttrykket eier
     nivaaet; `normal` er standarden og et no-op for rolig/markant/varm.
     «pergament» setter `italic` — referansen (trondheim.katolsk.no) markerer
     med SKRIFTSNITTET der vi ellers markerer med palettens aksentfarge.
     KAPABILITET HOS FONTPARET, NIVAA HOS UTTRYKKET. Fire av ti fontpar har en
     selvhostet EKTE kursiv (roleg, lun, naer og katedral-paret); resten har
     ingen kursiv hos kilden i det hele tatt. `--kursiv` er fontparets svar paa
     «taaler jeg dette?», og pergament-laget ber om `var(--kursiv)` i stedet for
     `italic` rett ut. Et par uten ekte kursiv faar dermed OPPREIST skrift —
     ikke nettleserens syntetiske skraastilling, som paa en antikva ser billig
     ut (skjeve serifer, ingen ekte kursivformer). Se kp_akse_fontpar() i
     inc/akser.php: `kursiv: true/false` er samme sannhet i PHP. */
  --aksent-stil:normal;
  --kursiv:normal;

  /* Fonter — default = «grotesk» (Bricolage Grotesque + Figtree). data-fontpar redefinerer. */
  --font-display:'Bricolage Grotesque',system-ui,sans-serif;
  --font-body:'Figtree',system-ui,sans-serif;

  /* Form/radius — default = «myk». data-form redefinerer. */
  --radius-kort:16px;--radius-knapp:10px;--radius-bilde:16px;--radius-felt:6px;

  /* Media-tokens — foto-oeyer (hero, foto-scrim). Alltid moerke i BEGGE moduser. */
  --media-ink:#F4F2EC;
  --media-ink-dim:#D3D2D8;
  --media-ink-rgb:244,242,236;
  --media-line:rgba(244,242,236,.20);
  --media-floor:#101014;
  --media-floor-rgb:16,16,20;
  --scrim-rgb:10,10,13;

  /* —— TONE-SETT (fase 10c) — det AVLEDEDE temasettet en seksjon kan velge fra.
     Dette er de NØYAKTIG SAMME verdiene som modus-lagene under bruker (og som
     kp_akse_flater() i inc/akser.php er sannhetskilde for) — bare navngitt, slik
     at [data-tone] kan plukke lys- eller moerk-settet uavhengig av sidens modus.
     Derfor er en tone-flippet seksjon AA-trygg by construction: den bruker et
     token-sett som allerede er validert mot alle 12 palettene, og fri-farge-
     motoren loeser accent-deep mot verst_lys OG accent-bright mot verst_mork
     ved hver lagring — begge polariteter finnes alltid.
     Verdiene under er «rolig»; markant/varm redefinerer i sine egne lag. */
  --t-lys-bg:#F4F1EA;--t-lys-surface:#FBF9F4;--t-lys-surface-2:#E7E2D6;
  --t-lys-text:#201E24;--t-lys-text-dim:#56545C;
  --t-lys-text-rgb:32,30,36;--t-lys-bg-rgb:244,241,234;--t-lys-shadow-rgb:60,50,40;
  --t-lys-line:rgba(32,30,36,.16);--t-lys-skygge:#201E24;
  --t-mork-bg:#101014;--t-mork-surface:#1A1B21;--t-mork-surface-2:#22232B;
  --t-mork-text:#F4F2EC;--t-mork-text-dim:#A8A8B0;
  --t-mork-text-rgb:244,242,236;--t-mork-bg-rgb:16,16,20;--t-mork-shadow-rgb:0,0,0;
  --t-mork-line:rgba(244,242,236,.14);--t-mork-skygge:#F4F2EC;
}

/* ============================================================
   AKSE 2: FARGE (data-farge) — 13 kuraterte paletter, globale
   ============================================================
   Modus-uavhengige aksentfamilier. Paletten eier BARE fargen; grunnflater
   og signatur bor i uttrykk-aksen. Alle 13 er tilgjengelige uansett uttrykk
   (foer 10b var 4 av dem laast til hver profil).
     bright = uttrykket paa MOERK flate (moerk modus + hero/nyhetsbrev-oeyer)
     deep   = uttrykket paa LYS flate — MAA vaere tekstsikkert (>=4.5:1)
   AA-maalt i design-loopen (fase 8b/9b). «egen» (fri farge) settes ikke her:
   den avledes server-side og skrives som inline <style> i <head> paa
   :root[data-farge="egen"] — samme spesifisitet (0,2,0), senere i dokumentet.

   Naer-sort deep (sol/lime/himmel/korall): disse fire seedene er for LYSE
   til aa baere tekst paa lys flate. Fargen lever da i moerk modus og i
   foto-oeyene, mens lys-modus-aksenten er naer-sort — nøyaktig samme
   ærlige regel som fri-farge-motoren haandhever automatisk. */
:root,:root[data-farge="glod"]{      /* «Gloed» — oransje */
  --accent-bright:#FF6B4A;--accent-bright-deep:#E5512F;--accent-bright-ink:#1A0E08;--accent-bright-rgb:255,107,74;
  --accent-deep:#B8461F;--accent-deep-deep:#9E3A15;--accent-deep-ink:#FFF7F2;--accent-deep-rgb:184,70,31;
}
:root[data-farge="elektrisk"]{       /* «Elektrisk» — blaalilla */
  --accent-bright:#9A8CFF;--accent-bright-deep:#7E6EF0;--accent-bright-ink:#0C0C1A;--accent-bright-rgb:154,140,255;
  --accent-deep:#4B45C7;--accent-deep-deep:#3A34A8;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:75,69,199;
}
:root[data-farge="smaragd"]{         /* «Smaragd» — dyp groenn */
  --accent-bright:#34D6A0;--accent-bright-deep:#23BE8B;--accent-bright-ink:#05231A;--accent-bright-rgb:52,214,160;
  --accent-deep:#0B7A54;--accent-deep-deep:#0A6647;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:11,122,84;
}
:root[data-farge="rubin"]{           /* «Rubin» — bringebaer/dyp roed */
  --accent-bright:#FF6188;--accent-bright-deep:#F0466F;--accent-bright-ink:#2A0710;--accent-bright-rgb:255,97,136;
  --accent-deep:#BE1E48;--accent-deep-deep:#A5163C;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:190,30,72;
}
:root[data-farge="sol"]{             /* «Sol» — varm gul */
  --accent-bright:#FFD23F;--accent-bright-deep:#F5C518;--accent-bright-ink:#141414;--accent-bright-rgb:255,210,63;
  --accent-deep:#141414;--accent-deep-deep:#000000;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:20,20,20;
}
:root[data-farge="lime"]{            /* «Lime» — syrlig groenn */
  --accent-bright:#BEEA3C;--accent-bright-deep:#A9D625;--accent-bright-ink:#141414;--accent-bright-rgb:190,234,60;
  --accent-deep:#141414;--accent-deep-deep:#000000;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:20,20,20;
}
:root[data-farge="himmel"]{          /* «Himmel» — lys cyanblaa */
  --accent-bright:#5FD6F0;--accent-bright-deep:#3FC4E4;--accent-bright-ink:#141414;--accent-bright-rgb:95,214,240;
  --accent-deep:#141414;--accent-deep-deep:#000000;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:20,20,20;
}
:root[data-farge="korall"]{          /* «Korall» — myk oransjeroed */
  --accent-bright:#FF8563;--accent-bright-deep:#FF6B44;--accent-bright-ink:#141414;--accent-bright-rgb:255,133,99;
  --accent-deep:#141414;--accent-deep-deep:#000000;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:20,20,20;
}
:root[data-farge="mose"]{            /* «Mose» — dempet salviegroenn */
  --accent-bright:#A7B487;--accent-bright-deep:#C0CBA0;--accent-bright-ink:#211E18;--accent-bright-rgb:167,180,135;
  --accent-deep:#56603F;--accent-deep-deep:#46512F;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:86,96,63;
}
:root[data-farge="fjord"]{           /* «Fjord» — stoevet blaa */
  --accent-bright:#8FB0C0;--accent-bright-deep:#ABC5D2;--accent-bright-ink:#211E18;--accent-bright-rgb:143,176,192;
  --accent-deep:#35586A;--accent-deep-deep:#26424F;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:53,88,106;
}
:root[data-farge="tommer"]{          /* «Toemmer» — varm terrakotta */
  --accent-bright:#D2A07A;--accent-bright-deep:#E0B492;--accent-bright-ink:#211E18;--accent-bright-rgb:210,160,122;
  --accent-deep:#7A4A2E;--accent-deep-deep:#5E3821;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:122,74,46;
}
:root[data-farge="skifer"]{          /* «Skifer» — noeytral blaagraa */
  --accent-bright:#A6B0BB;--accent-bright-deep:#C2CAD3;--accent-bright-ink:#211E18;--accent-bright-rgb:166,176,187;
  --accent-deep:#47505A;--accent-deep-deep:#333A43;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:71,80,90;
}
/* «Pergament» — den foerste MONOKROME paletten (beslutning 07.09, runde 2).
   EN kuloer (OKLCH h 98) baerer grunn, flate OG aksent; aksenten er en
   LYSHETSFORSKJELL, ikke en kuloerforskjell. Referansen er Nucleus-familien F1
   (Reality: #287156 L43 -> #B5D9CC L84 -> #FFF), men AVLEDNINGEN er vaar egen:
   Realitys knapp maaler 3,84:1 og FALLER. --accent-deep her er den LYSESTE
   oliven som fortsatt holder 4,5:1 mot den moerkeste tekstbaerende lysflaten i
   hele matrisen (4,77 mot varm, 4,79 mot rolig, 5,51 mot hvit); ett trinn
   lysere gir 4,50 = taket. Hvitt blekk paa knappen 5,51:1 (7,13 ved peking).
   Anbefalt uttrykk: rolig (inc/akser.php) — paletten er kjernen i startpunktet
   «Verdig». BAK PREVIEW-FLAGGET i kundens velger, se kp_akse_farge_valgbar(). */
:root[data-farge="pergament"]{       /* «Pergament» — dempet oliven, monokrom */
  --accent-bright:#C8BE8D;--accent-bright-deep:#B6AC78;--accent-bright-ink:#191707;--accent-bright-rgb:200,190,141;
  --accent-deep:#726940;--accent-deep-deep:#615830;--accent-deep-ink:#FFFFFF;--accent-deep-rgb:114,105,64;
}

/* —— PERGAMENT: aksenten som IKKE er en farge (designtesten 09.09, funn F4) ——
   Pergament er den ene MONOKROME paletten: EN kuloer baerer grunn, flate og
   aksent, og aksenten er en LYSHETSFORSKJELL. Da kan ikke det som MARKERER
   vaere en farge — det finnes ingen andre-farge aa markere med. De to grepene
   under er derfor palettens, ikke et uttrykks:

     1. `--aksent-stil` — markerte ord i overskrifter (.kp-merk) settes i
        KURSIV i stedet for i en fargeflate. NIVAAET er palettens, men
        KAPABILITETEN er fontparets: fire av ti par har en selvhostet EKTE
        kursiv og setter `--kursiv:italic`; de seks andre setter `normal`, og
        da faar markeringa oppreist skrift i stedet for nettleserens
        syntetiske skraastilling (som paa en antikva ser billig ut). Se
        `kursiv`-feltet i kp_akse_fontpar() — samme sannhet i PHP.
     2. Kickeren blir en INDEKSLINJE: lettere vekt, videre sperring, og en
        tynn regel i BLEKK i stedet for en kort signalstrek i aksentfargen.
        Referansen (trondheim.katolsk.no) bruker en nummerert katalog som
        navigasjon; vi kan ikke nummerere av oss selv, men vi kan gi kickeren
        samme rolige katalogstemme. En signalstrek ville dessuten vaert
        selvmotsigende her: signalet ER flaten.

   Grepene stod fram til 10.09 paa uttrykket «katedral». De flyttet
   HIT og ikke til fontparet fordi begge handler om hva som markerer naar
   fargen ikke kan — det er en palett-egenskap. Fontparet svarer bare paa om
   kursiven finnes i det hele tatt.

   PLASSERINGEN ER MED VILJE: blokka staar FOER uttrykks-lagene, og
   spesifisiteten er den samme (0,2,1). Et uttrykk som har tatt stilling selv
   — markants markeringsblokk og markants hero-kicker — vinner derfor paa
   rekkefoelge, og paletten lekker ikke inn i det. */
:root[data-farge="pergament"]{--aksent-stil:var(--kursiv,normal)}
html[data-farge="pergament"] .kp-kicker{font-weight:500;letter-spacing:.16em;color:var(--text-dim)}
html[data-farge="pergament"] .kp-kicker::before{width:44px;height:1px;background:var(--text-dim)}

/* —— Modus: MOERK (malens naturlige modus, default) —— */
:root,:root[data-mode="dark"]{
  --bg:#101014;--surface:#1A1B21;--surface-2:#22232B;
  --text:#F4F2EC;--text-dim:#A8A8B0;
  --text-rgb:244,242,236;--bg-rgb:16,16,20;--shadow-rgb:0,0,0;
  --line:rgba(244,242,236,.14);
  --line-strong:rgba(var(--accent-bright-rgb),.45);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
  /* Dekorfarge (flate-/detaljvask). Foelger signalet med mindre fri farge
     har fylt inn en egen dekorfarge (:root[data-farge="egen"], inline i head). */
  --tint-rgb:var(--accent-bright-rgb);
  /* Finish: moerk modus taaler dypere skygge */
  --kp-elev:0 2px 10px rgba(var(--shadow-rgb),.34);
  --kp-elev-hi:0 22px 50px rgba(var(--shadow-rgb),.55);
  --kp-btn-shadow:var(--kp-signal-glow);
}
/* —— Modus: LYS (varm base — kinematisk beholdt via moerke foto-oeyer) —— */
:root[data-mode="light"]{
  --bg:#F4F1EA;--surface:#FBF9F4;--surface-2:#E7E2D6;
  --text:#201E24;--text-dim:#56545C;
  --text-rgb:32,30,36;--bg-rgb:244,241,234;--shadow-rgb:60,50,40;
  --line:rgba(32,30,36,.16);
  --line-strong:rgba(var(--accent-deep-rgb),.45);
  --signal:var(--accent-deep);--signal-deep:var(--accent-deep-deep);
  --signal-ink:var(--accent-deep-ink);--signal-rgb:var(--accent-deep-rgb);
  --tint-rgb:var(--accent-deep-rgb);
  /* Finish: lys modus — subtil, varm skygge */
  --kp-elev:0 1px 4px rgba(var(--shadow-rgb),.10);
  --kp-elev-hi:0 18px 40px rgba(var(--shadow-rgb),.22);
  --kp-btn-shadow:var(--kp-signal-glow);
}
/* —— Modus: AUTOMATISK (brukertest 1.9) ——
   Kirken lar vaere aa velge: siden foelger besoekerens systeminnstilling, og
   besoekeren faar en bryter i toppen (.kp-mode-toggle). Aldri et tredje
   utseende — bare et VALG mellom de to over.

   INGEN HEX HER, MED VILJE. Blokka plukker de ferdig validerte tone-settene
   (--t-lys-* / --t-mork-*), noeyaktig som [data-tone]-laget nederst i fila.
   Det er derfor «auto» virker for markant og varm uten en eneste ekstra linje:
   de redefinerer tone-settene sine selv, og en framtidig fjerde uttrykk faar
   automatikken gratis. En kopi av flatetabellen her ville dessuten vaert usynlig
   for drift-vakta i tools/test-farge.php, som maaler mot de to blokkene over.

   MOERK ER BASEN (som ellers i malen): uten `prefers-color-scheme: light` staar
   auto i moerk modus. En nettleser uten stoette faar dermed malens naturlige
   modus, ikke et halvt tema.

   --kp-skygge settes ogsaa: markant sin harde offset-blokk bor i modus-lagene
   sine ([data-mode="light"|"dark"]), som «auto» per definisjon ikke treffer.
   For rolig/varm er den ubrukt (kun markant leser den), saa verdien er stille.

   De fire skyggeverdiene er den ENESTE dupliseringen, og de speiler de to
   blokkene rett over. De baerer ingen kontrastgaranti (skygge, ikke tekst), og
   --shadow-rgb flipper allerede riktig via tone-settet. */
:root[data-mode="auto"]{
  --bg:var(--t-mork-bg);--surface:var(--t-mork-surface);--surface-2:var(--t-mork-surface-2);
  --text:var(--t-mork-text);--text-dim:var(--t-mork-text-dim);
  --text-rgb:var(--t-mork-text-rgb);--bg-rgb:var(--t-mork-bg-rgb);--shadow-rgb:var(--t-mork-shadow-rgb);
  --line:var(--t-mork-line);--kp-skygge:var(--t-mork-skygge);
  --line-strong:rgba(var(--accent-bright-rgb),.45);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
  --tint-rgb:var(--accent-bright-rgb);
  --kp-elev:0 2px 10px rgba(var(--shadow-rgb),.34);
  --kp-elev-hi:0 22px 50px rgba(var(--shadow-rgb),.55);
  --kp-btn-shadow:var(--kp-signal-glow);
}
@media (prefers-color-scheme: light){
  :root[data-mode="auto"]{
    --bg:var(--t-lys-bg);--surface:var(--t-lys-surface);--surface-2:var(--t-lys-surface-2);
    --text:var(--t-lys-text);--text-dim:var(--t-lys-text-dim);
    --text-rgb:var(--t-lys-text-rgb);--bg-rgb:var(--t-lys-bg-rgb);--shadow-rgb:var(--t-lys-shadow-rgb);
    --line:var(--t-lys-line);--kp-skygge:var(--t-lys-skygge);
    --line-strong:rgba(var(--accent-deep-rgb),.45);
    --signal:var(--accent-deep);--signal-deep:var(--accent-deep-deep);
    --signal-ink:var(--accent-deep-ink);--signal-rgb:var(--accent-deep-rgb);
    --tint-rgb:var(--accent-deep-rgb);
    --kp-elev:0 1px 4px rgba(var(--shadow-rgb),.10);
    --kp-elev-hi:0 18px 40px rgba(var(--shadow-rgb),.22);
  }
}

/* —— AKSE 4: FORM (data-form) — radius-skala ——
   Uttrykk-lagene modulerer de samme tre trinnene med sin egen skala. */
:root[data-form="skarp"]{--radius-kort:2px;--radius-knapp:2px;--radius-bilde:2px;--radius-felt:0px}
:root[data-form="myk"]{--radius-kort:16px;--radius-knapp:10px;--radius-bilde:16px;--radius-felt:6px}
:root[data-form="rund"]{--radius-kort:24px;--radius-knapp:999px;--radius-bilde:24px;--radius-felt:16px}

/* —— AKSE 3: FONTPAR (data-fontpar) — 10 globale par ——
   Kategorinavn i UI («Grotesk», «Massiv», «Lun» …), aldri fontnavn.
   Alle ti er tilgjengelige uansett uttrykk (foer 10b var de laast per profil:
   Takt 1–3, Frimodig 1–3, Bygd 1–3). Fonter/vekter paavirker ikke kontrast.

   Hvert par setter ogsaa `--kursiv`: kapabiliteten «har jeg en selvhostet
   EKTE kursiv?». Fire har det (lun, roleg, naer, katedral); de seks andre
   familiene har ingen kursiv hos kilden. Se :root sitt --aksent-stil. */
:root[data-fontpar="grotesk"]{--font-display:'Bricolage Grotesque',system-ui,sans-serif;--font-body:'Figtree',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="sonisk"]{--font-display:'Sora',system-ui,sans-serif;--font-body:'Inter',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="kinetisk"]{--font-display:'Chivo',system-ui,sans-serif;--font-body:'Manrope',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="massiv"]{--font-display:'Archivo Black',system-ui,sans-serif;--font-body:'Archivo',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="plakat"]{--font-display:'Anton',system-ui,sans-serif;--font-body:'Inter',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="smal"]{--font-display:'Bebas Neue',system-ui,sans-serif;--font-body:'Barlow',system-ui,sans-serif;--kursiv:normal}
:root[data-fontpar="lun"]{--font-display:'Fraunces',Georgia,serif;--font-body:'Karla',system-ui,sans-serif;--kursiv:italic}
:root[data-fontpar="roleg"]{--font-display:'Newsreader',Georgia,serif;--font-body:'Mulish',system-ui,sans-serif;--kursiv:italic}
:root[data-fontpar="naer"]{--font-display:'Bitter',Georgia,serif;--font-body:'Source Sans 3',system-ui,sans-serif;--kursiv:italic}
/* Fontparet «katedral»: ETT familie-navn i begge rollene — paret ER en enkelt antikva. */
:root[data-fontpar="katedral"]{--font-display:'Source Serif 4',Georgia,serif;--font-body:'Source Serif 4',Georgia,serif;--kursiv:italic}

/* —— Hero = «moerk oey» i begge moduser (foto-scrim beholdes moerk, lys aksent) —— */
.kp-hero{
  --text:var(--media-ink);--text-dim:var(--media-ink-dim);
  --line:var(--media-line);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
}

/* ============================================================
   RESET + BASE
   ============================================================ */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
/* Bakgrunnen ligger paa <html> (rot-elementet) slik at hele lerretet — inkl.
   evt. horisontal overflyt — alltid dekkes i alle moduser/profiler. Body
   beholder samme token som fallback (unngaar «udekket felt» ved overflyt). */
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;background:var(--bg)}
body{
  font-family:var(--font-body);
  background:var(--bg);
  color:var(--text);
  font-size:17px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
img,svg,video{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
ul{list-style:none}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}

/* —— Skip-link (WCAG 2.4.1) —— */
.kp-skip-link{
  position:absolute;left:-9999px;top:0;z-index:200;
  background:var(--signal);color:var(--signal-ink);font-weight:700;
  font-family:var(--font-display);
  padding:12px 20px;border-radius:0 0 var(--radius-felt) 0;text-decoration:none;
}
.kp-skip-link:focus{left:0}

/* —— DEV-banner (blog_public=0) —— */
body.is-dev::before{
  content:'DEV — ikke offentlig';display:block;
  background:#FEF3C7;color:#78350F;text-align:center;
  font-size:.75rem;padding:.25rem;font-family:ui-monospace,monospace;letter-spacing:.5px;
}

/* ============================================================
   LAYOUT + TYPOGRAFI-BYGGEKLOSSER
   ============================================================ */
/* Lerretet leser tokenene i stedet for tall. Standardverdiene i :root er
   dagens (1200px/24px), så uttrykk som ikke setter dem er uendret.
   Sidemargen bytter først fra 900px og opp: mobilmargen er en lesbarhets-
   beslutning, ikke en del av uttrykket. --smal beholder sitt eget tak. */
.kp-wrap{max-width:var(--wrap-max);margin:0 auto;padding:0 var(--s-3)}
.kp-wrap--smal{max-width:720px}
@media (min-width:900px){.kp-wrap{padding:0 var(--wrap-pad)}}
.kp-main{min-height:50vh}
.kp-section{padding:var(--s-6) 0}

.kp-kicker{
  font-family:var(--font-display);
  font-size:.78rem;font-weight:700;
  letter-spacing:.22em;text-transform:uppercase;
  color:var(--signal);
  display:inline-flex;align-items:center;gap:14px;margin-bottom:var(--s-2);
}
.kp-kicker::before{content:"";width:28px;height:2px;background:var(--signal);flex:none}
.kp-h1,.kp-h2,.kp-h3{font-family:var(--font-display);font-weight:800;line-height:1.08;letter-spacing:-.015em;color:var(--text)}
/* Markoeren bak utvalgte overskriftsord. Flaten er markants (se uttrykk-laget);
   STILEN er tokenets, og `normal` gjoer regelen usynlig for de tre andre. */
/* `font-synthesis:weight` = skjaer FET om noedvendig, men ALDRI kursiv. Slaar
   --kursiv feil (feil par, fil som ikke lastet), faar vi da rett skrift i
   stedet for en skjev antikva — feilen blir kjedelig, ikke stygg.
   Egenskapen staar foer langformen fordi eldre motorer kun kjenner
   kortformen; nyere leser begge og lander paa det samme. */
.kp-merk{font-style:var(--aksent-stil,normal);font-synthesis:weight;font-synthesis-style:none}
.kp-h1{font-size:clamp(2.6rem,6vw,4.4rem);margin:0 0 var(--s-3)}
.kp-h2{font-size:clamp(2rem,4.5vw,3.2rem);margin:0 0 var(--s-2)}
.kp-h3{font-size:1.35rem;margin:0 0 var(--s-1);font-weight:700}
.kp-lede{color:var(--text-dim);max-width:54ch;font-size:1.12rem}
.kp-prose{max-width:62ch}
.kp-prose > * + *{margin-top:1rem}
.kp-prose h2{font-family:var(--font-display);font-size:1.6rem;font-weight:700;margin-top:1.6rem}
/* Lister i redaktørskrevet tekst. Reset-laget slår av kulene globalt (`ul{list-style:none}`
   — nav, kort og punktrader ER lister uten kuler), og `*{padding:0}` tar innrykket fra
   BÅDE ul og ol. Uten dette laget rendres punktlister som nakne linjer, og ol-tallene
   henger utenfor spalta. Gjenopprettes kun her, der innholdet er kirkens egen tekst
   (Fritekst-seksjonen, artikler, sider) — komponentlistene ligger aldri i .kp-prose. */
.kp-prose ul{list-style:disc;padding-inline-start:1.5em}
.kp-prose ol{list-style:decimal;padding-inline-start:1.8em}
.kp-prose ul ul{list-style:circle}
.kp-prose ul ul ul{list-style:square}
.kp-prose ol ol{list-style:lower-alpha}
.kp-prose ol ol ol{list-style:lower-roman}
.kp-prose li + li{margin-top:.35rem}
.kp-prose li > ul,.kp-prose li > ol{margin-top:.35rem}
.kp-meta{color:var(--text-dim);font-family:var(--font-display);display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-2)}

/* —— Knapper —— */
.kp-btn{
  display:inline-flex;align-items:center;gap:10px;
  font-family:var(--font-display);font-weight:700;font-size:1rem;
  padding:15px 28px;border-radius:var(--radius-knapp);
  text-decoration:none;cursor:pointer;border:0;
  transition:transform var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth),border-color var(--dur-fast) var(--ease-smooth),box-shadow var(--dur-fast) var(--ease-smooth);
}
.kp-btn:hover{transform:var(--kp-btn-lift)}
.kp-btn:active{transform:translateY(0);box-shadow:none;transition-duration:100ms}
.kp-btn--primary{background:var(--signal);color:var(--signal-ink)}
.kp-btn--primary:hover{background:var(--signal-deep);box-shadow:var(--kp-btn-shadow)}
.kp-btn--ghost{background:transparent;color:var(--text);border:1px solid var(--line)}
.kp-btn--ghost:hover{border-color:var(--signal);color:var(--signal)}

/* ============================================================
   HEADER
   ============================================================ */
.kp-header{
  position:sticky;top:0;z-index:100;
  background:linear-gradient(180deg,rgba(var(--bg-rgb),.94),rgba(var(--bg-rgb),.78));
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
}
/* Logoen skyver resten mot hoeyre med `margin-right:auto` i stedet for
   `justify-content:space-between`. Resultatet er identisk med de to elementene
   headeren hadde (logo + nav), men taaler at handlingsgruppa til hoeyre er tom
   (fast modus, ingen bryter) — space-between ville da sentrert navigasjonen. */
.kp-header__inner{display:flex;align-items:center;gap:10px;height:72px}
.kp-header__inner > .kp-logo{margin-right:auto}
.kp-header__handling{display:flex;align-items:center;gap:4px;flex:none}
.kp-logo{
  font-family:var(--font-display);font-weight:800;font-size:1.25rem;
  letter-spacing:.02em;display:flex;align-items:center;gap:10px;color:var(--text);
}
.kp-logo__mark{width:10px;height:10px;border-radius:50%;background:var(--signal);
  box-shadow:0 0 14px rgba(var(--signal-rgb),.7);flex:none}
.kp-nav__list{display:flex;align-items:center;gap:6px}
.kp-nav__list a{
  font-family:var(--font-display);font-size:.95rem;font-weight:500;
  color:var(--text-dim);padding:9px 14px;border-radius:var(--radius-felt);
  transition:color var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth);
}
.kp-nav__list a:hover{color:var(--text);background:rgba(var(--text-rgb),.06)}
.kp-nav-toggle{display:none;background:none;border:0;color:var(--text);cursor:pointer;padding:10px}
.kp-nav-toggle span{display:block;width:24px;height:2px;background:currentColor;margin:5px 0}

/* —— Lys/moerk-bryter (kun naar kirken har valgt «Automatisk») ——
   Diskret, men EKTE: <button> med tilgjengelig navn, 44x44 traeffflate og
   synlig fokusring. Ikonet byttes av CSS paa `data-mode`, aldri av JS — da er
   riktig ikon paa plass ved foerste paint, ogsaa foer site.js har kjoert. */
.kp-mode-toggle{
  display:grid;place-items:center;width:44px;height:44px;flex:none;
  border-radius:999px;background:transparent;border:1px solid transparent;
  color:var(--text-dim);cursor:pointer;
  transition:color var(--dur-fast) var(--ease-smooth),border-color var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth);
}
.kp-mode-toggle:hover{color:var(--text);border-color:var(--line);background:rgba(var(--text-rgb),.06)}
.kp-mode-toggle:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
/* Sola staar for «du staar i moerk modus — trykk for lys», maanen omvendt.
   Bare ett av dem er synlig om gangen; det andre er ute av bildet. */
.kp-mode-toggle__sol{display:inline-flex}
.kp-mode-toggle__mane{display:none}
:root[data-mode="light"] .kp-mode-toggle__sol{display:none}
:root[data-mode="light"] .kp-mode-toggle__mane{display:inline-flex}
@media (prefers-color-scheme: light){
  :root[data-mode="auto"] .kp-mode-toggle__sol{display:none}
  :root[data-mode="auto"] .kp-mode-toggle__mane{display:inline-flex}
}
@media (prefers-reduced-motion: reduce){
  .kp-mode-toggle{transition:none}
}
.kp-mobile-menu__list{display:grid;gap:4px;padding:var(--s-2) var(--s-3) var(--s-3);
  background:var(--bg);border-bottom:1px solid var(--line)}
/* Respekter hidden-attributtet (site.js toggler det) — ellers vinner display:grid
   over UA-ens [hidden]{display:none}, og menyen vises permanent (også på desktop). */
.kp-mobile-menu__list[hidden]{display:none}
.kp-mobile-menu__list a{font-family:var(--font-display);color:var(--text);padding:14px;display:block}

/* ============================================================
   FOOTER
   ============================================================ */
.kp-footer{border-top:1px solid var(--line);padding:var(--s-5) 0 var(--s-4);background:var(--bg)}
.kp-footer__inner{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center;justify-content:space-between}
.kp-footer__brand{font-family:var(--font-display);font-weight:800;font-size:1.1rem;color:var(--text)}
.kp-footer__meta{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center;
  font-size:.9rem;color:var(--text-dim);font-family:var(--font-display)}
.kp-footer__meta a{color:var(--text-dim)}
.kp-footer__meta a:hover{color:var(--signal)}

.kp-rik-tekst .kp-prose{margin-top:var(--s-2)}

/* —— Artikkel: innhold-blokker (panel v2) —— */
.kp-artikkel__bilde{border-radius:var(--radius-bilde);overflow:hidden}
.kp-artikkel__bilde img{width:100%;height:auto}
.kp-artikkel__bilde figcaption{color:var(--text-dim);font-size:.85rem;margin-top:var(--s-1)}
.kp-artikkel__sitat{
  border-left:3px solid var(--signal);padding-left:var(--s-3);
  font-family:var(--font-display);font-size:1.2rem;font-weight:600;color:var(--text);
}
.kp-artikkel__sitat-kilde{
  display:block;margin-top:var(--s-1);font-size:.85rem;font-weight:500;color:var(--text-dim);
}
.kp-artikkel__video{position:relative;aspect-ratio:16/9;border-radius:var(--radius-bilde);overflow:hidden;background:var(--surface-2)}
.kp-artikkel__video iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

/* —— Single: Arrangement (kalenderlenker) —— */
.kp-event-kalender{display:flex;gap:10px;flex-wrap:wrap;margin-top:var(--s-4)}

/* «Dette har vaert» — passert arrangement (utloepspolicy 2026-09-08 §2.5).
   Kickeren er signalfarget for noe som SKAL skje; det som HAR skjedd skal ikke rope.
   Derfor --text-dim, samme token som .kp-meta og .kp-lede allerede staar paa — ingen
   ny farge, og dermed ingen ny kontrastmaaling. Regelen MAA staa etter .kp-kicker:
   samme spesifisitet (0,1,0), saa det er rekkefoelgen som avgjoer.
   Merk at html[data-farge="pergament"] .kp-kicker (0,2,1) slaar begge — men setter
   ogsaa --text-dim, saa fortidsformen ser lik ut der. */
.kp-kicker--fortid{color:var(--text-dim)}
.kp-kicker--fortid::before{background:var(--text-dim)}
/* Den ene veien videre. Samme avstand som kalenderknappene den erstatter. */
.kp-event-videre{margin-top:var(--s-4)}

/* —— Single: Person (CPT kp_staff) —— */
.kp-person-side__topp{display:flex;gap:var(--s-3);align-items:center;margin-top:var(--s-2)}
.kp-person-side__foto{
  flex:none;width:168px;aspect-ratio:1/1.15;border-radius:var(--radius-bilde);
  overflow:hidden;background:var(--surface-2);box-shadow:var(--kp-elev);
}
.kp-person-side__foto img{width:100%;height:100%;object-fit:cover}
.kp-person-side__rolle{margin-top:var(--s-1);font-size:1rem}
.kp-person-side__bio{margin-top:var(--s-4)}
.kp-person-side__kontakt{margin-top:var(--s-4)}
.kp-person-side__kontaktliste{margin-top:var(--s-1);display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-3)}
.kp-person-side__tilbake{margin-top:var(--s-4)}
/* Kompakt utgave (ingen omtale): mindre portrett, kortere side. */
.kp-single--person-kompakt .kp-person-side__foto{width:112px}

/* ============================================================
   FC-SEKSJONER (Takt-forsidemoduler, portert fra profiler/puls.html)
   Alt token-drevet — ingen hardkodede farger.
   ============================================================ */
:root{--kp-header-h:72px}
html{scroll-padding-top:calc(var(--kp-header-h) + 14px)}

.kp-sect-head{max-width:640px;margin-bottom:var(--s-4)}
.kp-sect-head .kp-h2{margin-top:var(--s-1)}
.kp-tomtilstand{padding:var(--s-3) 0}
.kp-dim{color:var(--text-dim)}

/* —— 1. Hero — «moerk oey», bilde bak den gjennomsiktige headeren —— */
.kp-hero{
  position:relative;min-height:88vh;display:flex;align-items:flex-end;
  isolation:isolate;overflow:hidden;
  margin-top:calc(-1 * var(--kp-header-h));
  padding:calc(var(--kp-header-h) + var(--s-4)) 0 0;
  color:var(--text);
}
.kp-hero__media{position:absolute;inset:0;z-index:-2;overflow:hidden;background:var(--media-floor)}
.kp-hero__media img{width:100%;height:100%;object-fit:cover;opacity:.9}
.kp-hero::after{
  content:"";position:absolute;inset:0;z-index:-1;
  background:
    linear-gradient(180deg,rgba(var(--media-floor-rgb),.42) 0%,rgba(var(--media-floor-rgb),.18) 38%,rgba(var(--media-floor-rgb),.86) 78%,var(--media-floor) 100%),
    linear-gradient(90deg,rgba(var(--media-floor-rgb),.82) 0%,rgba(var(--media-floor-rgb),.35) 52%,rgba(var(--media-floor-rgb),.12) 100%);
}
/* min-width:0 fjerner flex-defaulten min-width:auto — uten den forsoerker
   .kp-hero (display:flex) aldri aa krympe dette eneste barnet sitt under
   min-content-bredden til det breiste ubrytelige innholdet i det (se
   .kp-hero__neste-tekst under). Uten denne linja MAALTE vi 375 -> 402 px
   side-scroll paa mobil naar «Neste:»-badgen ikke fikk plass — .kp-hero sin
   overflow:hidden klipper da symptomet USYNLIG (ingen scrollbar), men
   .kp-hero__content vokser likevel forbi viewporten under panseret, og drar
   HELE info-raden (ogsaa tider/adresse) inn i klippet. Rettes her, ved
   roten, ikke ved aa stole paa at innholdet alltid er smalt nok. */
.kp-hero__content{padding-bottom:var(--s-5);min-width:0}
.kp-hero__title{
  font-family:var(--font-display);font-weight:800;line-height:1.08;letter-spacing:-.015em;
  color:var(--text);
  /* Gruppering (katalog-feedback 31.8): kicker+tittel+ingress skal leses som EN
     gruppe — luften mellom dem var foer nesten lik luften ned til knappene
     (32/24 mot 40/40). Kickeren baerer allerede 16px margin-bottom, saa tittelen
     slipper margin-top, og ingressen faar s-2 i stedet for s-3. Skillet mellom
     gruppene gjoeres av CTA-ens s-4 og infofeltets s-5 + border. */
  font-size:clamp(2.8rem,7.5vw,5.4rem);max-width:14ch;margin:0 0 var(--s-2);
  text-shadow:0 1px 22px rgba(var(--media-floor-rgb),.45);
}
.kp-hero__lede{color:var(--text);text-shadow:0 1px 16px rgba(var(--media-floor-rgb),.5);max-width:46ch}
.kp-hero__cta{display:flex;gap:14px;flex-wrap:wrap;margin-top:var(--s-4)}
.kp-hero__info{display:flex;flex-wrap:wrap;gap:0;margin-top:var(--s-5);border-top:1px solid var(--line)}
.kp-hero__info>div,
.kp-hero__info>a{display:flex;align-items:center;gap:12px;padding:20px 28px 20px 0;margin-right:28px;
  font-family:var(--font-display);font-size:.95rem}
.kp-hero__info svg{color:var(--signal);flex:none}
.kp-hero__info strong{font-weight:500;color:var(--text)}

/* Neste arrangement — foerste ledd i tider-raden, ikke en egen seksjon. Tider
   svarer «naar pleier dere», dette «hva skjer naa»; de hoerer sammen paa samme
   linje. Arver rad-typografi og tokens fra reglene over, saa den foelger
   uttrykk/modus/farge uten egne verdier — det eneste som skiller den er
   lenke-affordansen (pil + understreking).

   «Neste: Soendag kl. 11:00» er ÉN udelelig enhet og brekker aldri; tittelen
   faller ned paa egen linje naar raden blir smal (mobil), med pila etter seg.
   Tittelen brekker som vanlig tekst — INGEN nowrap paa den; overflow-wrap
   under er kun et sikkerhetsnett for en enkelt uvanlig lang sammensatt
   ordtittel. min-width:0 her lar SELVE denne flex-raden krympe internt
   (samme grunn som .kp-hero__content over) — de to fixene loeser hvert sitt
   nivaa av samme flex-min-width:auto-fella. Verifisert paa 320-402 px i alle
   9 fontpar med lengste realistiske dato («Torsdag 24. september kl.
   11:00») — se PR-beskrivelsen for maalte marginer. */
.kp-hero__neste-tekst{display:flex;flex-wrap:wrap;align-items:center;column-gap:8px;row-gap:2px;min-width:0}
.kp-hero__neste-merk,
.kp-hero__neste-tittel{font-weight:400}
.kp-hero__neste-tittel{overflow-wrap:anywhere}
.kp-hero__neste-merk,
.kp-hero__neste strong{white-space:nowrap}
.kp-hero__neste-pil{display:inline-flex;transition:transform var(--dur-fast) var(--ease-out)}
.kp-hero__neste:hover .kp-hero__neste-tittel{text-decoration:underline;text-underline-offset:3px}
.kp-hero__neste:hover .kp-hero__neste-pil{transform:translateX(3px)}

/* Hero-entré (fase 9b) — rolig Ken Burns + trappet innhold. Kun med JS
   (html.js) slik at innhold ALLTID vises uten JS; av ved reduced-motion. */
html.js .kp-hero__media img{opacity:0;transform:scale(1.05);animation:kpHeroImg 1s var(--ease-out) .1s forwards}
@keyframes kpHeroImg{to{opacity:.9;transform:scale(1)}}
html.js .kp-hero__content>*{opacity:0;transform:translateY(16px);animation:kpHeroReveal .6s var(--ease-out) forwards}
html.js .kp-hero__content>*:nth-child(1){animation-delay:.10s}
html.js .kp-hero__content>*:nth-child(2){animation-delay:.20s}
html.js .kp-hero__content>*:nth-child(3){animation-delay:.30s}
html.js .kp-hero__content>*:nth-child(4){animation-delay:.40s}
html.js .kp-hero__content>*:nth-child(5){animation-delay:.50s}
@keyframes kpHeroReveal{to{opacity:1;transform:none}}

/* —— 4. Taler —— */
.kp-taler__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-3);flex-wrap:wrap;margin-bottom:var(--s-4)}
.kp-taler__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--grid-gap)}
.kp-tale-kort{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-kort);
  overflow:hidden;display:flex;flex-direction:column;color:var(--text);box-shadow:var(--kp-elev);
  transition:transform var(--dur-normal) var(--ease-out),border-color var(--dur-fast) var(--ease-smooth),box-shadow var(--dur-normal) var(--ease-out);
}
.kp-tale-kort:hover{transform:var(--kp-lift);border-color:var(--line-strong);box-shadow:var(--kp-elev-hi)}
.kp-tale-kort__thumb{position:relative;aspect-ratio:16/9;background:var(--surface-2);overflow:hidden}
.kp-tale-kort__thumb img{width:100%;height:100%;object-fit:cover;opacity:.85}
.kp-tale-kort__play{position:absolute;inset:0;display:grid;place-items:center}
.kp-tale-kort__play span{
  width:54px;height:54px;border-radius:50%;display:grid;place-items:center;
  background:rgba(var(--scrim-rgb),.66);backdrop-filter:blur(6px);
  border:1px solid rgba(var(--media-ink-rgb),.30);color:var(--media-ink);
  transition:background-color var(--dur-fast) var(--ease-smooth),transform var(--dur-fast) var(--ease-smooth);
}
.kp-tale-kort:hover .kp-tale-kort__play span{background:var(--signal);color:var(--signal-ink);transform:scale(1.06)}
.kp-tale-kort__body{padding:var(--s-3)}
.kp-tale-kort__serie{font-family:var(--font-display);font-size:.74rem;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--signal)}
.kp-tale-kort__body .kp-h3{margin:10px 0 8px}
.kp-tale-kort__meta{font-size:.9rem;color:var(--text-dim)}

.kp-podkast{
  margin-top:var(--s-4);display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;
  padding:var(--s-3);border:1px solid var(--line);border-radius:var(--radius-kort);background:var(--surface);box-shadow:var(--kp-elev);
}
.kp-podkast__tekst{display:flex;align-items:center;gap:16px;flex:1 1 240px;min-width:0}
.kp-podkast__ikon{width:48px;height:48px;flex:none;display:grid;place-items:center;
  border-radius:var(--radius-knapp);background:rgba(var(--tint-rgb),.14);color:var(--signal)}
.kp-podkast__tekst p{font-size:.9rem;color:var(--text-dim)}
.kp-podkast__lenker{display:flex;gap:10px;flex-wrap:wrap}
.kp-podkast__lenker .kp-btn{padding:12px 18px;font-size:.92rem}

/* —— 5. Kalender (liste-rader) —— */
.kp-kalender{background:var(--surface);border-block:1px solid var(--line)}
.kp-event-rad{
  display:grid;grid-template-columns:86px 1fr auto;gap:var(--s-3);align-items:center;
  padding:var(--s-3) 0;border-bottom:1px solid var(--line);color:var(--text);
  transition:background-color var(--dur-fast) var(--ease-smooth);
}
.kp-event-rad:hover{background:rgba(var(--text-rgb),.045)}
.kp-event-rad:hover .kp-event-rad__pil{transform:translateX(4px);color:var(--signal)}
.kp-dato-blokk{text-align:center;font-family:var(--font-display);
  border:1px solid var(--line);border-radius:var(--radius-knapp);padding:10px 6px;background:var(--bg)}
.kp-dato-blokk__dag{font-size:1.5rem;font-weight:800;line-height:1.1;display:block}
.kp-dato-blokk__mnd{font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--signal)}
.kp-event-rad__info .kp-h3{margin-bottom:4px}
.kp-event-rad__info p{font-size:.92rem;color:var(--text-dim)}
.kp-event-rad__beskr{margin-top:2px}
.kp-event-rad__pil{color:var(--text-dim);transition:transform var(--dur-fast) var(--ease-smooth),color var(--dur-fast) var(--ease-smooth)}
.kp-pameld-merke{display:inline-flex;align-items:center;gap:6px;margin-top:6px;
  font-family:var(--font-display);font-size:.72rem;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;color:var(--signal)}

/* —— 6. Fellesskap (kort) —— */
.kp-steg-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-2)}
.kp-steg{
  border:1px solid var(--line);border-radius:var(--radius-kort);
  padding:var(--s-4) var(--s-3);color:var(--text);box-shadow:var(--kp-elev);
  display:flex;flex-direction:column;gap:14px;min-height:190px;
  transition:transform var(--dur-normal) var(--ease-out),border-color var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth),box-shadow var(--dur-normal) var(--ease-out);
}
a.kp-steg:hover{transform:var(--kp-lift);border-color:var(--line-strong);background:var(--surface);box-shadow:var(--kp-elev-hi)}
.kp-steg__ikon{color:var(--signal)}
.kp-steg__tittel{margin-top:auto}
.kp-steg p{font-size:.9rem;color:var(--text-dim)}

.kp-fellesskap__alle{margin-top:var(--s-3)}
.kp-steg__nar{font-family:var(--font-display);font-size:.78rem;font-weight:500;
  letter-spacing:.06em;color:var(--signal)}

/* —— Moetepunkter (kp_tilbud): oversikt + bli med ——
   Ingen nye farger: alt er tokens fra lag over, saa seksjonene foelger uttrykk,
   palett og modus som resten. Kortet gjenbruker IKKE .kp-steg — et moetepunkt
   baerer bilde, merker, tid, tekst og kontakt, og .kp-steg er bygget som en
   flex-kolonne med tittelen dyttet til bunnen (margin-top:auto), som blir feil
   med fem ledd. */
.kp-tilbud__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--grid-gap)}
.kp-tilbud-kort{
  display:flex;flex-direction:column;overflow:hidden;
  border:1px solid var(--line);border-radius:var(--radius-kort);
  background:var(--surface);box-shadow:var(--kp-elev);
}
.kp-tilbud-kort__foto{aspect-ratio:16/10;background:var(--surface-2)}
.kp-tilbud-kort__foto img{width:100%;height:100%;object-fit:cover;display:block}
.kp-tilbud-kort__tekst{display:flex;flex-direction:column;gap:10px;padding:var(--s-3)}
.kp-tilbud-kort__tittel{margin:0}
.kp-tilbud-kort__merker{display:flex;flex-wrap:wrap;gap:6px;margin:0}
.kp-tilbud-kort__nar{display:flex;align-items:center;gap:8px;margin:0;
  font-size:.88rem;color:var(--text-dim)}
.kp-tilbud-kort__nar svg{flex:0 0 auto;color:var(--signal)}
.kp-tilbud-kort__beskr{margin:0;font-size:.92rem;color:var(--text-dim)}
.kp-tilbud-kort__kontakt{margin:auto 0 0;padding-top:6px;font-size:.88rem}
/* Et kort paa pause er DEMPET, ikke skjult: den som leter etter soendagsskolen
   i juli skal se at den finnes og naar den starter igjen. Dempingen er en
   hairline-kant og en litt roligere flate — ALDRI redusert tekstkontrast, som
   ville tatt seksjonen under AA. */
.kp-tilbud-kort--pause{background:var(--bg);border-style:dashed}
.kp-merke{
  display:inline-flex;align-items:center;
  font-family:var(--font-display);font-size:.74rem;font-weight:500;
  letter-spacing:.06em;color:var(--text);
  border:1px solid var(--line);border-radius:999px;padding:4px 12px;
}
.kp-merke--pause{color:var(--signal);border-color:var(--signal)}

.kp-tilbud__tom{
  border:1px solid var(--line);border-radius:var(--radius-kort);
  background:var(--surface);padding:var(--s-4);max-width:640px;
}
.kp-tilbud__tom p{color:var(--text-dim);margin-top:10px}
.kp-tilbud__tom-tider{display:flex;align-items:center;gap:10px;margin-top:var(--s-3);color:var(--text)}
.kp-tilbud__tom-tider svg{flex:0 0 auto;color:var(--signal)}
.kp-tilbud__tom-kontakt{display:flex;flex-wrap:wrap;gap:10px;margin-top:var(--s-3)}

/* —— Maalgruppefilteret (v1.1, §4 grep 6) ——
   Chipsene er LENKER, ikke knapper: tilstanden bor i ?for=, saa den globale
   fokusringen (:focus-visible) gjelder allerede og trenger ingen egen regel.
   Ingen ny farge — --signal er den samme aksenten resten av seksjonen bruker.
   Den aktive chipen skiller seg paa BAADE ramme, vekt og flate, ikke paa farge
   alene (WCAG 1.4.1); aria-current baerer betydningen for skjermlesere. */
.kp-tilbud-filter{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 var(--s-4);padding:0}
.kp-tilbud-filter__chip{
  display:inline-flex;align-items:center;min-height:38px;
  font-family:var(--font-display);font-size:.8rem;font-weight:500;letter-spacing:.04em;
  color:var(--text-dim);background:var(--surface);
  border:1px solid var(--line);border-radius:999px;padding:6px 16px;
}
.kp-tilbud-filter__chip:hover{color:var(--text);border-color:var(--text)}
.kp-tilbud-filter__chip[aria-current="page"]{
  color:var(--text);font-weight:600;
  background:var(--surface-2);border-color:var(--signal);
}

/* Kortets «Les mer» — finnes bare paa kort med utdypning (v1.1, §5a).
   --mer arver ikke kontaktlinjas margin:auto: staar begge to, ville to auto-
   marginer delt den ledige plassen mellom seg og lagt luft OVER kontakten. Den
   scopede soesken-regelen setter den ene av dem fast; den er scopet og ikke bar,
   nettopp fordi en bar redefinisjon flytter klassen overalt. */
.kp-tilbud-kort__mer{margin:auto 0 0;padding-top:6px;font-size:.88rem;font-weight:500}
.kp-tilbud-kort__mer a{display:inline-flex;align-items:center;gap:6px;color:var(--signal)}
.kp-tilbud-kort__mer a:hover{text-decoration:underline}
.kp-tilbud-kort__mer svg{flex:0 0 auto}
.kp-tilbud-kort__kontakt + .kp-tilbud-kort__mer{margin-top:4px}

/* Filtrert null-treff. EGEN form, ikke .kp-tilbud__tom: den boksen sier «vi har
   ikke lagt inn moetepunktene vaare ennaa», og det er usant paa en side med tolv
   kort der leseren nettopp har valgt «Senior». */
.kp-tilbud__ingen{
  border:1px solid var(--line);border-radius:var(--radius-kort);
  background:var(--surface);padding:var(--s-4);max-width:640px;
}
.kp-tilbud__ingen p{margin:0;color:var(--text-dim)}
.kp-tilbud__ingen p + p{margin-top:var(--s-3)}

/* —— Enkeltsiden for et moetepunkt (v1.1, opt-in) ——
   Skallet er single-kp_event.php sitt (.kp-single, .kp-meta, .kp-prose, .kp-btn),
   og laanes slik det er. Bare de fire leddene siden har som arrangementet ikke
   har, faar egne navn. */
.kp-tilbud-single__merker{display:flex;flex-wrap:wrap;gap:6px;margin:var(--s-2) 0 0}
.kp-tilbud-single__kontakt{margin-top:var(--s-3);font-size:.95rem}
.kp-tilbud-single__kontakt a{color:var(--signal)}
.kp-tilbud-single__kontakt a:hover{text-decoration:underline}
.kp-tilbud-single__handling{margin-top:var(--s-4)}
.kp-tilbud-single__tilbake{margin-top:var(--s-4);font-size:.9rem}
.kp-tilbud-single__tilbake a{display:inline-flex;align-items:center;gap:8px;color:var(--text-dim)}
.kp-tilbud-single__tilbake a:hover{color:var(--text)}
.kp-tilbud-single__tilbake svg{flex:0 0 auto}

.kp-blimed__liste{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--grid-gap);
  list-style:none;margin:0;padding:0}
.kp-blimed__kort{
  display:flex;flex-direction:column;gap:10px;
  border:1px solid var(--line);border-radius:var(--radius-kort);
  background:var(--surface);padding:var(--s-3);
}
/* Kortet man kom hit FRA (?tjeneste=<id>) markeres, saa det er tydelig hvilken
   tjeneste skjemaet under allerede har valgt. */
.kp-blimed__kort--valgt{border-color:var(--signal);box-shadow:var(--kp-elev-hi)}
.kp-blimed__tittel{margin:0}
.kp-blimed__hva{margin:0;font-size:.92rem;color:var(--text-dim)}
.kp-blimed__forplikt{display:flex;align-items:center;gap:8px;margin:0;
  font-size:.85rem;color:var(--text)}
.kp-blimed__forplikt svg{flex:0 0 auto;color:var(--signal)}
.kp-blimed__knapp{margin-top:auto;align-self:flex-start}
.kp-blimed__skjema{margin-top:var(--s-4);max-width:640px}
.kp-blimed__tom{max-width:640px}
.kp-blimed__tom p{color:var(--text-dim)}

/* —— 13. «Det vi tror paa»-inngang (statement) —— */
.kp-tro__inner{max-width:900px}
.kp-tro__utsagn{
  font-family:var(--font-display);font-weight:500;
  font-size:clamp(1.5rem,3.4vw,2.5rem);line-height:1.3;letter-spacing:-.01em;
  max-width:24ch;margin-top:var(--s-1);color:var(--text);
}
.kp-tro__tekst{margin-top:var(--s-3)}
.kp-tro__punkter{display:flex;flex-wrap:wrap;gap:10px;margin-top:var(--s-4)}
.kp-tro__punkter li{
  font-family:var(--font-display);font-size:.9rem;font-weight:500;color:var(--text);
  border:1px solid var(--line);border-radius:999px;padding:8px 16px;
}
.kp-tro__lenke{margin-top:var(--s-4)}

/* —— 8. Gi —— */
.kp-gi__band{
  display:grid;grid-template-columns:1.2fr .8fr;gap:var(--s-4);align-items:center;
  background:linear-gradient(120deg,var(--surface) 0%,var(--surface-2) 100%);
  border:1px solid var(--line);border-radius:var(--radius-kort);padding:var(--s-4);
  box-shadow:var(--kp-elev);
}
.kp-gi__band .kp-h2{margin:10px 0 8px;font-size:clamp(1.6rem,3vw,2.2rem)}
.kp-gi__band .kp-lede{font-size:1rem}
.kp-gi__skatt{display:flex;gap:14px;align-items:flex-start;margin-top:var(--s-3);
  padding:var(--s-3);border:1px solid var(--line);border-radius:var(--radius-felt);background:rgba(var(--tint-rgb),.06)}
.kp-gi__skatt-ikon{flex:none;color:var(--signal)}
.kp-gi__skatt .kp-h3{font-size:1.05rem}
.kp-gi__skatt p{font-size:.92rem;color:var(--text-dim);margin-top:4px}
.kp-gi__skatt-lenke{margin-top:8px}
.kp-gi__skatt-lenke a{font-size:.92rem;color:var(--signal)}
.kp-gi__handling{display:flex;flex-direction:column;align-items:flex-start;gap:12px;justify-self:end}
/* Giverlenker (0.11.0): 1–4 knapper, den forste primaer. Stables, ikke i rad — knappetekstene
   er hele setninger («Gi til soendagens kollekt») og ville brukket stygt side ved side.
   align-items:stretch gjoer knappene like brede, saa raden leser som ett valg med flere svar. */
.kp-gi__lenker{display:flex;flex-direction:column;align-items:stretch;gap:10px;width:100%}
.kp-gi__lenke{display:flex;flex-direction:column;gap:3px}
.kp-gi__lenke .kp-btn{width:100%;text-align:center}
.kp-gi__lenke-om{font-size:.84rem;color:var(--text-dim);line-height:1.4}
.kp-gi__qr{background:#fff;padding:10px;border-radius:var(--radius-felt);width:150px}
.kp-gi__qr img{width:100%;height:auto}
.kp-gi__qr figcaption{font-family:var(--font-display);font-size:.72rem;color:#333;text-align:center;margin-top:6px}
.kp-gi__nr{font-family:var(--font-display);font-size:.92rem;color:var(--text-dim)}
.kp-gi__nr strong{color:var(--text);letter-spacing:.04em}

/* —— 12. Kontakt / kart —— */
.kp-kontakt{background:var(--surface);border-block:1px solid var(--line)}
.kp-kontakt__grid{display:grid;grid-template-columns:1.05fr .95fr;gap:var(--s-5);align-items:center}
.kp-kart{position:relative;aspect-ratio:16/11;overflow:hidden;
  border:1px solid var(--line);border-radius:var(--radius-bilde);background:var(--bg)}
.kp-kart__svg{width:100%;height:100%;display:block}
.kp-kart__blokk{fill:var(--surface-2)}
.kp-kart__vann{fill:rgba(var(--tint-rgb),.12)}
.kp-kart__vei{fill:none;stroke:var(--line);stroke-width:6;stroke-linecap:round}
.kp-kart__vei-fin{fill:none;stroke:var(--line);stroke-width:3}
.kp-kart__pin-ring{fill:rgba(var(--tint-rgb),.20)}
.kp-kart__pin{fill:var(--signal)}
.kp-kart__pin-kjerne{fill:var(--signal-ink)}
.kp-kart__lenke{
  position:absolute;left:14px;bottom:14px;display:inline-flex;align-items:center;gap:8px;min-height:44px;
  padding:10px 16px;border-radius:var(--radius-knapp);
  background:rgba(var(--bg-rgb),.86);backdrop-filter:blur(6px);
  border:1px solid var(--line);color:var(--text);
  font-family:var(--font-display);font-weight:500;font-size:.9rem;
  transition:border-color var(--dur-fast) var(--ease-smooth),color var(--dur-fast) var(--ease-smooth);
}
.kp-kart__lenke:hover{border-color:var(--signal);color:var(--signal)}
.kp-kart__lenke svg{color:var(--signal)}
.kp-kontakt__info .kp-h2{margin-top:var(--s-1)}
.kp-kontakt__adresse{font-family:var(--font-display);font-size:1.05rem;font-style:normal;line-height:1.5;margin-bottom:var(--s-2)}
.kp-praktisk{display:grid;gap:16px;margin-top:var(--s-3)}
.kp-praktisk li{display:flex;gap:14px;align-items:flex-start;color:var(--text-dim);font-size:.96rem}
.kp-praktisk li strong{color:var(--text);font-weight:500}
.kp-praktisk svg{color:var(--signal);flex:none;margin-top:3px}

/* —— Moerk oey: delt token-kontrakt (banner + nyhetsbrev), som .kp-hero —— */
.kp-livestream,.kp-nyhetsbrev{
  --text:var(--media-ink);--text-dim:var(--media-ink-dim);
  --line:var(--media-line);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
}

/* —— 2. Velkomst (statement + fotobaand) —— */
.kp-velkomst__utsagn{
  font-family:var(--font-display);font-weight:500;
  font-size:clamp(1.5rem,3.4vw,2.5rem);line-height:1.3;letter-spacing:-.01em;
  max-width:24ch;color:var(--text);
}
.kp-velkomst__lede{margin-top:var(--s-3)}
/* Desktop-default er bildet VED SIDEN AV utsagnet (katalog-feedback 31.8) —
   fotobaandet under lot tekstsiden staa tom. Paa mobil stables det som foer
   (980-regelen setter 16/9). Klassen settes server-side kun naar bildet finnes,
   saa en bildeloes velkomst beholder én full spalte. */
@media (min-width:981px){
  .kp-velkomst__grid--med-foto{display:grid;grid-template-columns:minmax(0,.55fr) minmax(0,.45fr);gap:var(--s-5);align-items:center}
  .kp-velkomst__grid--med-foto .kp-velkomst__foto{margin-top:0;aspect-ratio:4/3}
}
.kp-velkomst__foto{
  position:relative;margin-top:var(--s-5);
  border-radius:var(--radius-bilde);overflow:hidden;
  aspect-ratio:21/8;background:var(--surface-2);box-shadow:var(--kp-elev);
}
.kp-velkomst__foto img{width:100%;height:100%;object-fit:cover;transition:transform 1s var(--ease-smooth)}
.kp-velkomst__foto:hover img{transform:scale(1.03)}
.kp-velkomst__foto figcaption{
  position:absolute;left:0;right:0;bottom:0;
  padding:var(--s-4) var(--s-3) var(--s-2);
  background:linear-gradient(0deg,rgba(var(--scrim-rgb),.78),transparent);
  color:var(--media-ink);font-family:var(--font-display);font-size:.92rem;
}

/* —— 3. Ny her? (asymmetrisk split) —— */
.kp-nyher{background:var(--surface);border-block:1px solid var(--line)}
.kp-nyher__grid{display:grid;grid-template-columns:.55fr .45fr;gap:var(--s-5);align-items:center}
.kp-nyher__foto{
  position:relative;border-radius:var(--radius-bilde);overflow:hidden;
  aspect-ratio:4/4.6;background:var(--surface-2);box-shadow:var(--kp-elev);
}
.kp-nyher__foto img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease-smooth)}
.kp-nyher__foto:hover img{transform:scale(1.03)}
.kp-nyher__foto figcaption{
  position:absolute;left:16px;bottom:16px;
  background:rgba(var(--scrim-rgb),.82);backdrop-filter:blur(8px);
  font-family:var(--font-display);font-size:.82rem;color:var(--media-ink);
  padding:9px 14px;border-radius:var(--radius-felt);
}
.kp-sjekkliste{margin:var(--s-3) 0 var(--s-4);display:grid;gap:14px}
.kp-sjekkliste li{display:flex;gap:14px;align-items:flex-start;color:var(--text-dim)}
.kp-sjekkliste li strong{color:var(--text);font-weight:500}
.kp-sjekkliste__ikon{color:var(--signal);flex:none;margin-top:4px;display:inline-flex}

/* —— 7. Stab (CPT kp_staff + fotoloes fallback) —— */
.kp-stab__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--grid-gap)}
.kp-person__foto{
  aspect-ratio:1/1.15;border-radius:var(--radius-bilde);overflow:hidden;
  background:var(--surface-2);margin-bottom:var(--s-2);position:relative;box-shadow:var(--kp-elev);
}
.kp-person__foto img{width:100%;height:100%;object-fit:cover;filter:grayscale(18%);
  transition:filter var(--dur-normal) var(--ease-smooth),transform .5s var(--ease-smooth)}
.kp-person:hover .kp-person__foto img{filter:grayscale(0);transform:scale(1.03)}
.kp-person__foto--tom{display:grid;place-items:center;
  background:linear-gradient(135deg,var(--surface) 0%,var(--surface-2) 100%)}
.kp-person__init{font-family:var(--font-display);font-weight:800;font-size:2.6rem;color:var(--signal);opacity:.85}
.kp-person__navn{font-size:1.05rem}
.kp-person__rolle{font-size:.88rem;color:var(--text-dim)}
/* Lenket kort: ::after strekker navne-lenka over hele kortet, saa treffflata er
   et helt kort mens lenkenavnet forblir bare navnet (ingen noestede lenker). */
.kp-person--lenket{position:relative}
.kp-person__lenke{color:inherit;text-decoration:none}
.kp-person__lenke::after{content:"";position:absolute;inset:0;border-radius:var(--radius-kort)}
.kp-person__lenke:hover{color:var(--signal)}
.kp-person__lenke:focus-visible{outline:none}
.kp-person__lenke:focus-visible::after{outline:2px solid var(--signal);outline-offset:3px}

/* —— 11. Nyhetsbrev (moerk oey m/ fotobaand) —— */
.kp-nyhetsbrev{position:relative;isolation:isolate;overflow:hidden;background:var(--media-floor);color:var(--text)}
.kp-nyhetsbrev__media{position:absolute;inset:0;z-index:-2}
.kp-nyhetsbrev__media img{width:100%;height:100%;object-fit:cover;opacity:.42}
.kp-nyhetsbrev::after{
  content:"";position:absolute;inset:0;z-index:-1;
  background:
    linear-gradient(90deg,rgba(var(--media-floor-rgb),.94) 0%,rgba(var(--media-floor-rgb),.62) 60%,rgba(var(--media-floor-rgb),.40) 100%),
    linear-gradient(0deg,rgba(var(--media-floor-rgb),.55),rgba(var(--media-floor-rgb),.30));
}
.kp-nyhetsbrev__inn{max-width:600px}
.kp-nyhetsbrev__inn .kp-h2{margin:var(--s-2) 0}
.kp-nyhetsbrev__inn .kp-lede{color:var(--text)}
.kp-nb-skjema{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-top:var(--s-3)}
.kp-nb-skjema__felt{flex:1 1 260px;min-width:0}
.kp-nb-skjema__felt label{display:block;font-family:var(--font-display);font-size:.82rem;font-weight:500;margin-bottom:8px;color:var(--text)}
.kp-nb-skjema__felt input{
  width:100%;min-height:52px;padding:14px 16px;
  /* Kvalitetsgate 22.7: media-line(.20) ga 1.55:1 mot feltflaten — under 3:1-kravet (1.4.11). */
  border:1px solid rgba(var(--media-ink-rgb),.45);border-radius:var(--radius-felt);
  background:rgba(var(--media-ink-rgb),.06);color:var(--text);
  font-family:var(--font-body);font-size:1rem;
  transition:border-color var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth);
}
.kp-nb-skjema__felt input::placeholder{color:var(--text-dim)}
.kp-nb-skjema__felt input:focus-visible{outline:2px solid var(--signal);outline-offset:2px;border-color:var(--signal)}
.kp-nb-skjema__felt input:disabled{opacity:.55;cursor:not-allowed}
.kp-nb-skjema .kp-btn{min-height:52px}
.kp-nb-skjema .kp-btn:disabled{opacity:.55;cursor:not-allowed;transform:none}
.kp-nb-personvern{margin-top:14px;font-size:.82rem;color:var(--text-dim)}
.kp-nb-personvern a{color:var(--text);text-underline-offset:3px;text-decoration:underline}

/* —— 10. Livestream-banner (tynn, moerk, avvisbar, fixed oeverst) —— */
:root{--kp-ls-h:48px}
body.kp-has-livestream{padding-top:var(--kp-ls-h)}
body.kp-has-livestream .kp-header{top:var(--kp-ls-h)}
.kp-livestream{
  position:fixed;inset:0 0 auto 0;z-index:115;min-height:var(--kp-ls-h);
  background:var(--media-floor);color:var(--text);border-bottom:1px solid var(--line);
}
.kp-livestream__inn{display:flex;align-items:center;gap:13px;min-height:var(--kp-ls-h);
  font-family:var(--font-display);font-size:.9rem}
.kp-livestream__puls{position:relative;width:9px;height:9px;flex:none}
.kp-livestream__puls b{position:absolute;inset:0;border-radius:50%;background:var(--signal)}
.kp-livestream__puls b::before{content:"";position:absolute;inset:0;border-radius:50%;
  background:var(--signal);opacity:.5;animation:kpLivePuls 2.4s var(--ease-out) infinite}
@keyframes kpLivePuls{0%{transform:scale(1);opacity:.5}70%,100%{transform:scale(3.4);opacity:0}}
.kp-livestream__tekst{color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kp-livestream__tekst strong{font-weight:700}
.kp-livestream__lenke{color:var(--signal);font-weight:500;flex:none;display:inline-flex;align-items:center;gap:6px}
.kp-livestream__lenke:hover{text-decoration:underline}
.kp-livestream__lukk{
  margin-left:auto;flex:none;display:grid;place-items:center;width:36px;height:36px;
  border-radius:999px;background:transparent;border:1px solid var(--line);color:var(--text);cursor:pointer;
  transition:border-color var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth);
}
.kp-livestream__lukk:hover{border-color:var(--signal);background:rgba(var(--media-ink-rgb),.08)}

/* —— 14. FAQ (utfellbare spoersmaal) ——
   Ingen uttrykksspesifikke regler: hele seksjonen er bygget av
   --surface/--line/--radius-kort/--kp-elev, saa den arver rolig/markant/varm
   og lys/moerk uten en eneste ekstra selektor. Chevronen er tegnet i CSS
   (to border-kanter rotert 45°) — den skal snu naar <details> aapnes, og et
   SVG fra ikonregisteret ville trengt JS eller en andre kopi for aa gjoere det.
   ——————————————————————————————————————————————————————————————————————— */
.kp-faq__inner{max-width:760px}
.kp-faq__liste{display:grid;gap:10px;margin-top:var(--s-4);list-style:none;padding:0}
.kp-faq__post{
  border:1px solid var(--line);border-radius:var(--radius-kort);
  background:var(--surface);box-shadow:var(--kp-elev);
  transition:border-color var(--dur-fast) var(--ease-smooth),box-shadow var(--dur-normal) var(--ease-out);
}
.kp-faq__post[open]{border-color:var(--line-strong);box-shadow:var(--kp-elev-hi)}
.kp-faq__sp{
  display:flex;align-items:center;gap:var(--s-2);
  /* 44 px trykkflate (WCAG 2.5.8) — paddingen alene gir 52 px paa mobil. */
  min-height:44px;padding:16px var(--s-3);cursor:pointer;
  font-family:var(--font-display);font-weight:500;font-size:1.05rem;
  line-height:1.4;color:var(--text);list-style:none;
}
/* Safari/WebKit tegner sin egen trekant utenom ::marker. Begge maa vekk, ellers
   staar systemtrekanten ved siden av chevronen vaar. */
.kp-faq__sp::-webkit-details-marker{display:none}
.kp-faq__sp::marker{content:""}
.kp-faq__sp:hover{color:var(--signal)}
/* Fokusringen er den globale (:focus-visible, 2 px --signal + 3 px offset).
   Kortet klipper derfor ALDRI innholdet sitt — en overflow:hidden her ville
   spist ringen paa det aapne spoersmaalet. */
.kp-faq__sp-tekst{flex:1 1 auto;min-width:0}
.kp-faq__chevron{
  flex:none;width:10px;height:10px;margin-right:2px;
  border-right:2px solid var(--signal);border-bottom:2px solid var(--signal);
  transform:translateY(-2px) rotate(45deg);transform-origin:center;
  transition:transform var(--dur-normal) var(--ease-out);
}
.kp-faq__post[open] .kp-faq__chevron{transform:translateY(2px) rotate(225deg)}
.kp-faq__svar{padding:0 var(--s-3) var(--s-3);color:var(--text-dim);max-width:none}
.kp-faq__svar>*+*{margin-top:.75rem}
.kp-faq__svar a{color:var(--signal);text-underline-offset:3px;text-decoration:underline}
@media (max-width:720px){
  .kp-faq__sp{font-size:1rem;padding:14px var(--s-2)}
  .kp-faq__svar{padding:0 var(--s-2) var(--s-2)}
}
/* Reduced motion: den globale blokka nullstiller transition-duration, saa
   chevronen SNUR fortsatt — den bare hopper i stedet for aa rotere. Ingen egen
   regel trengs; sluttilstanden er identisk. */

/* ============================================================
   FOOTER-GRID (Kirkeinfo-drevet)
   ============================================================ */
.kp-footer__grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:var(--s-4)}
.kp-footer__brand{display:flex;align-items:center;gap:10px}
.kp-footer__kontakt{margin-top:14px;color:rgba(var(--text-rgb),.8);font-size:.95rem}
.kp-footer__kontakt a{color:rgba(var(--text-rgb),.86)}
.kp-footer__kontakt a:hover{color:var(--signal)}
.kp-footer__tittel{font-family:var(--font-display);font-size:.8rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--text-dim);margin-bottom:var(--s-2);font-weight:500}
.kp-footer__col p{color:rgba(var(--text-rgb),.8);font-size:.95rem}
.kp-footer__lenker{display:grid;gap:10px}
.kp-footer__lenker a{color:rgba(var(--text-rgb),.86);font-size:.95rem;transition:color var(--dur-fast) var(--ease-smooth)}
.kp-footer__lenker a:hover{color:var(--signal)}
.kp-footer__bunn{margin-top:var(--s-5);padding-top:var(--s-3);border-top:1px solid var(--line);
  display:flex;justify-content:space-between;gap:var(--s-2);flex-wrap:wrap;font-size:.85rem;color:var(--text-dim)}
.kp-footer__bunn a{color:var(--text-dim)}
.kp-footer__bunn a:hover{color:var(--signal)}

/* ============================================================
   LAUNCHER — global «Neste steg»-widget (Nucleus-moensteret)
   ============================================================ */
.kp-launcher{position:fixed;right:22px;bottom:22px;z-index:120;display:flex;flex-direction:column;align-items:flex-end;gap:12px}
.kp-launcher__panel{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-kort);
  box-shadow:0 18px 48px rgba(var(--shadow-rgb),.45);width:264px;overflow:hidden;
  opacity:0;transform:translateY(8px) scale(.97);pointer-events:none;
  transition:opacity var(--dur-normal) var(--ease-out),transform var(--dur-normal) var(--ease-out);
}
.kp-launcher.is-open .kp-launcher__panel{opacity:1;transform:none;pointer-events:auto}
.kp-launcher__tittel{font-family:var(--font-display);font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--text-dim);font-weight:500;padding:18px 20px 8px}
.kp-launcher__panel a{display:flex;align-items:center;gap:12px;padding:13px 20px;
  font-family:var(--font-display);font-size:.97rem;color:var(--text);
  opacity:0;transform:translateY(6px);
  transition:background-color var(--dur-fast) var(--ease-smooth),
             opacity var(--dur-normal) var(--ease-out),
             transform var(--dur-normal) var(--ease-out)}
.kp-launcher__panel a:hover{background:rgba(var(--text-rgb),.06)}
/* Forskjoevet inngang, 40 ms per rad. Hentet fra 60fps-shotet
   «netflix-rate-interaction» (stagger: subtle -> 0.04 s) — samme moenster som
   launcheren: popover m/ ikonrader forankret i en knapp. Tettere enn
   .kp-reveal-group sine 60 ms fordi dette er en liten meny, ikke sideseksjoner.
   Selve panelet beholder 250 ms ease-out: reisen er 8 px, og et fjaer-oversving
   paa den avstanden er 0,3 px — maalt usynlig. Se
   nettsmed-shared/design/mcp-evaluering-2026-08.md §2.
   Forsinkelsen ligger paa .is-open slik at lukking er momentan. */
.kp-launcher.is-open .kp-launcher__panel a{opacity:1;transform:none}
.kp-launcher.is-open .kp-launcher__panel a:nth-of-type(2){transition-delay:0ms,40ms,40ms}
.kp-launcher.is-open .kp-launcher__panel a:nth-of-type(3){transition-delay:0ms,80ms,80ms}
.kp-launcher.is-open .kp-launcher__panel a:nth-of-type(4){transition-delay:0ms,120ms,120ms}
.kp-launcher.is-open .kp-launcher__panel a:nth-of-type(5){transition-delay:0ms,160ms,160ms}
.kp-launcher.is-open .kp-launcher__panel a:nth-of-type(6){transition-delay:0ms,200ms,200ms}
.kp-launcher__panel a svg{color:var(--signal);flex:none}
.kp-launcher__panel a:last-child{padding-bottom:18px}
.kp-launcher__knapp{
  display:inline-flex;align-items:center;gap:10px;
  background:var(--signal);color:var(--signal-ink);border:0;cursor:pointer;
  font-family:var(--font-display);font-weight:700;font-size:.97rem;
  padding:15px 22px;border-radius:999px;box-shadow:0 10px 30px rgba(var(--signal-rgb),.35);
  transition:transform var(--dur-fast) var(--ease-smooth),background-color var(--dur-fast) var(--ease-smooth);
}
.kp-launcher__knapp:hover{transform:translateY(-1px);background:var(--signal-deep)}
.kp-launcher__knapp svg{transition:transform var(--dur-normal) var(--ease-smooth)}
.kp-launcher.is-open .kp-launcher__knapp svg{transform:rotate(45deg)}

/* ============================================================
   TILPASSER — «kp-tilpass» (fase 9b, KUN demo-sites via kp_demo_tilpasser)
   Flytende knapp nede til venstre → kuratert panel: modus/palett/fonter/form.
   Ren client-side attributt-bytting (data-mode/palett/fonter/form) + localStorage.
   Alle tokens — temaet seg selv, i valgt profil. Aldri paa ekte kundesites.
   ============================================================ */
.kp-tilpass-knapp{
  position:fixed;left:22px;bottom:22px;z-index:130;
  display:inline-flex;align-items:center;gap:9px;min-height:48px;
  font-family:var(--font-display);font-weight:500;font-size:.95rem;
  color:var(--text);background:var(--surface);cursor:pointer;
  border:1px solid var(--line);border-radius:999px;padding:13px 20px;
  box-shadow:0 12px 34px rgba(var(--shadow-rgb),.28);
  transition:transform var(--dur-fast) var(--ease-smooth),
             border-color var(--dur-fast) var(--ease-smooth),
             background-color var(--dur-fast) var(--ease-smooth);
}
.kp-tilpass-knapp:hover{transform:translateY(-1px);border-color:var(--signal)}
.kp-tilpass-knapp:active{transform:translateY(0) scale(.98)}
.kp-tilpass-knapp svg{color:var(--signal);flex:none}

.kp-tilpass{
  position:fixed;left:22px;bottom:84px;z-index:131;
  width:320px;max-width:calc(100vw - 44px);
  max-height:calc(100vh - 120px);overflow-y:auto;
  background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-kort);padding:20px;
  box-shadow:0 24px 64px rgba(var(--shadow-rgb),.5);
  display:flex;flex-direction:column;gap:18px;
  animation:kpTilpassIn var(--dur-normal) var(--ease-out);
}
.kp-tilpass[hidden]{display:none}
@keyframes kpTilpassIn{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}
.kp-tilpass-topp{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.kp-tilpass-topp h2{font-family:var(--font-display);font-size:.82rem;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--text)}
.kp-tilpass-topp span{font-family:var(--font-display);font-size:.72rem;color:var(--text-dim)}
.kp-gruppe-tittel{font-family:var(--font-display);font-size:.72rem;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--text-dim);margin-bottom:10px}
.kp-rad{display:flex;flex-wrap:wrap;gap:8px}
.kp-valg{
  min-height:44px;min-width:44px;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:9px 15px;cursor:pointer;
  font-family:var(--font-body);font-size:.92rem;font-weight:500;
  color:var(--text);background:transparent;
  border:1px solid var(--line);border-radius:var(--radius-knapp);
  transition:border-color var(--dur-fast) var(--ease-smooth),
             background-color var(--dur-fast) var(--ease-smooth),
             color var(--dur-fast) var(--ease-smooth);
}
.kp-valg:hover{border-color:var(--signal)}
.kp-valg[aria-pressed="true"]{
  border-color:var(--signal);background:rgba(var(--signal-rgb),.14);
  box-shadow:inset 0 0 0 1px var(--signal);
}
.kp-swatch{width:18px;height:18px;border-radius:50%;flex:none;
  border:1px solid rgba(var(--text-rgb),.25)}
/* Form-knappene antyder sin egen radius visuelt */
.kp-valg--skarp{border-radius:2px}
.kp-valg--myk{border-radius:10px}
.kp-valg--rund{border-radius:999px}
@media (max-width:720px){
  .kp-tilpass-knapp{left:16px;bottom:16px}
  .kp-tilpass{left:16px;right:16px;bottom:112px;width:auto;max-width:none}
}

/* ============================================================
   SCROLL-REVEAL
   Skjules kun naar JS faktisk kjoerer (html.js settes i header.php) —
   uten JS var innholdet permanent usynlig (kvalitetsgate 22.7).
   ============================================================ */
html.js .kp-reveal{opacity:0;transform:translateY(20px);
  transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-slow) var(--ease-out)}
html.js .kp-reveal.is-visible{opacity:1;transform:none}
.kp-reveal-group .kp-reveal:nth-child(2){transition-delay:60ms}
.kp-reveal-group .kp-reveal:nth-child(3){transition-delay:120ms}
.kp-reveal-group .kp-reveal:nth-child(4){transition-delay:180ms}
.kp-reveal-group .kp-reveal:nth-child(5){transition-delay:240ms}
.kp-reveal-group .kp-reveal:nth-child(6){transition-delay:300ms}

/* ============================================================
   AKSE 5: UTTRYKK (data-uttrykk) — rolig · markant · varm
   ============================================================
   Signaturen: grunnflater per modus, media-/scrim-toner, skygge-stil
   (finish), radius-skala og typografi-tone. IKKE farge (data-farge) og
   IKKE fontvalg (data-fontpar) — de ble egne, globale akser i fase 10b.

   «rolig» er basislaget over, uroert: ingen regler her. Det er standarden
   for nye sider (ÉN ferdigdesignet standard — B7-beslutning 2026-08-25).

   TRE VERDIER, IKKE FIRE (designtesten 09.09.2026, funn F4). `katedral` var
   en fjerde akseverdi fram til 10.09. Maalt med samme fontpar var den og
   `rolig` samme uttrykk: vekt 400 begge, linjeavstand rundt 1,0 begge, senket
   kort begge, plan flate med haarlinje begge, identisk hero begge. Hele
   forskjellen laa i flatetemperaturen og i radius — og en kunde som valgte
   katedral og saa byttet fontpar fikk rolig tilbake. Retningen lever videre
   som STARTPUNKTET «Verdig»: rolig + fontparet Katedral + paletten Pergament
   + form skarp + fototone full (kp_akse_startpunkter() i inc/akser.php).
   Det som var EKTE katedral og ikke bare temperatur — den typografiske
   aksenten og kickeren som indekslinje — foelger naa paletten `pergament`;
   blokka staar i FARGE-avsnittet over.

   Selektor-spesifisitet: html[data-uttrykk][data-mode] = (0,2,1) slaar
   basislagets :root[data-mode] = (0,2,0). Uttrykk-lagene roerer ALDRI
   --accent-* eller --font-* — derivasjonene (--signal foelger modus,
   hero/nyhetsbrev = moerk oey) staar i basislaget og plukker opp
   palettens og fontparets verdier automatisk. Verdiene er portert
   uendret fra profil-lagene (maalte AA-ratioer i fase 8b/9b).
   ============================================================ */

/* —————————————————————————— MARKANT ——————————————————————————
   Fet · grafisk · to-farge (Frimodig-signaturen fra profiler/frimodig.html).
   Ren hvit / naer-sort base, HARD offset-skygge, versaler paa overskrifter,
   hero som flat farget flate uten fotooey, og .kp-merk-markoeren. */

/* Grunnflater per modus (markant lys = ren hvit + varm alt; moerk = naer-sort) */
html[data-uttrykk="markant"][data-mode="light"]{
  --bg:#FFFFFF;--surface:#FFFFFF;--surface-2:#FAF7F0;
  --text:#141414;--text-dim:#575757;
  --text-rgb:20,20,20;--bg-rgb:255,255,255;--shadow-rgb:20,20,20;
  --line:rgba(20,20,20,.20);
  --kp-skygge:#141414; /* solid sort offset-blokk (brutalist-signatur) */
}
html[data-uttrykk="markant"][data-mode="dark"]{
  --bg:#131313;--surface:#202020;--surface-2:#1C1C1C;
  --text:#FAF7F0;--text-dim:#A8A6A0;
  --text-rgb:250,247,240;--bg-rgb:19,19,19;--shadow-rgb:0,0,0;
  --line:rgba(250,247,240,.16);
  --kp-skygge:#FAF7F0; /* solid krem offset-blokk paa moerk flate */
}
/* Tone-settene for markant — samme tall som de to blokkene over. */
html[data-uttrykk="markant"]{
  --t-lys-bg:#FFFFFF;--t-lys-surface:#FFFFFF;--t-lys-surface-2:#FAF7F0;
  --t-lys-text:#141414;--t-lys-text-dim:#575757;
  --t-lys-text-rgb:20,20,20;--t-lys-bg-rgb:255,255,255;--t-lys-shadow-rgb:20,20,20;
  --t-lys-line:rgba(20,20,20,.20);--t-lys-skygge:#141414;
  --t-mork-bg:#131313;--t-mork-surface:#202020;--t-mork-surface-2:#1C1C1C;
  --t-mork-text:#FAF7F0;--t-mork-text-dim:#A8A6A0;
  --t-mork-text-rgb:250,247,240;--t-mork-bg-rgb:19,19,19;--t-mork-shadow-rgb:0,0,0;
  --t-mork-line:rgba(250,247,240,.16);--t-mork-skygge:#FAF7F0;
}

/* Media-oeyer (alltid moerke i begge moduser) — markants kontrastband.
   [data-mode] hever spesifisiteten til 0,2,1 (data-mode er alltid satt) slik at
   finish-tokenene under slaar modus-basislaget (:root[data-mode] = 0,2,0). */
html[data-uttrykk="markant"][data-mode]{
  --media-ink:#FAF7F0;--media-ink-dim:#D8D8D8;--media-ink-rgb:250,247,240;
  --media-line:rgba(250,247,240,.20);
  --media-floor:#141414;--media-floor-rgb:20,20,20;
  --scrim-rgb:10,10,10;
  /* Finish: HARD offset-skygge (neo-brutalist). Flate kort i ro; solid
     blokk-skygge + diagonal heving ved hover. Ingen gloed (uttrykket er
     grafisk/flatt, ikke lysende). */
  --kp-elev:none;
  --kp-elev-hi:6px 6px 0 var(--kp-skygge);
  --kp-lift:translate(-3px,-3px);
  --kp-btn-lift:translate(-2px,-2px);
  --kp-btn-shadow:4px 4px 0 var(--kp-skygge);
  --kp-signal-glow:none;
}

/* Form (radius) — markants skala: pill-knapper, skarpe kort */
html[data-uttrykk="markant"][data-form="skarp"]{--radius-kort:0px;--radius-knapp:2px;--radius-bilde:0px;--radius-felt:2px}
html[data-uttrykk="markant"][data-form="myk"]{--radius-kort:0px;--radius-knapp:999px;--radius-bilde:0px;--radius-felt:10px}
html[data-uttrykk="markant"][data-form="rund"]{--radius-kort:20px;--radius-knapp:999px;--radius-bilde:16px;--radius-felt:14px}

/* Signatur 1/4: massiv uppercase-display */
html[data-uttrykk="markant"] .kp-h1,
html[data-uttrykk="markant"] .kp-h2,
html[data-uttrykk="markant"] .kp-hero__title{text-transform:uppercase;letter-spacing:-.01em}

/* Signatur 2/4: hero uten fotoflate. Markants hero er en FLAT BASE
   (neo-brutalist), ikke Takts moerke fotooey — den foelger modus (hvit i
   lys, naer-sort i moerk) med massiv type. Kun markant-laget; rolig/varm
   beholder fotooeya. Aksenten (--signal = accent-bright) beholdes for
   primaerknapp + merke; tekst/linjer/kicker foelger modus slik at
   kontrasten holder paa lys flate. */
html[data-uttrykk="markant"] .kp-hero{
  --text:inherit;      /* arv modus-tekst fra <html> (opphever basisens --media-ink) */
  --text-dim:inherit;
  --line:inherit;
  background:var(--bg);
  min-height:auto;              /* naturlig hoeyde — ikke 88vh fotooey */
  align-items:flex-start;       /* innhold oeverst, ikke botn-forankra */
  padding-bottom:var(--s-5);
}
html[data-uttrykk="markant"] .kp-hero__media,
html[data-uttrykk="markant"] .kp-hero::after{display:none} /* ingen moerk foto-floor/scrim */
/* Kicker + info-ikoner foelger tekst (lys aksent paa hvit ville falt under AA) */
html[data-uttrykk="markant"] .kp-hero .kp-kicker,
html[data-uttrykk="markant"] .kp-hero .kp-kicker::before,
html[data-uttrykk="markant"] .kp-hero__info svg{color:var(--text)}
html[data-uttrykk="markant"] .kp-hero .kp-kicker::before{background:var(--text)}
html[data-uttrykk="markant"] .kp-hero__title,
html[data-uttrykk="markant"] .kp-hero__lede{text-shadow:none} /* ingen moerk halo paa lys flate */

/* Signatur 3/4: markeringsblokk bak utvalgte overskriftsord
   («TRO ER IKKE *FORSIKTIG*.»). Alltid accent-bright med sitt eget blekk —
   modus-uavhengig, box-decoration-break for fler-linjers ombrekk.
   Spennet skrives av kp_merk_format() uansett uttrykk, men stiles kun her. */
html[data-uttrykk="markant"] .kp-merk{
  background:var(--accent-bright);
  color:var(--accent-bright-ink);
  padding:.02em .14em;
  -webkit-box-decoration-break:clone;
  box-decoration-break:clone;
}
html[data-uttrykk="markant"] .kp-hero__title .kp-merk{padding:0 .12em}

/* —————————————————————————— VARM ——————————————————————————
   Jordnaer · stille · naturlig (Bygd-signaturen fra profiler/grend.html).
   Varme linfarger, MYKE lagvise skygger, lettere display-vekt og stoerre
   lesbar brødtekst (18px) for en eldre maalgruppe. */

/* Grunnflater per modus (varm lys = varm lin; moerk = djupe varme jordtoner) */
html[data-uttrykk="varm"][data-mode="light"]{
  --bg:#F6F3EC;--surface:#FFFFFF;--surface-2:#EAE4D6;
  --text:#33302A;--text-dim:#5B584F;
  --text-rgb:51,48,42;--bg-rgb:246,243,236;--shadow-rgb:51,48,42;
  --line:rgba(51,48,42,.15);
}
html[data-uttrykk="varm"][data-mode="dark"]{
  --bg:#1E1B16;--surface:#2A251E;--surface-2:#38322A;
  --text:#F1EBDE;--text-dim:#B9AF9C;
  --text-rgb:241,235,222;--bg-rgb:30,27,22;--shadow-rgb:0,0,0;
  --line:rgba(241,235,222,.14);
}
/* Tone-settene for varm — samme tall som de to blokkene over. */
html[data-uttrykk="varm"]{
  --t-lys-bg:#F6F3EC;--t-lys-surface:#FFFFFF;--t-lys-surface-2:#EAE4D6;
  --t-lys-text:#33302A;--t-lys-text-dim:#5B584F;
  --t-lys-text-rgb:51,48,42;--t-lys-bg-rgb:246,243,236;--t-lys-shadow-rgb:51,48,42;
  --t-lys-line:rgba(51,48,42,.15);--t-lys-skygge:#33302A;
  --t-mork-bg:#1E1B16;--t-mork-surface:#2A251E;--t-mork-surface-2:#38322A;
  --t-mork-text:#F1EBDE;--t-mork-text-dim:#B9AF9C;
  --t-mork-text-rgb:241,235,222;--t-mork-bg-rgb:30,27,22;--t-mork-shadow-rgb:0,0,0;
  --t-mork-line:rgba(241,235,222,.14);--t-mork-skygge:#F1EBDE;
}

/* Media-oeyer (djup varm brun i begge moduser). [data-mode] → spesifisitet 0,2,1
   slik at finish-tokenene under slaar modus-basislaget (0,2,0). */
html[data-uttrykk="varm"][data-mode]{
  --media-ink:#F1EBDE;--media-ink-dim:#D8CFBE;--media-ink-rgb:241,235,222;
  --media-line:rgba(241,235,222,.20);
  --media-floor:#211B14;--media-floor-rgb:33,27,20;
  --scrim-rgb:20,16,10;
  /* Finish: MYK, lagvis, varm skygge. Kort hviler med lav skygge og
     loefter roligere; ingen kald gloed. */
  --kp-elev:0 8px 22px rgba(var(--shadow-rgb),.10);
  --kp-elev-hi:0 16px 34px rgba(var(--shadow-rgb),.16);
  --kp-lift:translateY(-3px);
  --kp-btn-lift:translateY(-1px);
  --kp-btn-shadow:0 8px 20px rgba(var(--shadow-rgb),.16);
  --kp-signal-glow:0 8px 20px rgba(var(--shadow-rgb),.16);
}

/* Form (radius) — varmens skala: rundere, mykere kort */
html[data-uttrykk="varm"][data-form="skarp"]{--radius-kort:3px;--radius-knapp:2px;--radius-bilde:3px;--radius-felt:2px}
html[data-uttrykk="varm"][data-form="myk"]{--radius-kort:22px;--radius-knapp:14px;--radius-bilde:22px;--radius-felt:8px}
html[data-uttrykk="varm"][data-form="rund"]{--radius-kort:24px;--radius-knapp:999px;--radius-bilde:24px;--radius-felt:16px}

/* Signatur: lettere display-vekt (det stille uttrykket) + stoerre lesbar basis */
html[data-uttrykk="varm"] .kp-h1,
html[data-uttrykk="varm"] .kp-h2,
html[data-uttrykk="varm"] .kp-hero__title{font-weight:520;letter-spacing:-.005em}
html[data-uttrykk="varm"] .kp-h3{font-weight:600}
html[data-uttrykk="varm"] body{font-size:18px}

/* ============================================================
   SEKSJONS-UNDERVALG (fase 10c) — data-variant + data-tone
   ============================================================
   To-nivå-modellen (B7 §5): det GLOBALE temaet eier farge og fonter; hver
   seksjon eier kun (1) layout-variant og (2) tone. Begge er rene CSS-lag —
   ingen variant har egen partial, så innholdet er identisk uansett valg og
   et bytte kan aldri koste innhold.

   Katalogen over hva som finnes bor i inc/seksjoner.php. Legger du en
   variant til der, skal den ha et lag her — og bare her.

   Rekkefølge: variantene først, tonene sist. Begge er (0,2,0)-selektorer, så
   den som står sist vinner ved likhet — og tonen skal alltid få siste ord om
   flaten.
   ============================================================ */

/* —————————————————————————— HERO ——————————————————————————
   «foto» er basislaget over (moerk oey m/ fotoscrim) og roeres ikke. De tre
   andre variantene opphever oeya med --text:inherit — nøyaktig samme grep
   markant-laget bruker paa sin flate hero, saa tokenene arves fra <html>
   og kontrasten foelger modus. */
.kp-hero[data-variant="delt"],
.kp-hero[data-variant="flate"],
.kp-hero[data-variant="band"]{
  --text:inherit;--text-dim:inherit;--line:inherit;
  --signal:inherit;--signal-deep:inherit;--signal-ink:inherit;--signal-rgb:inherit;
  background:var(--bg);
  min-height:auto;
  padding-bottom:var(--s-5);
}
.kp-hero[data-variant="delt"]::after,
.kp-hero[data-variant="flate"]::after,
.kp-hero[data-variant="band"]::after{display:none}
.kp-hero[data-variant="delt"] .kp-hero__title,
.kp-hero[data-variant="flate"] .kp-hero__title,
.kp-hero[data-variant="band"] .kp-hero__title,
.kp-hero[data-variant="delt"] .kp-hero__lede,
.kp-hero[data-variant="flate"] .kp-hero__lede,
.kp-hero[data-variant="band"] .kp-hero__lede{text-shadow:none}

/* Ren flate — ingen bilde i det hele tatt */
.kp-hero[data-variant="flate"]{align-items:flex-start}
.kp-hero[data-variant="flate"] .kp-hero__media{display:none}

/* Delt — tekst i den ene halvdelen, bilde i den andre */
.kp-hero[data-variant="delt"]{
  display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4);align-items:center;
}
.kp-hero[data-variant="delt"] .kp-hero__media{
  /* display:block gjenoppretter bildet under uttrykket «markant», som skrur av
     .kp-hero__media for aa fjerne den FULLFLATE fotoscrimen. Den regelen gjelder
     hero-som-moerk-oey; «delt» og «band» viser bildet i en avgrenset flate, saa
     markants begrunnelse treffer dem ikke — uten dette ble begge stille
     identiske med «flate» og kirken mistet bildet den valgte. */
  display:block;
  order:2;position:relative;inset:auto;z-index:0;align-self:stretch;
  min-height:min(70vh,620px);
  /* Hjoernene kuttes der bildet treffer seksjonskanten (katalog-feedback 31.8):
     paa desktop ligger bildet i hoeyre kolonne helt ut mot viewport-kanten, saa
     kun venstre side beholder radius. form=skarp har radius 0 og paavirkes ikke.
     (Siden er nb_NO/LTR; fysiske hjoerner er bevisst — kolonnen er ogsaa fysisk.) */
  border-radius:var(--radius-bilde) 0 0 var(--radius-bilde);
}
.kp-hero[data-variant="delt"] .kp-hero__content{
  order:1;max-width:660px;margin-left:auto;margin-right:0;padding-bottom:0;
}
.kp-hero[data-variant="delt"] .kp-hero__title{font-size:clamp(2.2rem,4.6vw,3.6rem);max-width:16ch}
.kp-hero[data-variant="delt"] .kp-hero__info{margin-top:var(--s-4)}

/* Bilde under — tekst oeverst, bredt fotobaand under */
.kp-hero[data-variant="band"]{
  display:grid;grid-template-columns:1fr;align-items:start;padding-bottom:0;
}
.kp-hero[data-variant="band"] .kp-hero__content{order:1;padding-bottom:var(--s-4)}
.kp-hero[data-variant="band"] .kp-hero__media{
  display:block; /* se «delt» over — gjelder samme markant-unntak */
  order:2;position:relative;inset:auto;z-index:0;width:100%;aspect-ratio:21/8;
}

/* —————————————————————————— TALER —————————————————————————— */
.kp-taler[data-variant="fremhevet"] .kp-taler__grid{grid-template-columns:1.5fr 1fr}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:first-child{grid-row:span 2}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:first-child .kp-tale-kort__thumb{aspect-ratio:4/3}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:first-child .kp-h3{font-size:1.7rem}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:not(:first-child){flex-direction:row}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:not(:first-child) .kp-tale-kort__thumb{flex:0 0 40%;aspect-ratio:auto}
.kp-taler[data-variant="fremhevet"] .kp-tale-kort:not(:first-child) .kp-tale-kort__body{padding:var(--s-2)}

.kp-taler[data-variant="liste"] .kp-taler__grid{grid-template-columns:1fr;gap:var(--s-2)}
.kp-taler[data-variant="liste"] .kp-tale-kort{flex-direction:row;align-items:stretch}
.kp-taler[data-variant="liste"] .kp-tale-kort__thumb{flex:0 0 200px;aspect-ratio:16/10}
.kp-taler[data-variant="liste"] .kp-tale-kort__body{display:flex;flex-direction:column;justify-content:center}
.kp-taler[data-variant="liste"] .kp-tale-kort__play span{width:40px;height:40px}

/* —————————————————————————— KALENDER —————————————————————————— */
.kp-kalender[data-variant="kort"]{background:var(--bg)}
.kp-kalender[data-variant="kort"] .kp-reveal-group{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--grid-gap)}
.kp-kalender[data-variant="kort"] .kp-event-rad{
  grid-template-columns:64px minmax(0,1fr);align-items:start;
  padding:var(--s-3);background:var(--surface);
  border:1px solid var(--line);border-radius:var(--radius-kort);box-shadow:var(--kp-elev);
}
.kp-kalender[data-variant="kort"] .kp-event-rad__pil{display:none}

.kp-kalender[data-variant="kompakt"] .kp-reveal-group{display:grid;grid-template-columns:repeat(2,1fr);column-gap:var(--s-4)}
.kp-kalender[data-variant="kompakt"] .kp-event-rad{grid-template-columns:56px minmax(0,1fr);padding:var(--s-2) 0}
.kp-kalender[data-variant="kompakt"] .kp-event-rad__beskr,
.kp-kalender[data-variant="kompakt"] .kp-event-rad__pil{display:none}
.kp-kalender[data-variant="kompakt"] .kp-dato-blokk__dag{font-size:1.15rem}
.kp-kalender[data-variant="kompakt"] .kp-event-rad__info .kp-h3{font-size:1.1rem}

/* —————————————————————————— FELLESSKAP —————————————————————————— */
.kp-fellesskap[data-variant="liste"] .kp-steg-grid{grid-template-columns:1fr;gap:var(--s-2)}
.kp-fellesskap[data-variant="liste"] .kp-steg{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:var(--s-3);row-gap:4px;align-items:start;min-height:0;padding:var(--s-3);
}
/* Eksplisitt plassering — ellers hopper tittelen inn i ikon-kolonnen paa kort uten ikon. */
.kp-fellesskap[data-variant="liste"] .kp-steg__ikon{grid-column:1;grid-row:1/span 2}
.kp-fellesskap[data-variant="liste"] .kp-steg__tittel{grid-column:2;grid-row:1;margin-top:0}
.kp-fellesskap[data-variant="liste"] .kp-steg p{grid-column:2;grid-row:2}

.kp-fellesskap[data-variant="flis"] .kp-steg-grid{grid-template-columns:repeat(2,1fr);gap:var(--grid-gap)}
.kp-fellesskap[data-variant="flis"] .kp-steg{min-height:220px;padding:var(--s-5) var(--s-4);background:var(--surface)}
.kp-fellesskap[data-variant="flis"] .kp-steg .kp-h3{font-size:1.6rem}

/* —————————————————————————— NY HER? —————————————————————————— */
.kp-nyher[data-variant="speilvendt"] .kp-nyher__grid{grid-template-columns:.45fr .55fr}
.kp-nyher[data-variant="speilvendt"] .kp-nyher__foto{order:2}
.kp-nyher[data-variant="speilvendt"] .kp-nyher__tekst{order:1}

.kp-nyher[data-variant="uten-foto"] .kp-nyher__grid{grid-template-columns:1fr}
.kp-nyher[data-variant="uten-foto"] .kp-nyher__foto{display:none}
.kp-nyher[data-variant="uten-foto"] .kp-sjekkliste{grid-template-columns:1fr 1fr;column-gap:var(--s-4)}

/* —————————————————————————— STAB ——————————————————————————
   «navnebanner»: navn og rolle i et baand som ligger halvt oppaa portrettet.
   Mer trykk enn portretter paa rekke, men innenfor tillitsvekkende enkelhet —
   ingen nye farger og ingen ny form: baandet staar paa foto-oeyenes EGNE
   scrim-/media-tokens, samme par som .kp-nyher__foto figcaption allerede
   baerer over et ukjent bilde, og henter radius fra form-aksen.

   KONTRAST (WCAG 1.4.3): teksten staar paa rgba(var(--scrim-rgb),.82) — en
   scrim, ikke et bilde. Verst tenkelige tilfelle er et HELT HVITT portrett;
   da komponerer flata til ~rgb(54,54,56) og --media-ink (#F4F2EC) maaler
   10,7:1, --media-ink-dim (#D3D2D8) 7,9:1. Varm har den lyseste scrimen
   (20,16,10) og lander paa 9,9:1. Alle tre uttrykk er AA med stor margin, og
   tallet avhenger ikke av fotoet — det er 82 %-en som baerer garantien.

   INGEN backdrop-filter, med vilje. Den ville vaert ren pynt her, og
   `backdrop-filter` gjoer elementet til containing block for absolutt
   posisjonerte etterkommere — da ville .kp-person__lenke::after (kortlenka
   fra #58) krympet fra hele kortet til baandet. Samme grunn til at baandet
   ikke er `position:relative`.

   Baandet maa likevel males OVER portrettet. Det loeses fra andre siden:
   .kp-person faar en stacking context (isolation) og portrettet z-index:-1,
   saa fotoet males i trinn 2 og baandets bakgrunn i trinn 3. Lenkas ::after
   ligger i trinn 6 og daekker fortsatt hele kortet.

   Overlappet er et FAST maal, ikke en prosent: prosentmarginer maales mot
   BREDDEN i CSS, saa «halve baandhoeyden» finnes ikke som aerlig verdi i
   normal flyt. 2.2rem er omtrent halvparten ved to linjer. */
.kp-stab[data-variant="navnebanner"]{--kp-navneband:2.2rem}
.kp-stab[data-variant="navnebanner"] .kp-stab__grid{grid-template-columns:repeat(3,1fr);gap:var(--s-4)}
.kp-stab[data-variant="navnebanner"] .kp-person{isolation:isolate}
.kp-stab[data-variant="navnebanner"] .kp-person__foto{
  position:relative;z-index:-1;aspect-ratio:4/5;margin-bottom:0;
}
.kp-stab[data-variant="navnebanner"] .kp-person__tekst{
  margin:calc(var(--kp-navneband) * -1) var(--s-2) 0;
  padding:var(--s-2) var(--s-3);
  background:rgba(var(--scrim-rgb),.82);
  border:1px solid var(--media-line);
  border-radius:var(--radius-felt);
  box-shadow:var(--kp-elev);
}
.kp-stab[data-variant="navnebanner"] .kp-person__navn{margin-bottom:2px;color:var(--media-ink)}
.kp-stab[data-variant="navnebanner"] .kp-person__rolle{color:var(--media-ink-dim)}
/* Kortlenka hover-er normalt til --signal, som er loest mot SIDENS flate —
   over scrimen ville accent-deep maalt rundt 2:1 i lys modus. Baandet svarer
   med understrek i stedet: samme affordans, ingen kontrast satt paa spill. */
.kp-stab[data-variant="navnebanner"] .kp-person__lenke,
.kp-stab[data-variant="navnebanner"] .kp-person__lenke:hover{color:var(--media-ink)}
.kp-stab[data-variant="navnebanner"] .kp-person__lenke:hover{text-decoration:underline;text-underline-offset:3px}

/* ============================================================
   TONE (data-tone) — lys · mork · aksent
   ============================================================
   Tonen plukker et FERDIG VALIDERT token-sett (--t-lys-* / --t-mork-*), aldri
   frie farger. Aksentfamilien foelger med: paa lys flate accent-deep (loest
   mot verst_lys), paa moerk flate accent-bright (loest mot verst_mork). Begge
   finnes alltid — ogsaa for «Deres egen farge», fordi kp_farge_avled() loeser
   BEGGE polaritetene ved hver lagring. Derfor er en tone-flippet seksjon
   AA-trygg by construction, uansett modus siden staar i.

   --tint-rgb roeres bevisst IKKE: fri farge setter den til kirkens egen
   dekorfarge (modus-uavhengig, inline i <head>), og en overstyring her ville
   kastet det valget bort inne i tonede seksjoner.

   Spesifisitet (0,2,0) slaar seksjonenes egne .kp-kalender/.kp-nyher-flater
   (0,1,0), og blokka staar sist saa den ogsaa vinner over variant-lagene.
   ============================================================ */
.kp-section[data-tone="lys"]{
  --bg:var(--t-lys-bg);--surface:var(--t-lys-surface);--surface-2:var(--t-lys-surface-2);
  --text:var(--t-lys-text);--text-dim:var(--t-lys-text-dim);
  --text-rgb:var(--t-lys-text-rgb);--bg-rgb:var(--t-lys-bg-rgb);--shadow-rgb:var(--t-lys-shadow-rgb);
  --line:var(--t-lys-line);--kp-skygge:var(--t-lys-skygge);
  --signal:var(--accent-deep);--signal-deep:var(--accent-deep-deep);
  --signal-ink:var(--accent-deep-ink);--signal-rgb:var(--accent-deep-rgb);
  --line-strong:rgba(var(--accent-deep-rgb),.45);
  background:var(--bg);color:var(--text);
  border-block:1px solid var(--line);
}
.kp-section[data-tone="mork"]{
  --bg:var(--t-mork-bg);--surface:var(--t-mork-surface);--surface-2:var(--t-mork-surface-2);
  --text:var(--t-mork-text);--text-dim:var(--t-mork-text-dim);
  --text-rgb:var(--t-mork-text-rgb);--bg-rgb:var(--t-mork-bg-rgb);--shadow-rgb:var(--t-mork-shadow-rgb);
  --line:var(--t-mork-line);--kp-skygge:var(--t-mork-skygge);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
  --line-strong:rgba(var(--accent-bright-rgb),.45);
  background:var(--bg);color:var(--text);
  border-block:1px solid var(--line);
}
/* ============================================================
   F3 — TONERYTMEN I MOERK MODUS (designtesten 09.09.2026, funn F3)
   ============================================================
   FEILEN. Tonen plukket et ABSOLUTT sett: `mork` gav alltid --t-mork-*.
   Paa en moerk side ER --t-mork-* sidens egen flate, saa baandet forsvant.
   Maalt paa dev (kirkepakka.nettsmed.dev, main a31288a), `.kp-taler` mot
   `body` i moerk modus — identisk i ALLE fire uttrykk:

     rolig     seksjon rgb(16,16,20)  body rgb(16,16,20)   DeltaEok 0
     varm      seksjon rgb(30,27,22)  body rgb(30,27,22)   DeltaEok 0
     markant   seksjon rgb(19,19,19)  body rgb(19,19,19)   DeltaEok 0
     katedral  seksjon rgb(21,19,8)   body rgb(21,19,8)    DeltaEok 0

   (Den siste raden er uttrykket `katedral`, som utgikk i samme PR — se funn
   F4 i AKSE 5 under. Den staar her fordi maalinga er fra foer den utgikk.)

   Det eneste skillet som stod igjen var `border-block: 1px solid var(--line)`
   paa 1,37:1. To seksjoner paa seed-forsiden (taler og tro) er baand i lys
   modus og INGENTING i moerk.

   FIKSEN (vei a i notatet, og den Nucleus-familiene bruker): tonen er
   RELATIV, ikke absolutt. Den navngir utseendet paa en LYS side; paa en
   moerk side snur begge polaritetene, slik at `mork` fortsatt er baandet som
   bryter rytmen og `lys` fortsatt er den rolige flaten. Etter dette maaler
   det moerke baandet i moerk modus:

     rolig     baand #F4F1EA mot side #101014
     varm      baand #F6F3EC mot side #1E1B16
     markant   baand #FFFFFF mot side #131313

   Med grep 3 + 6 lastet (uttrykk-preview.css, som er der «Verdig» ses) blir
   roligs baand #F5F6F8 mot #101014: arket holder --t-lys-* i takt med sine
   egne modus-flater, saa flippen plukker samme sett der ogsaa.

   INGEN NYE TALL. Blokkene under plukker de SAMME to ferdig validerte
   token-settene som blokkene over — de bytter bare hvilket sett hver tone
   tar. Derfor er en tone-flippet seksjon fortsatt AA-trygg by construction,
   og aksentfamilien foelger med: lys flate faar accent-deep, moerk flate
   accent-bright, som ellers i fila.

   `aksent` er UROERT: den er en 6 %-vask av sidens egen flate og virker
   allerede i begge moduser. `--sect-y` er ogsaa uroert — takten er ikke
   problemet, kontrasten var det.

   SPESIFISITET: (0,3,0) mot tone-blokkenes (0,2,0), saa de vinner uansett
   rekkefoelge. `background`/`color`/`border-block` gjentas ikke: de leser
   tokenene paa SEKSJONEN, og den vinnende deklarasjonen av hvert token her
   er den som blir brukt.

   AUTO er med i begge retninger. Uten `prefers-color-scheme: light` staar
   `auto` i moerk modus (som ellers i malen), saa den hoerer hjemme i
   flip-blokka; media-blokka under tar den TILBAKE naar systemet er lyst.
   ============================================================ */
:root[data-mode="dark"] .kp-section[data-tone="mork"],
:root[data-mode="auto"] .kp-section[data-tone="mork"]{
  --bg:var(--t-lys-bg);--surface:var(--t-lys-surface);--surface-2:var(--t-lys-surface-2);
  --text:var(--t-lys-text);--text-dim:var(--t-lys-text-dim);
  --text-rgb:var(--t-lys-text-rgb);--bg-rgb:var(--t-lys-bg-rgb);--shadow-rgb:var(--t-lys-shadow-rgb);
  --line:var(--t-lys-line);--kp-skygge:var(--t-lys-skygge);
  --signal:var(--accent-deep);--signal-deep:var(--accent-deep-deep);
  --signal-ink:var(--accent-deep-ink);--signal-rgb:var(--accent-deep-rgb);
  --line-strong:rgba(var(--accent-deep-rgb),.45);
}
:root[data-mode="dark"] .kp-section[data-tone="lys"],
:root[data-mode="auto"] .kp-section[data-tone="lys"]{
  --bg:var(--t-mork-bg);--surface:var(--t-mork-surface);--surface-2:var(--t-mork-surface-2);
  --text:var(--t-mork-text);--text-dim:var(--t-mork-text-dim);
  --text-rgb:var(--t-mork-text-rgb);--bg-rgb:var(--t-mork-bg-rgb);--shadow-rgb:var(--t-mork-shadow-rgb);
  --line:var(--t-mork-line);--kp-skygge:var(--t-mork-skygge);
  --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
  --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
  --line-strong:rgba(var(--accent-bright-rgb),.45);
}
@media (prefers-color-scheme: light){
  :root[data-mode="auto"] .kp-section[data-tone="mork"]{
    --bg:var(--t-mork-bg);--surface:var(--t-mork-surface);--surface-2:var(--t-mork-surface-2);
    --text:var(--t-mork-text);--text-dim:var(--t-mork-text-dim);
    --text-rgb:var(--t-mork-text-rgb);--bg-rgb:var(--t-mork-bg-rgb);--shadow-rgb:var(--t-mork-shadow-rgb);
    --line:var(--t-mork-line);--kp-skygge:var(--t-mork-skygge);
    --signal:var(--accent-bright);--signal-deep:var(--accent-bright-deep);
    --signal-ink:var(--accent-bright-ink);--signal-rgb:var(--accent-bright-rgb);
    --line-strong:rgba(var(--accent-bright-rgb),.45);
  }
  :root[data-mode="auto"] .kp-section[data-tone="lys"]{
    --bg:var(--t-lys-bg);--surface:var(--t-lys-surface);--surface-2:var(--t-lys-surface-2);
    --text:var(--t-lys-text);--text-dim:var(--t-lys-text-dim);
    --text-rgb:var(--t-lys-text-rgb);--bg-rgb:var(--t-lys-bg-rgb);--shadow-rgb:var(--t-lys-shadow-rgb);
    --line:var(--t-lys-line);--kp-skygge:var(--t-lys-skygge);
    --signal:var(--accent-deep);--signal-deep:var(--accent-deep-deep);
    --signal-ink:var(--accent-deep-ink);--signal-rgb:var(--accent-deep-rgb);
    --line-strong:rgba(var(--accent-deep-rgb),.45);
  }
}

/*
 * Aksent: NOEYAKTIG 6 % dekorvask — samme alfa som fri-farge-motoren maaler
 * (kp_farge_avled() → maalinger.dekor_tekst/dekor_dim, begge moduser). Tallet
 * er derfor ikke en smaksavgjoerelse: hever du det, faller garantien.
 * Seksjonen beholder modusens egne tekst-/flatetokens, saa kontrasten er den
 * maalte — det er linja og signalfargen som gjoer baandet synlig, ikke vasken.
 */
.kp-section[data-tone="aksent"]{
  background:rgba(var(--tint-rgb),.06);
  border-block:1px solid rgba(var(--tint-rgb),.30);
}

/* ============================================================
   FINISH-TOKENENE, LOEST PAA NYTT I TONEDE SEKSJONER
   ============================================================
   SAMME FEIL SOM FUNN F1, ETT LAG LENGER OPPE. `var()` i en egendefinert
   egenskap substitueres DER EGENSKAPEN DEKLARERES. `--kp-elev`,
   `--kp-elev-hi`, `--kp-btn-shadow` og `--kp-signal-glow` er alle deklarert
   paa <html> med en var() til et TONE-EID token (`--shadow-rgb`,
   `--kp-skygge`, `--signal-rgb`), og fryser derfor sidens verdi og arver den
   uendret inn i `.kp-section[data-tone]` — hvis egne tone-tokens aldri faar
   virke.

   Verst paa markant: `--kp-elev-hi:6px 6px 0 var(--kp-skygge)` fryser lys
   modus sin `#141414`, saa hover-blokka inne i et moerkt baand er nesten-sort
   paa nesten-sort. Hele hover-signalet forsvinner. Paa rolig/varm er utslaget
   mindre men like ekte: skyggen bruker sidens `--shadow-rgb` (60,50,40 i lys)
   der baandet ber om baandets eget (0,0,0).

   FIKSEN er den samme som #120 gjorde for `--kort-*`: token-blokka
   redeklareres paa `.kp-section[data-tone]`, slik at hver var() loeses paa
   nytt paa seksjonen. VERDIENE ER BIT-IDENTISKE med blokkene over — det er
   kun substitusjonspunktet som flyttes, og `tools/test-uttrykk-css.php`
   feiler hvis de drifter fra hverandre.

   `--kp-lift` og `--kp-btn-lift` er IKKE med: de er rene transform-verdier
   uten var(), og har derfor ingenting aa loese paa nytt.

   Spesifisitet speiler kildene sine: (0,3,0)/(0,4,0) for :root-lagene og
   (0,4,1) for uttrykk-lagene, altsaa samme innbyrdes rekkefoelge som paa
   <html>.
   ============================================================ */
:root .kp-section[data-tone],
:root[data-mode="dark"] .kp-section[data-tone]{
  --kp-signal-glow:0 12px 34px rgba(var(--signal-rgb),.32);
  --kp-elev:0 2px 10px rgba(var(--shadow-rgb),.34);
  --kp-elev-hi:0 22px 50px rgba(var(--shadow-rgb),.55);
  --kp-btn-shadow:var(--kp-signal-glow);
}
:root[data-mode="light"] .kp-section[data-tone]{
  --kp-elev:0 1px 4px rgba(var(--shadow-rgb),.10);
  --kp-elev-hi:0 18px 40px rgba(var(--shadow-rgb),.22);
  --kp-btn-shadow:var(--kp-signal-glow);
}
:root[data-mode="auto"] .kp-section[data-tone]{
  --kp-elev:0 2px 10px rgba(var(--shadow-rgb),.34);
  --kp-elev-hi:0 22px 50px rgba(var(--shadow-rgb),.55);
  --kp-btn-shadow:var(--kp-signal-glow);
}
@media (prefers-color-scheme: light){
  :root[data-mode="auto"] .kp-section[data-tone]{
    --kp-elev:0 1px 4px rgba(var(--shadow-rgb),.10);
    --kp-elev-hi:0 18px 40px rgba(var(--shadow-rgb),.22);
  }
}
html[data-uttrykk="markant"][data-mode] .kp-section[data-tone]{
  --kp-elev:none;
  --kp-elev-hi:6px 6px 0 var(--kp-skygge);
  --kp-btn-shadow:4px 4px 0 var(--kp-skygge);
  --kp-signal-glow:none;
}
html[data-uttrykk="varm"][data-mode] .kp-section[data-tone]{
  --kp-elev:0 8px 22px rgba(var(--shadow-rgb),.10);
  --kp-elev-hi:0 16px 34px rgba(var(--shadow-rgb),.16);
  --kp-btn-shadow:0 8px 20px rgba(var(--shadow-rgb),.16);
  --kp-signal-glow:0 8px 20px rgba(var(--shadow-rgb),.16);
}

/* ============================================================
   /kalender/ og /artikler/ — ARKIVFLATENE
   (archive-kp_event.php, archive-kp_article.php,
    template-parts/arrangement-kort.php + artikkel-kort.php)

   DE TO FLATENE DELER SKALLET .kp-arkiv. Pagineringen,
   tomtilstanden og overskriftsluften er de samme tre tingene
   /taler/ trengte, og de sto scopet under .kp-taler-arkiv —
   altsaa utilgjengelige for en ny flate. De er her skrevet ut
   paa ETT delt scope i stedet for kopiert en gang per arkiv.
   Blokka under (/taler/) er UROERT: dens egen vakt krever at
   hver selektor der starter paa .kp-taler-arkiv, saa en
   komma-soesken inne i den ville gjort den roed.

   KORTRADENE LAANES: /kalender/ bruker .kp-event-rad og
   .kp-dato-blokk slik forsidens kalenderseksjon har gjort siden
   fase 4 — partialen er den samme fila. MEN de responsive
   reglene for raden er alle gatet paa .kp-kalender (linje ~2166),
   saa de arves IKKE av seg selv: 560px-queryen der lister
   .kp-arkiv .kp-event-rad/.kp-dato-blokk eksplisitt ved siden av
   .kp-kalender-variantene, ellers beholder arkivet 720px-blokkas
   64px-kolonne helt ned til 375px (F6, designtesten 09.09.2026).
   Bare artikkelkortet er nytt, og det foelger .kp-tale-korts form.

   GRIDET ER auto-fill OG IKKE repeat(3,1fr): da trenger det
   ingen media queries, og kan ikke komme i utakt med dem.

   Ingen nye farger: alt gaar paa --line, --line-strong,
   --text-dim, --signal og --surface, saa flatene foelger fri
   farge og begge modusene av seg selv.
   ============================================================ */
.kp-arkiv .kp-sect-head{margin-bottom:var(--s-5)}
.kp-arkiv__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--grid-gap)}

.kp-arkiv__tom{padding:var(--s-3) 0}
.kp-arkiv__tider{display:flex;align-items:center;gap:10px;margin-top:var(--s-2);color:var(--text-dim)}

/* Pagineringen. Selve nummerlenkene er WP-genererte og heter
   .page-numbers — de naas derfor gjennom vaar egen wrapper og
   aldri bart, ellers ville de truffet enhver WP-paginering
   temaet maatte faa senere. 44 px er UU-minsteflata for et
   trykkmaal, og pilene er ord og ikke tegn av samme grunn. */
.kp-arkiv .kp-paginering{margin-top:var(--s-5)}
.kp-arkiv .kp-paginering .nav-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.kp-arkiv .kp-paginering .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;min-height:44px;padding:0 14px;
  border:1px solid var(--line);border-radius:var(--radius-knapp);
  font-family:var(--font-display);font-weight:600;font-size:.95rem;
  color:var(--text);text-decoration:none;
}
.kp-arkiv .kp-paginering a.page-numbers:hover{border-color:var(--signal);color:var(--signal)}
.kp-arkiv .kp-paginering .page-numbers.current{background:var(--signal);border-color:var(--signal);color:var(--signal-ink)}
.kp-arkiv .kp-paginering .page-numbers.dots{border-color:transparent;min-width:0;padding:0 4px;color:var(--text-dim)}

/* Artikkelkortet. Samme ramme, radius og loft som .kp-tale-kort
   — to kortfamilier paa samme nettsted skal ikke ha hver sin
   form — men uten thumb som obligatorisk ledd: `forsidebilde`
   er valgfritt, og et kort uten bilde skal vaere en tekstblokk,
   ikke en graa boks. */
.kp-artikkel-kort{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-kort);
  overflow:hidden;display:flex;flex-direction:column;color:var(--text);box-shadow:var(--kp-elev);
  transition:transform var(--dur-normal) var(--ease-out),border-color var(--dur-fast) var(--ease-smooth),box-shadow var(--dur-normal) var(--ease-out);
}
.kp-artikkel-kort:hover{transform:var(--kp-lift);border-color:var(--line-strong);box-shadow:var(--kp-elev-hi)}
.kp-artikkel-kort__thumb{aspect-ratio:16/9;background:var(--surface-2);overflow:hidden}
.kp-artikkel-kort__thumb img{width:100%;height:100%;object-fit:cover}
.kp-artikkel-kort__body{padding:var(--s-3)}
.kp-artikkel-kort__dato{font-family:var(--font-display);font-size:.74rem;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--signal)}
.kp-artikkel-kort__body .kp-h3{margin:10px 0 8px}
.kp-artikkel-kort__ingress{font-size:.95rem;color:var(--text-dim)}

/* ============================================================
   /taler/ — ARKIVFLATA (archive-kp_sermon.php + template-parts/tale-kort.php)

   ALT ER SCOPET UNDER .kp-taler-arkiv, uten ett eneste unntak.
   Kortene, gridet, overskriftene og .kp-wrap laanes fra skallet
   slik de er; en bar .kp-sect-head eller .kp-taler__grid her
   ville flyttet dem paa forsiden ogsaa. Runde 3s tre
   kaskadefeil (.card, .kv, .gc) kom alle av nettopp det, og
   #108/#109/#111 i dette repoet av samme klasse.

   Ingen nye farger: alt gaar paa --line, --text-dim og
   --signal, saa flata foelger fri farge og begge modusene av
   seg selv.
   ============================================================ */
.kp-taler-arkiv .kp-sect-head{margin-bottom:var(--s-5)}

.kp-taler-arkiv__tom{padding:var(--s-3) 0}
.kp-taler-arkiv__tider{display:flex;align-items:center;gap:10px;margin-top:var(--s-2);color:var(--text-dim)}

/* Pagineringen. Selve nummerlenkene er WP-genererte og heter
   .page-numbers — de naas derfor gjennom vaar egen wrapper og
   aldri bart, ellers ville de truffet enhver WP-paginering
   temaet maatte faa senere. 44 px er UU-minsteflata for et
   trykkmaal, og pilene er ord og ikke tegn av samme grunn. */
.kp-taler-arkiv .kp-paginering{margin-top:var(--s-5)}
.kp-taler-arkiv .kp-paginering .nav-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.kp-taler-arkiv .kp-paginering .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;min-height:44px;padding:0 14px;
  border:1px solid var(--line);border-radius:var(--radius-knapp);
  font-family:var(--font-display);font-weight:600;font-size:.95rem;
  color:var(--text);text-decoration:none;
}
.kp-taler-arkiv .kp-paginering a.page-numbers:hover{border-color:var(--signal);color:var(--signal)}
.kp-taler-arkiv .kp-paginering .page-numbers.current{background:var(--signal);border-color:var(--signal);color:var(--signal-ink)}
.kp-taler-arkiv .kp-paginering .page-numbers.dots{border-color:transparent;min-width:0;padding:0 4px;color:var(--text-dim)}

/* Policyboksen nederst. En linje og dempet tekst, ikke en
   ramme: den er et svar til den som lurer, og skal ikke
   konkurrere med talene over. */
.kp-taler-arkiv__policy{border-top:1px solid var(--line)}
.kp-taler-arkiv__policy .kp-h2{font-size:clamp(1.3rem,2.4vw,1.7rem);margin:0 0 var(--s-2)}
.kp-taler-arkiv__policytekst{color:var(--text-dim);max-width:60ch}
.kp-taler-arkiv__policytekst p{margin:0 0 var(--s-2)}
.kp-taler-arkiv__policytekst p:last-child{margin-bottom:0}
.kp-taler-arkiv__policylenke{margin-top:var(--s-2)}

/* —— Responsivt for undervalgene. Alle selektorene her er (0,2,1) og slaar
   det generelle responsiv-laget under uansett kilderekkefoelge. —— */
@media (max-width:980px){
  .kp-hero[data-variant="delt"]{grid-template-columns:1fr}
  /* Stablet: bildet treffer seksjonskanten paa ALLE sider — ingen radius. */
  .kp-hero[data-variant="delt"] .kp-hero__media{order:1;min-height:auto;aspect-ratio:16/10;border-radius:0}
  .kp-hero[data-variant="delt"] .kp-hero__content{order:2;max-width:none;margin-left:0}
  .kp-taler[data-variant="fremhevet"] .kp-taler__grid{grid-template-columns:1fr 1fr}
  .kp-taler[data-variant="fremhevet"] .kp-tale-kort:first-child{grid-row:auto;grid-column:span 2}
  .kp-kalender[data-variant="kort"] .kp-reveal-group,
  .kp-kalender[data-variant="kompakt"] .kp-reveal-group{grid-template-columns:1fr}
  .kp-fellesskap[data-variant="flis"] .kp-steg-grid{grid-template-columns:1fr}
  .kp-nyher[data-variant="speilvendt"] .kp-nyher__grid{grid-template-columns:1fr}
  .kp-nyher[data-variant="uten-foto"] .kp-sjekkliste{grid-template-columns:1fr}
  /* Tre kolonner er en (0,2,0)-regel og ville ellers slaatt det generelle
     responsiv-laget uansett kilderekkefoelge. Samme to spalter som
     standard-oppsettet — varianten skal skille seg paa baandet, ikke paa
     hvor mange ansikter som faar plass. */
  .kp-stab[data-variant="navnebanner"] .kp-stab__grid{grid-template-columns:repeat(2,1fr);gap:var(--s-3)}
}
@media (max-width:720px){
  /* 375 px / 2 spalter gir ~160 px kort. Baandet maa da gi fra seg sidemarg
     og litt padding, ellers staar navnet paa tre linjer. */
  .kp-stab[data-variant="navnebanner"]{--kp-navneband:1.6rem}
  .kp-stab[data-variant="navnebanner"] .kp-person__tekst{margin-inline:6px;padding:10px 12px}
  .kp-stab[data-variant="navnebanner"] .kp-person__navn{font-size:1rem}
  .kp-taler[data-variant="fremhevet"] .kp-taler__grid{grid-template-columns:1fr}
  .kp-taler[data-variant="fremhevet"] .kp-tale-kort:first-child{grid-column:auto}
  .kp-taler[data-variant="fremhevet"] .kp-tale-kort:not(:first-child),
  .kp-taler[data-variant="liste"] .kp-tale-kort{flex-direction:column}
  .kp-taler[data-variant="liste"] .kp-tale-kort__thumb{flex:none;aspect-ratio:16/9}
  .kp-hero[data-variant="band"] .kp-hero__media{aspect-ratio:16/10}
}

/* ============================================================
   RESPONSIVT
   ============================================================ */
@media (max-width:980px){
  .kp-taler__grid{grid-template-columns:1fr 1fr}
  .kp-steg-grid{grid-template-columns:1fr 1fr}
  .kp-tilbud__grid{grid-template-columns:1fr 1fr}
  .kp-blimed__liste{grid-template-columns:1fr 1fr}
  .kp-stab__grid{grid-template-columns:1fr 1fr}
  .kp-nyher__grid{grid-template-columns:1fr;gap:var(--s-4)}
  .kp-nyher__foto{aspect-ratio:16/10}
  .kp-velkomst__foto{aspect-ratio:16/9}
  .kp-gi__band{grid-template-columns:1fr}
  .kp-gi__handling{justify-self:start}
  .kp-kontakt__grid{grid-template-columns:1fr;gap:var(--s-4)}
  .kp-footer__grid{grid-template-columns:1fr 1fr}
}
@media (max-width:720px){
  .kp-section{padding:var(--s-5) 0}
  .kp-nav{display:none}
  .kp-nav-toggle{display:block}
  .kp-taler__grid{grid-template-columns:1fr}
  /* Stables knappene, tar de hele bredden (katalog-feedback 31.8) — halvbrede
     knapper under hverandre leste som rot. Gjelder heroens CTA-rad i alle
     varianter; gi/nyhetsbrev har allerede egne fullbredde-regler. */
  .kp-hero__cta{flex-direction:column;gap:10px}
  .kp-hero__cta .kp-btn{width:100%;justify-content:center}
  /* Fellesskap-kortene stod i to klemte 179px-kolonner paa 375 — .kp-steg-grid
     gikk aldri under to spalter (katalog-feedback 31.8, «kort»-varianten). */
  .kp-steg-grid{grid-template-columns:1fr}
  /* Samme grunn for moetepunkt-kortene: de baerer bilde OG merker OG tid, og
     taaler enda mindre klem enn fellesskaps-kortene. */
  .kp-tilbud__grid{grid-template-columns:1fr}
  .kp-blimed__liste{grid-template-columns:1fr}
  .kp-tilbud__tom-kontakt .kp-btn{width:100%;justify-content:center}
  .kp-hero{min-height:80vh}
  /* 64 px luft over infofeltet er desktop-tuning. Paa mobil stables leddene, og
     raden er det siste i heroen — hvert piksel her avgjoer om «neste
     arrangement» faktisk staar over folden ved 375x812, ogsaa naar
     livestream-banneret spiser 48 px paa toppen. */
  .kp-hero__info{margin-top:var(--s-4)}
  .kp-hero__info>div,
  .kp-hero__info>a{padding:14px 0;margin-right:0;width:100%}
  .kp-event-rad{grid-template-columns:64px 1fr}
  .kp-event-rad__pil{display:none}
  .kp-dato-blokk__dag{font-size:1.2rem}
  .kp-podkast{flex-direction:column;align-items:flex-start}
  .kp-podkast__lenker{width:100%}
  .kp-podkast__lenker .kp-btn{flex:1 1 auto;justify-content:center}
  .kp-event-kalender{width:100%}
  .kp-event-kalender .kp-btn{flex:1 1 auto;justify-content:center}
  /* 168 px portrett + navn i to spalter klemmer H1-en til to tegn per linje paa 375. */
  .kp-person-side__topp{flex-direction:column;align-items:flex-start;gap:var(--s-2)}
  .kp-person-side__foto{width:140px}
  .kp-nb-skjema .kp-btn{width:100%;justify-content:center}
  .kp-livestream__tekst .kp-dim{display:none}
  .kp-footer__grid{grid-template-columns:1fr}
  .kp-launcher{right:16px;bottom:16px}
}

/* —— Kalenderraden paa smal skjerm: datoblokka OVER teksten ——
   Funn F6 i designtesten 09.09.2026
   (strategy/kirkepakka/test-design-retninger-2026-09-09.md, nettsmed-shared).

   Datoblokka stod ved siden av teksten hele veien ned. Regnet paa 375 px:
   .kp-wrap gir 327 px innhold, «kort»-varianten trekker fra 2x24 px kortpadding
   og saa 64 px datoblokk + 24 px gap — igjen staar ~191 px til beskrivelsen,
   som ved 14,72 px skrift er de 20 tegnene per linje testen maalte. Lesbar
   linjelengde er 45–75; under ~35 blir spalten ragget. Den bare
   «liste»-varianten er romsligere (~239 px, ~32 tegn) men fortsatt under gulvet.

   Bruddet er 560 px og ikke 720: mellom de to har raden nok bredde, og 720 er
   der pila allerede skrus av. Datoblokka beholder bredden sin (min-width 64px
   = samme spalte som over bruddet) og krymper ikke til teksten sin, saa
   «24 SEP» fortsatt staar paa to linjer slik den er tegnet.

   SCOPING: alt er gatet paa .kp-kalender. «kompakt» er utelatt med vilje —
   den skjuler .kp-event-rad__beskr helt og har ingen linjelengde aa redde.
   For raden holder det at dens egen (0,3,0)-regel vinner over den bare av de
   to her; for datoblokka maa unntaket skrives ut, ellers ville min-width 64px
   sprengt dens 56px-spalte. .kp-kalender[data-variant="kort"] maa paa samme
   vis staa eksplisitt: variantregelen over er (0,3,0) og ville ellers
   beholdt sine to spalter.

   .kp-arkiv MAA STAA HER OGSAA. /kalender/-arkivet pakker den samme raden
   i .kp-arkiv, aldri i .kp-kalender, saa uten et eget ledd her beholdt
   arkivet 720px-blokkas 64px 1fr helt ned til 375px — den ~239px-kolonnen
   designtesten 09.09.2026 maalte og forkastet (funn F6). Klassenavnet
   .kp-event-rad er delt, men gatingen paa foreldreklasse er det ikke: en
   ny forelder maa listes eksplisitt, den arves ikke. —— */
@media (max-width:560px){
  .kp-kalender .kp-event-rad,
  .kp-kalender[data-variant="kort"] .kp-event-rad,
  .kp-arkiv .kp-event-rad{
    grid-template-columns:minmax(0,1fr);gap:var(--s-2);align-items:start;
  }
  .kp-kalender:not([data-variant="kompakt"]) .kp-dato-blokk,
  .kp-arkiv .kp-dato-blokk{justify-self:start;min-width:64px}
}

/* —— Reduced motion (obligatorisk, alltid sist) —— */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
  }
  html.js .kp-reveal{opacity:1;transform:none}
  /* Hero-entré av (fase 9b) — vis sluttilstand uten bevegelse */
  html.js .kp-hero__media img{opacity:.9;transform:none;animation:none}
  html.js .kp-hero__content>*{opacity:1;transform:none;animation:none}
  /* Launcher-rader — vis sluttilstand, ingen forskyvning. Blokken over
     nullstiller transition-duration, men ikke -delay; uten dette ville radene
     fortsatt komme sekvensielt over 200 ms. */
  .kp-launcher__panel a{opacity:1;transform:none;transition-delay:0s!important}
}
