/* ==========================================================================
   Hoitsema – aanvullende stijlen bovenop theme.json
   Alles wat theme.json niet kan uitdrukken staat hier. Bewust kort gehouden.
   ========================================================================== */

:root {
	--hoi-transition: 180ms cubic-bezier(.2, .6, .3, 1);
	--hoi-radius: 6px;

	/* Groen voor het menu-item Duurzaamheid. Zelfde contrastniveau als het
	   donkere cyaan: 5,4:1 op wit en 5,0:1 op lichtgrijs. De donkere
	   tegenhanger staat in donker.css. */
	--hoi-groen: #0f7a34;
}

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

/* --- Toegankelijkheid ---------------------------------------------------- */
.skip-link.screen-reader-text {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: 100000;
	padding: .75rem 1.25rem;
	background: var(--wp--preset--color--navy);
	color: #fff;
	font: 600 1rem/1 var(--wp--preset--font-family--heading);
}
.skip-link.screen-reader-text:focus { left: 1rem; top: 1rem; }

:where(a, button, input, select, textarea, summary):focus-visible {
	outline: 2px solid var(--wp--preset--color--accent-2);
	outline-offset: 2px;
}

/* --- Bovenkopje (eyebrow) ----------------------------------------------- */
.is-style-eyebrow {
	font-family: var(--wp--preset--font-family--heading);
	font-size: .75rem !important;
	font-weight: 600;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent-2);
	margin-bottom: .75rem;
}
.is-style-eyebrow.has-base-color { color: var(--wp--preset--color--accent); }

/* --- Introtekst --------------------------------------------------------- */
.is-style-lead {
	font-size: var(--wp--preset--font-size--large) !important;
	line-height: 1.55;
	color: var(--wp--preset--color--contrast-2);
	/* 62ch is bij deze tekengrootte ongeveer 854 px. Staat de introtekst in een
	   kolom die smaller is dan dat, dan stak hij eronder uit: op de
	   vacaturepagina (kolom 720 px) 134 px breder dan de tekst eronder, met een
	   rafelige rechterkant als gevolg. min() laat de kolom winnen zodra die
	   smaller is; op de pagina's met een bredere kolom verandert er niets. */
	max-width: min(62ch, 100%);
}

/* --- Kaarten ------------------------------------------------------------ */
.wp-block-group.is-style-card,
.wp-block-group.is-style-card-hover {
	background: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--hoi-radius);
}
.wp-block-group.is-style-card-hover {
	transition: border-color var(--hoi-transition), box-shadow var(--hoi-transition), transform var(--hoi-transition);
}
.wp-block-group.is-style-card-hover:hover,
.wp-block-group.is-style-card-hover:focus-within {
	border-color: var(--wp--preset--color--accent);
	box-shadow: var(--wp--preset--shadow--soft);
	transform: translateY(-2px);
}
.wp-block-group.is-style-card-hover .wp-block-heading a {
	color: inherit;
	text-decoration: none;
	/* De titel is de enige link in de kaart en dus het tikdoel. Als inline-link
	   was hij 23 px hoog: één pixel onder de 24 x 24 die WCAG 2.5.8 vraagt.
	   Met wat verticale ruimte eromheen is het een comfortabel doel op een
	   telefoon, zonder dat de kaart hoger wordt (de regelhoogte vult die ruimte
	   al). */
	display: inline-block;
	padding-block: .3rem;
	margin-block: -.3rem;
}
.wp-block-group.is-style-card-hover:hover .wp-block-heading a { color: var(--wp--preset--color--accent-2); }

/* --- Kolommen met scheidingslijn --------------------------------------- */
@media (min-width: 782px) {
	.wp-block-columns.is-style-divided > .wp-block-column + .wp-block-column {
		border-left: 1px solid var(--wp--preset--color--border);
		padding-left: var(--wp--preset--spacing--30);
	}
	.wp-block-columns.is-style-divided.has-navy-background-color > .wp-block-column + .wp-block-column,
	.has-navy-background-color .wp-block-columns.is-style-divided > .wp-block-column + .wp-block-column {
		border-left-color: rgba(255, 255, 255, .18);
	}
}

/* --- Beeldverhoudingen -------------------------------------------------- */
.wp-block-image.is-style-ratio-4-3 img {
	aspect-ratio: 4 / 3;
	object-fit: cover;
	width: 100%;
	display: block;
}

/* --- Archivo: alleen nog voor het woordmerk in het logo ------------------
   De site staat in Outfit (theme.json). Het woordmerk is een benadering van
   het echte logo en blijft daarom in Archivo staan: dat komt dichter bij de
   DIN Pro Bold van de huidige site. Zodra de officiële SVG er is, kan dit
   blok samen met de twee Archivo-bestanden weg. Relatieve url() ten opzichte
   van dit bestand, dus geen absolute URL die per omgeving verschilt. */
@font-face {
	font-family: 'Archivo';
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url('../fonts/archivo-latin-600-normal.woff2') format('woff2');
}
@font-face {
	font-family: 'Archivo';
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url('../fonts/archivo-latin-700-normal.woff2') format('woff2');
}

/* --- Logo (wordmark in CSS; vervang door officiële SVG) ---------------- */
.hoi-logo { display: inline-flex; flex-direction: column; gap: .1rem; line-height: 1; text-decoration: none; }
.hoi-logo:hover { text-decoration: none; }
/* Beeldmerk: drie stippen met de balk eronder, in de verhoudingen uit het
   logo (stippen 182, balk 528 x 104, viewBox strak om het merk heen). Als
   SVG in plaats van losse CSS-stippen, zodat de verhoudingen kloppen op elke
   grootte. */
.hoi-logo__mark {
	display: block;
	width: 2.1em;
	margin: 0 auto .34em;
	color: var(--wp--preset--color--accent);
	line-height: 0;
}
.hoi-logo__mark svg { display: block; width: 100%; height: auto; }
.hoi-logo__word {
	font-family: 'Archivo', 'Helvetica Neue', Arial, sans-serif;
	font-weight: 700;
	font-size: clamp(1.05rem, 2.2vw, 1.4rem);
	letter-spacing: -.02em;
	color: var(--wp--preset--color--contrast);
	white-space: nowrap;
}
.hoi-logo__word em { font-style: normal; color: var(--wp--preset--color--contrast-2); font-weight: 600; }
.hoi-logo__since {
	font-family: var(--wp--preset--font-family--heading);
	font-size: .6875rem;
	font-weight: 600;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent-2);
	text-align: right;
}

/* --- Taalschakelaar in de header ---------------------------------------
   Tijdelijk; Polylang genereert deze schakelaar straks zelf. */
.hoi-lang {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	font-family: var(--wp--preset--font-family--heading);
	font-size: .8125rem;
	font-weight: 600;
	letter-spacing: .02em;
}
.hoi-lang a {
	color: var(--wp--preset--color--contrast-2);
	text-decoration: none;
	/* NL en EN waren 18 x 21 px. Ze staan pal naast elkaar, dus de
	   uitzondering voor voldoende tussenruimte in WCAG 2.5.8 geldt hier niet;
	   ze moeten zelf 24 x 24 halen. De balk wordt er niet hoger van: de
	   themaknop ernaast is met 38 px het hoogste element in de rij. */
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 24px;
	min-height: 24px;
	padding: .15rem .2rem;
}
.hoi-lang a:hover,
.hoi-lang a:focus,
.hoi-lang a:focus-visible,
.hoi-lang a:active { color: var(--wp--preset--color--accent-2); text-decoration: none; }
.hoi-lang__sep { color: var(--wp--preset--color--border); }
.hoi-lang__current { color: var(--wp--preset--color--contrast); }

/* --- Header ------------------------------------------------------------- */
.hoi-header { background: var(--wp--preset--color--base); border-bottom: 1px solid var(--wp--preset--color--border); }


/* Meeschuiven bij scrollen.
   Het sticky-element is de omhullende div van het template part, niet
   .hoi-header zelf. WordPress zet elk template part in zo'n div, en die is
   precies zo hoog als de header. Een sticky kind kan nooit buiten zijn ouder
   blijven staan: met sticky op .hoi-header schuift de balk mee naar boven en
   zie je halverwege alleen de onderste helft van het logo.

   Die div krijgt de klasse `hoi-plakbalk` mee vanuit de templates
   (`wp:template-part … "className":"hoi-plakbalk"`). Dat is bewust een eigen
   klasse en geen :first-child of :has(): dan hangt het niet af van de
   DOM-structuur, die een plugin of een volgende WordPress-versie kan
   veranderen. */
.hoi-plakbalk {
	position: sticky;
	top: 0;
	z-index: 50;
}

/* Reserveregel voor het geval de klasse er niet op zit: als iemand een template
   in de Site Editor bewerkt, komt die versie uit de database en niet meer uit
   het themabestand. Aparte regel, want een browser zonder :has() negeert een
   hele selectorlijst waarin :has() voorkomt. */
.wp-site-blocks > .wp-block-template-part:has(> .hoi-header) {
	position: sticky;
	top: 0;
	z-index: 50;
}

.hoi-header .wp-block-navigation a { color: var(--wp--preset--color--contrast); }
.hoi-header .wp-block-navigation .current-menu-item > a,
.hoi-header .wp-block-navigation a:hover { color: var(--wp--preset--color--accent-2); }

/* Geen streep in de menubalk, in geen enkele toestand — op verzoek.
   `theme.json` zet voor de hele site `elements.link[":hover"]` op onderstreept,
   en dat is voor links in lopende tekst ook precies goed. WordPress bakt daar
   `:root :where(a:where(:not(.wp-element-button)):hover)` van: dat weegt maar
   0,1,0, dus deze regels winnen ruim. Core zelf zet de streep al uit voor `a`,
   `a:active` en `a:focus`, maar níet voor `:hover` — vandaar dat de streep bij
   hover alsnog terugkwam.
   De toetsenbordfocus loopt via de outline uit de regel bovenaan dit bestand,
   niet via een streep, dus die blijft gewoon zichtbaar. */
.hoi-header .wp-block-navigation a,
.hoi-header .wp-block-navigation a:hover,
.hoi-header .wp-block-navigation a:focus,
.hoi-header .wp-block-navigation a:focus-visible,
.hoi-header .wp-block-navigation a:active,
.hoi-header .wp-block-navigation a:visited {
	text-decoration: none;
	box-shadow: none;
	border-bottom: 0;
}
/* Geen streep onder het menu-item van de huidige pagina: op verzoek weggehaald
   (7 september). Het item is nu alleen aan zijn kleur te herkennen — accent-2,
   of groen bij Duurzaamheid. Voor schermlezers zet inc/navigatie.php nog wel
   `aria-current="page"`, dus die informatie blijft bestaan. Wie hier ooit een
   tweede, niet-kleurgebonden aanwijzing terug wil (WCAG 1.4.1), kan beter een
   zwaarder gewicht nemen dan een streep:
   .hoi-header .wp-block-navigation .current-menu-item > a { font-weight: 600; } */

/* Duurzaamheid krijgt groen bij hover, toetsenbordfocus, indrukken en als je
   op die pagina staat. Sinds de streep eruit is, is dat groen de enige
   aanwijzing; bij toetsenbordfocus komt de outline er nog wel bij. */
.hoi-header .wp-block-navigation .hoi-nav--groen > a:hover,
.hoi-header .wp-block-navigation .hoi-nav--groen > a:focus-visible,
.hoi-header .wp-block-navigation .hoi-nav--groen > a:active,
.hoi-header .wp-block-navigation .hoi-nav--groen.current-menu-item > a {
	color: var(--hoi-groen);
}
.hoi-header .wp-block-navigation .hoi-nav--groen > a:focus-visible {
	outline-color: var(--hoi-groen);
}

/* --- Boompjes bij Duurzaamheid ------------------------------------------
   Bij hover en toetsenbordfocus groeien er drie boompjes onder het menu-item,
   die weer verdwijnen en opnieuw beginnen zolang de muis erop staat. De SVG
   komt uit inc/navigatie.php; hier alleen de plaatsing en de beweging.

   Alleen in de balk vanaf 1220 px. In het uitklapmenu op telefoon en tablet is
   er geen hover, dus daar zou de animatie alleen bij aantikken kort verschijnen
   — dat is meer verwarrend dan leuk.

   `transform-box: fill-box` is nodig omdat `transform-origin: 50% 100%` binnen
   een SVG anders het hele viewBox-vlak als referentie neemt in plaats van de
   boom zelf; dan groeit hij uit het niets naast zichzelf omhoog. */
/* Standaard weg. De SVG staat ook in het uitklapmenu in de DOM, en zonder deze
   regel stond hij daar permanent naast het label — inline, 44 px breed, en het
   menu-item werd er 138 px van in plaats van 94. Alleen de balk zet hem aan. */
.hoi-bomen { display: none; }

@media (min-width: 1220px) {
	.hoi-header .wp-block-navigation .hoi-nav--groen > a {
		position: relative;
	}
	.hoi-bomen {
		display: block;
		position: absolute;
		left: 50%;
		top: calc(100% + 2px);
		transform: translateX(-50%);
		pointer-events: none;
		opacity: 0;
		transition: opacity var(--hoi-transition);
	}
	.hoi-bomen .hoi-boom {
		transform-box: fill-box;
		transform-origin: 50% 100%;
		transform: scale(0);
	}
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:hover .hoi-bomen,
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:focus-visible .hoi-bomen {
		opacity: 1;
	}
	/* Losse eigenschappen, geen `animation`-shorthand: die zet
	   `animation-delay` terug op 0 en dan groeien alle drie de bomen
	   gelijktijdig. De vertraging staat hieronder op de bomen zelf, in een
	   regel met een lager gewicht — de shorthand zou daar dwars door gaan. */
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:hover .hoi-boom,
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:focus-visible .hoi-boom {
		animation-name: hoi-boom-groeit;
		animation-duration: 2.4s;
		animation-timing-function: ease-in-out;
		animation-iteration-count: infinite;
	}
	/* De middelste komt eerst op, dan de buitenste twee. */
	.hoi-bomen .hoi-boom:nth-child(2) { animation-delay: 0s; }
	.hoi-bomen .hoi-boom:nth-child(1) { animation-delay: .18s; }
	.hoi-bomen .hoi-boom:nth-child(3) { animation-delay: .34s; }
}

@keyframes hoi-boom-groeit {
	0%        { transform: scale(0);   opacity: 0; }
	16%       { transform: scale(1);   opacity: 1; }
	58%       { transform: scale(1);   opacity: 1; }
	74%, 100% { transform: scale(.55); opacity: 0; }
}

/* Wie beweging heeft uitgezet in het systeem krijgt de bomen wel te zien,
   maar zonder de groeianimatie. */
@media (prefers-reduced-motion: reduce) {
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:hover .hoi-boom,
	.hoi-header .wp-block-navigation .hoi-nav--groen > a:focus-visible .hoi-boom {
		animation-name: none;
		transform: scale(1);
		opacity: 1;
	}
}

/* --- Het uitklapmenu -----------------------------------------------------
   De navigatie staat op de balk rechts uitgelijnd. In het uitklapmenu erft
   core die uitlijning: dan stonden alle items met de rechterkant tegen de
   schermrand, zonder marge. In de flap lijnen ze links uit, met dezelfde
   zijmarge als de rest van de site. */
@media (max-width: 1219px) {
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
		align-items: flex-start;
	}
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		width: 100%;
		padding: 4.5rem clamp(1.25rem, 5vw, 2rem) 2rem;
	}
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		gap: .4rem;
	}
	/* Op een telefoon is dit de enige navigatie. De regelhoogte alleen maakt
	   een raakvlak van 23 px; dat is kleiner dan de 24 px die WCAG 2.5.8
	   vraagt en te klein om met een duim te raken. Met verticale ruimte
	   binnen de link zelf wordt het raakvlak ~44 px, de gangbare maat voor
	   aanraken. De tussenruimte gaat omlaag zodat de lijst niet uitrekt. */
	.hoi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
		display: flex;
		align-items: center;
		box-sizing: border-box;
		min-height: 44px;
		padding-block: .3rem;
	}
}

/* --- Kenmerkenbalk onder de hero --------------------------------------- */
.hoi-facts { border-top: 1px solid var(--wp--preset--color--border); border-bottom: 1px solid var(--wp--preset--color--border); }
.hoi-facts p { margin: 0; }
.hoi-facts strong { font-family: var(--wp--preset--font-family--heading); font-weight: 700; letter-spacing: -.01em; }

/* --- Accentlijn boven een processtap ----------------------------------
   Vervangt het oude "STAP 01"-label: dezelfde visuele scheiding, zonder de
   nummering die niets toevoegde. */
.hoi-step__rule {
	display: block;
	border-top: 2px solid var(--wp--preset--color--accent);
	margin-bottom: 1.15rem;
}

/* --- Kerncijfers -------------------------------------------------------- */
.hoi-stat__value {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(2rem, 4vw, 2.75rem);
	font-weight: 700;
	line-height: 1;
	letter-spacing: -.03em;
	display: block;
	margin-bottom: .4rem;
}

/* --- Donkere secties ---------------------------------------------------- */
.has-navy-background-color :where(h1, h2, h3, h4, h5, h6) { color: #fff; }
.has-navy-background-color p { color: rgba(255, 255, 255, .82); }
.has-navy-background-color .is-style-lead { color: rgba(255, 255, 255, .82); }
.has-navy-background-color a:not(.wp-element-button) { color: #7fd6ec; }

/* --- Nieuws (query loop) ----------------------------------------------- */
.hoi-news .wp-block-post-title { font-size: var(--wp--preset--font-size--large); }
.hoi-news .wp-block-post-title a { color: var(--wp--preset--color--contrast); text-decoration: none; }
.hoi-news .wp-block-post-title a:hover { color: var(--wp--preset--color--accent-2); }
.hoi-news .wp-block-post-date { font-size: .8125rem; color: var(--wp--preset--color--contrast-2); }
.hoi-news .wp-block-post-featured-image img { aspect-ratio: 16 / 10; object-fit: cover; }

/* --- Uitgelichte afbeelding op een berichtpagina ------------------------
   Zonder rem wordt hier de eigen verhouding van de foto aangehouden. Een
   telefoonfoto in portret werd zo 1320 bij 1760 pixels: je moest er eerst
   langs scrollen voordat de tekst begon, en boven de eigen resolutie
   uitgerekt dus ook onscherp. Een redacteur hoeft nu niet op het formaat te
   letten: elke foto komt in dezelfde liggende band terecht.

   Hoogte via aspect-ratio én max-height: de verhouding houdt de band bij een
   breed venster in de hand, de maximumhoogte bij een smal venster. */
main > .wp-block-post-featured-image img {
	aspect-ratio: 16 / 9;
	object-fit: cover;
	width: 100%;
	max-height: 30rem;
}

/* --- Footer ------------------------------------------------------------- */
.hoi-footer a { color: rgba(255, 255, 255, .8); text-decoration: none; }
.hoi-footer a:hover { color: #fff; text-decoration: underline; }
.hoi-footer h2, .hoi-footer h3 {
	font-size: .75rem !important;
	letter-spacing: .14em;
	text-transform: uppercase;
	font-weight: 600;
	color: rgba(255, 255, 255, .55) !important;
}
.hoi-footer .hoi-logo__word { color: #fff; }
.hoi-footer .hoi-logo__word em { color: rgba(255, 255, 255, .6); }
.hoi-footer__bottom { border-top: 1px solid rgba(255, 255, 255, .14); font-size: .8125rem; }

/* --- Footer: de twee linkkolommen naast elkaar --------------------------
   Sinds de kolom "Producten & service" eruit is, verdeelde core de ruimte in
   drie bijna gelijke delen (422 / 433 / 433 px op 1440). De twee linklijsten
   zijn veel smaller dan dat, dus er ontstond een groot gat tussen "Over
   Hoitsema" en "Contact". Hier krijgen die twee precies de breedte van hun
   inhoud en gaat alle overruimte naar de logokolom, zodat ze naast elkaar
   komen te staan.

   Alleen vanaf 782 px: daaronder stapelt core de kolommen met
   `flex-basis: 100%`, en dat moet zo blijven. De eerste kolom houdt haar
   inline `flex-basis: 32%` (die staat op het blok zelf en gaat voor), maar
   met `flex-grow: 1` pakt ze de rest er alsnog bij. */
@media (min-width: 782px) {
	.hoi-footer .wp-block-columns {
		column-gap: var(--wp--preset--spacing--60);
	}
	.hoi-footer .wp-block-columns > .wp-block-column:first-child {
		flex-grow: 1;
		flex-shrink: 1;
	}
	.hoi-footer .wp-block-columns > .wp-block-column:not(:first-child) {
		flex: 0 0 auto;
	}
	/* De logokolom is nu veel breder dan eerst, en dan werd de bedrijfsregel
	   één regel van 125 tekens. Een leesbare regellengte is 50 à 70 tekens,
	   dus die alinea houdt haar eigen maat. */
	.hoi-footer .wp-block-columns > .wp-block-column:first-child p {
		max-width: 28rem;
	}
}

/* --- Contactformulier (Forminator) --------------------------------------
   De formulierstijl van Forminator staat op "Basisstijlen": de plugin levert
   dan alleen de structuur en erft de rest van het thema. Dat is bewust — met
   zijn eigen stijl schrijft Forminator CSS met een id-selector
   (#forminator-module-68), en daar komt geen themaregel meer bovenuit, ook
   niet met !important. Met "Basisstijlen" is dit gewone CSS zonder trucs.

   Randen van invoervelden zijn UI-componenten: die hebben 3:1 contrast nodig
   (WCAG 1.4.11), niet de 1,8:1 van een decoratief lijntje. #7d858d haalt
   3,7:1 op wit. */
.hoi-formulier .forminator-row { margin-bottom: 1.1rem; }
.hoi-formulier .forminator-row-last { margin-bottom: 0; }
.hoi-formulier .forminator-field { display: flex; flex-direction: column; gap: .35rem; }

.hoi-formulier .forminator-label {
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: .9375rem;
	font-weight: 600;
	color: var(--wp--preset--color--contrast);
}
.hoi-formulier .forminator-required { margin-left: .15rem; color: #b4232a; }

.hoi-formulier .forminator-input,
.hoi-formulier .forminator-textarea,
.hoi-formulier .forminator-select--field {
	width: 100%;
	box-sizing: border-box;
	padding: .7rem .85rem;
	font: 400 1.0625rem/1.5 var(--wp--preset--font-family--body);
	color: var(--wp--preset--color--contrast);
	background-color: var(--wp--preset--color--base);
	border: 1px solid #7d858d;
	border-radius: var(--hoi-radius);
	transition: border-color var(--hoi-transition);
}
.hoi-formulier .forminator-textarea { min-height: 9rem; resize: vertical; }
.hoi-formulier .forminator-input::placeholder,
.hoi-formulier .forminator-textarea::placeholder {
	color: var(--wp--preset--color--contrast-2);
	opacity: 1;
}
.hoi-formulier .forminator-input:hover,
.hoi-formulier .forminator-textarea:hover,
.hoi-formulier .forminator-select--field:hover { border-color: #5f676f; }
.hoi-formulier .forminator-input:focus,
.hoi-formulier .forminator-textarea:focus,
.hoi-formulier .forminator-select--field:focus {
	border-color: var(--wp--preset--color--accent-2);
	outline: 2px solid var(--wp--preset--color--accent-2);
	outline-offset: 1px;
}

/* Toestemmingsvinkje: het eigen vakje van Forminator uit, het echte
   selectievakje aan — dat werkt met toetsenbord en schermlezer zonder extra
   CSS, en accent-color geeft het de huisstijlkleur. */
.hoi-formulier .forminator-checkbox {
	display: flex;
	align-items: flex-start;
	gap: .6rem;
	font: 400 1rem/1.5 var(--wp--preset--font-family--body);
	color: var(--wp--preset--color--contrast-2);
	cursor: pointer;
}
.hoi-formulier .forminator-checkbox input {
	flex: 0 0 auto;
	width: 1.1rem;
	height: 1.1rem;
	margin: .2rem 0 0;
	accent-color: var(--wp--preset--color--accent-2);
}
.hoi-formulier .forminator-checkbox-box { display: none; }

.hoi-formulier .forminator-button-submit {
	align-self: flex-start;
	padding: .9rem 1.6rem;
	font: 600 var(--wp--preset--font-size--small)/1.2 var(--wp--preset--font-family--heading);
	color: #0d1b21;
	background-color: var(--wp--preset--color--accent);
	border: 1px solid #0d90a6;
	border-radius: var(--hoi-radius);
	cursor: pointer;
	transition: background-color var(--hoi-transition), border-color var(--hoi-transition);
}
.hoi-formulier .forminator-button-submit:hover {
	background-color: #0e9cb5;
	border-color: #0b7688;
}
.hoi-formulier .forminator-button-submit:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent-2);
	outline-offset: 2px;
}

.hoi-formulier .forminator-error-message {
	color: #b4232a;
	font: 400 .875rem/1.4 var(--wp--preset--font-family--body);
}
.hoi-formulier .forminator-response-message {
	margin: 0 0 1rem;
	padding: .85rem 1rem;
	color: var(--wp--preset--color--contrast);
	background-color: var(--wp--preset--color--base-alt);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--hoi-radius);
}
.hoi-formulier .forminator-field-captcha { margin-top: .25rem; }

/* --- Statische kaart ----------------------------------------------------
   Staat op de eigen server, dus geen verzoek naar buiten en geen
   cookiebanner nodig. De maten staan als attribuut op de <img>, zodat de
   pagina niet verschuift terwijl de afbeelding laadt. */
.hoi-kaart {
	margin: var(--wp--preset--spacing--30) 0 0;
}
.hoi-kaart img {
	display: block;
	width: 100%;
	height: auto;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--hoi-radius);
}
.hoi-kaart figcaption {
	margin-top: .5rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

/* --- Juridische pagina's ------------------------------------------------
   Privacyverklaring en algemene voorwaarden zijn lange lopende teksten met
   genummerde leden. Ze staan op `page-juridisch`, dat geen slot-CTA heeft: een
   verkoopblok onder een privacyverklaring hoort er niet.

   De nummers staan buiten de tekstkolom (`list-style-position: outside` met
   ruimte ervoor), zodat de tekst van een lid netjes onder zichzelf uitlijnt en
   niet onder het nummer doorloopt. Dat maakt bij "lid 3 van artikel 7" een
   stuk sneller vindbaar waar lid 3 begint. */
/* Leesbreedte van een juridische pagina.

   Deze pagina's zijn lange lopende tekst: de algemene voorwaarden zijn 18
   artikelen. Bij de standaardmaat van de site (760 px) komt dat bij 16 px
   tekst uit op 95 tekens per regel in het Nederlands en ruim 100 in het
   Engels — comfortabel lezen houdt op rond de 85. 660 px brengt beide talen
   op ongeveer 82.

   Waarom niet via de contentSize van het sjabloon: WordPress zet die als
   max-width op de kinderen zelf, met dezelfde zwaarte als een klasse. Met
   `main.hoi-juridisch > *` weegt deze regel zwaarder en wint hij. De
   uitzonderingen zijn er voor blokken die juist breder horen te zijn; die
   staan er nu niet, maar zodra iemand er een toevoegt blijven ze werken. */
main.hoi-juridisch > :not(.alignwide):not(.alignfull) {
	max-width: 660px;
	margin-left: auto;
	margin-right: auto;
}

.hoi-juridisch :where(h2) {
	margin-top: var(--wp--preset--spacing--50);
}
.hoi-juridisch ol.wp-block-list {
	margin: var(--wp--preset--spacing--30) 0 0;
	padding-left: 2.25rem;
	list-style-position: outside;
}
.hoi-juridisch ol.wp-block-list > li {
	margin-bottom: .8rem;
	padding-left: .35rem;
}
.hoi-juridisch ol.wp-block-list ul {
	margin: .5rem 0 .5rem 0;
	padding-left: 1.25rem;
}
.hoi-juridisch ol.wp-block-list ul li { margin-bottom: .2rem; }

/* De inhoudsopgave: geen bolletjes, twee kolommen als er ruimte is. */
.hoi-inhoud {
	list-style: none;
	margin: var(--wp--preset--spacing--30) 0 0;
	padding: 0;
	font-size: var(--wp--preset--font-size--small);
}
.hoi-inhoud li { margin-bottom: .3rem; }
@media (min-width: 600px) {
	.hoi-inhoud {
		columns: 2;
		column-gap: var(--wp--preset--spacing--50);
	}
	.hoi-inhoud li { break-inside: avoid; }
}

/* --- Placeholder-beeld (tot echte fotografie beschikbaar is) ----------- */
.hoi-ph {
	position: relative;
	display: block;
	overflow: hidden;
	width: 100%;
	aspect-ratio: 4 / 3;
	background:
		linear-gradient(135deg, rgba(24, 165, 205, .14), rgba(2, 45, 65, .10)),
		repeating-linear-gradient(45deg, #eef1f3 0 12px, #e7ebee 12px 24px);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--hoi-radius);
}
.hoi-ph[data-ratio="16-9"] { aspect-ratio: 16 / 9; }
.hoi-ph[data-ratio="1-1"]  { aspect-ratio: 1 / 1; }
.hoi-ph[data-ratio="3-4"]  { aspect-ratio: 3 / 4; }
.hoi-ph::after {
	content: attr(data-label);
	position: absolute;
	inset: auto 0 0 0;
	padding: .6rem .8rem;
	font: 600 .6875rem/1.3 var(--wp--preset--font-family--heading);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-2);
	background: rgba(255, 255, 255, .78);
}

/* --- Kleine schermen ---------------------------------------------------- */
/* --- Header in twee trappen ---------------------------------------------
   Gemeten breedtes in Outfit: logo 232, menu 678, taalschakelaar 52,
   themaknop 38 px, plus tussenruimtes van 24/28 px en 2 x 32 px zijmarge.
   Onder dat punt klapt het menu in naar de hamburger, anders wordt de header
   twee regels hoog — en hij is sticky. Core klapt standaard pas bij 600 px
   in, wat hier veel te laat is. De CTA-knop die hier eerder stond is op
   verzoek van de site gehaald; daarmee is de derde trap vervallen.

   Het breekpunt ligt op 1219 px en niet op de krappe 1179 px die met Outfit
   nog net past. Reden: font-display: swap laat de eerste render in de
   fallback (Helvetica Neue / Arial) zien, en die letters zijn breder. Bij
   1180 px blijft daar maar 6 px ruimte over, bij 1220 px ruim 40 px. Zonder
   die marge wipt de header tijdens het laden even naar twee regels. */
@media (max-width: 1219px) {
	.hoi-header .wp-block-navigation__responsive-container:not(.is-menu-open) {
		display: none;
	}
	.hoi-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	.hoi-header > .wp-block-group.alignwide {
		flex-wrap: nowrap;
		justify-content: space-between;
		align-items: center;
	}
}

@media (max-width: 781px) {
	/* Op telefoon ook de taalschakelaar weg; die komt in het uitklapmenu
	   zodra Polylang staat. */
	.hoi-lang { display: none; }

	/* Kenmerkenbalk: 2 x 2 in plaats van vier smalle kolommen. */
	.hoi-facts .wp-block-columns.is-not-stacked-on-mobile {
		flex-wrap: wrap !important;
		gap: 1.25rem 1rem;
	}
	.hoi-facts .wp-block-columns.is-not-stacked-on-mobile > .wp-block-column {
		flex-basis: calc(50% - 0.5rem) !important;
		flex-grow: 0;
	}

	/* Kerncijfers in de donkere sectie ook naast elkaar houden, maar ruimer. */
	.has-navy-background-color .wp-block-columns.is-not-stacked-on-mobile {
		flex-wrap: wrap !important;
		gap: 1.5rem 1rem;
	}
	.has-navy-background-color .wp-block-columns.is-not-stacked-on-mobile > .wp-block-column {
		flex-basis: calc(50% - 0.5rem) !important;
		flex-grow: 0;
	}

	/* Iets minder verticale lucht op telefoon. */
	.hoi-ph { max-height: 60vh; }
}

/* Soepel scrollen naar ankers (#cookies, #artikel-13, #vacatures, de
   skip-link). Bewust de ingebouwde CSS-variant: geen scriptbibliotheek die het
   scrollen overneemt, dus geen extra verzoek, geen gekaapt scrollwiel en geen
   afwijking van wat de browser en het toestel zelf doen.

   `scroll-behavior` hoort op het element dat scrolt, en dat is <html>.

   De mediaquery staat er op `no-preference` in plaats van een `reduce`-
   uitzondering eromheen. Dat scheelt: een browser die de query niet kent,
   springt dan gewoon direct naar het anker — de veilige stand. Andersom zou
   diezelfde browser de animatie krijgen zonder er ooit vanaf te kunnen.

   Let op: dit bestand gaat via add_editor_style() ook naar de blokeditor.
   WordPress schaalt editorstijlen naar een wrapper-element, dus in theorie
   landt deze regel daar niet op het scrollende element. Nagemeten is dat niet
   — inloggen op /wp-admin viel buiten wat ik kon controleren. Scrolt de
   editor onverwacht mee-animerend, dan is dit de regel; hem hier weghalen en
   op de voorkant zetten met wp_add_inline_style() lost het op. */
@media (prefers-reduced-motion: no-preference) {
	html { scroll-behavior: smooth; }
}

/* Zorg dat de sticky header niet over een anchor-doel valt. */
/* Ankerlinks (#cookies, #artikel-13, #vacatures) moeten onder de plakbalk
   uitkomen. Die balk is met Outfit 98 px hoog geworden, en 6 rem (96 px) was
   dus 2 px te weinig — de kop lag net onder de balk. 7 rem geeft 14 px lucht.
   Meet dit opnieuw als de headerhoogte verandert. */
:target { scroll-margin-top: 7rem; }

/* --- Secundaire (outline) knop -----------------------------------------
   Core zet bij is-style-outline de tekstkleur op currentColor, waardoor de
   randkleur de tekstkleur werd (contrast 1,2:1). Hier expliciet vastgezet. */
.wp-block-button.is-style-outline > .wp-block-button__link,
.wp-block-button.is-style-outline > .wp-block-button__link:not(.has-text-color) {
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
	border: 1px solid #c3c9ce;
}
.wp-block-button.is-style-outline > .wp-block-button__link:hover,
.wp-block-button.is-style-outline > .wp-block-button__link:focus {
	background-color: var(--wp--preset--color--contrast);
	border-color: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--base);
}
.has-navy-background-color .wp-block-button.is-style-outline > .wp-block-button__link {
	color: #fff;
	border-color: rgba(255, 255, 255, .45);
}
.has-navy-background-color .wp-block-button.is-style-outline > .wp-block-button__link:hover {
	background-color: #fff;
	border-color: #fff;
	color: var(--wp--preset--color--navy);
}

/* --- Links in tekst: onderstreept, niet alleen kleurverschil (WCAG 1.4.1) -
   Iconlinks vallen hier bewust buiten. De sociale iconen van core zijn een
   `li > a`, dus ze werden meegenomen door de `:where(li)` hierboven; zichtbaar
   werd dat niet, omdat het enige tekstkind (het label) verborgen staat — maar
   zodra dat label ooit zichtbaar wordt, komt er een streep onder een icoon.
   In de footer stond die uitzondering al; hier ontbrak hij nog.

   `li:not(.wp-block-post)` in plaats van `li`: het berichtenraster van core
   rendert elke kaart als `<li class="wp-block-post">`, dus de kop van een
   nieuwsbericht viel onder "link in lopende tekst" en kreeg een streep. Die
   kop staat in een eigen kaart met een datum erboven — dat is geen lopende
   tekst, en de regel `.hoi-news .wp-block-post-title a { text-decoration:
   none }` verloor het omdat de `:not()`-reeks hierboven zwaarder weegt. De
   samenvatting eronder is wél een `<p>`, dus een link daarin blijft
   onderstreept. */
main :where(p, li:not(.wp-block-post), dd, figcaption) a:not(.wp-element-button):not(.wp-block-navigation-item__content):not(.wp-block-social-link-anchor) {
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: .18em;
	text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
}
main :where(p, li:not(.wp-block-post), dd, figcaption) a:not(.wp-element-button):not(.wp-block-social-link-anchor):hover {
	text-decoration-color: currentColor;
}
main .wp-block-social-links .wp-social-link a,
main .wp-block-social-links .wp-social-link a:hover,
main .wp-block-social-links .wp-social-link a:focus,
main .wp-block-social-links .wp-social-link a:active {
	text-decoration: none;
}

/* --- Openingstijden als nette lijst -------------------------------------
   Dag en tijd zijn een naam-waardepaar, dus een <dl>: dat is wat het is, en
   een schermlezer leest het als paren voor. Twee kolommen in een grid, zodat
   alle tijden onder elkaar beginnen; met <br>-regels lukt dat niet. De kolom
   is precies zo breed als de langste dagnaam (`auto`), dus er ontstaat geen
   gat bij een kortere taal. */
.hoi-openingstijden {
	display: grid;
	grid-template-columns: auto auto;
	justify-content: start;
	column-gap: 1.5rem;
	row-gap: .35rem;
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--contrast-2);
}
.hoi-openingstijden dt {
	grid-column: 1;
	/* Geen vet: de kop "Openingstijden" staat er al boven, en twee vette
	   niveaus naast elkaar gaan met elkaar concurreren. Het raster doet het
	   ordenende werk. */
	color: var(--wp--preset--color--contrast);
}
.hoi-openingstijden dd {
	grid-column: 2;
	margin: 0;
	/* Cijfers met vaste breedte, dan staan de dubbele punten recht onder elkaar. */
	font-variant-numeric: tabular-nums;
}

/* --- Sociale iconen: merkkleur bij hover --------------------------------
   Bij hover en toetsenbordfocus krijgt het icoon de kleur van het platform.

   Twee dingen maken dit lastiger dan het lijkt. De kleur van het icoon staat
   als inline stijl op het `li` (dat doet de blokinstelling "Icoonkleur"), en
   core zet op het anker zelf `color: currentcolor` met een selector van vijf
   klassen — óók voor `:hover`. Een gewone regel op `a:hover` verliest daarvan
   en dan gebeurt er niets. Daarom staat de klasse van het anker hieronder
   twee keer: dat tilt het gewicht naar zes klassen, net boven dat van core,
   zonder afhankelijk te zijn van de stijlvariant (logos-only). De svg volgt
   automatisch, want die erft `fill: currentcolor`.

   Op lichte vlakken kan de echte merkkleur; op donkere niet. Daar haalt
   LinkedIn-blauw (#0a66c2) maar 1,3:1 tegen het grijs van de donkere modus en
   2,5:1 op het footer-marine — dan wordt het icoon bij hover juist slechter
   zichtbaar. Voor donkere vlakken staat er een lichtere variant die nog steeds
   onmiskenbaar het merk is en overal boven 3:1 blijft (WCAG 1.4.11).
   Doorgerekend: LinkedIn #66b3f8 = 3,3:1 op #545557 en 6,4:1 op #022d41;
   YouTube #ff8080 = 3,1:1 en 6,0:1.
   De donkere-modus-varianten staan in donker.css (gegenereerd). */
.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor {
	transition: color var(--hoi-transition);
}
main .wp-block-social-links .wp-block-social-link.wp-social-link-linkedin .wp-block-social-link-anchor.wp-block-social-link-anchor:hover,
main .wp-block-social-links .wp-block-social-link.wp-social-link-linkedin .wp-block-social-link-anchor.wp-block-social-link-anchor:focus-visible {
	color: #0a66c2;
}
main .wp-block-social-links .wp-block-social-link.wp-social-link-youtube .wp-block-social-link-anchor.wp-block-social-link-anchor:hover,
main .wp-block-social-links .wp-block-social-link.wp-social-link-youtube .wp-block-social-link-anchor.wp-block-social-link-anchor:focus-visible {
	color: #ff0000;
}
.hoi-footer .wp-block-social-links .wp-block-social-link.wp-social-link-linkedin .wp-block-social-link-anchor.wp-block-social-link-anchor:hover,
.hoi-footer .wp-block-social-links .wp-block-social-link.wp-social-link-linkedin .wp-block-social-link-anchor.wp-block-social-link-anchor:focus-visible {
	color: #66b3f8;
}
.hoi-footer .wp-block-social-links .wp-block-social-link.wp-social-link-youtube .wp-block-social-link-anchor.wp-block-social-link-anchor:hover,
.hoi-footer .wp-block-social-links .wp-block-social-link.wp-social-link-youtube .wp-block-social-link-anchor.wp-block-social-link-anchor:focus-visible {
	color: #ff8080;
}
/* Footer: linkkolommen zijn lijsten van losse links, geen doorlopende tekst.
   Daar zijn bolletjes en onderstrepingen alleen ruis; hover blijft duidelijk. */
.hoi-footer ul.wp-block-list { list-style: none; margin: 0; padding: 0; }

/* --- Footer: de contactkolom als één blok --------------------------------
   Alles in de footerkolommen erfde de blokruimte van 1,75 rem (28 px). Tussen
   twee alinea's is dat ongeveer een hele lege regel, en de kop "Contact" stond
   daardoor 28 px van zijn adres terwijl "Over Hoitsema" direct op zijn lijst
   staat (die lijst heeft `margin: 0` uit de regel hierboven). Die twee kolommen
   liepen dus niet in hetzelfde ritme en de kop zweefde los.

   Hier komt de kop op zijn tekst te staan, adres en contactgegevens vormen één
   groep, en alleen de sociale iconen houden lucht — dat is een ander soort
   element. */
.hoi-footer .wp-block-column > :is(h2, h3) + * {
	margin-top: .35rem;
}
.hoi-footer .wp-block-column > p + p {
	margin-top: .6rem;
}
.hoi-footer .wp-block-column > .wp-block-social-links {
	margin-top: 1.5rem;
}
.hoi-footer :where(p, li) a { text-decoration: none; }
.hoi-footer :where(p, li) a:hover {
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: .18em;
}


/* In de donkere footer moet het "Since 1653"-regeltje juist lichter zijn. */
.hoi-footer .hoi-logo__since { color: var(--wp--preset--color--accent); }

/* --- Afronding: alle afbeeldingen, velden en knoppen ---------------------
   De knopradius komt uit theme.json; hier de rest, zodat beeld en formulier
   hetzelfde ritme volgen. */
:where(.wp-block-image, .wp-block-post-featured-image, figure) :where(img) {
	border-radius: var(--hoi-radius);
}
.wp-block-image :where(figcaption) { border-radius: 0; }

/* Zoekveld en -knop meelaten lopen met de knoppen. */
.wp-block-search__input {
	border-radius: var(--hoi-radius);
	border: 1px solid var(--wp--preset--color--border);
	padding: .7rem .9rem;
}
.wp-block-search .wp-block-search__button { border-radius: var(--hoi-radius); }

/* Kaarten en de donkere/lichte blokken houden dezelfde radius. */
.wp-block-group.is-style-card,
.wp-block-group.is-style-card-hover { border-radius: var(--hoi-radius); }

/* --- Koppen niet middenin een woord afbreken ----------------------------
   WordPress zet word-break: break-word, waardoor lange Nederlandse woorden
   als "uitgangspunt" midden doorgesneden worden. Alleen als een woord
   werkelijk niet past mag het nog wijken. */
:where(h1, h2, h3, h4, h5, h6, .hoi-logo__word) {
	word-break: normal;
	overflow-wrap: break-word;
}

/* --- Zijmarge van de volle-breedte secties ------------------------------
   WordPress' root-padding-aware alignments leveren hier maar ~11 px, wat op
   een telefoon te krap is. Daarom expliciet: 20 px op mobiel, 32 px vanaf
   tablet. De inhoud zelf blijft begrensd op 1320 px. */
section.wp-block-group.alignfull,
.wp-block-group.alignfull.has-global-padding,
.hoi-header,
.hoi-footer {
	padding-left: clamp(1.25rem, 5vw, 2rem);
	padding-right: clamp(1.25rem, 5vw, 2rem);
}
