/*
 * Rol-tokens.
 *
 * Het palet in theme.json bevat pigmenten (inkt, papier, geel); hier bepalen
 * we welk pigment welke rol vervult. Alleen dit blok weet van modus — de rest
 * van de CSS gebruikt uitsluitend de --lk-* tokens en kantelt daardoor
 * vanzelf mee.
 *
 * Let op de omkering: op donker haalt geel 10.58:1 en bruin 2.85:1, op wit is
 * het precies andersom (1.64:1 om 6.08:1). De accentkleur wisselt dus van rol
 * — in het donker gaat de lamp aan.
 *
 * Voorrang, van zwak naar sterk:
 *   1. :root                -> donker, de standaard voor iedereen
 *   2. [data-theme="light"] -> de handmatige keuze van de bezoeker
 *
 * De systeemvoorkeur (prefers-color-scheme) telt bewust niet mee: de site is
 * donker bedoeld, ook op een apparaat dat in lichte modus staat. Alleen wie
 * zelf op de knop drukt krijgt licht - die keuze blijft in localStorage staan.
 */

:root,
:root[data-theme="dark"] {
    color-scheme: dark;

    --lk-bg: var(--wp--preset--color--ink);
    --lk-surface: var(--wp--preset--color--panel);
    --lk-border: var(--wp--preset--color--line);
    --lk-text: var(--wp--preset--color--bone);
    --lk-muted: var(--wp--preset--color--muted);

    --lk-link: var(--wp--preset--color--accent);
    --lk-link-hover: var(--wp--preset--color--bone);

    --lk-button-bg: var(--wp--preset--color--accent);
    --lk-button-text: var(--wp--preset--color--ink);
    --lk-button-hover-bg: var(--wp--preset--color--bone);
    --lk-button-hover-text: var(--wp--preset--color--ink);

    /* De maattekeningen van de kapvormen zijn wit op zwart. Op donker blijven
       ze zoals ze zijn en haalt screen het zwart weg; op licht draaien we ze om
       - zwarte lijn op wit - en laat multiply dat wit wegvallen tegen de kaart.
       Vandaar dat het hier staat en niet bij de kaart zelf: alleen dit blok
       weet van modus. */
    --lk-tekening-omkeren: none;
    --lk-tekening-meng: screen;
}

:root[data-theme="light"] {
    color-scheme: light;

    --lk-bg: var(--wp--preset--color--white);
    --lk-surface: var(--wp--preset--color--paper);
    --lk-border: var(--wp--preset--color--muted);
    --lk-text: var(--wp--preset--color--charcoal);
    --lk-muted: var(--wp--preset--color--brown);

    /* Geel haalt op wit maar 1.64:1 - als tekstkleur onbruikbaar. */
    --lk-link: var(--wp--preset--color--brown);
    --lk-link-hover: var(--wp--preset--color--charcoal);

    --lk-button-bg: var(--wp--preset--color--accent);
    --lk-button-text: var(--wp--preset--color--charcoal);
    --lk-button-hover-bg: var(--wp--preset--color--brown);
    --lk-button-hover-text: var(--wp--preset--color--white);

    --lk-tekening-omkeren: invert(1);
    --lk-tekening-meng: multiply;
}

/* --------------------------------------------------------------------------
   Maat-tokens

   Anders dan de kleuren hierboven kantelen deze niet met de modus, dus staan ze
   in een eigen :root. Een leesregel wordt niet korter omdat het licht uitgaat.

   De container is 1440px breed (theme.json). Lopende tekst over die volle
   breedte leest niet: dat is zo'n 180 tekens per regel, terwijl 60 tot 80 het
   comfortabele bereik is. Vandaar een aparte maat voor tekstkolommen.
   -------------------------------------------------------------------------- */

:root {
    /* In em en niet in rem, want een leesregel telt tekens en geen pixels: zo
       hoort de maat bij de tekst zelf en niet bij de wortelmaat. Een intro op
       20px krijgt daarmee vanzelf een bredere kolom dan lopende tekst op 18px,
       en allebei landen ze op ongeveer hetzelfde aantal tekens.

       Gemeten in Alegreya Sans: een teken is gemiddeld 0.4em breed, dus 34em
       is zo'n 85 tekens per regel. Dat is ruim: het knelpunt is dan niet de
       regel zelf maar de terugsprong naar het begin van de volgende. */
    --lk-tekstbreedte: 34em;
}

/* Utility voor eigen markup, een render.php, of het veld "Extra CSS-klasse"
   in de editor. Bewust niet gecentreerd: een tekstkolom hoort links in de
   container te beginnen, in lijn met alles eromheen. */
.lk-tekstbreedte {
    max-inline-size: var(--lk-tekstbreedte);
    /* Core's constrained layout zet margin-left/right op auto met !important.
       Zonder tegengewicht wordt elke tekstkolom gecentreerd en krijg je twee
       linkerranden op dezelfde pagina. Vandaar hier ook !important - het is
       geen specificiteitsprobleem dat met een langere selector te winnen is. */
    margin-inline: 0 auto !important;
}

/* --------------------------------------------------------------------------
   Basis
   -------------------------------------------------------------------------- */

/* De achtergrond komt uit theme.json op body; html meekleuren voorkomt een
   witte rand als de pagina korter is dan het venster. */
html {
    background-color: var(--lk-bg);
}

/* Springen naar een anker op dezelfde pagina - van een vorm naar het
   meetbriefje bijvoorbeeld - leest anders als een nieuwe pagina die inlaadt.
   Met een rollende sprong zie je dat je bent blijven waar je was.

   Alleen wanneer de bezoeker geen beperkte beweging heeft ingesteld: voor wie
   daar last van heeft is een springend scherm juist het probleem. */
@media (prefers-reduced-motion: no-preference) {
    html {
        scroll-behavior: smooth;
    }
}

body {
    -webkit-font-smoothing: antialiased;
}

/* Zichtbare focus in beide modi: geel valt op donker op, bruin op licht -
   allebei via het link-token, dat precies zo kantelt. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
    outline: 2px solid var(--lk-link);
    outline-offset: 2px;
}

hr,
.wp-block-separator {
    border: 0;
    border-top: 1px solid var(--lk-border);
}

figcaption,
.wp-block-post-date,
.has-small-font-size {
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Header en footer
   -------------------------------------------------------------------------- */

.lk-header {
    border-bottom: 1px solid var(--lk-border);
}

.lk-footer {
    border-top: 1px solid var(--lk-border);
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Modusknop

   Geen WordPress-block maar eigen markup uit parts/header.html - vandaar de
   lk- prefix in plaats van wp-block-.
   -------------------------------------------------------------------------- */

.lk-theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 2.5rem;
    block-size: 2.5rem;
    padding: 0;
    border: 1px solid var(--lk-border);
    border-radius: 999px;
    background: transparent;
    color: var(--lk-text);
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s;
}

.lk-theme-toggle:hover {
    border-color: var(--lk-link);
    color: var(--lk-link);
}

.lk-theme-toggle svg {
    inline-size: 1.125rem;
    block-size: 1.125rem;
    display: block;
}

/* De knop toont wat je krijgt als je klikt, niet waar je nu bent. Standaard
   staat de site donker, dus wijst hij naar de zon. Zelfde tweetrapsvoorrang
   als bij de tokens hierboven. */
.lk-theme-toggle .lk-icon-sun {
    display: block;
}

.lk-theme-toggle .lk-icon-moon {
    display: none;
}

:root[data-theme="light"] .lk-theme-toggle .lk-icon-sun {
    display: none;
}

:root[data-theme="light"] .lk-theme-toggle .lk-icon-moon {
    display: block;
}

/* --------------------------------------------------------------------------
   Sitelogo

   Het logo heeft een eigen ondergrond (beige/bruine vlakken) en leest daardoor
   in beide modi. Alleen de onderkant van de header raakt het aan, vandaar de
   uitlijning op het midden van de flexrij.
   -------------------------------------------------------------------------- */

.wp-block-site-logo img {
    display: block;
    height: auto;
}

/* Op een breed scherm mag het logo wat meer ruimte innemen dan de 180px uit
   het blok. Het bronbestand is 558px breed, dus 220px blijft ook op een
   retinascherm scherp. Op een telefoon blijft het bij 180: daar deelt het de
   regel met het menu-icoon. */
@media (min-width: 48rem) {
    .wp-block-site-logo img {
        width: 220px;
    }
}

/* --------------------------------------------------------------------------
   Hero (lampenkappen/hero)

   Tekst links, beeld rechts vanaf md. Zonder beeld valt de rechterkolom weg en
   loopt de tekst door tot de leesbreedte - anders blijft er een gat staan.
   -------------------------------------------------------------------------- */

.lk-hero {
    display: grid;
    gap: var(--wp--preset--spacing--70);
    align-items: center;
    padding-block: var(--wp--preset--spacing--90);
}

@media (min-width: 48rem) {
    .lk-hero--met-beeld {
        grid-template-columns: 7fr 5fr;
    }
}

.lk-hero__bovenkopje {
    margin: 0 0 var(--wp--preset--spacing--30);
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: var(--wp--preset--font-size--small);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--lk-muted);
}

.lk-hero__titel {
    margin: 0;
    font-family: var(--wp--preset--font-family--heading);
    font-size: clamp(2.5rem, 6vw, 4rem);
    font-weight: 500;
    line-height: 1.05;
}

/* Het cursieve woord in de kop krijgt de accentkleur. Op licht is geel als
   tekst onbruikbaar (1.64:1), daarom loopt dit via het link-token - dat is
   bruin op licht en geel op donker. */
.lk-hero__titel em {
    font-style: italic;
    color: var(--lk-link);
}

.lk-hero__lead {
    max-width: 34rem;
    margin: var(--wp--preset--spacing--50) 0 0;
    font-size: var(--wp--preset--font-size--large);
    line-height: 1.5;
    color: var(--lk-muted);
}

.lk-hero__knoppen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--40);
    margin-top: var(--wp--preset--spacing--70);
}

.lk-hero__media {
    margin: 0;
}

.lk-hero__beeld {
    display: block;
    inline-size: 100%;
    block-size: auto;
    border-radius: 2px;
}

/* --------------------------------------------------------------------------
   Knoppen

   Eigen markup, dus niet de opmaak die theme.json aan wp-block-button geeft.
   De kleuren komen wel uit dezelfde tokens, zodat beide soorten knoppen in
   beide modi hetzelfde ogen.
   -------------------------------------------------------------------------- */

.lk-knop {
    display: inline-block;
    padding: 0.75rem 1.5rem;
    border: 1px solid transparent;
    border-radius: 2px;
    font-weight: 500;
    line-height: 1.2;
    text-decoration: none;
    transition: background-color 0.2s, color 0.2s, border-color 0.2s;
}

.lk-knop--primair {
    background-color: var(--lk-button-bg);
    color: var(--lk-button-text);
}

.lk-knop--primair:hover {
    background-color: var(--lk-button-hover-bg);
    color: var(--lk-button-hover-text);
}

.lk-knop--rand {
    border-color: var(--lk-border);
    color: var(--lk-text);
}

.lk-knop--rand:hover {
    border-color: var(--lk-link);
    color: var(--lk-link);
}

/* --------------------------------------------------------------------------
   Hero breed (lampenkappen/hero-breed)

   Twee lagen: het blok zelf loopt van rand tot rand, __binnen is even breed als
   de rest van de site zodat de kop uitlijnt met logo, menu en paginatekst.

   De breedteberekening: contentSize is de leesbreedte binnen de body-padding.
   Een blok op volle breedte valt buiten die padding, dus telt __binnen de
   padding er zelf bij op en trekt hem er daarna weer af. Netto staat de tekst
   op precies dezelfde x als overal elders. Die padding is --wp--custom--zijmarge
   (theme.json), dezelfde meegroeiende zijmarge als de body - niet de vaste
   gutter van het raster.
   -------------------------------------------------------------------------- */

/* De lampillustratie naast de hero. Overgenomen uit het bronproject: een
   staande lamp met een gloed erachter. De stofkleur in de SVG is een materiaal
   en geen huisstijl-rol, dus die staat vast in het bestand - alleen het geel
   komt uit het palet. */

/* Onder md staat de lamp niet naast maar onder de tekst, en dan kost ze
   26rem hoogte voordat de bezoeker iets te zien krijgt dat ertoe doet. Op een
   telefoon is ze daarom weg; de hero blijft dan kop, tekst en knop. Mobile
   first, net als de rest: het raster van .lk-hero--met-beeld begint bij
   dezelfde 48rem. */
.lk-hero__lamp {
    display: none;
}

@media (min-width: 48rem) {
    .lk-hero__lamp {
        position: relative;
        display: flex;
        align-items: flex-end;
        justify-content: center;
        block-size: 26.25rem;
    }
}

.lk-hero__lamp svg {
    position: relative;
    z-index: 1;
    inline-size: 11.25rem;
    block-size: auto;
}

/* Het licht zelf: een verloop dat naar buiten toe oplost, achter de lamp. */
.lk-glow {
    position: absolute;
    inset-block-start: 8%;
    inset-inline-start: 50%;
    inline-size: 21.25rem;
    block-size: 21.25rem;
    translate: -50% 0;
    border-radius: 50%;
    background: radial-gradient(
        circle,
        rgb(255 192 0 / 35%) 0%,
        rgb(255 192 0 / 8%) 45%,
        rgb(255 192 0 / 0%) 72%
    );
    animation: lk-pulse 5s ease-in-out infinite;
}

@keyframes lk-pulse {
    0%,
    100% {
        opacity: 0.7;
        scale: 1;
    }

    50% {
        opacity: 1;
        scale: 1.05;
    }
}

@media (prefers-reduced-motion: reduce) {
    .lk-glow {
        animation: none;
    }
}

.lk-hero-breed {
    position: relative;
    display: flex;
    align-items: center;
    overflow: hidden;
    background-color: var(--lk-hero-grond);
}

.lk-hero-breed__binnen {
    position: relative;
    z-index: 1;
    /* Zonder border-box telt de padding bij max-inline-size op en staat de kop
       precies één padding naast de rest van de site. */
    box-sizing: border-box;
    inline-size: 100%;
    max-inline-size: calc(
        var(--wp--style--global--content-size) + 2 * var(--wp--custom--zijmarge)
    );
    margin-inline: auto;
    padding-inline: var(--wp--custom--zijmarge);
    padding-block: var(--wp--preset--spacing--90);
}

/* --------------------------------------------------------------------------
   Begrensde breedte (zijbalk: Breedte > Breedte begrenzen)

   Zonder begrenzing loopt de band van rand tot rand: core geeft een
   alignfull-blok twee negatieve marges ter grootte van de body-padding en
   daarmee valt het buiten de zijmarge. Die marges zijn hier geen -padding meer
   maar precies zoveel dat de band op --lk-hero-max uitkomt en gecentreerd
   staat:

       marge = (venster - bandbreedte) / 2 - zijmarge

   Het venster is 100% (de containerbreedte) plus twee keer de zijmarge, en de
   max() vangt het geval dat het scherm smaller is dan de grens: dan wordt de
   marge weer precies -zijmarge en is er niets veranderd. Geen media query dus,
   en geen 100vw - die telt de scrollbalk mee en levert een horizontale schuif
   op.

   De tekst blijft uitlijnen met de header omdat band en header allebei
   gecentreerd zijn; daarom heeft de grens in de editor een ondergrens.

   .wp-site-blocks staat er alleen voor het gewicht: core's regel weegt twee
   klassen en zou anders kunnen winnen op volgorde van de stylesheets.
   -------------------------------------------------------------------------- */

.wp-site-blocks .lk-hero-breed.is-begrensd {
    margin-inline: calc(
        max(
            0px,
            100% + 2 * var(--wp--style--root--padding-left) - var(--lk-hero-max)
        ) / 2 - var(--wp--style--root--padding-left)
    );
}

/* --------------------------------------------------------------------------
   Beeld en overlay
   -------------------------------------------------------------------------- */

.lk-hero-breed__media {
    position: absolute;
    inset: 0;
}

.lk-hero-breed__beeld {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    display: block;
}

/* De overlay neemt de gekozen achtergrondkleur over. Eén keuze bepaalt dus
   zowel de kleur zonder beeld als de tint eroverheen - een overlay die uit de
   huisstijl valt kan zo niet ontstaan. */
.lk-hero-breed__media::after {
    content: "";
    position: absolute;
    inset: 0;
    background-color: var(--lk-hero-grond);
    opacity: var(--lk-hero-dekking);
}

/* --------------------------------------------------------------------------
   Tekstkleur

   De hero staat op zijn eigen grond en volgt daarom niet de modus van de
   pagina: op een donkere overlay hoort lichte tekst, ook in lichte modus. Het
   blok zet daarvoor dezelfde rol-tokens lokaal opnieuw - hetzelfde mechanisme
   als bovenaan dit bestand, alleen op één blok in plaats van op :root.
   -------------------------------------------------------------------------- */

.lk-hero-breed.is-tekst-licht {
    --lk-text: var(--wp--preset--color--bone);
    --lk-muted: var(--wp--preset--color--muted);
    --lk-border: var(--wp--preset--color--muted);
    --lk-link: var(--wp--preset--color--accent);
    --lk-button-bg: var(--wp--preset--color--accent);
    --lk-button-text: var(--wp--preset--color--ink);
    --lk-button-hover-bg: var(--wp--preset--color--bone);
    --lk-button-hover-text: var(--wp--preset--color--ink);
}

.lk-hero-breed.is-tekst-donker {
    --lk-text: var(--wp--preset--color--charcoal);
    --lk-muted: var(--wp--preset--color--brown);
    --lk-border: var(--wp--preset--color--brown);
    --lk-link: var(--wp--preset--color--brown);
    --lk-button-bg: var(--wp--preset--color--accent);
    --lk-button-text: var(--wp--preset--color--charcoal);
    --lk-button-hover-bg: var(--wp--preset--color--brown);
    --lk-button-hover-text: var(--wp--preset--color--white);
}

.lk-hero-breed {
    color: var(--lk-text);
}

/* --------------------------------------------------------------------------
   Tekstonderdelen

   Zelfde maatvoering als de gewone hero. Alleen de introtekst staat hier op de
   tekstkleur in plaats van op gedempt: over een foto is gedempt grijs te zwak.
   -------------------------------------------------------------------------- */

.lk-hero-breed__bovenkopje {
    margin: 0 0 var(--wp--preset--spacing--30);
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: var(--wp--preset--font-size--small);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--lk-link);
}

.lk-hero-breed__titel {
    margin: 0;
    max-inline-size: 20ch;
    font-family: var(--wp--preset--font-family--heading);
    font-size: clamp(2.5rem, 6vw, 4rem);
    font-weight: 500;
    line-height: 1.05;
}

.lk-hero-breed__titel em {
    font-style: italic;
    color: var(--lk-link);
}

.lk-hero-breed__lead {
    max-inline-size: 34rem;
    margin: var(--wp--preset--spacing--50) 0 0;
    font-size: var(--wp--preset--font-size--large);
    line-height: 1.5;
}

.lk-hero-breed__knoppen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--40);
    margin-top: var(--wp--preset--spacing--70);
}

/* --------------------------------------------------------------------------
   Kaart (blokstijl op core/column en core/group)

   Rol-tokens, dus de kaart kantelt mee met de modus: papier op licht, paneel
   op donker. Tekst haalt daarop 8,92:1 respectievelijk 13,29:1.
   -------------------------------------------------------------------------- */

.is-style-kaart {
    box-sizing: border-box;
    padding: var(--wp--preset--spacing--70);
    border: 1px solid var(--lk-border);
    border-radius: 2px;
    background-color: var(--lk-surface);
}

/* In een kolommenrij rekken de kaarten mee met de langste, zodat de randen
   onderaan gelijk liggen ook als de ene kolom meer tekst heeft. */
.wp-block-columns > .wp-block-column.is-style-kaart {
    align-self: stretch;
}

/* De eerste kop in een kaart heeft geen marge nodig: de padding doet dat al. */
.is-style-kaart > :first-child {
    margin-block-start: 0;
}

.is-style-kaart > :last-child {
    margin-block-end: 0;
}

/* --------------------------------------------------------------------------
   Klikbare kaart

   Link de kop, en de hele kaart wordt klikbaar: het ::after van die link dekt
   de kaart af. Zo blijft er één echte link met echte linktekst - goed voor
   toetsenbord, screenreader en het contextmenu - terwijl het klikvlak zo groot
   is als de kaart. Een <a> om de hele kaart heen zou de kop uit de
   documentstructuur trekken en is bovendien geen geldige markup rond blokken.

   De koppeling zit bewust op een kop-link en niet op elke link in de kaart:
   zet je er later een tweede link in, dan gaat die niet ineens de kaart kapen.
   -------------------------------------------------------------------------- */

.is-style-kaart {
    position: relative;
    transition: border-color 0.2s;
}

.is-style-kaart :is(h1, h2, h3, h4) a {
    color: inherit;
    text-decoration: none;
}

.is-style-kaart :is(h1, h2, h3, h4) a::after {
    content: "";
    position: absolute;
    inset: 0;
    /* Boven de tekst, zodat de hele kaart klikt, maar onder eventuele losse
       links in de kaart, die hun eigen klik moeten houden. */
    z-index: 1;
}

/* De hele kaart reageert, niet alleen de kop - anders lijkt alleen de tekst
   klikbaar terwijl het klikvlak veel groter is. */
.is-style-kaart:has(:is(h1, h2, h3, h4) a:hover),
.is-style-kaart:has(:is(h1, h2, h3, h4) a:focus-visible) {
    border-color: var(--lk-link);
}

.is-style-kaart :is(h1, h2, h3, h4) a:hover {
    color: var(--lk-link);
}

/* De focusring hoort om de kaart, niet om het onzichtbare dekvlak. */
.is-style-kaart:has(:is(h1, h2, h3, h4) a:focus-visible) {
    outline: 2px solid var(--lk-link);
    outline-offset: 2px;
}

.is-style-kaart :is(h1, h2, h3, h4) a:focus-visible {
    outline: none;
}

/* Losse links in de kaart moeten boven het dekvlak blijven liggen. */
.is-style-kaart :not(:is(h1, h2, h3, h4)) a {
    position: relative;
    z-index: 2;
}

/* --------------------------------------------------------------------------
   Sectie

   Het ritme van de pagina: ruimte eromheen en een kop waarin de h2 links staat
   en de introtekst rechts. Die twee liggen op dezelfde onderlijn
   (align-items: flex-end), zodat de intro naast de kop hangt en niet eronder -
   dat is wat de sectie zijn brede, rustige aanhef geeft.

   Twee ingangen naar dezelfde klasse:

     - de eigen blokken (diensten, stappen) zetten .lk-sectie zelf om hun
       inhoud heen, want een sectie is daar het hele blok;
     - de blokstijl "Sectie" op een groep, voor alles wat uit core-blokken
       bestaat (portfolio, veelgestelde vragen, een afsluitende oproep).

   Zo staat de maatvoering op een plek en hoeft een nieuwe sectie geen nieuwe
   CSS.
   -------------------------------------------------------------------------- */

.lk-sectie,
.wp-block-group.is-style-sectie {
    padding-block: 5.5rem;
}

.lk-sectie__kop,
.is-style-sectie > .lk-sectie__kop {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: flex-end;
    gap: 1.5rem;
    margin-block-end: 3rem;
}

.lk-sectie__kop > :is(h1, h2, h3) {
    margin: 0;
    /* Iets kleiner dan de x-large preset: een sectiekop is een tussenkop, geen
       paginatitel. De clamp houdt hem op een telefoon leesbaar. */
    font-size: clamp(1.625rem, 3.4vw, 2.25rem);
}

.lk-sectie__intro {
    margin: 0;
    font-size: 1.125rem;
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Diensten (lampenkappen/diensten)

   Kaarten naast elkaar, gescheiden door een enkele haarlijn. De truc: het
   raster heeft een gap van 1px en de achtergrond van het raster is de randkleur
   - de gap laat die achtergrond zien. Zo staat er precies een lijn tussen twee
   kaarten, zonder dubbele randen op de naden, wat je met border-right per kaart
   wel zou krijgen.

   Daarom staat dit raster los van .lk-grid: die gap is witruimte van 24px, deze
   is een rand van 1px.

   Drie kaarten naast elkaar is de bedoelde maat. Bij vier of meer valt het
   raster terug op twee kolommen: vier smalle kaarten naast elkaar leest als een
   tabel en elke kaart verliest zijn gewicht.
   -------------------------------------------------------------------------- */

.lk-diensten {
    display: grid;
    gap: 1px;
    background-color: var(--lk-border);
    border: 1px solid var(--lk-border);
}

@media (min-width: 48rem) {
    .lk-diensten {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .lk-diensten:has(> :nth-child(4)) {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* De hele kaart is de link - vandaar een <a> met display:flex en niet een <div>
   met een link erin. Er is een echte linktekst (.lk-dienst__meer), dus het
   klikvlak heeft ook voor een schermlezer een naam. */
.lk-dienst {
    display: flex;
    flex-direction: column;
    padding: 2rem 1.75rem 1.75rem;
    background-color: var(--lk-bg);
    color: inherit;
    text-decoration: none;
    transition: background-color 0.25s;
}

.lk-dienst:hover {
    background-color: var(--lk-surface);
}

/* Naar binnen (-2px), want een outline buiten de kaart valt in de 1px gap weg
   tegen de rand van de buurkaart. */
.lk-dienst:focus-visible {
    outline: 2px solid var(--lk-link);
    outline-offset: -2px;
}

.lk-dienst__titel {
    margin: 0 0 0.75rem;
    font-size: 1.125rem;
}

.lk-dienst__tekst {
    margin: 0;
    line-height: 1.6;
    color: var(--lk-muted);
}

/* Ziet eruit als een link maar is het niet: de hele kaart is de link. Het
   pijltje zit in ::after en niet in de tekst, zodat een schermlezer geen los
   teken voorleest. margin-block-start: auto duwt hem naar de onderkant, zodat
   drie kaarten van ongelijke lengte hun pijltje toch op een lijn hebben. */
.lk-dienst__meer {
    margin-block-start: auto;
    padding-block-start: 1.5rem;
    font-size: 1rem;
    font-weight: 500;
    color: var(--lk-link);
}

.lk-dienst__meer::after {
    content: " \2192";
}

/* --------------------------------------------------------------------------
   Stappen (lampenkappen/stappen)

   Vier stappen op een rij, elk met een haarlijn erboven en een genummerd
   label. Anders dan de diensten staan deze los van elkaar: geen aaneengesloten
   raster maar vier losse kolommen met de gewone gutter ertussen.

   Het nummer staat in systeem-mono. Cijfers in Petrona zijn hier te zacht - een
   stapnummer is een label, geen kop.
   -------------------------------------------------------------------------- */

.lk-stappen {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--wp--preset--spacing--50);
    margin: 0;
    padding: 0;
    list-style: none;
}

@media (min-width: 30rem) {
    .lk-stappen {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 64rem) {
    .lk-stappen {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

.lk-stap {
    padding-block-start: 1.125rem;
    border-block-start: 1px solid var(--lk-border);
}

.lk-stap__nummer {
    display: block;
    margin-block-end: 0.625rem;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 1rem;
    color: var(--lk-link);
}

.lk-stap__titel {
    margin: 0 0 0.5rem;
    font-size: 1.125rem;
    font-weight: 500;
}

.lk-stap__tekst {
    margin: 0;
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Portfolio

   Het raster zelf komt uit core: post-template staat in de sjablonen op een
   grid-layout met drie kolommen, en de gutter is de blockGap van 24px. Bij een
   container van 1440px is een derde precies 464px - vier rasterkolommen plus de
   drie gutters ertussen - dus het valt samen met .lk-grid zonder dat hier iets
   herhaald hoeft te worden.

   Wat wel hier moet: de titel onder het beeld. Core zet daar dezelfde blockGap
   van 24px tussen als tussen twee losse blokken, en dan hangt het bijschrift los
   van zijn afbeelding in plaats van erbij.
   -------------------------------------------------------------------------- */

.lk-portfolio .wp-block-post-title {
    margin-block-start: 0.75rem;
    line-height: 1.35;
}

.lk-portfolio .wp-block-post-title a {
    color: var(--lk-text);
    text-decoration: none;
}

.lk-portfolio .wp-block-post-title a:hover {
    color: var(--lk-link);
    text-decoration: underline;
}

.lk-portfolio .wp-block-post-featured-image img {
    display: block;
    inline-size: 100%;
}

/* Core geeft de uitgelichte afbeelding een ondermarge, bedoeld als ruimte naar
   de titel eronder. Die titel staat er niet meer, en de marge maakte de afstand
   tussen de rijen 42px terwijl die tussen de kolommen 24px is. Nu is de ruimte
   rondom elke foto overal even groot: de gutter, en niets erbovenop. */
.lk-portfolio .wp-block-post-featured-image {
    margin-block-end: 0;
}

/* De soort onder de titel op een projectpagina: een label, geen kop. */
.wp-block-post-terms {
    display: block;
    margin-block-end: var(--wp--preset--spacing--50);
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Het raster: twaalf kolommen met 24px ertussen.

   De 24px staat niet hier maar in theme.json, als spacing-preset 50 en als
   blockGap. Daar is het de enige bron: de editor biedt dezelfde maat aan, core
   gebruikt hem tussen blokken, en dit raster leest hem uit. Verander je de
   gutter, dan verander je die preset - niet deze regels.

   Gebruik vanuit markup (een eigen blok, een render.php, of het veld
   "Extra CSS-klasse" in de editor):

       <div class="lk-grid">
           <div class="lk-col-md-8">...</div>
           <div class="lk-col-md-4">...</div>
       </div>

   Een cel vult standaard de volle breedte. Twaalf kolommen naast elkaar is op
   een telefoon niets, dus mobiel is het een kolom en kies je vanaf md zelf.
   -------------------------------------------------------------------------- */

.lk-grid {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: var(--wp--preset--spacing--50);
}

/* Gelijke specificiteit met .lk-col-*, dus deze regel moet hierboven blijven
   staan: bij gelijkspel wint de laatste. */
.lk-grid > * {
    grid-column: span 12;
}

.lk-col-1 {
    grid-column: span 1;
}

.lk-col-2 {
    grid-column: span 2;
}

.lk-col-3 {
    grid-column: span 3;
}

.lk-col-4 {
    grid-column: span 4;
}

.lk-col-5 {
    grid-column: span 5;
}

.lk-col-6 {
    grid-column: span 6;
}

.lk-col-7 {
    grid-column: span 7;
}

.lk-col-8 {
    grid-column: span 8;
}

.lk-col-9 {
    grid-column: span 9;
}

.lk-col-10 {
    grid-column: span 10;
}

.lk-col-11 {
    grid-column: span 11;
}

.lk-col-12 {
    grid-column: span 12;
}

@media (min-width: 48rem) {
    .lk-col-md-1 {
        grid-column: span 1;
    }

    .lk-col-md-2 {
        grid-column: span 2;
    }

    .lk-col-md-3 {
        grid-column: span 3;
    }

    .lk-col-md-4 {
        grid-column: span 4;
    }

    .lk-col-md-5 {
        grid-column: span 5;
    }

    .lk-col-md-6 {
        grid-column: span 6;
    }

    .lk-col-md-7 {
        grid-column: span 7;
    }

    .lk-col-md-8 {
        grid-column: span 8;
    }

    .lk-col-md-9 {
        grid-column: span 9;
    }

    .lk-col-md-10 {
        grid-column: span 10;
    }

    .lk-col-md-11 {
        grid-column: span 11;
    }

    .lk-col-md-12 {
        grid-column: span 12;
    }
}

/* --------------------------------------------------------------------------
   Leesbreedte (blokstijl op core/group)

   Zelfde maat als .lk-tekstbreedte, maar aan te zetten in de editor onder
   Stijlen. Voor wie een lap tekst op een pagina zet zonder aan CSS-klassen
   te willen denken.
   -------------------------------------------------------------------------- */

.wp-block-group.is-style-leesbreedte {
    max-inline-size: var(--lk-tekstbreedte);
    /* Zie .lk-tekstbreedte hierboven: links uitlijnen, en core's !important
       vraagt hetzelfde terug. */
    margin-inline: 0 auto !important;
}

/* De groep is vaak zelf een constrained container; dan bepaalt core de breedte
   van de kinderen op contentSize (1440px) en zou de max-width hierboven alleen
   op de groep zelf werken. Deze regel haalt dat weg, zodat de kinderen de
   leesbreedte volgen in plaats van eroverheen te schieten. */
.wp-block-group.is-style-leesbreedte > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
    max-inline-size: none;
}

/* --------------------------------------------------------------------------
   Sectiebreedte: hoeveel van de twaalf kolommen neemt een blok?

   De kolombreedte wordt uit de container en de gutter berekend, niet
   ingetypt - verandert een van beide, dan schuift dit mee:

       kolom = (container - 11 gutters) / 12

   Een sectie van n kolommen is dan n kolommen plus de n-1 gutters ertussen.
   Bij 1440px en 24px gutter: kolom = 98px, dus 12 = 1440, 10 = 1196, 8 = 952.

   Even spans landen precies op rasterlijnen als je ze centreert: de ruimte die
   overblijft is dan een heel aantal kolommen plus gutters. Vandaar dat de
   blokstijlen 12, 10, 8 en 6 aanbieden en niet de oneven maten - die zouden op
   een halve gutter uitkomen.

   Onder md is alles volle breedte: acht van de twaalf kolommen is op een
   telefoon geen sectie maar een marge.
   -------------------------------------------------------------------------- */

:root {
    --lk-kolom: calc(
        (var(--wp--style--global--content-size) - 11 * var(--wp--preset--spacing--50)) / 12
    );
}

@media (min-width: 48rem) {
    .lk-breedte-1,
    .lk-breedte-2,
    .lk-breedte-3,
    .lk-breedte-4,
    .lk-breedte-5,
    .lk-breedte-6,
    .lk-breedte-7,
    .lk-breedte-8,
    .lk-breedte-9,
    .lk-breedte-10,
    .lk-breedte-11,
    .lk-breedte-12,
    .wp-block-group.is-style-breedte-12,
    .wp-block-columns.is-style-breedte-12,
    .wp-block-group.is-style-breedte-10,
    .wp-block-columns.is-style-breedte-10,
    .wp-block-group.is-style-breedte-8,
    .wp-block-columns.is-style-breedte-8,
    .wp-block-group.is-style-breedte-6,
    .wp-block-columns.is-style-breedte-6 {
        max-inline-size: calc(
            var(--lk-span) * var(--lk-kolom) + (var(--lk-span) - 1) * var(--wp--preset--spacing--50)
        );
        margin-inline: auto;
    }
}

.lk-breedte-1 {
    --lk-span: 1;
}

.lk-breedte-2 {
    --lk-span: 2;
}

.lk-breedte-3 {
    --lk-span: 3;
}

.lk-breedte-4 {
    --lk-span: 4;
}

.lk-breedte-5 {
    --lk-span: 5;
}

.lk-breedte-6,
.wp-block-group.is-style-breedte-6,
.wp-block-columns.is-style-breedte-6 {
    --lk-span: 6;
}

.lk-breedte-7 {
    --lk-span: 7;
}

.lk-breedte-8,
.wp-block-group.is-style-breedte-8,
.wp-block-columns.is-style-breedte-8 {
    --lk-span: 8;
}

.lk-breedte-9 {
    --lk-span: 9;
}

.lk-breedte-10,
.wp-block-group.is-style-breedte-10,
.wp-block-columns.is-style-breedte-10 {
    --lk-span: 10;
}

.lk-breedte-11 {
    --lk-span: 11;
}

.lk-breedte-12,
.wp-block-group.is-style-breedte-12,
.wp-block-columns.is-style-breedte-12 {
    --lk-span: 12;
}

/* --------------------------------------------------------------------------
   Volle-breedte blok direct onder de header

   Core zet tussen de header en main de blockGap van 24px. Begint een pagina met
   een blok dat van rand tot rand loopt, dan hoort dat blok tegen de header aan
   te sluiten - die 24px leest daar als een kier, niet als witruimte.

   De :has() kijkt of het eerste blok in de inhoud alignfull is. Zo geldt het
   alleen waar het moet: op een pagina die met een titel of een gewone alinea
   begint, blijft de ruimte gewoon staan.
   -------------------------------------------------------------------------- */

main:has(> .wp-block-post-content > .alignfull:first-child) {
    margin-block-start: 0;
}

/* En dan hoort de scheidingslijn onder de header ook weg: tegen een foto aan is
   het geen scheiding meer maar een streep over het beeld. De header houdt zijn
   lijn wel op pagina's die met een titel of gewone tekst beginnen, waar hij de
   navigatie van de inhoud scheidt.

   Transparant in plaats van weggehaald, zodat de header even hoog blijft en de
   hero niet 1px verspringt ten opzichte van andere pagina's. */
:root:has(main > .wp-block-post-content > .alignfull:first-child) .lk-header {
    border-block-end-color: transparent;
}

/* --------------------------------------------------------------------------
   Kapvormen (lampenkappen/vormen)
   --------------------------------------------------------------------------
   Een raster met vaste minimumbreedte in plaats van een vast aantal kolommen:
   het aantal vormen staat niet vast - dat beheert de klant zelf - dus mag het
   raster niet uitgaan van twaalf. auto-fill houdt de kaarten even breed, ook
   als er een vorm bijkomt of afvalt.

   De tekeningen zijn inline SVG uit assets/vormen/ en tonen de kap zelf, zonder
   voet of steel: onder een kap hoort in dit raster niets te staan behalve de
   naam. Ze delen een kader (viewBox), dus Empire XL blijft groter dan Empire.
   Inline en niet als <img>, want het geel komt uit het palet in de CSS.
   -------------------------------------------------------------------------- */

.lk-vormen {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
    gap: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

.lk-vorm {
    display: flex;
    flex-direction: column;
    align-items: center;
    /* Met height 100% moet de padding en de rand binnen die hoogte vallen -
       anders komt er 38px bovenop en steekt elke kaart onder zijn cel uit. */
    box-sizing: border-box;
    /* Een pixel hoger dan de cel: net als de negatieve marge hieronder laat dat
       de onderrand samenvallen met de bovenrand van de kaart eronder. Met
       height 100% raken de twee randen elkaar en wordt de lijn 2px. */
    height: calc(100% + 1px);
    padding: 1.25rem 1rem 1rem;
    background-color: var(--lk-bg);
    border: 1px solid var(--lk-border);
    border-radius: 2px;
    color: inherit;
    text-align: center;
    text-decoration: none;
    /* Zonder gutter staan twee randen van 1px tegen elkaar en wordt de lijn
       tussen twee kaarten 2px, terwijl de buitenrand er 1px blijft. Elke kaart
       schuift daarom 1px over zijn rechterbuur heen (en over de rij eronder,
       zie de hoogte hierboven): de twee randen vallen samen tot een lijn, en
       overal even dik. */
    margin-inline-end: -1px;
}

/* Alleen een klikbare kaart reageert op de muis. Zonder bestemming rendert
   render.php een <div>, en dan zou hover een klikvlak suggereren dat er niet
   is. */
/* Bij hover licht het vlak op, net als bij de kaarten van Wat we doen
   (.lk-dienst). Geen gele rand: die trekt een lijn om een kaart die al door
   rasterlijnen omsloten is. En geen verschuiving - in een raster waar alles op
   een lijn staat, valt die beweging op als een fout. */
a.lk-vorm {
    transition: background-color 0.25s;
}

a.lk-vorm:hover {
    background-color: var(--lk-surface);
}

a.lk-vorm:focus-visible {
    outline: 2px solid var(--lk-link);
    outline-offset: 2px;
}

.lk-vorm__tekening {
    display: block;
    width: 100%;
    max-width: 8rem;
    margin-block-end: 1rem;
}

.lk-vorm__tekening :is(svg, img) {
    display: block;
    width: 100%;
    height: auto;
}

.lk-vorm__afbeelding {
    filter: var(--lk-tekening-omkeren);
    mix-blend-mode: var(--lk-tekening-meng);
}

.lk-vorm__naam {
    margin: 0;
    font-size: 1rem;
}

.lk-vorm__maat {
    margin-block-start: 0.25rem;
    font-size: 0.8125rem;
    color: var(--lk-muted);
    font-variant-numeric: tabular-nums;
}

/* Alleen zichtbaar voor wie kan bewerken: een lege sectie op de site zelf zou
   de bezoeker niets zeggen. */
.lk-vormen__leeg {
    margin: 0;
    color: var(--lk-muted);
}

/* --------------------------------------------------------------------------
   Meetbriefje (lampenkappen/meetbriefje)
   --------------------------------------------------------------------------
   Een formulier op de leesbreedte: velden naast elkaar waar dat kan, onder
   elkaar op een telefoon. De rijen zijn flex met wrap en geen raster - een
   veld dat niet meer past hoort naar de volgende regel te vallen, niet
   smaller te worden dan zijn inhoud.
   -------------------------------------------------------------------------- */

.lk-briefje {
    max-inline-size: 44rem;
    margin-block-start: var(--wp--preset--spacing--50);
    padding: var(--wp--preset--spacing--60);
    background-color: var(--lk-surface);
    border: 1px solid var(--lk-border);
    border-radius: 2px;
}

.lk-briefje__rij {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--40);
}

.lk-briefje__rij > .lk-veld {
    flex: 1 1 12rem;
}

.lk-veld {
    display: block;
    margin: 0 0 var(--wp--preset--spacing--40);
    border: 0;
    padding: 0;
}

.lk-veld > label,
.lk-veld > legend {
    display: block;
    margin-block-end: 0.375rem;
    font-size: var(--wp--preset--font-size--small);
    color: var(--lk-muted);
}

.lk-veld :is(input[type="text"], input[type="email"], input[type="number"], select, textarea) {
    inline-size: 100%;
    box-sizing: border-box;
    padding: 0.625rem 0.75rem;
    background-color: var(--lk-bg);
    border: 1px solid var(--lk-border);
    border-radius: 2px;
    color: var(--lk-text);
    font-family: inherit;
    font-size: inherit;
}

.lk-veld :is(input, select, textarea):focus-visible {
    outline: 2px solid var(--lk-link);
    outline-offset: -1px;
}

.lk-veld textarea {
    resize: vertical;
}

/* Het honeypot-veld. Uit beeld in plaats van display:none: een bot die de CSS
   leest, slaat een verborgen veld over - maar de meeste lezen niets en vullen
   alles in wat in de HTML staat. */
.lk-briefje__val {
    position: absolute;
    inline-size: 1px;
    block-size: 1px;
    overflow: hidden;
    clip-path: inset(50%);
}

/* Aantal, met de knoppen ernaast. */
.lk-aantal {
    display: flex;
    inline-size: max-content;
    max-inline-size: 100%;
}

.lk-aantal__knop {
    inline-size: 2.75rem;
    background-color: var(--lk-bg);
    border: 1px solid var(--lk-border);
    color: var(--lk-text);
    font-size: 1.125rem;
    line-height: 1;
    cursor: pointer;
}

.lk-aantal__knop:hover {
    border-color: var(--lk-link);
    color: var(--lk-link);
}

/* De drie delen sluiten aan tot één veld: de knoppen delen hun rand met het
   invoervak ertussen. */
.lk-aantal__knop:first-child {
    border-radius: 2px 0 0 2px;
    margin-inline-end: -1px;
}

.lk-aantal__knop:last-child {
    border-radius: 0 2px 2px 0;
    margin-inline-start: -1px;
}

.lk-veld .lk-aantal__waarde {
    inline-size: 4rem;
    border-radius: 0;
    text-align: center;
}

/* De kleurstalen. Het bolletje is de achtergrond van het label, de radio zelf
   staat buiten beeld - maar wel in de tabvolgorde, want zonder radio geen
   toetsenbord. */
.lk-stalen__rij {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--30);
}

.lk-staal {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.375rem 0.75rem 0.375rem 0.5rem;
    border: 1px solid var(--lk-border);
    border-radius: 999px;
    font-size: var(--wp--preset--font-size--small);
    cursor: pointer;
}

.lk-staal::before {
    content: "";
    inline-size: 1rem;
    block-size: 1rem;
    border-radius: 50%;
    background-color: var(--lk-staal);
    box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%);
}

.lk-staal input {
    position: absolute;
    opacity: 0;
    inline-size: 1px;
    block-size: 1px;
}

/* De radiogroep weet zelf wat aanstaat; daar is geen JavaScript voor nodig. */
.lk-staal:has(input:checked) {
    border-color: var(--lk-link);
    color: var(--lk-link);
}

.lk-staal:has(input:focus-visible) {
    outline: 2px solid var(--lk-link);
    outline-offset: 2px;
}

/* Onder de stalen: een eigen tint en een omschrijving. Zes stalen dekken een
   collectie van 230+ kleuren niet, dus dit is waar de bezoeker zegt wat hij
   werkelijk zoekt. */
.lk-eigenkleur {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--wp--preset--spacing--40);
    margin-block-start: var(--wp--preset--spacing--40);
}

.lk-eigenkleur__tekst {
    flex: 1 1 16rem;
}

.lk-eigenkleur :is(label) {
    display: block;
    margin-block-end: 0.375rem;
    font-size: var(--wp--preset--font-size--small);
    color: var(--lk-muted);
}

/* De kleurkiezer van de browser is per platform anders van maat; een vaste
   hoogte houdt hem gelijk aan het tekstveld ernaast. */
.lk-eigenkleur input[type="color"] {
    inline-size: 3.5rem;
    block-size: 2.75rem;
    padding: 0.25rem;
    background-color: var(--lk-bg);
    border: 1px solid var(--lk-border);
    border-radius: 2px;
    cursor: pointer;
}

/* Zolang niemand de kiezer heeft aangeraakt telt zijn kleur niet mee, en dat
   mag je zien: pas na een keuze krijgt hij de accentrand. */
.lk-eigenkleur__tint.is-gekozen input[type="color"] {
    border-color: var(--lk-link);
}

.lk-eigenkleur input[type="color"]:focus-visible {
    outline: 2px solid var(--lk-link);
    outline-offset: 2px;
}

.lk-briefje__notitie {
    margin: 0 0 var(--wp--preset--spacing--40);
    font-size: var(--wp--preset--font-size--small);
    color: var(--lk-muted);
}

.lk-briefje__verzenden {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wp--preset--spacing--40);
}

.lk-briefje__status:not(:empty) {
    font-size: var(--wp--preset--font-size--small);
    color: var(--lk-muted);
}

.lk-briefje__status.is-gelukt {
    color: var(--lk-link);
}

.lk-briefje__status.is-mislukt {
    color: var(--wp--preset--color--brown);
}

/* Uitgezette knop: na een geslaagde aanvraag blijft hij uit, zodat er geen
   tweede mail met dezelfde inhoud volgt. */
.lk-knop:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

/* --------------------------------------------------------------------------
   Footer
   --------------------------------------------------------------------------
   Drie kolommen met een haarlijn erboven: menu, contactgegevens en een korte
   omschrijving. Onder md vallen ze onder elkaar - dat doet de kolommenblok van
   core zelf.
   -------------------------------------------------------------------------- */

/* De footer wordt naar de onderkant geduwd, zodat hij op een korte pagina niet
   halverwege het scherm blijft hangen met wit eronder. Geen position: fixed:
   dan zou hij over de inhoud heen liggen en op een telefoon een vijfde van het
   scherm opeten. Dit blijft gewoon het einde van de pagina - hij staat alleen
   onderaan het venster als de inhoud korter is. */
.wp-site-blocks {
    display: flex;
    flex-direction: column;
    min-block-size: 100vh;
}

/* Een flexkind krimpt standaard mee als het krap wordt; hier moet elk blok zijn
   eigen hoogte houden en de pagina langer worden. */
.wp-site-blocks > * {
    flex-shrink: 0;
}

.lk-footer {
    /* Alles wat overblijft gaat hierboven zitten. Dat is wat de footer
       onderaan houdt. */
    margin-block-start: auto;

    /* Een eigen vlak in plaats van een lijn: de kleur scheidt de footer al van
       de pagina, en dan is een rand erbij dubbelop. Hetzelfde oppervlak als het
       formulier en als een kaart bij hover - één token, dus ze blijven gelijk.

       Rechtstreeks op de footer en niet op een ::before eronder: de footer loopt
       zelf al van rand tot rand, en een laag met z-index: -1 belandt achter de
       achtergrond van body en is dus onzichtbaar. */
    background-color: var(--lk-surface);
    color: var(--lk-muted);
}


/* Zelfde keuze als bij de contactgegevens: geen kapitalen. */
.lk-footer__kop {
    margin: 0 0 var(--wp--preset--spacing--30);
    font-weight: 500;
    color: var(--lk-text);
}

.lk-footer p {
    margin: 0 0 var(--wp--preset--spacing--30);
    line-height: 1.7;
}

.lk-footer__contact a:hover {
    color: var(--lk-link);
    text-decoration: underline;
}

.lk-footer__contact a {
    color: var(--lk-muted);
    text-decoration: none;
}

/* De footerkolommen op een eigen raster, dwars door core/columns heen. Core
   legt de kolommen als flexrij neer en klapt ze onder 782px in een keer naar
   een kolom; hier is dat te grof. Vier kolommen op desktop, zodat ze op
   dezelfde lijnen vallen als de rest van de pagina, en daaronder in stappen
   terug naar drie, twee en een.

   Vier plekken bij drie kolommen betekent dat de laatste plek leeg blijft. Dat
   is de bedoeling: de tekst loopt niet tot de rechterrand, en er is ruimte voor
   een vierde kolom zonder dat de opmaak dan hoeft te veranderen.

   Twee klassen diep, omdat .wp-block-columns van core even zwaar weegt als
   .lk-footer__kolommen en anders de volgorde van de stylesheets zou beslissen. */
.lk-footer .lk-footer__kolommen {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--wp--preset--spacing--50);
}

/* De laatste kolom neemt de ruimte die overblijft: bij twee kolommen staat hij
   anders alleen op een halve regel, bij vier blijft de vierde plek leeg. Bij
   drie kolommen is er niets over, dus daar niet.

   :last-child:nth-child(3) raakt de laatste kolom alleen als het er precies
   drie zijn. Komt er ooit een vierde kolom bij, dan valt deze regel vanzelf weg
   en is er niets aan te passen. */
@media (min-width: 30rem) {
    .lk-footer .lk-footer__kolommen {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .lk-footer .lk-footer__kolommen > :last-child:nth-child(3) {
        grid-column: span 2;
    }
}

@media (min-width: 48rem) {
    .lk-footer .lk-footer__kolommen {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .lk-footer .lk-footer__kolommen > :last-child:nth-child(3) {
        grid-column: auto;
    }
}

@media (min-width: 64rem) {
    .lk-footer .lk-footer__kolommen {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .lk-footer .lk-footer__kolommen > :last-child:nth-child(3) {
        grid-column: span 2;
    }
}

/* --------------------------------------------------------------------------
   Contactgegevens (lampenkappen/contactgegevens)
   -------------------------------------------------------------------------- */

/* Browsers zetten <address> cursief. Het element klopt hier semantisch, maar
   de schuine letter hoort niet bij de rest van de site. */
.lk-contactgegevens__adres {
    margin: 0;
    font-style: normal;
    line-height: 1.7;
}

/* Een gewone kop in gewone letters: even groot als de kop van de kolom ernaast,
   zodat de twee kolommen op dezelfde regel beginnen. Kapitalen maken van een
   kopje van een woord een blokje dat harder roept dan de gegevens eronder. */
.lk-contactgegevens__kop {
    margin: 0 0 var(--wp--preset--spacing--40);
    color: var(--lk-text);
}

/* Elke contactpersoon een eigen blokje: de naam, en daaronder zijn nummer.
   Naast elkaar op een regel lezen twee namen met twee nummers als een rij
   losse woorden. */
.lk-contactgegevens__bereikbaar {
    margin-block-start: var(--wp--preset--spacing--40);
}

.lk-contactgegevens__persoon,
.lk-contactgegevens__email {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.125rem;
    margin: 0 0 var(--wp--preset--spacing--30);
}

.lk-contactgegevens__naam {
    color: var(--lk-text);
}


/* --------------------------------------------------------------------------
   Sociale kanalen (lampenkappen/sociale-kanalen)
   -------------------------------------------------------------------------- */

/* Lijstopmaak eraf: het is semantisch een lijst, maar bolletjes naast een
   logo lezen als twee opsommingstekens per regel. */
.lk-sociale-kanalen__lijst {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--30);
    margin: 0;
    padding: 0;
    list-style: none;
}

.lk-sociale-kanalen--kolom .lk-sociale-kanalen__lijst {
    flex-direction: column;
    gap: 0.5rem;
}

.lk-sociale-kanalen--rij .lk-sociale-kanalen__lijst {
    column-gap: var(--wp--preset--spacing--40);
}

.lk-sociale-kanalen__kop {
    margin: 0 0 var(--wp--preset--spacing--40);
    color: var(--lk-text);
}

/* Logo en naam vormen samen één klikdoel: een regel waarvan de helft niet
   werkt is op een telefoon een gemiste tik. */
.lk-sociale-kanalen__link {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    color: var(--lk-muted);
    text-decoration: none;
}

.lk-sociale-kanalen__link:hover {
    color: var(--lk-link);
    text-decoration: underline;
}

/* De SVG's uit core zijn 24x24 met een vaste breedte in het element zelf; die
   overschrijven we, zodat het logo meegroeit met de letter ernaast in plaats
   van er als los blokje naast te staan. currentColor: het logo pakt de kleur
   van de link op, dus ook de hoverkleur en de kleuren van licht en donker. */
.lk-sociale-kanalen__icoon {
    display: inline-flex;
    flex-shrink: 0;
}

.lk-sociale-kanalen__icoon svg {
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
}
