/*
Theme Name: Umami
Theme URI: https://github.com/AchimPieters/umami-recipes
Author: Studio Pieters
Author URI: https://studiopieters.nl
Description: Een strak, Apple.com-geïnspireerd WordPress-thema voor het presenteren van recepten. Inclusief een eigen "Recept" content type met ingrediënten, bereidingsstappen, voedingswaarden en Schema.org-data — volledig te beheren vanuit het WordPress-dashboard.
Version: 1.72.110
Requires at least: 6.0
Tested up to: 6.6
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: umami
Tags: food-and-drink, custom-post-types, custom-menu, featured-images, full-width-template, threaded-comments, translation-ready

GitHub Theme URI: AchimPieters/umami-recipes
Primary Branch: main
Release Asset: false
*/

/* ==========================================================================
   1. RESET
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body, h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd, ul, ol { margin: 0; }
ul[class], ol[class] { list-style: none; padding: 0; }
img, picture, video, canvas, svg { display: block; max-width: 100%; height: auto; }
input, button, textarea, select { font: inherit; color: inherit; }
a { color: inherit; text-decoration: none; }
button { background: none; border: 0; cursor: pointer; }
table { border-collapse: collapse; width: 100%; }

/* ==========================================================================
   2. VARIABLEN
   ========================================================================== */
:root {
	--font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	--color-bg: #ffffff;
	--color-bg-alt: #f5f5f7;
	--color-bg-dark: #1d1d1f;
	--color-text: #1d1d1f;
	--color-text-secondary: #6e6e73;
	--color-border: #d2d2d7;
	--color-accent: #0071e3;
	--color-accent-contrast: #ffffff;
	--radius-sm: 10px;
	--radius-md: 18px;
	--radius-lg: 28px;
	--max-width: 1240px;
	--space-section: clamp(64px, 9vw, 140px);
	--shadow-card: 0 1px 2px rgba(0,0,0,.04), 0 12px 28px rgba(0,0,0,.06);
	--shadow-card-hover: 0 4px 10px rgba(0,0,0,.06), 0 24px 48px rgba(0,0,0,.12);
	--ease: cubic-bezier(.42,0,.28,1);
}

/* ==========================================================================
   3. BASIS / TYPOGRAFIE
   ========================================================================== */
body {
	font-family: var(--font-sans);
	color: var(--color-text);
	background: var(--color-bg);
	line-height: 1.5;
	font-size: 17px;
	-webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 {
	font-weight: 600;
	letter-spacing: -0.015em;
	line-height: 1.08;
}
h1 { font-size: clamp(2.4rem, 5vw, 4.2rem); }
h2 { font-size: clamp(1.8rem, 3.4vw, 2.75rem); }
h3 { font-size: clamp(1.3rem, 2vw, 1.75rem); }
p { color: var(--color-text-secondary); }
.container { max-width: var(--max-width); margin-inline: auto; padding-inline: clamp(20px, 5vw, 48px); }
.section { padding-block: var(--space-section); }
.section--alt { background: var(--color-bg-alt); }
.text-center { text-align: center; }
.screen-reader-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(1px,1px,1px,1px); }
.skip-link { position: absolute; left: -9999px; top: 0; background: var(--color-accent); color: #fff; padding: 12px 20px; z-index: 999; border-radius: 0 0 10px 0; }
.skip-link:focus { left: 0; }

/* ==========================================================================
   4. KNOPPEN
   ========================================================================== */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 14px 28px;
	border-radius: 999px;
	font-size: 16px;
	font-weight: 500;
	transition: transform .25s var(--ease), background .25s var(--ease), opacity .25s var(--ease), box-shadow .25s var(--ease);
	white-space: nowrap;
}
.btn--primary { background: var(--color-accent); color: var(--color-accent-contrast); }
.btn--primary:hover { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(0,0,0,.15); opacity: .92; }
.btn--secondary { background: var(--color-bg-alt); color: var(--color-text); }
.btn--secondary:hover { background: #e8e8ed; }
.btn--ghost { color: var(--color-accent); padding-inline: 4px; }
.btn--ghost::after { content: "→"; margin-left: 6px; transition: transform .2s var(--ease); display: inline-block; }
.btn--ghost:hover::after { transform: translateX(4px); }
.btn--small { padding: 9px 18px; font-size: 14px; }

/* ==========================================================================
   5. HEADER / NAVIGATIE
   ========================================================================== */
.site-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: rgba(255,255,255,.8);
	backdrop-filter: saturate(180%) blur(20px);
	-webkit-backdrop-filter: saturate(180%) blur(20px);
	border-bottom: 1px solid rgba(0,0,0,.06);
	transition: box-shadow .3s var(--ease);
}
/* Zonder dit sticky't de header, eenmaal voorbij gescrolld, tegen top:0 aan
   en verdwijnt het bovenste stuk achter de vast-gepositioneerde WP-
   adminbalk (die een veel hogere z-index heeft) — alleen zichtbaar voor
   ingelogde beheerders, dus makkelijk over het hoofd te zien bij testen. */
body.admin-bar .site-header { top: 32px; }
@media screen and (max-width: 782px) {
	body.admin-bar .site-header { top: 46px; }
}
.site-header.is-scrolled { box-shadow: 0 1px 0 rgba(0,0,0,.06); }
.site-header__inner {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: 14px clamp(20px, 5vw, 48px);
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
}
.site-logo { font-size: 19px; font-weight: 700; letter-spacing: -.02em; display: flex; align-items: center; gap: 8px; }
/* height (vast) i.p.v. max-height (voorwaardelijk) — zelfde patroon als
   .footer-bottom__logo, die met eenzelfde SVG-bestand wél altijd goed
   rendert. Een SVG-<img> met max-height in een flex-container is een
   bekende bron van 0-hoogte-renderbugs in Safari. */
.site-logo img { height: 28px; width: auto; }
.nav-primary__list { display: flex; gap: 32px; }
.nav-primary__link { font-size: 14px; font-weight: 400; color: var(--color-text); opacity: .85; transition: opacity .2s; }
.nav-primary__link:hover { opacity: 1; }
.header-actions { display: flex; align-items: center; gap: 18px; }
.nav-toggle { display: none; flex-direction: column; gap: 5px; padding: 6px; position: relative; width: 44px; height: 44px; }
.nav-toggle span { width: 22px; height: 2px; background: var(--color-text); border-radius: 2px; position: absolute; left: 11px; transition: transform .25s var(--ease), opacity .15s var(--ease), top .25s var(--ease); }
.nav-toggle span:nth-child(1) { top: 16px; }
.nav-toggle span:nth-child(2) { top: 22px; }
.nav-toggle span:nth-child(3) { top: 28px; }
/* Hamburger wordt een × — net als op apple.com blijft dit dezelfde knop om
   het hele mobiele menu (incl. een eventueel opengeklapt megamenu-scherm)
   in één keer te sluiten, ongeacht hoe diep je bent doorgeklikt. */
.nav-toggle.is-active span:nth-child(1) { top: 22px; transform: rotate(45deg); }
.nav-toggle.is-active span:nth-child(2) { opacity: 0; }
.nav-toggle.is-active span:nth-child(3) { top: 22px; transform: rotate(-45deg); }
.header-search-toggle { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; color: var(--color-text); }
/* Taalknop (NL | EN) — de actieve taal is gemarkeerd, de andere is de link. */
.header-lang-switch { display: inline-flex; align-items: center; padding: 2px; border: 1px solid var(--color-border, rgba(0,0,0,.18)); border-radius: 980px; font-size: 12px; font-weight: 600; letter-spacing: .04em; line-height: 1; }
.header-lang-switch__item { position: relative; padding: 5px 9px; border-radius: 980px; color: var(--color-text); opacity: .7; transition: opacity .2s; }
/* Groter tikvlak (44px hoog) zonder dat de knop zelf groter wordt. */
.header-lang-switch__item::after { content: ""; position: absolute; inset: -9px -3px; }
a.header-lang-switch__item:hover { opacity: 1; }
.header-lang-switch__item.is-active { background: var(--color-text); color: #fff; opacity: 1; }

/* ---- Megamenu (edge-to-edge, direct onder de header — zoals apple.com) ---- */
.nav-mega-item { position: relative; }
.nav-mega-trigger { display: flex; align-items: center; gap: 5px; background: none; }
.nav-mega-trigger svg { transition: transform .2s var(--ease); opacity: .6; }
.site-header.mega-open .nav-mega-trigger svg { transform: rotate(180deg); }
.nav-mega {
	position: fixed;
	top: var(--header-h, 68px);
	left: 0; right: 0; width: 100%;
	/* .97 i.p.v. .88 — op een overwegend witte pagina (zoals de hero) was
	   een licht-doorzichtig wit paneel nauwelijks te onderscheiden van de
	   pagina erachter, ook al werkte de open/dicht-logica prima. Zelfde
	   waarde als de zoekoverlay, die dit probleem niet had. */
	background: rgba(255,255,255,.97);
	backdrop-filter: saturate(180%) blur(24px);
	-webkit-backdrop-filter: saturate(180%) blur(24px);
	border-top: 1px solid rgba(0,0,0,.06);
	box-shadow: 0 28px 56px rgba(0,0,0,.14);
	z-index: 150;
	opacity: 0; visibility: hidden; transform: translateY(-6px);
	transition: opacity .25s var(--ease), transform .25s var(--ease), visibility .25s;
	pointer-events: none;
}
/* WordPress schuift de hele pagina 32px (46px op smalle schermen) naar
   beneden voor de adminbalk, maar laat `header.offsetHeight` — waarop
   --header-h is gebaseerd — ongemoeid. Zonder deze correctie schuift het
   megapaneel als ingelogde beheerder ~32px te hoog en overlapt het de
   header zelf i.p.v. er direct onder te verschijnen. */
body.admin-bar .nav-mega { top: calc(var(--header-h, 68px) + 32px); }
@media screen and (max-width: 782px) {
	body.admin-bar .nav-mega { top: calc(var(--header-h, 68px) + 46px); }
}
/* Let op: `+` (aangrenzende sibling), geen spatie (afstammeling)! `.nav-mega`
   is sinds v1.8.1 bewust een sibling van <header>, niet er een kind van (om
   de backdrop-filter-stapelcontext te ontwijken) — een afstammeling-selector
   matcht dan nooit, waardoor het paneel nooit zichtbaar werd ondanks dat de
   JS de mega-open klasse en de pijltje-rotatie wél correct toepasten. */
.site-header.mega-open + .nav-mega {
	opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(0);
}
.nav-mega__inner {
	/* Smaller dan --max-width (1240px) en een kleinere gap: op apple.com
	   clusteren de kolommen samen bij elkaar i.p.v. gelijkmatig over de
	   volle paginabreedte uit te lopen. */
	max-width: 1080px; margin-inline: auto;
	padding: 36px clamp(20px, 5vw, 48px) 40px;
	display: flex; gap: 44px;
}
.nav-mega__col { min-width: 130px; }
.nav-mega__col-title { font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--color-text-secondary); margin-bottom: 12px; font-weight: 600; }
.nav-mega__col-title a { color: var(--color-text); }
.nav-mega__col ul {
	/* Expliciet list-style: none — een <ul> die via flex wordt opgemaakt
	   verliest niet overal automatisch zijn bullets (in Safari bijvoorbeeld
	   niet), dus zonder deze regel bleven de bolletjes gewoon staan. */
	display: flex; flex-direction: column; gap: 0; list-style: none; margin: 0; padding: 0;
}
.nav-mega__col ul a { display: block; padding: 6px 4px; margin: 0 -4px; border-radius: 6px; font-size: 14px; color: var(--color-text); transition: color .15s, background .15s; }
.nav-mega__col ul a:hover { color: var(--color-accent); background: var(--color-bg-alt); }
.nav-mega__col--scroll ul { max-height: 320px; overflow-y: auto; padding-right: 10px; }
.nav-mega__highlight { display: flex; align-items: center; gap: 6px; color: var(--color-accent); font-weight: 600; font-size: 15px; margin-top: 12px; }

/* ---- Zoekoverlay ---- */
.search-overlay { position: fixed; inset: 0; background: rgba(255,255,255,.97); backdrop-filter: blur(12px); z-index: 999; display: flex; flex-direction: column; align-items: center; padding-top: 16vh; }
.search-overlay[hidden] { display: none; }
.search-overlay__form { display: flex; align-items: center; gap: 16px; width: min(680px, 90vw); border-bottom: 2px solid var(--color-text); padding-bottom: 18px; height: fit-content; color: var(--color-text-secondary); transition: border-color .15s; }
/* WCAG 2.4.7 (Focus Visible): outline:none op het invoerveld zelf zonder
   vervanging liet toetsenbordgebruikers zonder enige focus-aanduiding
   achter. In plaats van een outline (die lelijk om een tekstveld-zonder-
   rand heen zou vallen) verandert nu de al aanwezige onderrand van kleur —
   zelfde plek waar sowieso naar gekeken wordt, duidelijk zichtbaar verschil. */
.search-overlay__form:focus-within { border-bottom-color: var(--color-accent); }
.search-overlay__input { flex: 1; border: 0; background: none; font-size: clamp(20px, 4vw, 30px); outline: none; color: var(--color-text); }
.search-overlay__close { font-size: 28px; line-height: 1; color: var(--color-text-secondary); }
.search-overlay__suggestions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; width: min(680px, 90vw); margin-top: 24px; }
.search-overlay__suggestions-label { font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--color-text-secondary); margin-right: 4px; }
.search-overlay__suggestions a { font-size: 13px; padding: 7px 14px; border-radius: 999px; background: var(--color-bg-alt); color: var(--color-text); }
.search-overlay__suggestions a:hover { background: var(--color-border); }

.nav-mega__back { display: none; }

@media (max-width: 860px) {
	/* .nav-primary zit (i.t.t. .nav-mega, dat al sibling van <header> is)
	   nog wél ín <header>. backdrop-filter op een ancestor maakt die niet
	   alleen een stapelcontext maar ook het positioneringskader voor
	   position:fixed-kinderen (i.p.v. de viewport). Daarom hier uitgezet
	   zolang het mobiele menu open is (JS zet .mobile-nav-open op de
	   header). Zelfde bug, dus zelfde soort fix als bij het megapaneel. */
	.site-header.mobile-nav-open { backdrop-filter: none; -webkit-backdrop-filter: none; }
	/* BELANGRIJK: `inset: 0` (heel scherm), niet `inset: 60px 0 0 0`
	   ("laat de eerste 60px vrij voor de header"). Die laatste opzet bleek
	   op een echt toestel niet de volledige resterende hoogte te vullen —
	   de pagina erachter bleef zichtbaar/scrollbaar bovenin, precies waar
	   de header zou moeten zitten. Met `inset: 0` en `padding-top` i.p.v.
	   een berekende positie is er geen hoogte-wiskunde meer die fout kan
	   gaan. De header (`z-index: 100`, hoger dan hier) blijft gewoon
	   zichtbaar/bruikbaar bovenop dit paneel. */
	/* visibility:hidden erbij (niet alleen opacity:0/pointer-events:none):
	   zonder dat blijven de menulinks, ook onzichtbaar en dicht, gewoon
	   met Tab bereikbaar — een toetsenbord-/schermlezergebruiker belandt
	   dan op links die nergens te zien zijn. De vertraagde transition
	   zorgt dat 'm pas ná de fade-out verdwijnt (dicht) en meteen weer
	   meedoet bij het openen (.nav-mega hiernaast deed dit al goed). */
	.nav-primary { position: fixed; inset: 0; z-index: 40; background: #fff; padding: 76px 24px 24px; opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .25s var(--ease), visibility .25s; overflow-y: auto; }
	.nav-primary.is-open { opacity: 1; visibility: visible; pointer-events: auto; }
	/* Vervagende rand onderin = "er komt nog meer" — enige aanwijzing dat
	   een lang uitgeklapt menu nog verder scrolt (geen zichtbare scrollbar
	   op mobiel). Alleen zichtbaar als het menu écht niet in één keer past
	   (JS zet --scrollable) én je nog niet onderaan bent (--at-bottom
	   verwijdert hem weer zodra je er bent). position:fixed i.p.v. mee-
	   scrollend absolute: blijft zo aan de onderkant van het scherm
	   plakken, ongeacht hoe ver je in de lijst gescrold bent. */
	.nav-primary::after {
		content: "";
		position: fixed;
		left: 0; right: 0; bottom: 0;
		height: 64px;
		background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, .95) 60%);
		pointer-events: none;
		opacity: 0;
		transition: opacity .2s var(--ease);
		z-index: 41;
	}
	.nav-primary.is-open.nav-primary--scrollable:not(.nav-primary--at-bottom)::after { opacity: 1; }
	.nav-primary__list { flex-direction: column; gap: 2px; }
	.nav-primary__link { display: flex; align-items: center; justify-content: space-between; padding: 13px 0; font-size: 29px; font-weight: 600; letter-spacing: -.01em; border-bottom: 0; width: 100%; }
	/* Pijltje wijst naar rechts (niet naar beneden) — een "ga naar dit
	   scherm"-teken, geen inklap-pijltje, net als ">" op apple.com. De
	   mega-open-variant moet hier opnieuw (met dezelfde specificiteit)
	   omdat de algemene, niet-mobiele regel .site-header.mega-open
	   .nav-mega-trigger svg (rotate 180deg, 3 classes) anders specifieker
	   is dan deze en zou winnen. */
	.nav-mega-trigger svg { transform: rotate(-90deg); }
	.site-header.mega-open .nav-mega-trigger svg { transform: rotate(-90deg); }
	.nav-toggle { display: flex; }
	/* .nav-mega-item is globaal (desktop) position:relative, als anker voor
	   het dropdown-paneel. Op mobiel mag dát niet de containing block voor
	   .nav-mega worden (dan krijgt inset:0 hieronder de afmetingen van dit
	   ene <li>-rijtje i.p.v. het hele .nav-primary-paneel) — vandaar hier
	   terug naar static, zodat .nav-primary (position:fixed) de containing
	   block is. */
	.nav-mega-item { position: static; }
	/* Architectuurwijziging: op mobiel verplaatst JS `.nav-mega` ín
	   `.nav-mega-item` (dus ín .nav-primary) i.p.v. het een onafhankelijk
	   position:fixed-paneel te laten zijn dat zelf perfect gesynchroniseerd
	   moet blijven met .nav-primary's afmetingen — dat bleek herhaaldelijk
	   te fragiel (zie CHANGELOG v1.10.9 t/m v1.10.20 voor de lange
	   geschiedenis). Nu simpelweg `position: absolute; inset: 0` tegen het
	   al bewezen werkende .nav-primary aan (dat de containing block vormt
	   omdat het zelf position:fixed is) — geen eigen hoogteberekening of
	   z-index-afstemming met de rest van de pagina meer nodig. */
	.nav-mega {
		position: absolute; inset: 0; z-index: 5; width: auto;
		box-shadow: none; border-top: 0; background: #fff; backdrop-filter: none;
		padding: 0; opacity: 0; visibility: hidden; pointer-events: none;
		transition: opacity .2s var(--ease), visibility .2s;
		display: block; overflow-y: auto;
	}
	/* Nu een échte afstammeling-selector: .nav-mega zit op mobiel ín
	   .nav-mega-item, dat op zijn beurt ín .site-header zit. */
	.site-header.mega-open .nav-mega { opacity: 1; visibility: visible; pointer-events: auto; }
	.nav-mega__inner { flex-direction: column; gap: 28px; padding: 76px 24px 24px; max-width: none; }
	.nav-mega__col--scroll ul { max-height: none; }
	/* Los, klein "‹ Terug" linksboven — net als het "‹"-pijltje op
	   apple.com, i.p.v. een knop die zelf ruimte in de lijst inneemt. */
	.nav-mega__back {
		display: flex; align-items: center; gap: 4px; background: none;
		position: absolute; top: 18px; left: 18px;
		font-size: 15px; font-weight: 400; color: var(--color-text);
		padding: 8px; margin: 0;
	}
	/* Eerste kolom (Alle recepten/Populair) groot en vet, net als "Explore
	   All iPhone" op apple.com — de rest blijft de kleinere, gegroepeerde
	   lijststijl (net als "Shop iPhone"/"More from iPhone"), nu ook qua
	   lettergrootte dichter bij het Apple-voorbeeld. */
	.nav-mega__col:first-child .nav-mega__col-title { font-size: 29px; text-transform: none; letter-spacing: -.01em; font-weight: 600; color: var(--color-text); margin-bottom: 4px; }
	.nav-mega__col:first-child .nav-mega__highlight { font-size: 19px; font-weight: 400; color: var(--color-text); margin-top: 8px; }
	.nav-mega__col-title { font-size: 13px; margin-bottom: 10px; }
	.nav-mega__col ul a { padding: 9px 4px; font-size: 19px; font-weight: 500; }
}

/* ==========================================================================
   6. HERO
   ========================================================================== */
.hero { position: relative; padding-block: clamp(60px, 10vw, 120px) clamp(40px, 6vw, 80px); text-align: center; overflow: hidden; }
.hero .container { position: relative; z-index: 1; }
.hero__eyebrow { text-transform: uppercase; letter-spacing: .12em; font-size: 13px; color: var(--color-accent); font-weight: 600; margin-bottom: 16px; }
.hero__title { max-width: 880px; margin-inline: auto; }
.hero__subtitle { max-width: 560px; margin: 20px auto 0; font-size: 19px; }
.hero__actions { display: flex; justify-content: center; gap: 14px; margin-top: 32px; flex-wrap: wrap; }

/* Foto als volledige achtergrond van de hero i.p.v. een los kaartje ónder
   de tekst — de tekst staat er nu overheen, zoals apple.com's hero's.
   Alleen actief als er een hero-afbeelding is gekozen (.hero--photo);
   zonder afbeelding blijft de hero gewoon een platte, lichte sectie. */
.hero--photo { padding-block: clamp(120px, 20vw, 220px) clamp(80px, 12vw, 140px); color: #fff; }
.hero--photo .hero__eyebrow { color: #fff; opacity: .85; }
.hero--photo .hero__subtitle { color: rgba(255, 255, 255, .88); }
.hero__image-wrap { position: absolute; inset: 0; z-index: 0; }
.hero__image { width: 100%; height: 100%; object-fit: cover; }
.hero__image-wrap::after {
	content: "";
	position: absolute;
	inset: 0;
	/* Donkerder van boven én onder dan in het midden: houdt de tekst
	   (bovenin) en de knop (onderin) leesbaar, ongeacht welke foto. */
	background: linear-gradient(180deg, rgba(0, 0, 0, .45) 0%, rgba(0, 0, 0, .15) 45%, rgba(0, 0, 0, .5) 100%);
}

/* Dunne statistiekenregel onder de hero — geeft meteen een gevoel van omvang
   ("451 recepten") zonder extra plaatjes of drukte; subtiele social proof
   (aesthetic-usability effect) in dezelfde stille toon als de rest van hero. */
.stats-strip { display: flex; justify-content: center; flex-wrap: wrap; gap: clamp(20px, 4vw, 56px); padding-block: 28px; border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); }
.stats-strip__item { text-align: center; }
.stats-strip__value { font-size: 22px; font-weight: 700; letter-spacing: -0.01em; }
.stats-strip__label { font-size: 12px; text-transform: uppercase; letter-spacing: .07em; color: var(--color-text-secondary); margin-top: 2px; }

/* Volle-breedte donker paneel, zoals Apple's productpanelen — geeft de
   homepage ritme (afwisseling licht/donker) i.p.v. alleen witte/grijze
   secties, en trekt Basiskennis (anders onzichtbaar op de homepage) in beeld. */
.promo-panel { background: var(--color-bg-dark); color: #fff; text-align: center; position: relative; overflow: hidden; }
.promo-panel__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* Overlay-kleur/-transparantie zijn instelbaar (Aanpassen → Homepage —
   Promopaneel) — deze laag houdt de tekst leesbaar, ongeacht welke foto
   erachter staat. Kleur/opacity komen als inline style mee vanuit
   front-page.php (get_theme_mod), niet hier vast. */
.promo-panel__overlay { position: absolute; inset: 0; }
.promo-panel__inner { position: relative; z-index: 1; max-width: 640px; margin-inline: auto; padding-block: var(--space-section); }
.promo-panel__eyebrow { text-transform: uppercase; letter-spacing: .12em; font-size: 13px; color: #ff8a5c; font-weight: 600; margin-bottom: 16px; }
.promo-panel__title { color: #fff; margin-bottom: 16px; }
.promo-panel__text { color: rgba(255,255,255,.72); font-size: 17px; margin-bottom: 32px; }

/* Parallax (uit te zetten in de Customizer): de afbeelding staat iets
   groter dan het vak (130% hoogte, gecentreerd) zodat er bij het
   meebewegen nooit een lege rand ontstaat — assets/js/main.js verschuift
   'm tijdens het scrollen via een transform (respecteert prefers-
   reduced-motion, zie de JS-doc). */
.promo-panel--parallax .promo-panel__bg[data-parallax] { height: 130%; top: -15%; will-change: transform; }

/* ==========================================================================
   7. SECTIEKOPPEN
   ========================================================================== */
.section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 44px; flex-wrap: wrap; }
.section-heading__eyebrow { text-transform: uppercase; letter-spacing: .12em; font-size: 13px; color: var(--color-accent); font-weight: 600; margin-bottom: 10px; }
.section-heading__subtitle { margin-top: 10px; font-size: 17px; max-width: 520px; }

/* Feestdagblok met eigen achtergrondafbeelding (Recepten, Feestdag-achtergronden). De afbeelding is iets
   groter dan het blok en beweegt tijdens het scrollen mee (zelfde parallax als het promopaneel, assets/js/main.js). */
.section--holiday-bg { position: relative; overflow: hidden; color: #fff; }
.holiday-bg { position: absolute; left: 0; width: 100%; height: 130%; top: -15%; object-fit: cover; will-change: transform; }
.holiday-bg__overlay { position: absolute; inset: 0; background: rgba(20, 20, 24, .62); }
.section--holiday-bg .container { position: relative; z-index: 1; }
.section--holiday-bg .section-heading h2,
.section--holiday-bg .section-heading__eyebrow { color: #fff; }
.section--holiday-bg .recipe-card { color: var(--color-text); }
.section--holiday-bg .btn--ghost { color: #fff; border-color: rgba(255, 255, 255, .7); }

/* ==========================================================================
   8. CATEGORIE-TEGELS
   ========================================================================== */
/* Horizontale carousel i.p.v. een star grid — met 9 sfeertegels past niet
   alles in één rij, en een grid liet dan een kale, onbalans-gevende
   restrij achter (bv. 1 tegel alleen op de tweede rij). Scroll-snap +
   een puntjes-voortgangsindicator (zie hieronder) maken duidelijk dat er
   meer te ontdekken is, zoals Apple's eigen productcarousels. */
.category-grid {
	display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory;
	scroll-behavior: smooth; -webkit-overflow-scrolling: touch;
	padding-bottom: 2px; margin-bottom: -2px;
	scrollbar-width: none;
}
.category-grid::-webkit-scrollbar { display: none; }
.category-tile { position: relative; flex: 0 0 clamp(160px, 22vw, 220px); scroll-snap-align: start; border-radius: var(--radius-md); overflow: hidden; aspect-ratio: 4/5; background: var(--color-bg-alt); }
.category-tile__image { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.category-tile:hover .category-tile__image { transform: scale(1.06); }
.category-tile__overlay { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,0) 40%, rgba(0,0,0,.55) 100%); }
.category-tile__label { position: absolute; left: 20px; bottom: 18px; right: 20px; color: #fff; font-size: 20px; font-weight: 600; }
.category-tile__count { position: absolute; left: 20px; bottom: -4px; opacity:0; color: #fff; }
/* Voortgangsindicator i.p.v. pijltjesknoppen — net als het grijze balkje
   onder apple.com's eigen "Get the highlights"-carousel (apple.com/imac):
   het actieve punt wordt een langwerpig staafje, de rest blijft een rond
   stipje. JS (main.js) berekent het aantal "pagina's" (hoeveel tegels
   passen er per schermbreedte) en houdt bij welke actief is. */
.category-carousel__dots { display: flex; justify-content: center; align-items: center; margin-top: 20px; }
/* WCAG 2.2 SC 2.5.8 (Target Size, Minimum): de zichtbare stip is bewust
   klein (7px, Apple-achtig), maar de knop zelf — het echte tik-/klikgebied
   — is nu 24×24px, de wettelijke ondergrens. De stip wordt daarom als
   ::before getekend, gecentreerd in die grotere, onzichtbare knop; de JS
   hoeft niets te weten van dit verschil (die zet alleen de classnamen). */
.category-carousel__dot { width: 24px; height: 24px; padding: 0; display: flex; align-items: center; justify-content: center; background: none; }
.category-carousel__dot::before { content: ""; width: 7px; height: 7px; border-radius: 999px; background: var(--color-border); transition: background .25s var(--ease), width .25s var(--ease); }
.category-carousel__dot:hover::before { background: var(--color-text-secondary); }
.category-carousel__dot.is-active::before { width: 22px; background: var(--color-text); }

/* ==========================================================================
   9. RECEPTKAARTEN / GRID
   ========================================================================== */
.recipe-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 28px; }
.recipe-card { display: block; border-radius: var(--radius-md); overflow: hidden; background: var(--color-bg); box-shadow: var(--shadow-card); transition: transform .3s var(--ease), box-shadow .3s var(--ease); }
.recipe-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-card-hover); }
.recipe-card__image-wrap { position: relative; aspect-ratio: 4/3; overflow: hidden; background: var(--color-bg-alt); }
.recipe-card__image { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.recipe-card:hover .recipe-card__image { transform: scale(1.05); }
.recipe-card__badge { position: absolute; top: 14px; left: 14px; background: rgba(255,255,255,.9); backdrop-filter: blur(6px); font-size: 13px; font-weight: 600; padding: 6px 12px; border-radius: 999px; }
.recipe-card__image--placeholder { display: flex; align-items: center; justify-content: center; }
.recipe-card__image--placeholder span { font-size: 64px; font-weight: 600; color: rgba(255,255,255,.55); letter-spacing: -.02em; }
.recipe-card__image--gradient-0 { background: linear-gradient(160deg, #f2c9a0, #c1440e); }
.recipe-card__image--gradient-1 { background: linear-gradient(160deg, #d7bfa0, #8a5a3a); }
.recipe-card__image--gradient-2 { background: linear-gradient(160deg, #eedca8, #c48a3a); }
.recipe-card__image--gradient-3 { background: linear-gradient(160deg, #f0a888, #a44832); }
.recipe-card__image--gradient-4 { background: linear-gradient(160deg, #c2b8a3, #6b5644); }
.recipe-card__body { padding: 20px 22px 24px; }
.recipe-card__category { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: var(--color-accent); font-weight: 700; margin-bottom: 8px; }
.recipe-card__title { font-size: 19px; font-weight: 600; letter-spacing: -0.01em; line-height: 1.22; margin-bottom: 10px; }
.recipe-card__meta { display: flex; gap: 16px; font-size: 13px; color: var(--color-text-secondary); }
.recipe-card__meta-item { display: flex; align-items: center; gap: 5px; }

/* ==========================================================================
   10. UITGELICHT RECEPT
   ========================================================================== */
.featured-recipe { display: grid; grid-template-columns: 1fr 1fr; gap: 0; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-bg-dark); box-shadow: var(--shadow-card); }
.featured-recipe__image-wrap { position: relative; min-height: 360px; }
.featured-recipe__image-link { position: absolute; inset: 0; display: block; }
.featured-recipe__image { width: 100%; height: 100%; object-fit: cover; position: absolute; inset: 0; }
.featured-recipe__content { padding: clamp(32px, 4vw, 64px); color: #fff; display: flex; flex-direction: column; justify-content: center; }
.featured-recipe__eyebrow { text-transform: uppercase; letter-spacing: .1em; font-size: 12px; color: #ff8a5c; font-weight: 700; margin-bottom: 14px; }
.featured-recipe__title { color: #fff; margin-bottom: 14px; }
.featured-recipe__excerpt { color: rgba(255,255,255,.72); margin-bottom: 28px; }
.featured-recipe__meta { display: flex; gap: 20px; color: rgba(255,255,255,.7); font-size: 14px; margin-bottom: 28px; }
@media (max-width: 780px) { .featured-recipe { grid-template-columns: 1fr; } .featured-recipe__image-wrap { min-height: 260px; } }

/* ==========================================================================
   11. FILTERBALK
   ========================================================================== */
.filter-bar { margin-bottom: 40px; }
.filter-bar__list { display: flex; flex-wrap: wrap; gap: 10px; }
.filter-bar__item { padding: 10px 20px; border-radius: 999px; background: var(--color-bg-alt); font-size: 14px; font-weight: 500; transition: background .2s, color .2s; white-space: nowrap; }
.filter-bar__item:hover { background: #e8e8ed; }
.filter-bar__item.is-active { background: var(--color-text); color: #fff; }

/* Gegroepeerde filters (Menugang/Maaltijdmoment/Keuken/Dieet elk in hun eigen,
   horizontaal scrollbare rij) — voorkomt een overweldigende brij van tientallen
   chips in één keer (minder gelijktijdige keuzes = sneller een beslissing). */
.filter-facets { margin-bottom: 44px; display: flex; flex-direction: column; gap: 14px; }
.filter-facets__row { display: flex; align-items: center; gap: 16px; }
.filter-facets__label { flex: none; width: 130px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--color-text-secondary); font-weight: 600; }
.filter-bar__list--scroll { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.filter-bar__list--scroll::-webkit-scrollbar { height: 5px; }
.filter-bar__list--scroll::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 999px; }
@media (max-width: 640px) {
	.filter-facets__row { flex-direction: column; align-items: flex-start; gap: 8px; }
	.filter-facets__label { width: auto; }
}

/* ==========================================================================
   12. ENKEL RECEPT
   ========================================================================== */
/* Alleen zichtbaar bij het printen — zie print.css. */
.recipe-print-header, .recipe-print-footer { display: none; }
.recipe-hero { position: relative; height: clamp(320px, 55vw, 560px); display: flex; align-items: flex-end; }
.recipe-hero__image { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.recipe-hero__overlay { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.05) 30%, rgba(0,0,0,.75) 100%); }
.recipe-hero__inner { position: relative; z-index: 1; width: 100%; max-width: var(--max-width); margin-inline: auto; padding: clamp(20px,5vw,48px); color: #fff; }
.recipe-hero__breadcrumb { font-size: 13px; color: rgba(255,255,255,.75); margin-bottom: 14px; }
.recipe-hero__breadcrumb a:hover { text-decoration: underline; }
.recipe-hero__title { color: #fff; max-width: 780px; }
.recipe-hero__subtitle { color: rgba(255,255,255,.8); margin-top: 10px; font-size: 15px; }

.recipe-meta-bar { display: flex; flex-wrap: wrap; gap: 0; max-width: var(--max-width); margin: -28px auto 0; position: relative; z-index: 2; background: #fff; border-radius: var(--radius-md); box-shadow: var(--shadow-card); padding: 24px clamp(20px,4vw,40px); }
.recipe-meta-bar__item { flex: 1 1 120px; text-align: center; padding: 8px 12px; border-right: 1px solid var(--color-border); }
.recipe-meta-bar__item:last-child { border-right: 0; }
.recipe-meta-bar__value { font-size: 20px; font-weight: 700; letter-spacing: -.01em; }
.recipe-meta-bar__label { font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--color-text-secondary); margin-top: 4px; }

.recipe-layout { display: grid; grid-template-columns: minmax(0,1fr) 340px; gap: 64px; padding-block: clamp(48px,7vw,96px); align-items: start; }
.recipe-intro { font-size: 19px; color: var(--color-text); margin-bottom: 8px; }
.recipe-intro p { color: var(--color-text); }
.recipe-sidebar { position: sticky; top: 96px; }
.recipe-sidebar__card { background: var(--color-bg-alt); border-radius: var(--radius-md); padding: 28px 26px; }
.recipe-sidebar__card h3 { margin-bottom: 18px; }
.ingredient-group-title { font-weight: 600; margin: 20px 0 10px; font-size: 15px; }
.ingredient-group-title:first-child { margin-top: 0; }
.ingredient-list__item { display: flex; align-items: flex-start; gap: 12px; padding: 10px 0; border-bottom: 1px solid rgba(0,0,0,.06); font-size: 17px; line-height: 1.4; cursor: pointer; }
.ingredient-list__item:last-child { border-bottom: 0; }
.ingredient-list__checkbox { flex: none; width: 18px; height: 18px; border-radius: 5px; border: 1.5px solid var(--color-border); margin-top: 2px; display: flex; align-items: center; justify-content: center; transition: background .15s, border-color .15s; }
.ingredient-list__item.is-checked .ingredient-list__checkbox { background: var(--color-accent); border-color: var(--color-accent); }
.ingredient-list__item.is-checked .ingredient-list__checkbox::after { content: "✓"; color: #fff; font-size: 12px; }
.ingredient-list__item.is-checked .ingredient-list__text { color: var(--color-text-secondary); text-decoration: line-through; }
.ingredient-list__amount { font-weight: 600; }

.steps-list__item { display: grid; grid-template-columns: 56px 1fr; gap: 24px; padding-block: 28px; border-top: 1px solid var(--color-border); }
.steps-list__item:first-child { border-top: 0; }
.steps-list__number { font-size: 32px; font-weight: 700; color: var(--color-border); letter-spacing: -.02em; }
.steps-list__title { font-size: 15px; text-transform: uppercase; letter-spacing: .06em; color: var(--color-accent); margin-bottom: 6px; }
.steps-list__text { font-size: 17px; color: var(--color-text); line-height: 1.6; }
.steps-list__image { margin-top: 16px; border-radius: var(--radius-sm); overflow: hidden; }

.recipe-notes { background: var(--color-bg-alt); border-radius: var(--radius-md); padding: 28px 30px; margin-top: 48px; }
.recipe-notes h3 { margin-bottom: 12px; }
.recipe-notes p { color: var(--color-text); white-space: pre-line; }
.recipe-notes--chef { background: #fff7e6; }

.recipe-variations, .recipe-pairings { margin-top: 32px; }
.recipe-variations h3, .recipe-pairings h3 { margin-bottom: 12px; }
.recipe-variations ul, .recipe-pairings ul { padding-left: 1.2em; list-style: disc; color: var(--color-text); }
.recipe-variations li, .recipe-pairings li { margin-bottom: 6px; }
/* Automatisch herkende receptnamen in "Serveren met" (umami_linkify_recipe_mentions())
   — een duidelijke onderstreping zodat zichtbaar is dat dit naar een ander
   recept doorklikt, niet zomaar opsommingstekst is. */
.recipe-pairings a { color: var(--color-accent); text-decoration: underline; text-underline-offset: 2px; }
.recipe-pairings a:hover { text-decoration-thickness: 2px; }

.recipe-allergens { margin-top: 24px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 14px; }
.recipe-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 16px; }
.tag-chip { background: var(--color-bg-alt); border-radius: 999px; padding: 5px 14px; font-size: 13px; color: var(--color-text-secondary); text-decoration: none; }
.tag-chip:hover, .tag-chip:focus-visible { color: var(--color-text); text-decoration: underline; }
.allergen-chip { background: var(--color-bg-alt); border-radius: 999px; padding: 5px 14px; font-size: 13px; color: var(--color-text-secondary); }

/* Kleiner en terughoudender dan de rest van de receptpagina — dit zijn
   berekende schattingen (op basis van standaard voedingswaarden per
   ingrediënt), geen kernonderdeel van het recept zoals ingrediënten of
   bereidingswijze, en mag er dus niet even zwaar uitzien. */
.nutrition-table { margin-top: 40px; max-width: 340px; font-size: 13px; color: var(--color-text-secondary); }
.nutrition-table table { width: 100%; border-collapse: collapse; }
.nutrition-table table td, .nutrition-table table th { padding: 6px 0; border-bottom: 1px solid var(--color-border); text-align: left; font-weight: 400; }
.nutrition-table table th { color: var(--color-text); }
.nutrition-table table td { text-align: right; }
.nutrition-table caption { text-align: left; font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--color-text-secondary); margin-bottom: 8px; caption-side: top; }
.nutrition-table__disclaimer { font-size: 11px; font-style: italic; margin-top: 6px; }

.recipe-actions { display: flex; gap: 12px; margin-top: 28px; flex-wrap: wrap; }

.related-recipes { padding-top: clamp(48px,7vw,96px); border-top: 1px solid var(--color-border); }

@media (max-width: 900px) {
	.recipe-layout { grid-template-columns: 1fr; }
	.recipe-sidebar { position: static; }
	.recipe-meta-bar { margin-top: -20px; }
}

/* ==========================================================================
   13. PAGINA / INHOUD (WYSIWYG)
   ========================================================================== */
.page-header { padding-block: clamp(48px,8vw,96px) 24px; text-align: center; }
.page-header__title-row { display: inline-flex; align-items: center; gap: 12px; }
.page-header__title-row h1 { margin: 0; }
.entry-content { max-width: 760px; margin-inline: auto; font-size: 18px; }
.entry-content > * + * { margin-top: 1.3em; }
.entry-content h2 { margin-top: 1.8em; }
.entry-content img { border-radius: var(--radius-md); }
.entry-content a { color: var(--color-accent); text-decoration: underline; }
.entry-content ul, .entry-content ol { padding-left: 1.4em; list-style: revert; color: var(--color-text-secondary); }
.entry-content h3 { margin-top: 1.6em; }
.entry-content .wp-block-table { overflow-x: auto; }
.entry-content table { font-size: 16px; }
.entry-content th, .entry-content td { padding: 10px 14px; text-align: left; border-bottom: 1px solid var(--color-border); vertical-align: top; }
.entry-content thead th { background: var(--color-bg-alt); color: var(--color-text); font-weight: 600; }

/* ---- Contactformulier ---- */
.umami-contact-form__field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 20px; }
.umami-contact-form__field label { font-size: 14px; font-weight: 600; }
.umami-contact-form__field input, .umami-contact-form__field textarea {
	padding: 12px 16px; border: 1px solid var(--color-border); border-radius: var(--radius-sm);
	background: var(--color-bg-alt); font-family: inherit; font-size: 16px; color: var(--color-text);
	resize: vertical;
}
.umami-contact-form__field input:focus, .umami-contact-form__field textarea:focus { outline: 2px solid var(--color-accent); outline-offset: 1px; }
/* Honeypot: onzichtbaar voor mensen (niet display:none — sommige bots
   negeren dat), maar niet weglaten uit de tab-volgorde-logica van een
   screenreader is hier bewust niet nodig: het veld hoort voor iedereen
   verborgen te blijven. */
.umami-contact-form__honeypot { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ==========================================================================
   14. ZOEKEN / 404
   ========================================================================== */
.search-form { display: flex; gap: 10px; max-width: 480px; margin-inline: auto; }
.search-form__input { flex: 1; padding: 14px 20px; border: 1px solid var(--color-border); border-radius: 999px; background: var(--color-bg-alt); }
.search-form__input:focus { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.search-form__submit { padding: 14px 24px; border-radius: 999px; background: var(--color-text); color: #fff; font-weight: 500; }
.search-results-list { max-width: 760px; margin: 40px auto 0; display: flex; flex-direction: column; gap: 24px; }
.search-results-list li { padding-bottom: 24px; border-bottom: 1px solid var(--color-border); }
.error-404 { text-align: center; padding-block: clamp(60px,10vw,140px); }
.error-404__code { font-size: 15vw; font-weight: 700; color: var(--color-bg-alt); line-height: 1; }

/* ==========================================================================
   15. FOOTER
   ========================================================================== */
/* Apple.com's eigen footer is het tegenovergestelde van uitbundig: heel
   compact/klein, ingetogen grijstinten, subtiele underline-on-hover i.p.v.
   kleur- of schaduweffecten, en de juridische links staan niet in een
   eigen kolom maar compact naast het copyright onderaan (.footer-legal
   hieronder) — dat patroon is hier bewust letterlijk overgenomen, niet
   alleen "geïnspireerd door". */
.site-footer { background: var(--color-bg-alt); padding-block: 40px 20px; margin-top: var(--space-section); border-top: 1px solid var(--color-border); }
.footer-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 32px; padding-bottom: 28px; border-bottom: 1px solid var(--color-border); }
.footer-widget h4 { font-size: 12px; font-weight: 600; color: var(--color-text); margin-bottom: 14px; }
/* list-style/margin/padding EXPLICIET op 0/none: de site-brede reset
   (RESET-sectie bovenaan) verwijdert bullets alleen van ul[class] —
   een kale <ul> zonder eigen class (zoals hier) valt daarbuiten en
   toont anders gewoon de browser-standaard bullets + regelafstand. */
.footer-widget ul { display: flex; flex-direction: column; gap: 9px; list-style: none; margin: 0; padding: 0; }
.footer-widget a, .footer-widget p { font-size: 12px; color: var(--color-text-secondary); }
.footer-widget a:hover { color: var(--color-text); text-decoration: underline; }

/* Klein en vlak i.p.v. groot/rond-met-schaduw — dezelfde ingetogen
   toon als de rest van de footer, geen apart "uitbundig" element. */
.footer-social { display: flex; flex-wrap: wrap; gap: 20px; }
.footer-social__link { display: flex; color: var(--color-text); transition: opacity .2s var(--ease), transform .2s var(--ease); }
.footer-social__link svg { width: 36px; height: 36px; }
.footer-social__link:hover { opacity: .6; transform: translateY(-1px); }

/* De compacte juridische regel onderaan — precies zoals apple.com "Copyright
   © 2024 Apple Inc. Alle rechten voorbehouden. | Privacybeleid | ..."
   toont: klein, grijs, met dunne verticale strepen ertussen. */
.footer-legal { display: flex; flex-wrap: wrap; align-items: center; gap: 0; padding-top: 14px; font-size: 11px; color: var(--color-text-secondary); }
.footer-legal a { color: var(--color-text-secondary); }
.footer-legal a:hover { color: var(--color-text); text-decoration: underline; }
.footer-legal > * { position: relative; padding-right: 12px; margin-right: 12px; }
.footer-legal > *:not(:last-child)::after { content: ""; position: absolute; right: 0; top: 50%; transform: translateY(-50%); width: 1px; height: 11px; background: var(--color-border); }
.footer-legal > *:last-child { padding-right: 0; margin-right: 0; }

/* ==========================================================================
   16. BEOORDELINGEN (STERREN)
   ========================================================================== */
.rating-widget { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 16px; }
.rating-widget__stars { display: flex; gap: 4px; }
.rating-widget__star { font-size: 24px; line-height: 1; color: var(--color-border); transition: color .15s, transform .15s; cursor: pointer; }
.rating-widget__star.is-filled { color: #f5a623; }
.rating-widget.is-voted .rating-widget__star { cursor: default; }
.rating-widget:not(.is-voted) .rating-widget__star:hover { transform: scale(1.15); }
.rating-widget__summary { font-size: 14px; color: var(--color-text-secondary); }
.rating-widget__thanks { font-size: 13px; color: var(--color-accent); }
.recipe-card__rating { display: flex; align-items: center; gap: 4px; color: #f5a623; font-size: 13px; }

.portion-stepper { display: flex; align-items: center; justify-content: center; gap: 10px; }
.portion-stepper__btn { width: 26px; height: 26px; border-radius: 50%; background: var(--color-bg-alt); font-size: 16px; line-height: 1; display: flex; align-items: center; justify-content: center; transition: background .15s; }
.portion-stepper__btn:hover { background: var(--color-border); }
.portion-stepper__value { min-width: 1.5em; text-align: center; }

/* ==========================================================================
   17. ADVERTENTIES (GOOGLE ADSENSE)
   ========================================================================== */
/* Basisvorm voor ELKE advertentieplek behalve de in-feed-variant
   hieronder: een eigen, herkenbare grijze kaart (zelfde grijstint/radius
   als .account-card en .recipe-sidebar__card elders op de site) — overal
   identiek, zodat elke plek er hetzelfde uitziet ongeacht waar hij staat. */
.ad-slot { max-width: var(--max-width); margin: clamp(32px, 5vw, 56px) auto; padding-inline: clamp(20px, 5vw, 48px); text-align: center; }
.ad-slot__label { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .1em; color: var(--color-text-secondary); margin-bottom: 10px; }
.ad-slot__unit { display: flex; justify-content: center; overflow: hidden; background: var(--color-bg-alt); border-radius: var(--radius-md); padding: 28px 26px; }
/* Zonder deze regel krimpt de lege <ins class="adsbygoogle"> (leeg totdat
   Google's script 'm vult) als flex-child naar 0px breed — een bekend
   AdSense-probleem in flex-/grid-containers. Google's script meet die
   0px-breedte bij het laden en besluit dan om HELEMAAL GEEN advertentie
   te tonen, ook als verder alles (code, ads.txt, account) klopt: het
   vakje blijft leeg zonder dat er ergens een fout gemeld wordt. Expliciet
   width:100% voorkomt die inkrimping. */
.ad-slot__unit .adsbygoogle { width: 100%; }

/* In-feed is bewust de UITZONDERING: dit type advertentie-eenheid is
   gemaakt om tussen de receptkaarten te vallen als was het er zelf één
   (Google's eigen richtlijn) — neemt daarom maar ÉÉN rastercel in, net
   als een kaart, niet meer de volle breedte van de rij. Die brede balk
   was precies het soort voorspelbare "banner"-vorm die bezoekers
   onbewust leren negeren (banner blindness); een kaart-formaat
   advertentie beweegt mee met het normale scanpatroon van het raster en
   wordt daardoor juist wél gezien. */
.ad-slot--infeed { grid-column: auto; max-width: none; margin: 0; padding-inline: 0; }
.ad-slot--infeed .ad-slot__unit { background: transparent; padding: 0; border-radius: var(--radius-md); overflow: hidden; }

/* Advertentie in de receptsidebar: een eigen, LOSSE grijze kaart onder de
   ingrediëntenkaart (.recipe-sidebar__card) — niet genest daarbinnen, met
   een duidelijke marge ertussen. */
.ad-slot--sidebar { max-width: none; margin: 22px 0 0; padding-inline: 0; }
/* De zijbalk-kolom (.recipe-layout) is maar 340px breed; de standaard
   padding van .ad-slot__unit (28px 26px) vrat daar 52px van af, waardoor
   er maar ~288px overbleef voor de advertentie zelf. Dat is precies de
   marge waarbinnen Google's "automatisch"-formaat vaak voor een kleinere,
   gestapelde opmaak kiest i.p.v. één ruimere advertentie. Kleinere,
   symmetrische padding geeft de advertentie ~316px om mee te werken. */
.ad-slot--sidebar .ad-slot__unit { padding: 12px; }

/* Alleen zichtbaar in de Customizer-preview (zie umami_ad_slot() in
   inc/adsense.php) — een aangevinkte plek zónder geplakte advertentiecode
   nog, zodat je meteen op de pagina zelf ziet waar die plek precies zit. */
.ad-slot__unit--placeholder { min-height: 90px; align-items: center; border: 1px dashed var(--color-border); color: var(--color-text-secondary); font-size: 13px; text-align: center; }
.ad-slot--infeed .ad-slot__unit--placeholder { background: var(--color-bg-alt); padding: 20px; border-radius: var(--radius-md); }

/* ==========================================================================
   18. COOKIEMELDING
   ========================================================================== */
.cookie-notice {
	position: fixed; left: 0; right: 0; bottom: 0; z-index: 500;
	background: var(--color-bg-dark); color: #fff;
	padding: 18px clamp(20px, 4vw, 40px);
	box-shadow: 0 -4px 24px rgba(0,0,0,.15);
}
.cookie-notice__inner {
	max-width: var(--max-width); margin-inline: auto;
	display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap;
}
.cookie-notice__text { color: rgba(255,255,255,.82); font-size: 14px; margin: 0; flex: 1 1 320px; }
.cookie-notice__text a { color: #fff; text-decoration: underline; }
.cookie-notice__accept { flex: none; }

/* ==========================================================================
   19. ALIGNMENT / WORDPRESS CORE
   ========================================================================== */
.alignwide { max-width: 1000px; margin-inline: auto; }
.alignfull { max-width: 100%; }
.wp-caption-text { font-size: 13px; color: var(--color-text-secondary); margin-top: 8px; }
.sticky { outline: none; }
.gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }

/* ==========================================================================
   20. ACCOUNT & FAVORIETEN
   ========================================================================== */

/* Account-icoon in de header-actions, naast de zoekknop. */
.header-account-link { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; color: var(--color-text); border-radius: 50%; transition: opacity .2s; }
.header-account-link:hover { opacity: .7; }
.header-account-link__avatar { width: 26px; height: 26px; border-radius: 50%; object-fit: cover; display: block; }

/* Het hartje op een receptkaart (rechtsboven de foto) en op de receptpagina
   (naast de titel) — dezelfde knop, twee plekken. */
.favorite-btn {
	display: flex; align-items: center; justify-content: center;
	width: 36px; height: 36px; border-radius: 50%;
	background: rgba(255,255,255,.9); backdrop-filter: blur(6px);
	font-size: 18px; line-height: 1; color: var(--color-text);
	transition: transform .15s var(--ease), background .15s var(--ease);
	flex: none;
}
.recipe-card__image-wrap .favorite-btn { position: absolute; top: 14px; right: 14px; }
.favorite-btn:hover { transform: scale(1.08); }
.favorite-btn.is-favorite { color: #ff3b30; }
.favorite-btn.is-loading { opacity: .6; pointer-events: none; }

.recipe-hero__title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.recipe-hero__title-row .favorite-btn { margin-top: 6px; background: rgba(29,29,31,.4); color: #fff; }
.recipe-hero__title-row .favorite-btn.is-favorite { color: #ff453a; }

/* Inloggen/registreren/profiel-kaarten — dezelfde visuele taal als de
   receptsidebar (.recipe-sidebar): lichte kaart, ruime radius. */
.account-notice { border-radius: var(--radius-sm); padding: 14px 18px; margin-bottom: 24px; font-size: 14px; }
.account-notice--success { background: #e8f8ee; color: #157347; }
.account-notice--error { background: #fdecea; color: #c22; }

/* "Mijn account": het INLOGFORMULIER (niet ingelogd) blijft smal en
   gecentreerd, dat leest prettiger. Zodra je bent ingelogd, delen de
   profielkaart en "Mijn favorieten"/"Mijn beoordelingen" allemaal
   dezelfde breedte (.account-card--wide) — voorheen was de profielkaart
   een stuk smaller dan de twee kaarten eronder, wat als een onbedoelde
   inconsistentie oogde. */
.account-page__narrow { max-width: 640px; margin-inline: auto; }
.account-card--wide { max-width: 960px; margin-inline: auto; }

.account-card { background: var(--color-bg-alt); border-radius: var(--radius-md); padding: clamp(24px,4vw,36px); margin-bottom: 24px; }
.account-card h2 { font-size: 19px; margin-bottom: 18px; }
/* .btn--secondary deelt zijn achtergrond (--color-bg-alt) met .account-card
   zelf — zonder deze regel is zo'n knop hier onzichtbaar (geen contrast
   met zijn eigen kaart). Wit geeft wél contrast, zelfde aanpak als de
   invoervelden in .account-form. */
.account-card .btn--secondary { background: #fff; }
.account-card .btn--secondary:hover { background: var(--color-bg-alt); box-shadow: inset 0 0 0 1px var(--color-border); }

.account-profile-head { display: flex; align-items: center; gap: 18px; margin-bottom: 24px; }
.account-avatar { width: 88px; height: 88px; border-radius: 50%; object-fit: cover; background: var(--color-bg); }
.account-profile-head__name { font-weight: 600; font-size: 17px; margin: 0; }
.account-profile-head__email { color: var(--color-text-secondary); font-size: 14px; margin: 2px 0 0; }
.account-profile-head__actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

.account-form__field { margin-bottom: 16px; }
.account-form__field label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 6px; }
.account-form__field input[type="text"],
.account-form__field input[type="email"],
.account-form__field input[type="password"],
.account-form__field input[type="file"] {
	width: 100%; padding: 12px 14px; border: 1px solid var(--color-border); border-radius: var(--radius-sm);
	background: var(--color-bg); color: var(--color-text); font-size: 15px;
}
.account-form__field input:focus { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.account-form__checkbox { margin-bottom: 18px; font-size: 14px; display: flex; align-items: center; gap: 8px; }
.account-form__checkbox label { display: flex; align-items: center; gap: 8px; }
.account-form__honeypot { position: absolute; left: -9999px; }

/* Profielfoto-uitsnede: overlay boven het "Gegevens wijzigen"-formulier,
   zie assets/js/avatar-crop.js. [hidden] moet hier expliciet, want de
   attribuut- en klasse-selector wegen even zwaar — zonder deze regel wint
   de laatst-gedefinieerde (display:flex hieronder) altijd, ongeacht het
   hidden-attribuut. */
.avatar-crop-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(29,29,31,.75); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); }
.avatar-crop-modal[hidden] { display: none; }
.avatar-crop-modal__card { background: #fff; border-radius: var(--radius-md); padding: clamp(20px,4vw,32px); max-width: 360px; width: 100%; box-shadow: var(--shadow-card-hover); text-align: center; }
.avatar-crop-modal__card h2 { font-size: 18px; margin: 0 0 4px; }
.avatar-crop-modal__hint { font-size: 13px; color: var(--color-text-secondary); margin: 0 0 18px; }
.avatar-crop-modal__stage {
	position: relative; width: 260px; height: 260px; margin: 0 auto 18px;
	border-radius: 50%; overflow: hidden; background: var(--color-bg-alt);
	cursor: grab; touch-action: none;
	box-shadow: 0 0 0 4px #fff, 0 0 0 5px var(--color-border);
}
.avatar-crop-modal__stage.is-dragging { cursor: grabbing; }
.avatar-crop-modal__image { position: absolute; top: 0; left: 0; max-width: none; transform-origin: 0 0; pointer-events: none; user-select: none; -webkit-user-drag: none; }
.avatar-crop-modal__zoom { width: 100%; margin-bottom: 22px; accent-color: var(--color-accent); }
.avatar-crop-modal__actions { display: flex; gap: 10px; }
.avatar-crop-modal__actions .btn { flex: 1; }

/* ==========================================================================
   21. PAGINERING — the_posts_pagination() markup van WordPress-kern zelf
   (.nav-links/.page-numbers), tot nu toe onbewerkt: "1 2 3 Volgende" als
   kale tekst. Ronde cijfer-knoppen + pil-vormige vorige/volgende, dezelfde
   taal als de rest van het thema (accentkleur voor de actieve pagina,
   var(--radius-*) i.p.v. een eigen getal).
   ========================================================================== */
.pagination { margin: clamp(40px,6vw,64px) 0; }
.pagination .nav-links { display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap; }
.pagination .page-numbers {
	display: flex; align-items: center; justify-content: center;
	min-width: 40px; height: 40px; padding: 0 8px;
	border-radius: 50%; font-size: 15px; font-weight: 500;
	color: var(--color-text); transition: background .2s var(--ease), color .2s var(--ease);
}
a.page-numbers:hover { background: var(--color-bg-alt); }
.pagination .page-numbers.current { background: var(--color-accent); color: var(--color-accent-contrast); font-weight: 600; }
.pagination .page-numbers.dots { color: var(--color-text-secondary); }
.pagination .page-numbers.prev,
.pagination .page-numbers.next {
	width: auto; border-radius: 999px; padding: 0 20px; font-weight: 500;
	background: var(--color-bg-alt);
}
.pagination .page-numbers.prev:hover,
.pagination .page-numbers.next:hover { background: var(--color-border); }

/* Binnen een .account-card (Mijn favorieten/Mijn beoordelingen) mag de
   paginering dichter op het raster staan dan onderaan een hele pagina. */
.account-card .pagination { margin: 24px 0 0; }

/* ---- Inlog-popup (hartje / beoordeling, niet ingelogd) + voordelen ---- */
body.auth-modal-open { overflow: hidden; }
.auth-modal[hidden] { display: none; }
.auth-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 16px; }
.auth-modal__backdrop { position: absolute; inset: 0; background: rgba(0,0,0,.45); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.auth-modal__panel { position: relative; width: 100%; max-width: 420px; max-height: 100%; overflow-y: auto; background: var(--color-bg, #fff); border-radius: var(--radius-md, 18px); padding: clamp(24px, 4vw, 32px); box-shadow: 0 24px 60px rgba(0,0,0,.25); }
.auth-modal__panel h2 { margin: 0 0 8px; font-size: 22px; }
.auth-modal__close { position: absolute; top: 10px; right: 12px; width: 36px; height: 36px; border: 0; background: transparent; font-size: 26px; line-height: 1; color: var(--color-text-secondary); cursor: pointer; border-radius: 50%; }
.auth-modal__close:hover { background: var(--color-bg-alt); color: var(--color-text); }
.auth-modal__intro { margin: 0 0 6px; color: var(--color-text-secondary); font-size: 14px; }
.auth-modal__benefits { margin: 0 0 8px; padding-left: 20px; font-size: 14px; list-style: disc; }
.auth-modal__more { margin: 0 0 16px; font-size: 13px; }
.auth-modal__more a, .auth-modal__register a { color: var(--color-accent); }
.auth-modal .account-form .btn { width: 100%; }
.auth-modal__register { margin: 16px 0 0; text-align: center; font-size: 14px; color: var(--color-text-secondary); }
.auth-modal__skip { margin: 10px 0 0; text-align: center; }
.auth-modal__skip[hidden] { display: none; }
.auth-modal__skip-btn { border: 0; background: none; padding: 4px; font: inherit; font-size: 13px; color: var(--color-text-secondary); text-decoration: underline; cursor: pointer; }
.account-benefits__list { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 14px; }
.account-benefits__list li { font-size: 15px; color: var(--color-text-secondary); }
.account-benefits__list strong { display: block; margin-bottom: 2px; color: var(--color-text); }

/* Aanvinkvakje (feestdagmails) in de accountformulieren */
.account-form__field--check label { display: flex; gap: 10px; align-items: flex-start; font-weight: 400; line-height: 1.45; }
.account-form__field--check input[type="checkbox"] { width: auto; margin-top: 4px; flex: none; }

/* ==========================================================================
   Kookmodus (assets/js/cook-mode.js)
   ========================================================================== */
html.cook-open, html.cook-open body { overflow: hidden; }
.cook-overlay { position: fixed; inset: 0; z-index: 10000; display: flex; flex-direction: column; background: var(--color-bg); color: var(--color-text); }
.cook-head { display: grid; grid-template-columns: 44px 1fr auto; align-items: center; gap: 12px; padding: 14px 16px; border-bottom: 1px solid rgba(0, 0, 0, .08); }
.cook-close { width: 44px; height: 44px; border: 0; border-radius: 50%; background: var(--color-bg-alt); font-size: 26px; line-height: 1; cursor: pointer; color: inherit; }
.cook-progress__text { font-size: 14px; font-weight: 600; margin-bottom: 6px; }
.cook-progress__track { height: 6px; border-radius: 3px; background: var(--color-bg-alt); overflow: hidden; }
.cook-progress__bar { height: 100%; width: 0; background: var(--color-accent); transition: width .25s var(--ease); }
.cook-ing-toggle { border: 0; border-radius: 999px; background: var(--color-bg-alt); padding: 10px 16px; font: inherit; font-size: 14px; font-weight: 600; cursor: pointer; color: inherit; }
.cook-ing-toggle[aria-expanded="true"] { background: var(--color-accent); color: var(--color-accent-contrast); }
.cook-ingredients { max-height: 45vh; overflow-y: auto; padding: 16px 20px; background: var(--color-bg-alt); border-bottom: 1px solid rgba(0, 0, 0, .08); }
.cook-ingredients[hidden] { display: none; }
.cook-ingredients__list { list-style: none; margin: 0; padding: 0; font-size: 17px; line-height: 1.5; }
.cook-ingredients__list li { padding: 3px 0; }
.cook-ingredients__list .cook-ingredients__heading { margin-top: 10px; font-size: 13px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--color-text-secondary); }
.cook-body { flex: 1; overflow-y: auto; padding: 28px 20px; max-width: 760px; width: 100%; margin: 0 auto; }
.cook-step__title { font-size: clamp(26px, 5vw, 36px); line-height: 1.15; margin: 0 0 16px; }
.cook-step__text { color: var(--color-text); font-size: clamp(22px, 4.4vw, 30px); line-height: 1.45; margin: 0 0 24px; }
.cook-step__timers { display: flex; flex-wrap: wrap; gap: 12px; }
.cook-btn { border: 0; border-radius: 999px; background: var(--color-bg-alt); color: inherit; padding: 14px 24px; font: inherit; font-size: 18px; font-weight: 600; cursor: pointer; min-height: 52px; }
.cook-btn:disabled { opacity: .35; cursor: default; }
.cook-btn--primary { background: var(--color-accent); color: var(--color-accent-contrast); }
.cook-btn--timer { background: rgba(0, 113, 227, .12); color: var(--color-accent); }
.cook-timers { display: flex; flex-wrap: wrap; gap: 10px; padding: 10px 16px; border-top: 1px solid rgba(0, 0, 0, .08); background: var(--color-bg-alt); }
.cook-timers[hidden] { display: none; }
.cook-timer { display: inline-flex; align-items: center; gap: 10px; padding: 8px 8px 8px 16px; border-radius: 999px; background: var(--color-bg); font-size: 16px; }
.cook-timer__clock { font-variant-numeric: tabular-nums; font-weight: 700; font-size: 20px; }
.cook-timer.is-done { background: #d33; color: #fff; animation: cook-pulse 1s ease-in-out infinite; }
.cook-timer__stop { width: 32px; height: 32px; border: 0; border-radius: 50%; background: rgba(0, 0, 0, .1); font-size: 18px; line-height: 1; cursor: pointer; color: inherit; }
@keyframes cook-pulse { 50% { opacity: .65; } }
.cook-foot { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; padding: 14px 16px calc(14px + env(safe-area-inset-bottom)); border-top: 1px solid rgba(0, 0, 0, .08); }
@media (prefers-reduced-motion: reduce) { .cook-timer.is-done { animation: none; } .cook-progress__bar { transition: none; } }
@media print { .cook-overlay, .js-cook-mode { display: none !important; } }

/* ==========================================================================
   UX-verbeteringen (1.72.45)
   ========================================================================== */
/* Receptpagina op telefoon: inleiding, dan ingrediënten, dan de stappen
   (je moet weten wat je nodig hebt voor je begint). .recipe-content laat zijn
   kinderen deelnemen aan de kolom, zodat de zijbalk ertussen kan. */
@media (max-width: 900px) {
	.recipe-layout { display: flex; flex-direction: column; gap: 0; }
	.recipe-layout > .recipe-content { display: contents; }
	.recipe-layout .recipe-intro { order: -2; }
	.recipe-layout .recipe-sidebar { order: -1; width: 100%; margin: 24px 0 8px; }
}
.recipe-content .steps-heading { margin-top: clamp(28px, 5vw, 44px); }
.recipe-actions .btn { padding: 13px 24px; }
@media (max-width: 520px) {
	.recipe-actions .js-cook-mode { flex: 1 1 100%; }
	.recipe-actions .js-print-recipe, .recipe-actions .js-share-recipe { flex: 1 1 0; padding-inline: 8px; font-size: 15px; }
}
@media print { .js-share-recipe { display: none !important; } }

/* Hero: zoekveld en snelkoppelingen. */
.hero-search { display: flex; max-width: 520px; margin: 28px auto 0; background: #fff; border-radius: 999px; padding: 5px; box-shadow: 0 6px 24px rgba(0, 0, 0, .18); }
.hero-search__input { flex: 1; min-width: 0; border: 0; background: transparent; padding: 0 18px; font: inherit; font-size: 17px; color: var(--color-text); outline: none; }
.hero-search__input::placeholder { color: var(--color-text-secondary); }
.hero-search:focus-within { box-shadow: 0 0 0 3px rgba(0, 113, 227, .55), 0 6px 24px rgba(0, 0, 0, .18); }
.hero-search__btn { border: 0; border-radius: 999px; background: var(--color-accent); color: var(--color-accent-contrast); padding: 12px 24px; font: inherit; font-size: 16px; font-weight: 500; cursor: pointer; min-height: 44px; }
.hero-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 16px; }
.hero-chips__chip { padding: 9px 16px; border-radius: 999px; background: rgba(255, 255, 255, .18); color: #fff; font-size: 15px; backdrop-filter: blur(6px); }
.hero-chips__chip:hover { background: rgba(255, 255, 255, .3); }
.hero--photo .hero__actions { margin-top: 24px; }
.hero:not(.hero--photo) .hero-chips__chip { background: var(--color-bg-alt); color: var(--color-text); }

/* Hero op telefoon: donkerder middenstuk, zodat de ondertitel boven felle
   delen van de foto leesbaar blijft. */
.hero--photo .hero__subtitle { text-shadow: 0 1px 14px rgba(0, 0, 0, .35); }
@media (max-width: 700px) {
	.hero__image-wrap::after { background: linear-gradient(180deg, rgba(0, 0, 0, .45) 0%, rgba(0, 0, 0, .38) 45%, rgba(0, 0, 0, .55) 100%); }
}
