/*
Theme Name:     Ouwerkerk Logistics
Theme URI:      n/a
Template:       kadence
Author:         Dutch Portfolio B.V.
Author URI:     n/a
Description:    Child Theme Description
Version:        1.0.23
License:        GNU General Public License v3.0 (or later)
License URI:    https://www.gnu.org/licenses/gpl-3.0.html
*/

/* ==========================================================================
   Wat hier staat en waarom

   De vormgeving zit in de blokken zelf: achtergronden, marges, randen,
   radius en lettergroottes staan als Kadence-attributen op de rijen,
   secties en tekstblokken. Daar hoort het, want dan ziet een redacteur in
   de editor wat er op de voorkant gebeurt.

   Belangrijk om te weten voordat je hier iets aan een eigen klasse hangt:
   kadence/advancedheading schrijft zijn className NIET naar de HTML. Zet je
   er in de editor "Extra CSS-klasse" op, dan staat die wel in de
   blokattributen maar niet in de class van de <p> of <h2> op de voorkant,
   en je regel pakt stil niet. Bij kadence/column en kadence/rowlayout gaat
   dat wél goed. Wil je een tekstblok opmaken, doe het dan met de
   attributen van het blok — niet hier.

   Wat overblijft is dit: de knoppen, en per component wat Kadence in zijn
   blokinstellingen niet kent. Elk blok zegt waarom het hier staat.
   ========================================================================== */

:root {
	/* De merkkleuren staan in het Kadence-palet (var(--global-paletteN)):
	   1 rood, 2 rood donker, 3 donkergroen, 4 groen 2, 5 olijf donker,
	   6 olijf, 7 zand, 8 papierwit, 9 wit. Hier alleen wat daar niet in staat. */
	--ol-olijf-licht:   #9D9A8A;
	--ol-offwhite:      #EBE5DE;
	--ol-rood-licht:    #FFD1CD;

	/* De grijzen uit het websitepalet (Figma OUWLOG Kleurpalet, CcA6dOg6qUYubxbGQYupV4)
	   en Grijs 5 uit de brand guidelines (qDflydUQr78IHUIqqEEMbR, 32:206), die
	   het websitepalet niet heeft. */
	--ol-grijs-5:       #F2F2F2; /* Grijs 5: vlak van de pil, stappenlabel, inactieve tab */
	--ol-grijs-10:      #E6E6E6; /* Grijs 10: badge Reference, rand invoervelden en zoekveld */
	--ol-grijs-25:      #BFBFBF; /* Grijs 25: rand en hover van de outline-knop, actieve tab */
	--ol-grijs-60:      #949494; /* Grijs 60: tekst van de outline-knop, marktkaart, meta en Read more van de kennisbankkaart */

	/* Namen die blokken al gebruiken met var(--ol-…) in het kleurveld. Ze wijzen
	   naar een paletkleur; de oude Figma-tinten (#F4F1ED, #717064, #DCDCDC,
	   rgb(6 29 24 / .8)) staan in geen van beide paletten. */
	--ol-zand-licht:    var(--global-palette8); /* beige secties: nu papierwit */
	--ol-grijs-licht:   var(--ol-grijs-5);
	--ol-grijs:         var(--global-palette5); /* tekst op grijs 5, veeg van de pil: olijf donker */
	--ol-grijs-midden:  var(--ol-grijs-60);
	--ol-grijs-rand:    var(--ol-grijs-25);
	--ol-grijs-tab:     var(--ol-grijs-10);
	--ol-rand:          var(--ol-grijs-10); /* rand van invoervelden */
	--ol-groen-80:      rgb(0 39 35 / .8); /* zachte tekst op de homepage: donkergroen op 80% */

	--ol-radius:        6px;

	/* Het vinkje uit het componentenblad (wit, op een rondje olijf donker). */
	--ol-vinkje: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");

	/* De chevron (kb-custom-112) als masker, gecentreerd in 16 × 16. */
	--ol-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='3.8 3.95 16 16'%3E%3Cpath d='M8.97474 17.9745L8.60429 17.6041C11.7133 14.241 11.7701 9.67802 8.61981 6.27924L8.97481 5.92424L15 11.9494L8.97474 17.9745Z'/%3E%3C/svg%3E");
}

/* ==========================================================================
   Knoppen

   Native Kadence-knoppen: tekst, icoon, kleuren, typografie, padding en
   afronding staan in het blok. Hier alleen wat Kadence niet kent: de chipknop
   met de veeg (ol-knop-veeg, varianten rood, donker en licht), de pil zonder
   chip (ol-knop-pil), twee knoppen naast elkaar (ol-knop-vul, rood of
   outline), alle drie verderop, en de tertiaire tekstlink (ol-tekstlink).
   Welke knop waar hoort: bouwplan-site.md, *Knoppen horen op één plek*.

   kadence/singlebtn zet zijn className op de <a>, dus deze selectors pakken.
   Dat is niet vanzelfsprekend; zie de opmerking hierboven.
   ========================================================================== */

/* ==========================================================================
   Diensten: tabs met een Advanced Slider per tab

   Tabs en slider doen bijna alles zelf — kleuren, padding, radius,
   typografie, kolommen, niet rondlopen, pijlpositie. De kaart is een slide:
   de foto is de achtergrond, de overlay erover #f4f1ed op 100%, en een
   Sectie met titel, tekst en knop. Hieronder alleen wat er in de
   blokinstellingen niet bestaat. Alles hangt aan de klasse
   ol-diensten-slider op de slider, niet aan de tabs: die klasse zou in de
   markup van de tabs terecht moeten komen, en een attribuut schrijven zonder
   dat de markup meeverandert laat de editor "onverwachte inhoud" melden.

   Per pagina schuiven is een filter in functions.php
   (ouwerkerk_slider_per_pagina): Kadence negeert slidesScroll bij het renderen.
   ========================================================================== */

/* Het vlak achter de tabtitels, hier en bij de trade lanes (daar wit op de
   foto). Kadence kan elke titel een achtergrond geven, maar de lijst eromheen
   niet. De ruimte tussen de titels staat hier ook: die
   hoort bij dit vlak, en gutter in de tabs zet hem niet tussen de titels. */
.wp-block-kadence-tabs:has(.ol-diensten-slider) .kt-tabs-title-list,
.wp-block-kadence-tabs.ol-tabs-regio .kt-tabs-title-list {
	display: inline-flex;
	flex-wrap: wrap;
	gap: 6px;
	width: auto;
	padding: 6px;
	margin: 0;
	border: 0;
	border-radius: var(--ol-radius);
	background: var(--ol-zand-licht);
}

/* De vier kaarten vormen één paneel met afgeronde buitenhoeken. Een radius
   in de blokinstellingen zou élke kaart rond maken, dus hij zit op de track.

   De scheidingslijn is gewoon de rand rechts van elke slide (native). Die
   staat dan ook rechts van de laatst zichtbare kaart, tegen de hoek van het
   paneel. Daarom knipt het paneel aan beide kanten 1px in: een lijn die
   precies tegen de rand valt verdwijnt in dat strookje, op elke pagina en
   tijdens het schuiven.

   Niet opgelost met is-visible — dat gaf een flits, want Splide werkt die
   klassen pas bij als het schuiven klaar is — en niet met een tussenruimte
   van 0,5px, want Kadence leest de gap met parseInt en maakt er 0 van. */
.ol-diensten-slider .splide__track {
	overflow: hidden;
	clip-path: inset(0 1px round var(--ol-radius));
}

/* De scheidingslijn zit op .kb-advanced-slide-inner-wrap, en de overlay
   (absoluut, inset 0) rekent vanaf de li omdat de wrap zelf niet
   gepositioneerd is. Dan valt de overlay óver de rand heen. Met de wrap als
   referentie blijft hij binnen de rand. */
.ol-diensten-slider .kb-advanced-slide-inner-wrap {
	position: relative;
}

/* Hover: de overlay wijkt en de foto ligt open, de titel wordt wit en de
   tekst verdwijnt — zo staat het in het ontwerp bij Weg transport.

   Alleen met een muis. Op een aanraakscherm is een tik of een swipe ook een
   :hover: de foto kwam dan half tevoorschijn terwijl je doorveegde. Daar blijft
   de kaart in de tekststand en brengt een tik je via de sectielink meteen naar
   de dienst. */
.ol-diensten-slider .kb-advanced-slide-overlay {
	transition: opacity .35s ease;
}

.ol-diensten-slider .splide__slide p.wp-block-kadence-advancedheading {
	transition: opacity .25s ease;
}

@media (hover: hover) {
	.ol-diensten-slider .splide__slide:hover .kb-advanced-slide-overlay {
		opacity: 0;
	}

	.ol-diensten-slider .splide__slide:hover p.wp-block-kadence-advancedheading {
		opacity: 0;
	}

	.ol-diensten-slider .splide__slide:hover h3.wp-block-kadence-advancedheading {
		color: var(--global-palette9);
	}
}

/* De hele kaart is een link (sectielink van Kadence: een lege <a> over de
   Sectie, z-index 10). De knoppen erin liggen erboven, zodat hun eigen hover
   werkt en een tweede knop (Direct contact op de marktkaart) zijn eigen doel
   houdt. Kadence geeft elke Sectie z-index 1 met position relative; een Sectie
   tussen de kaart en de knoppen (Tekst in de marktkaart) wordt daarmee een
   eigen stapellaag en houdt de knoppen onder de link. Binnen een gelinkte
   kaart staan die tussenliggende Secties daarom op auto. */
:is(.ol-diensten-slider .kb-section-has-link, .ol-marktkaart.kb-section-has-link) .wp-block-kadence-column {
	z-index: auto;
}

:is(.ol-diensten-slider .kb-section-has-link, .ol-marktkaart.kb-section-has-link) .wp-block-kadence-advancedbtn {
	position: relative;
	z-index: 11;
}

/* Een verloop van boven naar beneden over de foto, zodat de witte titel
   leesbaar blijft. Het ligt onder de overlay (eerder in de volgorde, allebei
   absoluut), dus het wordt pas zichtbaar als de overlay wijkt — geen eigen
   overgang nodig. Kleur: Donkergroen op 20%; het ontwerp noemt #04201a, dat
   niet in het palet staat en er op dit percentage niet van te onderscheiden is. */
.ol-diensten-slider .kb-advanced-slide-inner-wrap::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, color-mix(in srgb, var(--global-palette3) 20%, transparent) 19.71%, transparent 100%);
	pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
	.ol-diensten-slider .kb-advanced-slide-overlay,
	.ol-diensten-slider .splide__slide p.wp-block-kadence-advancedheading {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Knop met chip en veeg, op een native Kadence-knop (Extra CSS-klasse
   ol-knop-veeg).

   Native in het blok: tekst, icoon (custom SVG, links), typografie, tekst- en
   icoonkleur, padding 12/18, afronding 6, icoongrootte 25.6 en 41px marge
   links. Die marge is de plek van de chip: 39 breed plus 2 tussenruimte.

   Hier alleen wat Kadence niet kent:
   - de chip als eigen vlak links van het label. Het icoon schuift erheen, het
     vlak zelf is ::after. Kadence' ::before blijft ongebruikt.
   - de veeg. Eén getal, --ol-veeg, loopt van 0 naar 1; chip, label en tekst
     rekenen daar elk hun eigen grens uit, dus ze lopen altijd gelijk op.
   - de kleuren staan hier in één verloop per vlak in plaats van als
     achtergrond plus bovenlaag. Twee lagen van dezelfde vorm geven op de
     afgeronde hoeken weer het randje van eerder.

   De getallen 41 (chip + tussenruimte) en 59 / 77 (41 + padding 18, en die
   aan beide kanten) horen bij de marge en padding in het blok. Verander je
   die daar, dan hier ook.

   De drie kleuren staan als custom properties op de knop: het vlak, de veeg
   en de tekst op de veeg. Standaard olijf met papierwit. Een variant zet
   alleen die drie (ol-knop-rood hieronder); de vlakkleur in het blok moet
   dan wel dezelfde zijn, want die zie je zolang de CSS nog niet geladen is.
   -------------------------------------------------------------------------- */

@property --ol-veeg {
	syntax: "<number>";
	inherits: true;
	initial-value: 0;
}

/* De kleuren, bewust op lage specificiteit: dan kan een variant ze met één
   klasse extra overschrijven zonder de selector hieronder te herhalen. */
.ol-knop-veeg {
	--ol-knop-vlak: var(--global-palette6);
	--ol-knop-veegkleur: var(--global-palette8);
	--ol-knop-veegtekst: var(--global-palette6);
}

/* Elke regel geldt voor de voorkant én de editor. Kadence bouwt de knop daar
   met andere klassen: .kt-button in .kb-btns-outer-wrap in plaats van
   .kb-button in .kb-buttons-wrap, .kt-btn-svg-icon voor het icoon en
   .kt-button-text voor de tekst. :is() neemt de hoogste specificiteit van
   zijn lijst, dus beide kanten komen op (0,4,0) — nodig op de voorkant, waar
   Kadence' eigen regel (0,3,0) is en later laadt. */
:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button, .gform_wrapper .gform_footer .ol-gf-knop).ol-knop-veeg {
	position: relative;
	overflow: visible;
	background: linear-gradient(90deg, var(--ol-knop-veegkleur) calc(var(--ol-veeg) * (100% + 41px) - 41px), var(--ol-knop-vlak) 0);
	transition: --ol-veeg .45s cubic-bezier(.2, .6, .2, 1);
}

/* :focus en niet :focus-visible, want Kadence wisselt de icoonkleur ook op
   :focus. Anders loopt de chevron na een klik uit de pas met de veeg. */
:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg:is(:hover, :focus) {
	--ol-veeg: 1;
}

/* Kadence' eigen hoverlaag. Die krijgt de hoverkleur van de globale
   themaknop (rood donker) en fadet in op hover; de veeg doet dat werk hier. */
:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg::before {
	content: none;
}

:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg::after {
	content: "";
	position: absolute;
	inset: 0 0 0 -41px;
	z-index: -1;
	background: linear-gradient(90deg, var(--ol-knop-veegkleur) calc(var(--ol-veeg) * 100%), var(--ol-knop-vlak) 0);
	clip-path: inset(0 calc(100% - 39px) 0 0 round var(--ol-radius));
}

/* Toetsenbordfocus om knop én chip samen: het vlak van 39px links hoort bij
   de knop, dus de ring loopt eromheen (2px ruimte, 2px dik, zoals de ring van
   de formulierknop voorheen). ::before is vrij, want Kadence' hoverlaag staat
   hier uit. Op donkergroen (de lichte variant) is de ring papierwit. */
:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg {
	--ol-focusring: var(--global-palette3);
}

.ol-knop-veeg.ol-knop-licht {
	--ol-focusring: var(--global-palette8);
}

:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg:focus-visible {
	outline: none;
}

:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg:focus-visible::before {
	content: "";
	position: absolute;
	inset: -4px -4px -4px -45px;
	border: 2px solid var(--ol-focusring);
	border-radius: calc(var(--ol-radius) + 4px);
	background: none;
	opacity: 1;
	pointer-events: none;
}

/* De kleuren van de chevron staan in het blok (icoonkleur en hover). Hier
   alleen het moment: hij wisselt als de veeg hem passeert, ~15ms na het begin
   en terug ~214ms na het loslaten. Hij is 7px breed, dus een gesplitste
   chevron zoals in de tekst is niet te zien. */
.ol-knop-veeg :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) {
	position: absolute;
	top: 0;
	left: -41px;
	width: 39px;
	height: 100%;
	justify-content: center;
	align-items: center;
	transition: color 0s .214s;
}

/* Het icoon is 20 × 24. De editor lijnt het links uit in een vierkant van
   1em (xMinYMin), de voorkant centreert het. Met de breedte van de
   verhouding staat het in allebei op dezelfde plek. (width: auto werkt op
   een inline SVG niet; die blijft dan 1em breed.) */
.ol-knop-veeg :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) svg {
	width: calc(1em * 20 / 24);
	height: 1em;
}

:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg:is(:hover, :focus) :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) {
	transition-delay: .015s;
}

.ol-knop-veeg :is(.kt-btn-inner-text, .kt-button-text) {
	background: linear-gradient(90deg, var(--ol-knop-veegtekst) calc(var(--ol-veeg) * (100% + 77px) - 59px), currentColor 0);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
}

@media (prefers-reduced-motion: reduce) {
	:is(.kb-button, .kt-button).ol-knop-veeg,
	.ol-knop-veeg :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) {
		transition: none;
	}

	.gform_wrapper.gform-theme .gform_footer .ol-gf-knop.ol-knop-veeg {
		--gf-ctrl-transition: none;
	}
}

/* Rode variant (offertebalk). Vlak rood, veeg rood licht, tekst op de veeg
   rood donker — de hover van de rode knop uit het specificatieblok. In het
   blok: achtergrond palette1 en hover-icoonkleur palette2. */
.ol-knop-veeg.ol-knop-rood {
	--ol-knop-vlak: var(--global-palette1);
	--ol-knop-veegkleur: var(--ol-rood-licht);
	--ol-knop-veegtekst: var(--global-palette2);
}

/* Donker (op olijf en licht, CTA-band): vlak donkergroen, veeg papierwit. In
   het blok: achtergrond palette3, hover-icoonkleur palette3. */
.ol-knop-veeg.ol-knop-donker {
	--ol-knop-vlak: var(--global-palette3);
	--ol-knop-veegkleur: var(--global-palette8);
	--ol-knop-veegtekst: var(--global-palette3);
}

/* Licht (op donkergroen, de casekaart): vlak papierwit, veeg donkergroen. In
   het blok: achtergrond palette8, tekst en icoon palette3, hover-icoon palette9. */
.ol-knop-veeg.ol-knop-licht {
	--ol-knop-vlak: var(--global-palette8);
	--ol-knop-veegkleur: var(--global-palette3);
	--ol-knop-veegtekst: var(--global-palette9);
}

/* --------------------------------------------------------------------------
   Pil zonder chip (offertebalk: All modes, Sea, …). Native in het blok:
   tekst, vaste breedte 108, padding, afronding, typografie, en een hover die
   de kleuren ineens wisselt. Hier alleen de veeg van links naar rechts, zoals
   Figma hem tussen twee standen laat zien, met dezelfde --ol-veeg als de
   chipknop. De kleuren zijn die van het blok: vlak --ol-grijs-licht, veeg
   en tekst --ol-grijs, tekst op de veeg wit. De tekst splitst met de veeg
   mee, zoals bij de chipknop; zie *Gesplitste tekst* hieronder.
   -------------------------------------------------------------------------- */
.ol-knop-pil {
	--ol-knop-tekst: var(--ol-grijs);
	--ol-knop-veegtekst: var(--global-palette9);
	--ol-knop-inzet: 18px;
}

:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-pil,
:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-pil:is(:hover, :focus) {
	background: linear-gradient(90deg, var(--ol-grijs) calc(var(--ol-veeg) * 100%), var(--ol-grijs-licht) 0);
	transition: --ol-veeg .45s cubic-bezier(.2, .6, .2, 1);
}

:is(.kb-button, .kt-button).ol-knop-pil:is(:hover, :focus) {
	--ol-veeg: 1;
}

:is(.kb-button, .kt-button).ol-knop-pil::before {
	content: none;
}

@media (prefers-reduced-motion: reduce) {
	:is(.kb-button, .kt-button).ol-knop-pil {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Twee knoppen naast elkaar, zonder chip (marktkaart: Read more en Direct
   contact). Dezelfde veeg van links naar rechts als de chip- en pilknop, op
   het hele vlak. De kleuren als custom properties, zoals bij ol-knop-veeg:
   rood (vlak rood, veeg rood licht, tekst rood donker) en outline (vlak wit,
   veeg grijs rand #BFBFBF, tekst donker). Bij de outline loopt de veeg als
   ::after over de rand heen, zodat de rand precies met de vulling meekleurt;
   een border-color-wissel sprong halverwege de veeg. De tekst splitst met
   de veeg mee, zoals bij de pil. Hero van dienst en markt
   (Contact us, Calculate) en de marktkaart (Read more, Direct contact).

   --ol-knop-tekst is de tekstkleur in het blok, --ol-knop-inzet de padding
   links en rechts in het blok plus de rand: 14, en 14 + 1 bij de outline.
   -------------------------------------------------------------------------- */
.ol-knop-vul {
	--ol-knop-vlak: var(--global-palette1);
	--ol-knop-veegkleur: var(--ol-rood-licht);
	--ol-knop-tekst: var(--global-palette9);
	--ol-knop-veegtekst: var(--global-palette2);
	--ol-knop-inzet: 14px;
}

.ol-knop-vul.ol-knop-outline {
	--ol-knop-vlak: var(--global-palette9);
	--ol-knop-veegkleur: var(--ol-grijs-rand);
	--ol-knop-tekst: var(--ol-grijs-midden);
	--ol-knop-veegtekst: var(--global-palette3);
	--ol-knop-inzet: 15px;
}

:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-vul,
:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-vul:is(:hover, :focus) {
	background: linear-gradient(90deg, var(--ol-knop-veegkleur) calc(var(--ol-veeg) * 100%), var(--ol-knop-vlak) 0);
	transition: --ol-veeg .45s cubic-bezier(.2, .6, .2, 1);
}

:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-vul:is(:hover, :focus) {
	--ol-veeg: 1;
}

:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-vul.ol-knop-outline,
:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button).ol-knop-vul.ol-knop-outline:is(:hover, :focus) {
	background: var(--ol-knop-vlak);
	overflow: visible;
}

/* Knop is een stacking context (Kadence: position relative, z-index 1), dus
   z-index -1 tekent boven achtergrond en rand en onder de tekst. inset -1px
   is de rand van 1px. */
:is(.kb-button, .kt-button).ol-knop-vul.ol-knop-outline::after {
	content: "";
	position: absolute;
	inset: -1px;
	z-index: -1;
	border-radius: inherit;
	background: var(--ol-knop-veegkleur);
	clip-path: inset(0 calc((1 - var(--ol-veeg)) * 100%) 0 0);
	pointer-events: none;
}

:is(.kb-button, .kt-button).ol-knop-vul::before {
	content: none;
}

@media (prefers-reduced-motion: reduce) {
	:is(.kb-button, .kt-button).ol-knop-vul {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Gesplitste tekst op pil en vul: links van de veeg de tekst-op-de-veeg,
   rechts de gewone tekstkleur, met dezelfde harde rand als de chipknop.

   De tekst staat gecentreerd en is per knop anders breed, dus de span wordt
   zo breed als de knop min padding en rand (display block, en flex-grow voor
   de editor, waar de knop flex is). Dan ligt de veeg op de span op een vaste
   afstand van die op de knop: --ol-knop-inzet aan beide kanten.

   Beide kleuren komen uit custom properties en niet uit currentColor: de
   hover in het blok wisselt de tekstkleur, en dan zou de rechterhelft al
   omslaan voordat de veeg er is.
   -------------------------------------------------------------------------- */
:is(.ol-knop-pil, .ol-knop-vul) :is(.kt-btn-inner-text, .kt-button-text) {
	display: block;
	flex-grow: 1;
	background: linear-gradient(90deg, var(--ol-knop-veegtekst) calc(var(--ol-veeg) * (100% + 2 * var(--ol-knop-inzet)) - var(--ol-knop-inzet)), var(--ol-knop-tekst) 0);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
}

/* --------------------------------------------------------------------------
   Pijlen en teller.

   De pijlen zelf zijn Kadence' eigen knoppen, rechtsboven via arrowPosition,
   met hun uitgeschakelde stand en toetsenbordbediening. Alleen het icoon wordt
   het bestand uit Figma: één pijl naar rechts, voor vorige gespiegeld — in het
   ontwerp is de linker exact datzelfde pad, gespiegeld en op 40% dekking, en
   dat laatste is de uitgeschakelde stand die Splide op pagina 1 zelf geeft.
   De teller zet assets/js/carousel-teller.js ertussen.
   -------------------------------------------------------------------------- */

/* Kadence' eigen pijlstijl staat in kadence-splide.min.css, dat ná deze
   stylesheet laadt en per regel even specifiek is — en dan wint hij op
   volgorde. Gemeten: 1rem tussen de pijlen, 75% dekking in rust en 20% als ze
   uitgeschakeld zijn. Het ontwerp heeft ze aansluitend, op 100% en 40%. Deze
   selectors tellen daarom één klasse meer, zonder !important. */
:is(.wp-block-kadence-slider.ol-diensten-slider, .wp-block-kadence-postgrid.ol-kaart-markt) .splide.kb-slider-group-arrows .splide__arrows {
	display: flex;
	align-items: center;
	gap: 0;
}

:is(.wp-block-kadence-slider.ol-diensten-slider, .wp-block-kadence-postgrid.ol-kaart-markt) .splide .splide__arrows .splide__arrow {
	position: static;
	width: 20px;
	height: 24px;
	min-width: 0;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: url(assets/icons/carousel-pijl.svg) center / 20px 24px no-repeat;
	box-shadow: none;
	opacity: 1;
	transform: none;
	/* Kadence geeft de pijlen een opacity-overgang van .3s. De vorige-knop is
	   vanaf het eerste frame uitgeschakeld, maar fadet dan zichtbaar van 100
	   naar 40% als de tab verschijnt. Het ontwerp heeft geen hoverstand op de
	   pijlen, dus de overgang kan eraf. */
	transition: none;
}

:is(.wp-block-kadence-slider.ol-diensten-slider, .wp-block-kadence-postgrid.ol-kaart-markt) .splide .splide__arrows .splide__arrow svg {
	display: none;
}

:is(.wp-block-kadence-slider.ol-diensten-slider, .wp-block-kadence-postgrid.ol-kaart-markt) .splide .splide__arrows .splide__arrow--prev {
	transform: scaleX(-1);
}

:is(.wp-block-kadence-slider.ol-diensten-slider, .wp-block-kadence-postgrid.ol-kaart-markt) .splide .splide__arrows .splide__arrow:disabled {
	opacity: .4;
	cursor: default;
}

.ol-teller {
	min-width: 40px;
	font-size: 14px;
	line-height: 1.2;
	color: var(--ol-grijs);
	text-align: center;
}

/* ==========================================================================
   Hero-rij: het hero-blok als achtergrondlaag, de offertebalk erop

   De rij bepaalt de hoogte (minHeight 800) en zet de balk onderin
   (verticalAlignment bottom + padding onder). Het hero-blok staat als eerste
   in de kolom en wordt hier de achtergrond van de hele rij; alles erna ligt
   erboven. Zie blokplan-home.md, sectie 1.
   ========================================================================== */

/* De rij en zijn tussenlagen mogen geen positioneringscontext zijn: Kadence
   geeft .kt-row-column-wrap en de kolom position: relative, en dan legt de
   hero zich over de kolom in plaats van over de rij. */
.ol-hero-rij > .kt-row-column-wrap,
.ol-hero-rij > .kt-row-column-wrap > .wp-block-kadence-column,
.ol-hero-rij > .kt-row-column-wrap > .wp-block-kadence-column > .kt-inside-inner-col {
	position: static;
}

/* De hero vult de rij. Zijn eigen 100svh vervalt: de rij bepaalt de hoogte. */
.ol-hero-rij .ol-hero {
	position: absolute;
	inset: 0;
	min-height: 0;
	z-index: 0;
}

/* Alles na de hero ligt erboven. */
.ol-hero-rij .ol-hero ~ * {
	position: relative;
	z-index: 1;
}

/* Kompas, ringen en tekst optisch tussen header en balk op tablet en mobiel,
   waar de balk gestapeld en hoog is. De verschuiving rekent
   assets/js/hero-midden.js uit; zonder JS blijft alles in het midden. */
.ol-hero-rij .ol-hero__field {
	translate: 0 var(--ol-hero-schuif, 0px);
}

/* Tijdens de intro wijkt de balk: hij heeft de klasse ol-na-intro (onderaan). */

/* Offertebalk op tablet en mobiel: daar staat hij verticaal (native, direction
   per breekpunt). De pillenhelft heeft maxWidth 596 voor desktop, en Kadence
   zet bij maxWidth ook margin: auto. In een verticale Sectie wint die marge van
   stretch: de helft krimpt tot zijn inhoud en gaat in het midden staan. Links,
   op zijn eigen breedte (596, of smaller als het scherm dat is). Op mobiel zet
   Kadence de marge nog eens met een selector van zes klassen; de tweede regel
   hier telt er zeven. */
.ol-offertebalk > .kt-inside-inner-col > .wp-block-kadence-column,
.ol-offertebalk.wp-block-kadence-column.kb-section-sm-dir-vertical:not(.kb-section-sm-dir-horizontal):not(.kb-section-sm-dir-specificity) > .kt-inside-inner-col > .wp-block-kadence-column {
	margin-inline: 0;
}

/* Passen de vijf pillen niet op één regel (5 × 108 + 4 × 14, plus 2 × 20
   padding en 2 × 24 marge = 684), dan een raster: twee gelijke kolommen en All
   modes onderaan over de volle breedte. 8 ertussen, horizontaal én verticaal
   (de helft van desktop, afgerond op een veelvoud van 4). Een raster: Kadence' knoppenrij is flex, en
   breedtes in % met een vaste tussenruimte geven nooit overal dezelfde afstand.
   All modes staat in het blok vooraan (desktop, Figma) en gaat hier met order
   naar achteren. */
@media (max-width: 683px) {
	.ol-offertebalk .kb-buttons-wrap:has(> .ol-knop-pil) {
		display: grid;
		grid-template-columns: 1fr 1fr;
		gap: 8px;
	}

	.ol-offertebalk .kb-buttons-wrap > .kb-button.ol-knop-pil {
		width: auto;
	}

	.ol-offertebalk .kb-buttons-wrap > .kb-button.ol-knop-pil:first-child {
		grid-column: 1 / -1;
		order: 1;
	}
}
/* ==========================================================================
   Markten: Post Grid-carrousel met het Element "Kaart markt" als kaart

   De kaart zelf staat in het Element (functions.php, ouwerkerk_kaart_markt).
   De Post Grid schrijft daarna nog zijn eigen lege binnenkant (header, tekst,
   footer); alle onderdelen staan uit, maar de vakken blijven.
   ========================================================================== */

.ol-kaart-markt .kt-blocks-post-grid-item-inner {
	display: none;
}

.ol-kaart-markt .kt-blocks-post-grid-item,
.ol-kaart-markt .kt-blocks-post-grid-item-inner-wrap {
	height: 100%;
	padding: 0;
	background: none;
	box-shadow: none;
}

/* De vijfde kaart valt half buiten beeld, tot de rand van het venster. De
   track mag daarom rechts uitsteken; links knipt hij af net voor de
   inhoudsrand, anders schuiven de kopieën van het rondlopen daar in beeld.
   Die 12 links (minder dan de 24 tussen de kaarten) is voor de schaduw van
   de kaart. De rij knipt het geheel af op de vensterbreedte. */
/* Kadence' eigen overflow: hidden op de track is specifieker dan één
   klasse plus .splide__track; vandaar de langere selector. */
.wp-block-kadence-postgrid.ol-kaart-markt .splide .splide__track {
	overflow: visible;
	clip-path: inset(-20px -100vw -20px -12px);
}

.ol-markten {
	overflow: hidden;
}

/* Pijlen en teller: dezelfde regels als bij Diensten (daar staan ze voor
   beide). */

/* Op mobiel staan pijlen en teller bij Diensten én Markten rechtsonder, onder
   de kaarten en rechts gelijk met hun rand (12 ertussen). arrowPosition kent
   geen waarde per breekpunt, dus de plaats wordt hier omgezet; de marge uit
   het blok (arrowMargin, bij de Post Grid alleen voor desktop) gaat op 0. In
   de kaart naast de knop past het niet: bij Diensten overlappen ze op 375
   breed. Onderaan krijgt de carrousel de ruimte voor de pijlen (12 + 24). */
@media (max-width: 767px) {
	.wp-block-kadence-slider.ol-diensten-slider,
	.wp-block-kadence-postgrid.ol-kaart-markt {
		padding-bottom: 36px;
	}

	.wp-block-kadence-slider.ol-diensten-slider .splide.kb-slider-arrow-position-top-right .splide__arrows,
	.wp-block-kadence-postgrid.ol-kaart-markt .splide.kb-slider-arrow-position-top-right .splide__arrows {
		top: auto;
		bottom: -36px;
		left: auto;
		right: 0;
		margin: 0;
	}
}

/* ==========================================================================
   Chevron rechts in de tertiaire tekstlink ("View all markets", "Read more").

   Het icoon is het Figma-pad van 20 × 24 (kb-custom-112). Kadence zet het in
   een vierkant van 1em met 0,5em marge ervoor; het pad zelf begint pas op
   ruim 40% van zijn vak. Samen geeft dat ~15px lucht waar Figma 5 heeft.
   Breedte naar verhouding en geen marge: dan is de zichtbare ruimte ~5px.
   ========================================================================== */

.ol-tekstlink :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) {
	margin-left: 0;
}

.ol-tekstlink :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) svg {
	width: calc(1em * 20 / 24);
	height: 1em;
}

/* ==========================================================================
   Header: de pil

   Native in de Kadence-header (post "Hoofdheader"): transparant over de
   foto, sticky met terugkomen bij omhoog scrollen, de rij met 31px boven, de
   pil als Sectie (wit, radius 8, schaduw, padding 18/24), het logo via
   Identity, de navigaties met hun kleuren, dropdowns (fade-down) en het mega
   menu, en het off-canvas menu op tablet en mobiel.

   Hier alleen wat Kadence niet kent: dat de pil van "Menu · logo · iconen"
   openschuift naar "navigatie · iconen" (Figma 775 in rust, 748 open). Drie
   groepen naast elkaar in een raster; in rust heeft de eerste de ruimte
   (1fr 0fr auto), open de tweede (0fr 1fr auto). De derde — zoeken en taal —
   staat altijd en schuift mee met de breedte.

   De pil begint dicht en opent op hover, focus of een tik op "Menu". De
   breedte veert met twee keyframes die dasburo.nl gebruikt: open schiet hij
   5px voorbij en 5px terug (.5s ease-in-out), dicht 10px te ver en 4px terug
   (.5s ease). Zijn inhoud vervaagt in .4s, bij openen .05s later.
   Die veer speelt pil.js af (Web Animations), vanaf de breedte van dat moment,
   zodat hij ook klopt als je halverwege van richting wisselt. Daarvoor meet hij
   beide standen. Zonder JS, of met prefers-reduced-motion, blijft de breedte
   auto en springt hij gewoon om.
   pil.js geeft er ook een sluitvertraging, Escape en tikken bij (.is-open).
   Zie bouwplan-header.md.
   ========================================================================== */

/* De pil is zo breed als zijn inhoud en staat in het midden van de rij (ook
   de pil op tablet en mobiel). */
.wp-block-kadence-column:is(.ol-pil, .ol-pil-mobiel) {
	flex: 0 0 auto;
	width: auto;
	margin-inline: auto;
}

.wp-block-kadence-column.ol-pil > .kt-inside-inner-col {
	display: grid;
	grid-template-columns: 1fr 0fr auto;
	gap: 0;
	align-items: center;
	box-sizing: border-box;
	/* Raster en padding springen om; de breedte veert (pil.js). Een overgang
	   op het raster laat de meting een tussenstand lezen. */
	transition: none;
}

.ol-pil__rust,
.ol-pil__open {
	min-width: 0;
	overflow: hidden;
	white-space: nowrap;
	transition: opacity .4s ease;
}

.ol-pil__open {
	opacity: 0;
}

/* Tijdens het meten (pil.js) zonder overgangen: anders staat de navigatie
   net na het dichtklappen nog op overflow: visible en meet de dichte stand zo
   breed als de open. */
.ol-pil--stil .ol-pil__rust,
.ol-pil--stil .ol-pil__open {
	transition: none !important;
}

/* nowrap geldt voor de pil zelf, niet voor wat eronder uitklapt. */
.ol-pil__open .sub-menu {
	white-space: normal;
}

/* Elke groep houdt zijn eigen breedte, ook als zijn kolom in het raster nul
   is. Anders valt de navigatie in rust onder elkaar en wordt de pil hoog. */
.ol-pil__rust > .kt-inside-inner-col,
.ol-pil__open > .kt-inside-inner-col {
	width: max-content;
}

.wp-block-kadence-column.ol-pil:is(.is-open, :not(.ol-pil--js):hover, :not(.ol-pil--js):focus-within) > .kt-inside-inner-col {
	grid-template-columns: 0fr 1fr auto;
	padding-left: 20px;
	padding-right: 20px;
}

/* Zoeken en taal. De afstand tot de groep ervoor volgt de stand: 54 in rust
   (dezelfde als tussen Menu en logo, native op die groep), 20 open (dezelfde
   als tussen de menu-items). Geen overflow: hidden, want onder de wereldbol
   klapt het taalkaartje uit. */
.ol-pil__vast {
	min-width: 0;
	margin-left: 54px;
	white-space: nowrap;
}

.ol-pil:is(.is-open, :not(.ol-pil--js):hover, :not(.ol-pil--js):focus-within) .ol-pil__vast {
	margin-left: 20px;
}

.ol-pil:is(.is-open, :not(.ol-pil--js):hover, :not(.ol-pil--js):focus-within) .ol-pil__rust {
	opacity: 0;
	transition-duration: .15s;
}

/* De dropdowns hangen onder de pil en mogen dus niet afgeknipt worden. Pas
   als de pil open is gaat de rand eraf; eerder zou de navigatie tijdens het
   verbreden over het logo heen vallen. */
.ol-pil:is(.is-open, :not(.ol-pil--js):hover, :not(.ol-pil--js):focus-within) .ol-pil__open {
	opacity: 1;
	overflow: visible;
	transition: opacity .4s ease .05s, overflow 0s .5s;
	transition-behavior: allow-discrete;
}

/* Brug tussen menu-item en paneel: het paneel hangt 18px onder de pil
   (Figma), en zonder brug verlaat de muis onderweg het item en klapt alles
   dicht. */
.ol-pil .wp-block-kadence-navigation .menu-item-has-children {
	position: relative;
}

.ol-pil .wp-block-kadence-navigation .menu-item-has-children::after {
	content: "";
	position: absolute;
	top: 100%;
	left: -10px;
	right: -10px;
	height: 38px;
}

/* 37 = de 19px van het item tot de onderrand van de pil, plus 18. */
.ol-pil .wp-block-kadence-navigation .menu-item.menu-item-has-children > .sub-menu {
	top: calc(100% + 37px);
}

/* Het mega menu staat in Figma midden onder de pil, niet onder "Services".
   pil.js zet de verschuiving (--ol-mega-x) bij het openen. */
.ol-pil .wp-block-kadence-navigation .menu-item.kadence-menu-mega-enabled > .sub-menu {
	/* translate en niet margin: Kadence zet de marge van het mega menu zelf,
	   en translate telt op bij de transform van de fade-down. */
	translate: var(--ol-mega-x, 0) 0;
}

/* De scheidingslijnen tussen de kolommen staan op de binnenlaag van elke kolom.
   Zonder deze regel is een lijn zo hoog als de tekst in zijn kolom en stopt hij
   halverwege (Transport modes); in Figma (2190:8562) loopt hij over de volle
   hoogte van het paneel. */
.kb-nav-sub-menu.mega-menu .kt-row-column-wrap > .wp-block-kadence-column > .kt-inside-inner-col {
	height: 100%;
}

/* Taalkeuze: NL | EN naast elkaar in het kaartje, zoals in Figma. Kadence
   zet de richting van een submenu op drie klassen
   (.navigation-desktop-orientation-horizontal); deze regel telt er vier. */
.wp-block-kadence-navigation.ol-taal .menu-container .sub-menu {
	display: flex;
	flex-direction: row;
	align-items: center;
	min-width: 0;
	width: auto;
}

/* Kadence geeft elke link in een dropdown 200px (--kb-nav-dropdown-link-width,
   alleen in getallen in te stellen); hier zo breed als NL en EN zelf. De
   padding staat native in de navigatie (18/9 op het kaartje, 0/9 per link):
   samen Figma 2190:8515, 92 breed met de lijn op 46. */
.wp-block-kadence-navigation.ol-taal .sub-menu > .menu-item > .kb-link-wrap > .kb-nav-link-content {
	width: auto;
}

.ol-taal .sub-menu .menu-item + .menu-item {
	border-left: 1px solid var(--global-palette7);
}

/* --------------------------------------------------------------------------
   Zoeken in de pil (desktop en mobiel), zoals ns.nl: een klik op het
   vergrootglas schuift het veld vanaf het icoon naar links open, over wat er
   links in de pil staat, op de breedte die de pil op dat moment heeft.

   Native in het zoekblok (klasse ol-zoek, gewone stand): het veld, de
   placeholder, de kleuren, geen rand, het vergrootglas als verzendknop.
   Hier: het vergrootglas in de maat van de pil, en het veld als laag over de
   pil. assets/js/pil-zoeken.js meet de plek en zet .is-zoeken.
   -------------------------------------------------------------------------- */

.ol-zoek.kb-search .kb-search-input-wrapper {
	position: static;
	display: flex;
	align-items: center;
}

/* Kadence zet de knop absoluut rechts in het veld, met padding 7/18. */
.ol-zoek.kb-search .kb-search-input-wrapper .kb-search-icon-submit {
	position: static;
	display: flex;
	width: 16px;
	height: 16px;
	padding: 0;
	margin: 0;
	transform: none;
}

.ol-zoek.kb-search .kb-search-icon-submit .kb-search-icon,
.ol-zoek.kb-search .kb-search-icon-submit svg {
	width: 16px;
	height: 16px;
}

/* Het veld: dicht een strookje van nul breed tegen het vergrootglas, open
   een wit vlak tot de linkerkant van de pil. Het schuiven is een clip-path
   van rechts naar links; zichtbaarheid valt pas na het dichtschuiven weg, zodat
   het veld dicht niet met Tab bereikbaar is. */
.ol-zoek.kb-search .kb-search-input-wrapper .kb-search-input {
	position: absolute;
	z-index: 5;
	width: 0;
	min-width: 0;
	max-width: none;
	margin: 0;
	/* Rechts ruimte voor het kruisje (16) plus 12. */
	padding: 0 28px 0 0;
	font-size: 14px;
	line-height: 1.2;
	letter-spacing: .21px;
	box-shadow: none;
	outline: 0;
	clip-path: inset(0 0 0 100%);
	visibility: hidden;
	transition: clip-path .25s cubic-bezier(.2, .6, .2, 1), visibility 0s .25s;
}

.ol-pil.is-zoeken .ol-zoek.kb-search .kb-search-input {
	clip-path: inset(0);
	visibility: visible;
	transition: clip-path .25s cubic-bezier(.2, .6, .2, 1);
}

/* Het kruisje (pil-zoeken.js zet het neer, rechts in het veld). Het verschijnt
   als het veld er bijna is en gaat meteen weg bij sluiten. */
.ol-zoek__sluit {
	position: absolute;
	z-index: 6;
	display: flex;
	width: 16px;
	height: 16px;
	padding: 0;
	border: 0;
	background: none;
	color: var(--global-palette6);
	cursor: pointer;
	opacity: 0;
	visibility: hidden;
	transition: color .2s ease, opacity .15s ease, visibility 0s .15s;
}

.ol-pil.is-zoeken .ol-zoek__sluit {
	opacity: 1;
	visibility: visible;
	transition: color .2s ease, opacity .15s ease .15s;
}

/* Het thema geeft elke <button> op hover een achtergrond; hier alleen kleur. */
.ol-zoek__sluit:is(:hover, :focus, :focus-visible) {
	color: var(--global-palette1);
	background: none;
	box-shadow: none;
}

/* Ook de open stand: die heeft een hogere specificiteit en zou de overgang
   anders terugzetten. */
@media (prefers-reduced-motion: reduce) {
	.ol-zoek.kb-search .kb-search-input-wrapper .kb-search-input,
	.ol-pil.is-zoeken .ol-zoek.kb-search .kb-search-input,
	.ol-zoek__sluit,
	.ol-pil.is-zoeken .ol-zoek__sluit {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Chevrons in het menu: onze chevron (kb-custom-112, Figma Chevron_Right_MD),
   naar beneden gedraaid, in plaats van Kadence' eigen pijltjes: de
   dropdownpijl van de navigatie, het icoon bij "Menu" en de off-canvas-knop
   op mobiel. Als masker in currentColor, dus de kleuren en hovers uit de
   blokken blijven gelden. viewBox 16 × 16 om het pad heen, zodat hij
   gecentreerd staat en even groot oogt als het pijltje dat hij vervangt.
   `rotate` en niet `transform`: dan telt een eigen draai van Kadence bij
   het openklappen gewoon mee.
   -------------------------------------------------------------------------- */
:is(header, .kb-off-canvas-inner, .wp-block-kadence-off-canvas) :is(.kb-nav-arrow-svg, .kb-svg-icon-fe_chevronDown svg),
.wp-block-kadence-off-canvas-trigger:not(.ol-zoek-trigger) svg {
	background: currentColor;
	-webkit-mask: var(--ol-chevron) center / contain no-repeat;
	mask: var(--ol-chevron) center / contain no-repeat;
	rotate: 90deg;
	transition: transform .2s ease;
}

/* Open wijst de chevron omhoog. In het verticale menu (het accordeon op
   mobiel) doet Kadence dat zelf met transform: rotate(180deg) op
   aria-expanded; in de horizontale navigatie van de pil niet. Hier dezelfde
   draai, in precies de standen waarin Kadence het dropdown toont: hover (niet
   bij klik-om-te-openen of net na Escape) en .menu-item--toggled-on
   (toetsenbord en aanraken). Alleen het bovenste niveau: dieper staat
   Kadence' eigen 270deg voor pijltjes naar rechts. */
.ol-pil .menu-container > .menu > .menu-item:is(.menu-item--toggled-on, :not(.kb-nav-link-sub-click):not(.kb-nav-esc-close):hover) > .kb-link-wrap .kb-nav-arrow-svg {
	transform: rotate(180deg);
}

@media (prefers-reduced-motion: reduce) {
	:is(header, .kb-off-canvas-inner, .wp-block-kadence-off-canvas) .kb-nav-arrow-svg {
		transition: none;
	}
}

:is(header, .kb-off-canvas-inner, .wp-block-kadence-off-canvas) :is(.kb-nav-arrow-svg, .kb-svg-icon-fe_chevronDown svg) > *,
.wp-block-kadence-off-canvas-trigger:not(.ol-zoek-trigger) svg > * {
	visibility: hidden;
}

/* Het thema geeft elke <button> op hover een schaduw (0 15px 25px -7px).
   Het vergrootglas is hier een icoon, geen knopvlak. */
:is(.ol-zoek, .ol-zoek-menu).kb-search .kb-search-icon-submit:is(:hover, :focus) {
	box-shadow: none;
}

/* Het logo als inline SVG (functions.php, ouwerkerk_logo_inline). De kompas-O
   draait om zijn eigen midden; logo-kompas.js zet de hoek. */
.ol-logo .ol-logo__svg {
	display: block;
	max-width: none;
	height: auto;
}

.ol-logo__kompas {
	transform-box: fill-box;
	transform-origin: center;
}

/* --------------------------------------------------------------------------
   Pil op tablet en mobiel: dezelfde pil als op desktop in rust (Menu ·
   OUWLOG · zoeken · taal), in dezelfde maat. Native: de Sectie met wit,
   radius 8, schaduw, padding 18 en 54 tussen de groepen, en de headerrij met
   31 boven en de native 24 opzij. "Menu" is hier de off-canvas-trigger van
   Kadence met een chevron als icoon.

   Past de pil met het woordmerk niet meer (422 breed plus 2 × 24), dan wordt
   het logo het beeldmerk (Figma 148:306) en loopt de pil over de volle
   breedte tussen de zijpadding van de rij.

   De trigger kent geen zichtbaar label, alleen aria-label. Die tekst zetten
   we ervoor, zodat hij in het blok te wijzigen blijft (label "Menu") en er
   niets dubbel staat. De typografie is die van "Menu" op desktop.
   -------------------------------------------------------------------------- */

.ol-pil-mobiel .wp-block-kadence-off-canvas-trigger {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 0;
	font-size: 14px;
	line-height: 16.8px;
	letter-spacing: .21px;
}

.ol-pil-mobiel .wp-block-kadence-off-canvas-trigger:not(.ol-zoek-trigger)::before {
	content: attr(aria-label);
}

.ol-logo--wissel .ol-logo__svg--beeldmerk {
	display: none;
}

@media (max-width: 469.98px) {
	.ol-logo--wissel .ol-logo__svg--woordmerk {
		display: none;
	}

	.ol-logo--wissel .ol-logo__svg--beeldmerk {
		display: block;
	}

	/* De headerrij is een raster links · midden · rechts, en het midden is zo
	   breed als zijn inhoud. Links en rechts zijn leeg; het midden krijgt de
	   hele breedte binnen de padding van de rij. */
	.kadence-header-row-inner:has(> .wp-block-kadence-header-column > .ol-pil-mobiel) {
		grid-template-columns: 0 1fr 0;
	}

	.wp-block-kadence-column.ol-pil-mobiel {
		flex: 1 1 auto;
		width: 100%;
	}

	/* Space Between verdeelt de ruimte; de 54 van de pil is dan alleen nog
	   een minimum, en onder ~350 breed past dat niet meer (dan brak de pil in
	   tweeën). */
	.wp-block-kadence-column.ol-pil-mobiel > .kt-inside-inner-col {
		justify-content: space-between;
		column-gap: 12px;
	}

	/* Een Sectie in een horizontale Sectie groeit mee; de iconen houden hier
	   hun eigen breedte, zodat de ruimte verdeeld wordt. */
	.wp-block-kadence-column.ol-pil-mobiel .wp-block-kadence-column.ol-pil-mobiel__iconen {
		flex: 0 0 auto;
	}
}

/* Het menu op tablet en mobiel: Kadence' off-canvas over de volle breedte,
   met het Hoofdmenu als accordeon. Lettergrootte, padding en scheidslijnen
   staan in de tablet- en mobielinstellingen van de navigatie (die gelden
   alleen hier, want daar is de pil verborgen); de kaart in het mega menu is
   native verborgen op tablet en mobiel. Hier alleen: "Contact us" staat eronder
   als rode knop, dus als menu-item hoeft hij in het off-canvas niet. Kadence
   zet display op vijf klassen (mobiel, verticaal); deze regel telt er zes. */
.ol-offcanvas .wp-block-kadence-navigation .menu-container .menu > .menu-item.ol-nav-contact {
	display: none;
}

/* De scheidslijn tussen de items. De navigatie heeft daar een instelling voor
   (divider), maar in een transparante header wint Kadence' eigen desktopregel
   (.header-desktop-transparent, die klasse blijft ook op mobiel staan) en wist
   hem weer — ook de transparante en sticky varianten helpen niet. Alleen het
   bovenste niveau: in het mega menu staan zelf ook navigaties. */
.ol-offcanvas .kb-off-canvas-inner > .wp-block-kadence-navigation > nav > .menu-container > .kb-navigation > .menu-item:not(:last-of-type) > .kb-link-wrap {
	border-bottom: 1px solid var(--global-palette7);
}

/* Uitgeklapt, zoals bij Kuehne+Nagel: een kleine grijze kop per groep en
   daaronder de diensten. Lettergrootte, regelafstand en ruimte staan in de
   blokken en navigaties (tablet en mobiel); de kleur en het gewicht van de
   kop niet, want die zijn in Kadence niet per breekpunt. Kadence' regel per
   kop telt drie (klasse, klasse, data-kb-block); deze vier. */
.ol-offcanvas .mega-menu .kt-inside-inner-col > .wp-block-kadence-advancedheading {
	color: var(--global-palette5);
	font-weight: 400;
}

/* Het menu klapt van boven naar beneden uit, zoals de chevron bij "Menu"
   belooft. Kadence kent alleen links en rechts (slideFrom); de richting van
   de verschuiving wordt hier omgezet, de rest — tijden, easing, sluiten — is
   van Kadence. Vier klassen: Kadence' eigen regel telt er drie. */
.wp-block-kadence-off-canvas.ol-offcanvas.show-off-canvas .kb-off-canvas-inner-wrap {
	left: 0;
	right: 0;
	transform: translateY(-100%);
}

.wp-block-kadence-off-canvas.ol-offcanvas.active .kb-off-canvas-inner-wrap {
	transform: translateY(0);
}

/* NL | EN in het off-canvas (navigatie "Taal (menu)"), met het streepje van
   het taalkaartje in de pil. */
.ol-taal-rij .menu-item + .menu-item {
	border-left: 1px solid var(--global-palette7);
	padding-left: 24px;
}

/* Ook de open stand, die met zijn hogere specificiteit anders wint. */
@media (prefers-reduced-motion: reduce) {
	.wp-block-kadence-column.ol-pil > .kt-inside-inner-col,
	.ol-pil__rust,
	.ol-pil__open,
	.ol-pil:is(.is-open, :not(.ol-pil--js):hover, :not(.ol-pil--js):focus-within) :is(.ol-pil__rust, .ol-pil__open) {
		transition: none;
	}
}

/* ==========================================================================
   Verborgen tijdens de intro: .ol-na-intro

   Op elk blok te zetten (Extra CSS-klasse; bij de header in de
   header-instellingen). Zolang de hero-intro loopt heeft <html> de klasse
   .ol-intro (functions.php, hero.js) en is zo een blok onzichtbaar en niet
   klikbaar; daarna vervaagt het in. Wie terugkomt ziet geen intro, dus dan
   staat het er meteen. Met opacity en niet display: none, zodat de pagina
   niet verspringt.
   ========================================================================== */

.ol-na-intro {
	transition: opacity .6s ease;
}

.ol-intro .ol-na-intro {
	opacity: 0;
	pointer-events: none;
}

/* ==========================================================================
   Footer (Element "Footer", hook replace_footer)

   Alles is native: de rij met <footer>-tag en achtergrond, de kolommen, de
   drie footermenu's (Navigaties), het logo als Vector. Hier alleen de
   onderstreping: een Kadence-knop en een navigatie kennen geen
   tekstdecoratie. De hoverkleur Olijf licht staat native in de blokken en in
   de navigaties (_kad_navigation_linkColorDropdownHover: de links zijn het
   submenu van de kop). De links in de tekstblokken (contact, BZE-regel)
   krijgen hem hier: het blok kent linkColor/linkHoverColor wel, maar één
   regel voor alle footertekst houdt kleur, overgang en streep samen.

   Alleen in de footer: wat links in lopende tekst elders doen is nog niet
   besloten.
   ========================================================================== */

/* De navigatie zet text-decoration: none op (0,3,0); a.kb-nav-link-content
   telt er één meer. De kop van een footermenu is een parent-item met
   disableLink: Kadence rendert die als <a role="button"> zonder href. Dat is
   een kop, geen link, dus zonder streep. */
.ol-footer a:not(.kb-button, .kt-button, [role="button"]),
.ol-footer .wp-block-kadence-navigation a.kb-nav-link-content:not([role="button"]) {
	text-decoration: underline;
	text-decoration-thickness: 7.5%;
	text-underline-offset: .2em;
}

/* Footermenu's als accordeon op mobiel. Het inklappen zelf is native
   (_kad_navigation_collapseSubMenusMobile + parentTogglesMenusMobile; op
   desktop en tablet uit, dan staat het submenu altijd open). Kadence zet in
   een verticale navigatie --kb-nav-dropdown-margin-left: 1em op het submenu
   zelf (0,3,0), en de native dropdownmarge komt daar niet overheen. */
.ol-footer .wp-block-kadence-navigation .menu-container .sub-menu {
	--kb-nav-dropdown-margin-left: 0;
}

.ol-footer .wp-block-kadence-advancedheading a {
	color: inherit;
	transition: color .2s ease;
}

.ol-footer .wp-block-kadence-advancedheading a:is(:hover, :focus-visible) {
	color: var(--ol-olijf-licht);
}

:is(.kb-button, .kt-button).ol-knop-onderstreept :is(.kt-btn-inner-text, .kt-button-text) {
	text-decoration: underline;
	text-decoration-thickness: 7.5%;
	text-underline-offset: .2em;
}

/* ==========================================================================
   Kennisbank (pagina Knowledge base, Query Loop 303, kaart 306)

   Native in de blokken: de filterknoppen (kleuren, padding, radius, het witte
   vlak), de kaart (wit, radius 8, schaduw, raster 3/2/1 met 24 ertussen), de
   dynamische foto, titel, datum, samenvatting en de tekstlink. De leestijd is
   het core-blok Time to Read. Hier alleen wat de blokken niet kennen.
   ========================================================================== */

/* Kadence zet 32px onder de rij filterknoppen; in de balk staan ze naast het
   zoekveld, dus die ruimte hoort er niet. */
.ol-kennisbank-balk .wp-block-kadence-query-filter-buttons .buttons-options {
	margin-bottom: 0;
}

.ol-kennisbank-balk .kadence-filter-wrap {
	margin: 0;
	padding: 0;
	border: 0;
}

/* Zoekveld en sorteren in een Query Loop zoals de formuliervelden (Gravity
   Forms, Orbital): wit, 47 hoog, rand var(--ol-rand) (grijs 10), radius 8 (Figma
   radius/radius, 2190:8132 en 2190:8403), 14px, geen schaduw; bij focus donkergroen.
   Het zoekblok heeft geen opmaakinstellingen, het sorteerblok alleen deels.
   Kadence' eigen regel (.kb-query-basic-style .kadence-filter-wrap
   input[type="text"], 0,3,1) laadt later; deze selectors tellen meer. De
   zoekbalk in het menu is een ander blok (kadence/search) en blijft zoals hij is. */
.ol-kennisbank-balk .kb-filter-search-wrap {
	position: relative;
	width: 320px;
	max-width: 100%;
}

.kb-query-basic-style .kadence-filter-wrap .kb-filter-search-wrap input.kb-filter-search,
.kb-query-basic-style fieldset.kadence-filter-wrap select.kb-sort {
	height: 47px;
	border: 1px solid var(--ol-rand); /* gelijk aan de velden van het contactformulier */
	border-radius: 8px;
	background-color: var(--global-palette9);
	color: var(--global-palette3);
	font-size: 14px;
	line-height: 1.2;
	letter-spacing: .21px;
	box-shadow: none;
}

.kb-query-basic-style .kadence-filter-wrap .kb-filter-search-wrap input.kb-filter-search:focus,
.kb-query-basic-style fieldset.kadence-filter-wrap select.kb-sort:focus {
	border-color: var(--global-palette3);
	outline: 0;
}

.kb-query-basic-style .kadence-filter-wrap .kb-filter-search-wrap input.kb-filter-search {
	width: 100%;
	padding: 0 44px 0 12px;
}

/* Kadence zet de placeholder met een eigen regel op olijf; die telt mee. */
.kb-query-basic-style .kadence-filter-wrap .kb-filter-search-wrap input.kb-filter-search::placeholder {
	color: var(--global-palette5);
	opacity: 1;
}

.ol-kennisbank-balk .kb-filter-search-btn {
	position: absolute;
	top: 0;
	right: 0;
	width: 44px;
	height: 47px;
	padding: 0;
	border: 0;
	background: none;
	box-shadow: none;
	color: var(--global-palette5);
}

.ol-kennisbank-balk .kb-filter-search-btn svg {
	width: 14px;
	height: 14px;
}

.kb-query-basic-style fieldset.kadence-filter-wrap select.kb-sort {
	padding: 0 36px 0 12px;
	font-weight: 500;
}

/* Het rubriekslabel op de foto (de badge uit het componentenblad): radius 4,
   12px, en per rubriek een kleur. Het label is geen link (functions.php,
   ouwerkerk_badge_zonder_link): de termslug staat in data-term, en daar hangt
   de kleur aan. Neutraal: zand op donkergroen. Rood: rood licht op rood donker
   (5,44:1). Grijs: grijs 10 op olijf donker.

   De kleur per rubriek heeft .kb-dynamic-list-style-pill erbij: Kadence schrijft
   voor de lijst in de kaart een regel van dezelfde specificiteit (0,3,0) inline,
   na deze stylesheet, en die won dan met het standaardzand. */
.ol-badge-lijst.kb-dynamic-list-style-pill .kb-dynamic-list-item {
	padding: 6px 10px;
	border-radius: 4px;
	line-height: 1.2;
}

.ol-badge-lijst.kb-dynamic-list-style-pill .kb-dynamic-list-item:has([data-term="from-practice"]) {
	background: var(--ol-rood-licht);
}

.ol-badge-lijst [data-term="from-practice"] {
	color: var(--global-palette2);
}

.ol-badge-lijst.kb-dynamic-list-style-pill .kb-dynamic-list-item:has([data-term="reference"]) {
	background: var(--ol-grijs-tab);
}

.ol-badge-lijst [data-term="reference"] {
	color: var(--global-palette5);
}

/* ==========================================================================
   Artikeltekst (Element "Template — article", blok Dynamic HTML met de
   inhoud van de post, klasse ol-artikel-tekst)

   De redacteur schrijft met gewone blokken. De componenten uit het
   componentenblad zijn native blokken met een eigen klasse:
   - checklijst: kadence/iconlist (vinkje fe_check, stijl stacked) — ol-checklijst
   - citaat: core/quote
   - kerncijfers: Secties met een rand boven — ol-kerncijfers / ol-kerncijfer
   - genummerd kenmerk: Sectie met nummer, kop, tekst en checklijst — ol-kenmerk
   - trajectbalk: core/list, per stap is-klaar of is-actief — ol-traject
   - specificaties: core/table zonder kop — ol-specificaties
   - veelgestelde vragen: kadence/accordion — ol-accordeon
   Maten en kleuren van alles wat een blokinstelling heeft staan in het blok,
   ook de kopkleur en de typografie van h2 en h3 van de artikeltekst
   (Dynamic HTML: headingColor, h2Typography en h3Typography met enableH2 en
   enableH3). De tekstkleur en -maat niet: die zet Kadence op elke <p> in het
   blok, ook in een citaat of component, en die hebben hun eigen maat.
   Hier het ritme van de lopende tekst en wat de blokken niet kennen.
   ========================================================================== */

/* De kolom (737) staat in Figma niet in het midden maar op 216 van de linkerrand
   van de inhoud (x 296 op 1440). Kadence' maxWidth centreert; op desktop zetten
   we hem op die plek, kleiner dan dat past hij en centreert hij weer. */
@media (min-width: 1025px) {
	.wp-block-kadence-column.ol-artikel-kolom {
		margin-left: min(216px, calc(100% - 737px));
		margin-right: auto;
	}
}

.ol-artikel-tekst {
	color: var(--global-palette4);
	font-size: 16px;
	line-height: 1.65;
}

/* Het ritme: elk blok 20px onder het vorige, een kop 48px, en na een kop
   16px. Kadence en core zetten elk hun eigen marges; die gelden hier niet. */
/* Twee klassen: Dynamic HTML zet zelf margin-bottom 32 op zijn alinea's. */
.wp-block-kadence-dynamichtml.ol-artikel-tekst > * {
	margin-top: 0;
	margin-bottom: 0;
}

.wp-block-kadence-dynamichtml.ol-artikel-tekst > * + * {
	margin-top: 20px;
}

.wp-block-kadence-dynamichtml.ol-artikel-tekst > * + h2 {
	margin-top: 48px;
}

.wp-block-kadence-dynamichtml.ol-artikel-tekst > h2 + * {
	margin-top: 16px;
}

.ol-artikel-tekst a:not(.kb-button) {
	color: var(--global-palette3);
	text-decoration: underline;
	text-decoration-thickness: 7.5%;
	text-underline-offset: .2em;
}

.ol-artikel-tekst a:not(.kb-button):is(:hover, :focus-visible) {
	color: var(--global-palette1);
}

.ol-artikel-tekst .wp-block-image img {
	border-radius: var(--ol-radius);
}

/* Checklijst: het vinkje staat in een rondje van 22px. De iconlist kent een
   radius, maar die geldt pas met een eenheid die het blok niet opslaat. */
.ol-checklijst.kt-svg-icon-list-items .kt-svg-icon-list-item-wrap .kt-svg-icon-list-single {
	border-radius: 50%;
}

/* Citaat: rode kantlijn van 3px, bron eronder in twee regels. */
.wp-block-kadence-dynamichtml.ol-artikel-tekst > .wp-block-quote {
	margin-block: 36px;
	padding: 0 0 0 28px;
	border: 0;
	border-left: 3px solid var(--global-palette1);
}

.ol-artikel-tekst .wp-block-quote p {
	margin: 0;
	font-size: 22px;
	line-height: 1.3;
	font-weight: 500;
	font-style: normal;
	color: var(--global-palette3);
}

.ol-artikel-tekst .wp-block-quote cite {
	display: block;
	margin-top: 22px;
	font-size: 13px;
	line-height: 1.45;
	font-style: normal;
	color: var(--global-palette5);
}

.ol-artikel-tekst .wp-block-quote cite strong {
	font-size: 12px;
	font-weight: 500;
	color: var(--global-palette3);
}

/* Kerncijfers: de drie delen de breedte. */
.ol-kerncijfers > .kt-inside-inner-col > .ol-kerncijfer {
	flex: 1 1 0;
}

/* Genummerd kenmerk: twee onder elkaar krijgen de ruimte van een alinea. */
.wp-block-kadence-dynamichtml.ol-artikel-tekst > .ol-kenmerk + .ol-kenmerk {
	margin-top: 36px;
}

/* Trajectbalk: stippen op een lijn, labels eronder. Afgerond donkergroen, de
   lopende stap rood met een halo, de rest open. Een gewone lijst, zodat een
   redacteur alleen stappen typt en per stap is-klaar of is-actief zet.

   De laatste stap is zo breed als zijn stip; zijn label steekt naar links uit.
   Zo loopt de lijn van de stap ervoor precies tot die stip. */
ul.wp-block-list.ol-traject {
	display: flex;
	margin-inline: 0;
	padding: 0;
	list-style: none;
}

.ol-traject li {
	position: relative;
	flex: 1 1 0;
	margin: 0;
	padding-top: 32px;
	font-size: 12px;
	line-height: 1.2;
	font-weight: 500;
	color: var(--global-palette5);
}

.ol-traject li:last-child {
	flex: 0 0 12px;
	display: flex;
	justify-content: flex-end;
	white-space: nowrap;
}

/* De lijn naar de volgende stap. */
.ol-traject li:not(:last-child)::after {
	content: "";
	position: absolute;
	top: 5px;
	left: 12px;
	right: 0;
	height: 2px;
	background: var(--ol-grijs-rand);
}

.ol-traject li.is-klaar:not(:last-child)::after {
	background: var(--global-palette3);
}

.ol-traject li::before {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	box-sizing: border-box;
	width: 12px;
	height: 12px;
	border: 2px solid var(--ol-grijs-rand);
	border-radius: 50%;
	background: var(--global-palette9);
}

.ol-traject li.is-klaar::before {
	border-color: var(--global-palette3);
	background: var(--global-palette3);
}

.ol-traject li.is-actief {
	color: var(--global-palette3);
}

.ol-traject li.is-actief::before {
	top: -2px;
	left: -2px;
	width: 16px;
	height: 16px;
	border: 0;
	background: var(--global-palette1);
	box-shadow: 0 0 0 4px var(--ol-rood-licht);
}

/* Op mobiel onder elkaar: de lijn loopt dan omlaag. */
@media (max-width: 767px) {
	ul.wp-block-list.ol-traject {
		flex-direction: column;
		gap: 24px;
	}

	.ol-traject li,
	.ol-traject li:last-child {
		flex: none;
		display: block;
		padding: 0 0 0 28px;
		white-space: normal;
	}

	.ol-traject li:not(:last-child)::after {
		top: 12px;
		left: 5px;
		right: auto;
		bottom: -24px;
		width: 2px;
		height: auto;
	}
}

/* Specificaties: label links, waarde rechts, een haarlijn eronder. */
.ol-artikel-tekst .wp-block-table.ol-specificaties table {
	border: 0;
	border-collapse: collapse;
}

.ol-specificaties td {
	padding: 10px 0 12px;
	border: 0;
	border-bottom: 1px solid var(--ol-grijs-rand);
	font-size: 14px;
	line-height: 1.6;
	color: var(--global-palette3);
}

.ol-specificaties td:first-child {
	color: var(--global-palette5);
}

.ol-specificaties td:last-child {
	text-align: right;
}

/* Veelgestelde vragen: de laatste vraag krijgt ook een lijn eronder. */
.ol-accordeon .kt-accordion-inner-wrap {
	border-bottom: 1px solid var(--ol-olijf-licht);
}

.ol-accordeon .kt-blocks-accordion-header {
	text-align: left;
}

/* ==========================================================================
   Dienstpagina (Element "Template — service", replace_single_content)

   Titel, foto, intro en de inhoud per dienst komen uit het posttype en ACF,
   via Kadence' Repeater (key_points, blocks, cases). De Repeater schrijft
   altijd <ul> met per rij een <li>; zijn kolommen zijn een raster. Hier alleen
   wat de blokken niet kennen.
   ========================================================================== */

/* Kernpunten: naast elkaar zolang ze passen, niet in een vast raster. */
.ol-kernpunten .wp-block-kadence-repeatertemplate {
	display: flex;
	flex-wrap: wrap;
	gap: 12px 30px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ol-kernpunten .wp-block-kadence-repeatertemplate > li {
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 0;
}

/* Het vinkje uit het componentenblad: 22px rond, olijf donker, wit vinkje
   (--ol-vinkje). Kernpunten in de hero, voordelen in de keuzes, lijsten in
   een stappenkaart. */
.ol-kernpunten .wp-block-kadence-repeatertemplate > li::before,
:is(.ol-keuzes, .ol-stappen) .wp-block-kadence-advancedheading ul li::before {
	content: "";
	flex: 0 0 22px;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: var(--global-palette5) var(--ol-vinkje) center / 12px no-repeat;
}

/* De keuzes: een lijst zonder opsommingsteken. */
.ol-keuzes .wp-block-kadence-repeatertemplate {
	margin: 0;
	padding: 0;
	list-style: none;
}

.ol-keuzes .wp-block-kadence-repeatertemplate > li {
	margin: 0;
}

.ol-keuzes .wp-block-kadence-repeatertemplate > li > .ol-keuze,
.ol-keuzes .wp-block-kadence-repeatertemplate > li > .ol-keuze > .kt-inside-inner-col {
	height: 100%;
}

.ol-keuzes .wp-block-kadence-advancedheading p {
	margin: 0 0 20px;
}

.ol-keuzes .wp-block-kadence-advancedheading p:last-child {
	margin-bottom: 0;
}

.ol-keuzes .wp-block-kadence-advancedheading ul + p {
	margin-top: 20px;
}

:is(.ol-keuzes, .ol-stappen) .wp-block-kadence-advancedheading ul {
	display: grid;
	gap: 12px;
	margin: 0;
	padding: 0;
	list-style: none;
}

:is(.ol-keuzes, .ol-stappen) .wp-block-kadence-advancedheading ul li {
	display: flex;
	align-items: center;
	gap: 12px;
	color: var(--global-palette3);
}

/* De case: de lijst is één rij, zonder opsommingsteken. */
.wp-block-kadence-repeater .wp-block-kadence-repeatertemplate:has(.ol-casekaart) {
	margin: 0;
	padding: 0;
	list-style: none;
}

/* Trade lanes: het vlak achter de tabtitels is wit (de vorm staat bij
   Diensten). */
.wp-block-kadence-tabs.ol-tabs-regio .kt-tabs-title-list {
	background: var(--global-palette9);
}

/* ==========================================================================
   Contact (pagina Contact, Gravity Forms-formulier Contact)

   Het formulier gebruikt GF's thema Orbital; kleuren en randen staan in het
   formulierblok, de verzendknop verderop (Verzendknop van Gravity Forms).
   Hier de afstanden, tussenkoppen, keuzerondjes en de links in de gegevens en in het formulier: het
   thema maakt elke link rood, het ontwerp houdt ze donker met een streep en
   laat alleen de hover rood worden.
   ========================================================================== */

/* Tussenkoppen in het contactformulier (Tell us about your shipment, Your
   contact details), en keuzerondjes naast elkaar, zoals in het prototype. */
.ol-contactformulier .ol-form-tussenkop {
	margin: 8px 0 0;
	font-size: 16px;
	font-weight: 500;
	line-height: 1.4;
	color: var(--global-palette3);
}

.gform_wrapper.gform-theme .ol-contactformulier .ol-keuzerij .gfield_radio {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	gap: 8px 24px;
}

.ol-contactgegevens a,
.ol-contactformulier .gfield_consent_label a {
	color: var(--global-palette3);
	text-decoration: underline;
	text-decoration-thickness: 7.5%;
	text-underline-offset: .2em;
}

.ol-contactgegevens a:is(:hover, :focus-visible),
.ol-contactformulier .gfield_consent_label a:is(:hover, :focus-visible) {
	color: var(--global-palette1);
}

/* Afstanden uit Figma 2190:8403: 24 tussen de kolommen, 22 tussen de rijen,
   en even veel boven de knop. Orbital rekent met deze variabelen. */
.gform_wrapper.ol-contactformulier_wrapper.gform-theme {
	--gf-form-gap-x: 24px;
	--gf-form-gap-y: 22px;
	--gf-form-footer-margin-y-start: 22px;
}

/* Placeholder en verplicht-sterretje in elk formulier. Orbital leidt de
   placeholder af van de tekstkleur (donkergroen op 70%) en kleurt het
   sterretje met zijn eigen rood (#C02B0A); het ontwerp heeft #717064 voor de
   placeholder, in het palet olijf donker, en het rood is ons rood. De radius
   van de velden (8) staat in het formulierblok (inputBorderRadius); het
   selectievakje heeft in Figma 4 (2190:8425), Orbital geeft hem 2. */
.gform_wrapper.gform-theme {
	--gf-ctrl-placeholder-color: var(--global-palette5);
	--gf-ctrl-label-color-req: var(--global-palette1);
	--gf-ctrl-checkbox-check-radius: 4px;
}

/* ==========================================================================
   Verzendknop van Gravity Forms als de knop op de rest van de site

   ouwerkerk_gf_knop() geeft hem de klassen ol-knop-veeg ol-knop-rood en de
   spans van een Kadence-knop (icoon en tekst); de veeg komt dan uit de regels
   bovenaan. Hier wat bij Kadence in het blok staat: maat, typografie en kleur
   van de rode knop "Get in touch" (12/18, radius 6, 41 marge voor het vlak
   met de chevron, 12,8/15 hoofdletters, icoon 25,6). Orbital zet de
   knopstijl met selectors tot (0,8,1) en leest daarbij --gf-ctrl-btn-*;
   die zetten we hier op de knop zelf in plaats van ertegenin te schrijven.
   ========================================================================== */

.gform_wrapper.gform-theme .gform_footer .ol-gf-knop.ol-knop-veeg {
	--gf-ctrl-btn-padding-x: 18px;
	--gf-ctrl-btn-padding-y: 12px;
	--gf-ctrl-btn-radius: var(--ol-radius);
	--gf-ctrl-btn-font-family: inherit;
	--gf-ctrl-btn-font-size: 12.8px;
	--gf-ctrl-btn-font-weight: 500;
	--gf-ctrl-btn-line-height: 15px;
	--gf-ctrl-btn-letter-spacing: .32px;
	--gf-ctrl-btn-text-transform: uppercase;
	--gf-ctrl-btn-size: 0;
	--gf-ctrl-btn-shadow: none;
	--gf-ctrl-btn-icon-gap: 0;
	--gf-ctrl-btn-border-width-primary: 0;
	--gf-ctrl-btn-color-primary: var(--global-palette9);
	/* Orbital zet transition: var(--gf-ctrl-transition), .15s over alles: dan
	   schiet de veeg er in één flits doorheen. Dezelfde overgang als de
	   Kadence-knoppen. */
	--gf-ctrl-transition: --ol-veeg .45s cubic-bezier(.2, .6, .2, 1);
}

/* Het vlak met de chevron staat 41px links van de knop; Orbital zet de marge
   van de knop op nul, dus de ruimte komt van de voetregel. Die krijgt ook
   een eigen stapelcontext: het vlak (::after, z-index -1) valt anders achter
   de witte kaart waar het formulier in staat. */
.gform_wrapper.gform-theme .gform_footer:has(> .ol-gf-knop) {
	padding-inline-start: 41px;
	isolation: isolate;
}

/* Orbital zet de content van ::after op var(--gf-local-content), met een
   selector van (0,5,1). */
.gform_wrapper.gform-theme .gform_footer button.ol-gf-knop.ol-knop-veeg.ol-knop-rood::after {
	content: "";
}

.gform_wrapper.gform-theme .gform_footer .ol-gf-knop .kb-svg-icon-wrap {
	display: flex;
	font-size: 25.6px;
	color: var(--global-palette9);
}

.gform_wrapper.gform-theme .gform_footer .ol-gf-knop:is(:hover, :focus) .kb-svg-icon-wrap {
	color: var(--global-palette2);
}

/* Orbital zet op ::before van een knop zijn eigen laag, met selectors tot
   (0,5,1); de focusring van de chipknop (hierboven) moet daar overheen. */
.gform_wrapper.gform-theme .gform_footer button.ol-gf-knop.ol-knop-veeg:focus-visible {
	outline: none;
}

.gform_wrapper.gform-theme .gform_footer button.ol-gf-knop.ol-knop-veeg:focus-visible::before {
	content: "";
	position: absolute;
	inset: -4px -4px -4px -45px;
	border: 2px solid var(--ol-focusring);
	border-radius: calc(var(--ol-radius) + 4px);
	background: none;
	opacity: 1;
	pointer-events: none;
}

/* Na een mislukte verzending staat de melding bóven het veld, en een veld
   zonder melding (de optionele) begint dan hoger dan zijn buurman. De velden
   staan in een raster; in die stand lijnen de velden in een rij onderaan uit,
   zodat de invoervakken weer op één lijn staan. In één kolom verandert er
   niets. */
.gform_wrapper.gform-theme.gform_validation_error .gform_fields {
	align-items: end;
}

/* Tijdens het verzenden staat de loader van Gravity Forms op de plek van de
   chevron, en de tekst blijft staan. GF 3 zet hem als span.gform-loader ín de
   knop (gform.spinner.show), geeft de knop .gform-has-spinner en maakt de
   tekst transparant; de framework-css centreert de loader over de hele knop
   (inset: 0, margin: auto). Hier: de tekstkleur terug, de chevron onzichtbaar,
   en de loader in het vlak van 39px links (van -41px tot -2px, margin: auto
   centreert hem daarin). Zijn kleur volgt de chevron: wit op rood, rood donker
   zodra de veeg er staat, en dat is na een klik (:focus) meestal zo. */
.gform_wrapper.gform-theme .gform_footer button.ol-gf-knop.ol-knop-veeg.gform-has-spinner {
	color: var(--global-palette9);
	--gf-form-spinner-fg-color: var(--global-palette9);
	--gf-form-spinner-bg-color: rgb(255 255 255 / .25);
}

.gform_wrapper.gform-theme .gform_footer button.ol-gf-knop.ol-knop-veeg.gform-has-spinner:is(:hover, :focus) {
	--gf-form-spinner-fg-color: var(--global-palette2);
	--gf-form-spinner-bg-color: rgb(168 22 33 / .2);
}

.gform_wrapper.gform-theme .gform_footer .ol-gf-knop.gform-has-spinner .kb-svg-icon-wrap svg {
	visibility: hidden;
}

.gform_wrapper.gform-theme .gform_footer .ol-gf-knop .gform-loader {
	inset-block: 0;
	inset-inline: -41px calc(100% + 2px);
	/* De loader is 10em met randen van 1,1em: op 1,8px is dat 18px, even
	   hoog als de chevron oogt. */
	font-size: 1.8px;
}

/* Visueel weg, wel voor schermlezers; ook bij focus (anders dan
   .screen-reader-text van het thema, die dan als skiplink verschijnt). De
   tweede selector wint van Orbital, die maat en padding van het foutenblok zet. */
.ol-sr-only,
.gform_wrapper.gform-theme .gform_validation_errors.ol-sr-only {
	position: absolute !important;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* ==========================================================================
   Rekentool (pagina Demurrage calculator)

   Het schema is de trajectbalk uit de artikeltekst (ol-traject), hier met
   drie momenten en de twee perioden eronder als Secties met een rand boven.
   De rekentool zelf zijn twee Gravity Forms-formulieren (ol-rekentool en
   ol-besparing), elk in een eigen kaart; zie assets/js/rekentool.js.
   ========================================================================== */

/* In het schema zijn de labels langer: iets groter, en de laatste mag op
   desktop op één regel blijven. */
.ol-traject--schema li {
	font-size: 14px;
	line-height: 1.4;
	color: var(--global-palette3);
}

.ol-rekenkaarten > .kt-inside-inner-col > .wp-block-kadence-column {
	flex: 1 1 0;
	min-width: 0;
}

/* Kaartenrij op de losse pagina's (Over ons, werkwijze, locaties): kaarten even
   breed en even hoog, bovenaan uitgelijnd. */
.wp-block-kadence-column.ol-kaartenrij > .kt-inside-inner-col {
	align-items: stretch;
}

.ol-kaartenrij > .kt-inside-inner-col > .wp-block-kadence-column {
	flex: 1 1 0;
	min-width: 0;
}

/* Achtergrond, rand en schaduw staan op de binnenlaag van de kaart. */
.ol-kaartenrij > .kt-inside-inner-col > .wp-block-kadence-column > .kt-inside-inner-col {
	height: 100%;
}

/* Introsectie (kop links, tekst rechts): de kop staat bovenaan, niet in het
   midden naast een lange tekst. */
@media (min-width: 1025px) {
	.wp-block-kadence-column.ol-intro-sectie > .kt-inside-inner-col {
		align-items: flex-start;
		flex-wrap: nowrap;
	}

	/* In het sjabloon zijn kop en tekst Dynamic HTML-blokken, en die kennen geen
	   maxWidth: zonder deze regel neemt de tekst de volle breedte en valt hij
	   onder de kop. Zelfde verdeling als de losse pagina's. Bij de keuzes is de
	   kop een gewone kop (ACF inline), vandaar ook advancedheading. */
	.ol-intro-sectie > .kt-inside-inner-col > :is(.kb-dynamic-html, .wp-block-kadence-advancedheading):first-child {
		flex: 0 1 628px;
	}

	.ol-intro-sectie > .kt-inside-inner-col > .kb-dynamic-html:last-child {
		flex: 0 1 560px;
	}
}

.ol-perioden > .kt-inside-inner-col > .ol-periode {
	flex: 1 1 0;
}

/* De formulieren. Velden zoals het component Invoerveld (kleurpalet, 47:53):
   label 14/1.6 regular, veld met haarlijn olijf; de rest komt uit de
   Orbital-instellingen van het formulierblok. Figma 2079:1699 geeft de
   opbouw: 20 tussen de velden, schuif met waarde ernaast, grijs uitkomstvak. */
.gform_wrapper.ol-rekentool_wrapper.gform-theme {
	margin-top: 24px;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .gform_fields {
	row-gap: 20px;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .gfield_label {
	font-size: 14px;
	line-height: 1.6;
	font-weight: 400;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .gfield_description {
	padding-top: 6px;
	font-size: 13px;
	line-height: 1.45;
	color: var(--global-palette5);
}

/* Het bereik (1 tot 99) staat al op het veld zelf; de melding eronder is ruis. */
.gform_wrapper.ol-rekentool_wrapper.gform-theme .gfield_description.instruction {
	display: none;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme input[type="number"] {
	-moz-appearance: textfield;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme input[type="number"]::-webkit-inner-spin-button,
.gform_wrapper.ol-rekentool_wrapper.gform-theme input[type="number"]::-webkit-outer-spin-button {
	display: none;
	-webkit-appearance: none;
	margin: 0;
}

/* Schuif (GP Sliders): spoor zand, vulling en greep donkergroen, de waarde in
   een vakje rechts ernaast. */
.gform_wrapper.ol-rekentool_wrapper .ginput_container_gps_slider {
	display: flex;
	align-items: center;
	gap: 16px;
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider {
	flex: 1 1 auto;
	min-width: 0;
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider__track {
	height: 4px;
	border-radius: 2px;
	background: var(--global-palette7);
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider__fill {
	height: 4px;
	border-radius: 2px;
	background: var(--global-palette3);
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider__handle {
	width: 18px;
	height: 18px;
	border: 2px solid var(--global-palette9);
	border-radius: 50%;
	background: var(--global-palette3);
	box-shadow: 0 0 0 1px var(--global-palette3);
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider__handle:focus-visible {
	outline: 2px solid var(--global-palette1);
	outline-offset: 3px;
}

.gform_wrapper.ol-rekentool_wrapper .gps-slider__value-display {
	flex: 0 0 auto;
	min-width: 44px;
	margin: 0;
	padding: 6px 10px;
	border-radius: var(--ol-radius);
	background: var(--global-palette8);
	font-size: 16px;
	font-weight: 600;
	line-height: 1.2;
	text-align: center;
	color: var(--global-palette3);
}

/* Uitkomstvak: papierwit, regels met label links en bedrag rechts, het
   totaal vet onder een lijn. De rekenvelden zijn alleen-lezen invoervelden;
   hier zien ze eruit als tekst. */
.ol-uitkomstvak {
	display: flex;
	flex-direction: column;
	gap: 6px;
	grid-column: 1 / -1;
	padding: 22px 24px;
	border-radius: var(--ol-radius);
	background: var(--global-palette8);
}

.gform_wrapper.ol-rekentool_wrapper .ol-uitkomstvak .gfield {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .ol-uitkomstvak .gfield_label {
	margin: 0;
	font-size: 16px;
	line-height: 1.5;
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .ol-uitkomstvak input[readonly] {
	width: 9ch;
	min-block-size: 0;
	padding: 0;
	border: 0;
	background: none;
	box-shadow: none;
	font-size: 16px;
	line-height: 1.5;
	text-align: right;
	color: var(--global-palette3);
}

/* Het bedrag zo breed als het getal, zodat het €-teken ertegenaan staat.
   Waar field-sizing ontbreekt zet rekentool.js de breedte. */
@supports (field-sizing: content) {
	.gform_wrapper.ol-rekentool_wrapper.gform-theme .ol-uitkomstvak input[readonly] {
		width: auto;
		min-inline-size: 1ch;
		field-sizing: content;
	}
}

.gform_wrapper.ol-rekentool_wrapper .ol-euro .ginput_container {
	display: flex;
	align-items: baseline;
	flex: 0 0 auto;
}

.gform_wrapper.ol-rekentool_wrapper .ol-euro .ginput_container::before {
	content: "€\00a0";
	color: var(--global-palette3);
}

.gform_wrapper.ol-rekentool_wrapper .ol-uitkomstvak .ol-totaal {
	margin-top: 8px;
	padding-top: 14px;
	border-top: 1px solid var(--global-palette7);
}

.gform_wrapper.ol-rekentool_wrapper.gform-theme .ol-uitkomstvak .ol-totaal :is(.gfield_label, input[readonly]),
.gform_wrapper.ol-rekentool_wrapper .ol-uitkomstvak .ol-totaal .ginput_container::before {
	font-size: 18px;
	font-weight: 600;
}

.gform_wrapper.ol-rekentool_wrapper .ol-uitkomst-regel {
	margin: 0;
	font-size: 16px;
	line-height: 1.5;
	color: var(--global-palette3);
}

.gform_wrapper.ol-rekentool_wrapper :is(.ol-oorzaak, .ol-disclaimer) {
	margin: 0;
}

.gform_wrapper.ol-rekentool_wrapper .ol-oorzaak {
	font-size: 14px;
	line-height: 1.6;
	color: var(--global-palette3);
}

.gform_wrapper.ol-rekentool_wrapper .ol-disclaimer {
	font-size: 13px;
	line-height: 1.45;
	color: var(--global-palette5);
}

.gform_wrapper.ol-rekentool_wrapper .ol-oorzaak + .ol-disclaimer {
	margin-top: 12px;
}

/* Geen verzendknop, dus ook geen lege voetregel. */
.gform_wrapper.ol-rekentool_wrapper .gform_footer {
	display: none;
}

/* Paginering zoals het component uit het componentenblad (Figma 69:40):
   vorige en volgende als vierkant van 36 met rand olijf donker en de chevron
   (links gespiegeld), daartussen "1 of 2" (assets/js/paginering.js). Kleuren
   en typografie staan in het blok; de vorm van de knoppen niet. */
.wp-block-kadence-query-pagination .pagination .nav-links {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
}

.wp-block-kadence-query-pagination .pagination .page-numbers {
	min-width: 0;
	padding: 0;
	border: 0;
	background: none;
}

.wp-block-kadence-query-pagination .pagination .page-numbers:is(.prev, .next) {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border: 1px solid var(--global-palette5);
	border-radius: var(--ol-radius);
	background: var(--global-palette8);
	color: var(--global-palette3);
}

.wp-block-kadence-query-pagination .pagination .page-numbers:is(.prev, .next):is(:hover, :focus-visible) {
	border-color: var(--global-palette3);
	background: var(--global-palette3);
	color: var(--global-palette9);
}

/* De chevron is in Figma 8,4 × 16. Het pad beslaat 6,4 × 12 van zijn vak van
   20 × 24 en staat 1,8 rechts van het midden: vak 26,7 × 32 en 2,4 terug. */
.wp-block-kadence-query-pagination .pagination .page-numbers:is(.prev, .next) svg {
	flex: 0 0 auto;
	width: 26.67px;
	height: 32px;
	transform: translateX(-2.4px);
}

.wp-block-kadence-query-pagination .pagination .page-numbers.prev svg {
	transform: scaleX(-1) translateX(-2.4px);
}

/* Met de teller erbij: geen nummers of puntjes meer, en een uitgeschakeld
   vak waar vorige of volgende ontbreekt (eerste en laatste pagina). */
.wp-block-kadence-query-pagination .nav-links.ol-paginering > .page-numbers:not(.prev):not(.next) {
	display: none;
}

.wp-block-kadence-query-pagination .pagination .page-numbers.ol-uit {
	opacity: .35;
	pointer-events: none;
}

.wp-block-kadence-query-pagination .ol-teller {
	font-size: 14px;
	line-height: 1.6;
	color: var(--global-palette5);
	white-space: nowrap;
}

.wp-block-kadence-query-pagination .pagination .page-numbers.current {
	border: 0;
	font-weight: 500;
	text-decoration: underline;
	text-decoration-thickness: 7.5%;
	text-underline-offset: .3em;
}

/* De gegevenskolom is op desktop 340 breed (maxWidth in het blok). Kadence
   maakt daar flex-basis van, en op tablet en mobiel staan de kolommen onder
   elkaar: dan wordt het de hoogte en valt de tekst uit de kaart. De ouder staat
   daar op vertical-reverse (formulier boven), en die richting ziet Kadence' regel
   voor horizontale Secties (vijf klassen) niet als verticaal; vandaar zes. */
@media (max-width: 1024px) {
	.wp-block-kadence-column.kb-section-dir-horizontal:not(.kb-section-md-dir-vertical) > .kt-inside-inner-col > .wp-block-kadence-column.ol-contactgegevens {
		flex: 0 0 auto;
		max-width: none;
	}

	/* De kop van de case is op desktop 628 breed. Op tablet en mobiel staat
	   hij boven de situatie, en dan centreert Kadence' maxWidth (margin auto)
	   hem. */
	.wp-block-kadence-column.ol-case-kop {
		margin-inline: 0;
	}
}

/* De regiokaart is 737 breed en staat links, zoals in Figma. Kadence' maxWidth
   centreert hem (margin auto); dat hoort hier niet. */
.wp-block-kadence-column.ol-regiokaart {
	margin-inline: 0;
}

/* ==========================================================================
   Trade lanes: de foto wisselt mee met de tab

   Elke tab heeft als eerste blok een Sectie "Regiofoto" (ol-regio-foto) met de
   foto als achtergrond; die is per tab in de editor te wisselen. Kadence toont
   alleen de actieve tab, dus alleen die foto is er. Hier legt hij zich over de
   hele rij: de tussenlagen mogen geen positioneringscontext zijn (zoals bij de
   hero-rij), en de kop, de tabknoppen en de kaart liggen erboven. De rij zelf
   heeft geen foto meer maar donkergroen: een eigen foto kwam bij het wisselen
   heel even tussendoor.
   ========================================================================== */
.ol-tradelanes {
	position: relative;
	isolation: isolate;
}

.ol-tradelanes > .kt-row-column-wrap,
.ol-tradelanes > .kt-row-column-wrap > .wp-block-kadence-column,
.ol-tradelanes > .kt-row-column-wrap > .wp-block-kadence-column > .kt-inside-inner-col,
.ol-tradelanes .wp-block-kadence-tabs,
.ol-tradelanes .kt-tabs-wrap,
.ol-tradelanes .kt-tabs-content-wrap,
.ol-tradelanes .kt-tab-inner-content,
.ol-tradelanes .kt-tab-inner-content-inner {
	position: static;
}

/* Wisselen zonder tussenfoto. Kadence verbergt een niet-actieve tab met
   display: none, en dan is zijn foto meteen weg en nog niet geladen: bij een
   fade-in zag je de rij erdoorheen. Nu blijven de niet-actieve tabs in de
   pagina (zonder hoogte, onzichtbaar), dus hun foto is geladen. De actieve foto
   ligt onderop en staat er direct; de vorige ligt erboven en fadet weg. */
.ol-tradelanes .kt-tabs-wrap .wp-block-kadence-tab[role="tabpanel"][aria-hidden="true"] {
	display: block;
	height: 0;
	margin: 0;
	padding: 0;
	overflow: hidden;
	visibility: hidden;
}

.ol-tradelanes .ol-regio-foto {
	position: absolute;
	inset: 0;
	z-index: -1;
	visibility: visible;
	opacity: 0;
	transition: opacity 0.45s ease-out;
}

.ol-tradelanes .wp-block-kadence-tab[aria-hidden="false"] .ol-regio-foto {
	z-index: -2;
	opacity: 1;
	transition: none;
}

.ol-tradelanes .ol-regio-foto > .kt-inside-inner-col {
	height: 100%;
	background-size: cover;
}

.ol-tradelanes .wp-block-kadence-advancedheading,
.ol-tradelanes .kt-tabs-title-list,
.ol-tradelanes .ol-regiokaart {
	position: relative;
}

/* Overlay over de foto, zoals op de slides van Diensten op de homepage
   (donkergroen 20% bovenaan, naar transparant): de witte kop blijft leesbaar
   op een lichte lucht. Boven de foto's (z-index -1 en -2), onder de inhoud. */
.ol-tradelanes::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background: linear-gradient(180deg, color-mix(in srgb, var(--global-palette3) 20%, transparent) 19.71%, transparent 100%);
}

@media (prefers-reduced-motion: reduce) {
	.ol-tradelanes .ol-regio-foto {
		transition: none;
	}
}

/* ==========================================================================
   Agentennetwerk: stippenkaart (Figma 2263:2362)

   De kaart is de stippenvector uit Figma (assets/img/wereldkaart-stippen.svg,
   #184C46 op donkergroen). De pins staan in procenten op de vector; de
   projectie is een gewone lengte-/breedtegraadkaart (x = 640 + 3,556 × lengte,
   y = 295,1 − 3,556 × breedte op 1280 × 494), nagerekend met de pins in Figma.
   Rood: eigen vestiging en havenagent. Wit vol met ring: de geïntegreerde
   agent. Wit open (klein): de vaste agenten. Vol en open moeten zonder hover
   te onderscheiden zijn (Hubrecht, 5-10). Een paar Europese pins staan een
   paar pixels naast hun haven, anders overlappen ze. De tooltip van de
   actieve pin staat open; hover of focus op een andere pin toont die.
   ========================================================================== */
.ol-wereldkaart {
	position: relative;
	width: 100%;
	aspect-ratio: 1280 / 494;
}

.ol-wereldkaart__land {
	display: block;
	width: 100%;
	height: 100%;
}

.ol-pin {
	position: absolute;
	width: 24px;
	height: 24px;
	margin: -12px 0 0 -12px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: none;
	box-shadow: none;
	cursor: pointer;
}

.ol-pin::before {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 50%;
	background: var(--global-palette9);
	opacity: 0.3;
}

.ol-pin::after {
	content: "";
	position: absolute;
	inset: 7px;
	border-radius: 50%;
	background: var(--global-palette9);
}

.ol-pin--rood::before,
.ol-pin--rood::after {
	background: var(--global-palette1);
}

.ol-pin--vast {
	width: 16px;
	height: 16px;
	margin: -8px 0 0 -8px;
}

.ol-pin--vast::before {
	background: none;
}

.ol-pin--vast::after {
	inset: 3px;
	border: 2px solid var(--global-palette9);
	background: none;
}

.ol-pin--agent {
	outline: 1.5px solid var(--global-palette9);
	outline-offset: 6px;
}

.ol-pin:hover,
.ol-pin:focus {
	background: none;
}

.ol-pin:focus-visible {
	outline: 2px solid var(--global-palette1);
	outline-offset: 4px;
}

/* De tooltip: wit, schaduw, boven de pin met een staartje. Hij staat in de
   HTML direct ná zijn pin (functions.php, ouwerkerk_agentenkaart), met dezelfde
   left en top: het midden van de pin. --boven is de afstand van dat midden
   tot de onderkant van de tooltip (halve pin plus 14). */
.ol-pin__tip {
	--boven: 26px;
	position: absolute;
	z-index: 2;
	display: flex;
	flex-direction: column;
	gap: 8px;
	width: 272px;
	padding: 18px 20px;
	border-radius: 8px;
	background: var(--global-palette9);
	box-shadow: 0 10px 28px rgba(0, 0, 0, 0.22);
	text-align: left;
	opacity: 0;
	visibility: hidden;
	transform: translate(-50%, calc(-100% - var(--boven) + 6px));
	transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
	pointer-events: none;
}

.ol-pin--vast + .ol-pin__tip {
	--boven: 22px;
}

.ol-pin__tip::after {
	content: "";
	position: absolute;
	top: 100%;
	left: 50%;
	margin-left: -8px;
	border: 8px solid transparent;
	border-top-color: var(--global-palette9);
	border-bottom: 0;
}

.ol-pin__naam {
	font-size: 16px;
	font-weight: 500;
	line-height: 1.4;
	color: var(--global-palette3);
}

.ol-pin__tekst {
	font-size: 14px;
	font-weight: 400;
	line-height: 1.45;
	color: var(--global-palette5);
}

.ol-pin__tags {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	padding-top: 10px;
	border-top: 1px solid var(--ol-offwhite);
}

.ol-pin__tag {
	padding: 5px 8px;
	border-radius: 4px;
	background: var(--ol-offwhite);
	font-size: 11px;
	font-weight: 500;
	line-height: 1.2;
	color: var(--global-palette5);
}

.ol-pin:is(:hover, :focus-visible) + .ol-pin__tip,
.ol-pin.is-actief + .ol-pin__tip {
	opacity: 1;
	visibility: visible;
	transform: translate(-50%, calc(-100% - var(--boven)));
}

/* Een andere pin gaat voor: dan sluit de tooltip van de actieve. */
.ol-wereldkaart:has(.ol-pin:not(.is-actief):is(:hover, :focus-visible)) .ol-pin.is-actief + .ol-pin__tip {
	opacity: 0;
	visibility: hidden;
}

/* Legenda boven de kaart. */
.ol-legenda {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 24px;
	margin: 0;
	padding: 0;
	list-style: none;
	font-size: 14px;
	line-height: 17px;
	color: var(--global-palette7);
}

.ol-legenda li {
	display: flex;
	align-items: center;
	gap: 8px;
}

.ol-legenda li::before {
	content: "";
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--global-palette9);
}

.ol-legenda .is-rood::before {
	background: var(--global-palette1);
}

.ol-legenda .is-vast::before {
	box-sizing: border-box;
	border: 1.5px solid var(--global-palette9);
	background: none;
}

/* De eerste zin van de toelichting ("Hover or tap…") geldt alleen op desktop
   (functions.php, ouwerkerk_agentenkaart_toelichting). */
@media (max-width: 767px) {
	.ol-alleen-desktop {
		display: none;
	}
}

/* De categorie boven de naam (functions.php): alleen op mobiel, waar geen
   legenda staat. */
.ol-pin__soort {
	display: none;
}

/* Op een telefoon is de kaart 342 × 132 px: de Europese pins liggen over elkaar
   en een ballon over de kaart is niet te doen. Daar staan dezelfde ballonnen
   als blokken onder de kaart, zoals bij de kaart van het jaarverslag van
   Ondernemersfonds Utrecht. Geen legenda en geen pins; elk blok noemt zijn
   categorie. De kaart loopt van rand tot rand en is --zoom keer ingezoomd op
   het midden (object-fit: cover snijdt links en rechts af); 1vw is 1% van het
   scherm, 1cqw 1% van het kaartvak (de inhoudsbreedte). */
@media (max-width: 767px) {
	.ol-wereldkaart {
		--zoom: 1.4;
		container-type: inline-size;
		display: flex;
		flex-direction: column;
		gap: 12px;
		aspect-ratio: auto;
	}

	.ol-wereldkaart__land {
		width: 100vw;
		max-width: none;
		height: calc(100vw * 494 / 1280 * var(--zoom));
		margin: 0 0 12px calc(50cqw - 50vw);
		object-fit: cover;
	}

	.ol-legenda,
	.ol-pin {
		display: none;
	}

	.ol-pin__soort {
		display: block;
		font-size: 12px;
		font-weight: 500;
		line-height: 1.2;
		letter-spacing: 0.04em;
		text-transform: uppercase;
		color: var(--global-palette5);
	}

	.ol-pin--rood + .ol-pin__tip .ol-pin__soort {
		color: var(--global-palette1);
	}

	/* Alle toestanden van de desktopballon terugzetten, ook de actieve pin. */
	.ol-wereldkaart .ol-pin + .ol-pin__tip,
	.ol-wereldkaart .ol-pin.is-actief + .ol-pin__tip,
	.ol-wereldkaart .ol-pin:is(:hover, :focus-visible) + .ol-pin__tip,
	.ol-wereldkaart:has(.ol-pin:not(.is-actief):is(:hover, :focus-visible)) .ol-pin.is-actief + .ol-pin__tip {
		position: static;
		width: auto;
		box-shadow: none;
		opacity: 1;
		visibility: visible;
		transform: none;
		transition: none;
	}

	.ol-pin__tip::after {
		content: none;
	}
}

/* ==========================================================================
   Stappenkaart (Figma 2347:2964 / 2371:2397)

   Papierwit vlak, links het icoon (als dat er is), rechts een wit label met
   daarin een grijs plaatje (Step 1 of het nummer) en de titel, daaronder de
   tekst. Overal met icoon; bij de aanpak van een dienst of markt komt
   "Step n" uit een teller, zodat het label gelijk is aan de homepage.
   ========================================================================== */
.ol-stappen .wp-block-kadence-repeatertemplate {
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: ol-stap;
}

.ol-stappen .wp-block-kadence-repeatertemplate > li {
	margin: 0;
	counter-increment: ol-stap;
}

.ol-stappen .wp-block-kadence-repeatertemplate > li > .ol-stap,
.ol-stappen .wp-block-kadence-repeatertemplate > li > .ol-stap > .kt-inside-inner-col {
	height: 100%;
}

.wp-block-kadence-column.ol-stap__label {
	flex-direction: row;
}

.ol-stap__label {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	width: fit-content;
	padding: 6px 12px 6px 6px;
	border-radius: var(--ol-radius);
	background: var(--global-palette9);
}

.ol-stappen .ol-stap__label::before {
	content: "Step " counter(ol-stap);
	padding: 3px 10px 4px;
	border-radius: 4px;
	background: var(--ol-grijs-licht);
	font-size: 11px;
	font-weight: 500;
	line-height: 1.2;
	color: var(--ol-grijs);
}

/* Aanpak met foto: bij drie punten (of minder) staat de uitgelichte foto
   links en de kaarten rechts onder elkaar; bij vier of meer vervalt de foto
   en staan de kaarten in twee kolommen. 24 ertussen, zoals op de homepage;
   de klasse van het blok erbij, anders wint Kadence' eigen gap (16). */
.wp-block-kadence-column.ol-aanpak-indeling > .kt-inside-inner-col {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 24px;
}

.ol-aanpak-indeling .ol-aanpak-foto {
	min-height: 100%;
	border-radius: var(--ol-radius);
	overflow: hidden;
}

/* De foto van het werkwijzeblok op de homepage rekt mee met de drie kaarten
   ernaast. Kadence zet de achtergrond op de binnenlaag. */
.ol-werkwijze-foto > .kt-inside-inner-col {
	height: 100%;
}

/* Kadence zet de achtergrond op de binnenlaag, en die is leeg: zonder hoogte
   blijft de foto onzichtbaar. */
.ol-aanpak-indeling .ol-aanpak-foto > .kt-inside-inner-col {
	height: 100%;
	background-size: cover;
	background-position: center;
}

.ol-aanpak-indeling .ol-stappen .wp-block-kadence-repeatertemplate {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
}

.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-aanpak-foto {
	display: none;
}

.wp-block-kadence-column.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) > .kt-inside-inner-col {
	grid-template-columns: 1fr;
}

.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate {
	grid-template-columns: 1fr 1fr;
}

@media (max-width: 1024px) {
	.wp-block-kadence-column.ol-aanpak-indeling > .kt-inside-inner-col,
	.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate {
		grid-template-columns: 1fr;
	}

	.ol-aanpak-indeling .ol-aanpak-foto {
		min-height: 280px;
	}
}

/* De vinkjeslijst werkt ook in een stappenkaart (opmaak bij de keuzes), met
   ruimte boven de lijst. */
.ol-stappen .wp-block-kadence-advancedheading ul {
	margin-top: 16px;
}

.ol-stappen .wp-block-kadence-advancedheading p {
	margin: 0;
}

.ol-stappen .wp-block-kadence-advancedheading ul + p {
	margin-top: 16px;
}

/* How we work: de stappenkaarten in twee kolommen van drie (2371:2397). */
.wp-block-kadence-column.ol-stappen-raster > .kt-inside-inner-col {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 24px;
}

.ol-stappen-raster > .kt-inside-inner-col > .wp-block-kadence-column,
.ol-stappen-raster > .kt-inside-inner-col > .wp-block-kadence-column > .kt-inside-inner-col {
	height: 100%;
}

@media (max-width: 1024px) {
	.wp-block-kadence-column.ol-stappen-raster > .kt-inside-inner-col {
		grid-template-columns: 1fr;
	}
}

/* Taalkeuze: de huidige taal is actief (rood); functions.php
   (ouwerkerk_taalknop) zet ol-taal-actief op de taal van de pagina en geeft de
   andere de URL van WPML. Zonder WPML is EN actief en NL een # zonder
   klikgedrag (ol-taal-later). Kadence leest de linkkleur uit variabelen; die
   staan hier op het menu-item zelf, zodat ze in de dropdown en in het menu gelden. */
.ol-taal-actief {
	--kb-nav-link-color: var(--global-palette1);
	--kb-nav-link-color-hover: var(--global-palette1);
	--kb-nav-dropdown-link-color: var(--global-palette1);
	--kb-nav-dropdown-link-color-hover: var(--global-palette1);
	/* Het off-canvasmenu (240) kiest eerst de variabelen per niveau. */
	--kb-nav-link-color-hover-lv: var(--global-palette1);
	--kb-nav-link-color-active-lv: var(--global-palette1);
}

.ol-taal-later > .kb-link-wrap > a,
.ol-taal-later > a {
	cursor: default;
	pointer-events: none;
}

/* Iconen in de aanpakkaarten: opvulling tot er een eigen icoon is. Elke kaart
   bevat de drie werkwijze-iconen (142–144); hier blijft er één over, in de
   herhaling van Figma 2371:2397. Onder elkaar (met foto): per kaart het
   volgende icoon. In twee kolommen (vier of meer punten): per rij.
   Eén algemeen icoon later? Dan blijft alleen .ol-stap__icoon--1 staan en
   vervallen deze regels. */
.ol-stap__iconen .ol-stap__icoon {
	display: none;
}

.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(3n+1) .ol-stap__icoon--1,
.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(3n+2) .ol-stap__icoon--2,
.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(3n) .ol-stap__icoon--3 {
	display: block;
}

@media (min-width: 1025px) {
	.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate > li .ol-stap__icoon {
		display: none;
	}

	.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate > li:is(:nth-child(6n+1), :nth-child(6n+2)) .ol-stap__icoon--1,
	.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate > li:is(:nth-child(6n+3), :nth-child(6n+4)) .ol-stap__icoon--2,
	.ol-aanpak-indeling:has(.ol-stappen .wp-block-kadence-repeatertemplate > li:nth-child(4)) .ol-stappen .wp-block-kadence-repeatertemplate > li:is(:nth-child(6n+5), :nth-child(6n)) .ol-stap__icoon--3 {
		display: block;
	}
}

/* ==========================================================================
   Knoppen op aanraakschermen
   ========================================================================== */

/* Aanraakschermen: geen veeg. Een tik is daar tegelijk hover en klik, en de
   pagina wisselde voordat de veeg van 0,45 s klaar was: je zag een halve
   knop. Zonder overgang staat de hoverkleur er meteen bij het aanraken. Geldt
   voor de chipknop, de pil, de twee knoppen naast elkaar en de formulierknop.
   Onderaan het bestand, zodat het bij gelijke specificiteit altijd wint.
   Wie minder beweging wil krijgt hetzelfde: de kleur wisselt, zonder veeg. */
@media (hover: none), (prefers-reduced-motion: reduce) {
	:is(.wp-block-kadence-advancedbtn.kb-buttons-wrap .kb-button, .kb-btns-outer-wrap .kt-button, .gform_wrapper .gform_footer .ol-gf-knop):is(.ol-knop-veeg, .ol-knop-pil, .ol-knop-vul):is(*, :hover, :focus),
	.ol-knop-veeg :is(.kb-svg-icon-wrap, .kt-btn-svg-icon),
	:is(.kb-button, .kt-button, .ol-gf-knop).ol-knop-veeg:is(:hover, :focus) :is(.kb-svg-icon-wrap, .kt-btn-svg-icon) {
		transition: none;
	}

	.gform_wrapper.gform-theme .gform_footer .ol-gf-knop.ol-knop-veeg {
		--gf-ctrl-transition: none;
	}
}
