/*
 * 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    12 kuraterte paletter — eller «egen» (fri farge, avledet
 *                 server-side med garantert AA; se inc/farge.php)
 *   data-fontpar  9 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')}

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

  /* 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);

  /* 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) — 12 kuraterte paletter, globale
   ============================================================
   Modus-uavhengige aksentfamilier. Paletten eier BARE fargen; grunnflater
   og signatur bor i uttrykk-aksen. Alle 12 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;
}

/* —— 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) — 9 globale par ——
   Kategorinavn i UI («Grotesk», «Massiv», «Lun» …), aldri fontnavn.
   Alle ni 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. */
:root[data-fontpar="grotesk"]{--font-display:'Bricolage Grotesque',system-ui,sans-serif;--font-body:'Figtree',system-ui,sans-serif}
:root[data-fontpar="sonisk"]{--font-display:'Sora',system-ui,sans-serif;--font-body:'Inter',system-ui,sans-serif}
:root[data-fontpar="kinetisk"]{--font-display:'Chivo',system-ui,sans-serif;--font-body:'Manrope',system-ui,sans-serif}
:root[data-fontpar="massiv"]{--font-display:'Archivo Black',system-ui,sans-serif;--font-body:'Archivo',system-ui,sans-serif}
:root[data-fontpar="plakat"]{--font-display:'Anton',system-ui,sans-serif;--font-body:'Inter',system-ui,sans-serif}
:root[data-fontpar="smal"]{--font-display:'Bebas Neue',system-ui,sans-serif;--font-body:'Barlow',system-ui,sans-serif}
:root[data-fontpar="lun"]{--font-display:'Fraunces',Georgia,serif;--font-body:'Karla',system-ui,sans-serif}
:root[data-fontpar="roleg"]{--font-display:'Newsreader',Georgia,serif;--font-body:'Mulish',system-ui,sans-serif}
:root[data-fontpar="naer"]{--font-display:'Bitter',Georgia,serif;--font-body:'Source Sans 3',system-ui,sans-serif}

/* —— 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
   ============================================================ */
.kp-wrap{max-width:1200px;margin:0 auto;padding:0 var(--s-3)}
.kp-wrap--smal{max-width:720px}
.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)}
.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)}

/* —— 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(--s-3)}
.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)}

/* —— 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(--s-3)}
.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)}

/* ============================================================
   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).

   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(--s-3)}
.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(--s-3)}
.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);
}
/*
 * 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);
}

/* —— 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-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}
  .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}
}

/* —— 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}
}
