/*
Theme Name: Fun Crea
Theme URI: https://funcrea.nl
Template: csbn-base
Author: CSBN IT Consultancy & Automatisering
Author URI: https://csbn.nl
Description: Child theme voor funcrea.nl op basis van CSBN Base. Huisstijl volgt ontwerp "Licht & speels" (Optie 2); darkmode en categorietegels leunen op Optie 3 (Donker & modern). Design-tokens staan in theme.json, de donkere set in styles/dark.json.
Version: 0.7.2
Requires at least: 6.6
Tested up to: 7.0
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: funcrea-child
*/

/* ==========================================================================
   Fun Crea — klantspecifieke component-CSS
   ==========================================================================
   Bron: docs/merk/visueel.md §5 (componenteninventaris) en docs/merk/tokens.md.
   Alleen wat je niet als design-token kunt uitdrukken hoort hier; kleuren,
   maten, radii, schaduwen en tijden komen uit theme.json / styles/dark.json.

   Er staat met opzet geen enkele hex in dit bestand, op de zes stops van de
   regenboogbalk na (zie §1). De donkere modus werkt door dezelfde negen
   `--wp--preset--color--*`-variabelen te herdefiniëren; een losse kleurwaarde
   zou daar blijven staan waar hij in de lichte modus stond.

   Drie kleurregels lopen door het hele bestand:
   - P1: tekst op een `primary`-vlak is `base`, nooit `primary-contrast`
     (5,24:1 in licht, 7,93:1 in donker; met wit zakt donker naar 2,30:1).
   - P2: tekst op een `secondary`-vlak is `primary-contrast`.
   - Een `accent`-VLAK volgt P1 niet. De toolkit zegt daar ook `base`, maar
     `base` op `accent` is in de lichte modus 1,36:1 — twee lichte kleuren op
     elkaar. Op een accent-vlak hoort in licht `contrast` (9,33:1) en in donker
     `base` (12,63:1). Nagerekend door child-tokens. Dit bestand gebruikt
     `accent` daarom nergens als vlak, alleen als tekst op een donkere band,
     waar het in beide modi boven de 9:1 blijft (regel A1).

   KLASSENAMEN — `fc-`-prefix, maar niet overal
   Elke klasse die als eerste (dus ongebonden) compound in een selector staat
   heeft een `fc-`-prefix: `.fc-card`, `.fc-price`, `.fc-cart`, `nav.fc-main`.
   Dat is geen kosmetiek. WooCommerce zet zelf `.price` op zijn prijzen, `.cart`
   op het toevoegformulier en `.qty` op het aantalveld; zonder prefix zou dit
   bestand die markup meestylen én andersom. Ook `.card` is een van de meest
   voorkomende klassenamen in plugin- en patternmarkup.

   Wat géén prefix heeft, en waarom dat veilig is:
   - Klassen die alleen als afstammeling voorkomen (`.body`, `.tag`, `.ph`,
     `.buy`, `.meta`-inhoud, …). Ze matchen niets zonder een geprefixte
     voorouder: `.fc-card .body` kan geen Woo-markup raken.
   - Modifiers die altijd in dezelfde compound naast een geprefixte klasse
     staan: `.big` (`.fc-btn.big`), `.left`, `.c1`–`.c6` (`.fc-cat.c1`),
     `.u1`–`.u4`, `.is-uitverkocht`.
   Zet je een nieuwe regel bij: staat de klasse vooraan, dan krijgt hij `fc-`.

   Inhoud
     1.  Componenttokens en modusafhankelijke schakelaars
     2.  Focus en beweging (geldt voor alles hieronder)
     2b. Sitecontainer en sectieritme
     3.  Aankondigingsbalk
     4.  Regenboogbalk
     5.  Header, logo, navigatie, gereedschap
     5b. Mobiel menu
     6.  Hero
     7.  Knoppen — alle varianten en statussen
     8.  USP-band en USP-kaarten
     9.  Sectiekop
     10. Categorietegels
     11. Productkaart
     12. Productgrid
     13. Prijsweergave
     14. Formuliervelden
     15. Pills en filters
     16. Paginering
     17. Subhero en kruimelpad
     18. Story-band en highlight
     19. Braderie-agenda
     20. Nieuwsbriefblok
     21. Footer
     22. Productdetail
     23. Winkelwagen
     24. Meldingen (WooCommerce)
     25. Evenementpagina
     26. Windows-contrastmodus (forced-colors)
   ========================================================================== */


/* ==========================================================================
   1. Componenttokens en modusafhankelijke schakelaars
   ========================================================================== */

:root {
	/* --------------------------------------------------------------------
	   Regenboogbalk — OPENSTAANDE MERKBESLISSING (FUNC-24)
	   --------------------------------------------------------------------
	   Deze zes kleuren komen uit de ontwerpbron maar niet uit het logo: het
	   logo is terracotta/salie/beige zonder enig rood. Zie visueel.md §7 voor
	   de drie opties. Ze staan hier als losse stops bij elkaar zodat de
	   beslissing straks één plek raakt in plaats van het halve bestand.
	   Dit zijn de enige hardcoded kleuren in dit bestand; de balk is puur
	   decoratief (aria-hidden) en heeft dus geen contrasteis, en hij is in
	   beide modi identiek — daarom mág het hier.
	   -------------------------------------------------------------------- */
	--funcrea--rainbow--1: #e6392e;
	--funcrea--rainbow--2: #ff8c42;
	--funcrea--rainbow--3: #ffd166;
	--funcrea--rainbow--4: #8fd3c4;
	--funcrea--rainbow--5: #8ec8e8;
	--funcrea--rainbow--6: #c9b3e6;

	/* --------------------------------------------------------------------
	   Donkere waarden van de `settings.custom`-tokens
	   --------------------------------------------------------------------
	   Dit is het tokendeel van dit bestand, geen componentstyling — het staat
	   hier omdat het nergens anders kán. `inc/darkmode.php` van de parent
	   wisselt alleen de negen `--wp--preset--color--*` om, en theme.json kent
	   geen modusafhankelijke `custom`-waarden. Zonder deze regels blijft in de
	   donkere modus de footer crème, blijven de categorietegels pastel en
	   blijft de header een lichte sluier — met bijna-witte tekst erop.
	   Doorgegeven door child-tokens; waarden letterlijk uit tokens.md §3.

	   De hexen staan hier één keer bij elkaar; de twee dark-blokken hieronder
	   bevatten alleen bedrading. Dat scheelt de waarden dubbel onderhouden en
	   houdt ze vindbaar met één grep.

	   Vervalt zodra de tokens per modus uit een gegenereerde stylesheet komen
	   — dan kan dit blok in zijn geheel weg. Zie het eindrapport.
	   -------------------------------------------------------------------- */
	/* Dark palette dichter bij preview Optie 3 (voorbeeld2): paars-zwart
	   surfaces, helderder rood, zachte muted. Tile-tokens blijven als
	   accentbron; cats in dark gebruiken base-2 + accentstreep. */
	--funcrea--dark--surface-warm: #241e2c;
	--funcrea--dark--primary-hover: #ff6f61;
	--funcrea--dark--primary-decor: #ff4d3d;
	--funcrea--dark--tile-peach: #2c2634;
	--funcrea--dark--tile-mint: #1d1822;
	--funcrea--dark--tile-sky: #241e2c;
	--funcrea--dark--tile-lavender: #2c2634;
	--funcrea--dark--tile-sun: #241e2c;
	--funcrea--dark--tile-pink: #2c2634;
	--funcrea--dark--gradient-warm: linear-gradient(135deg, #3a1512, #241e2c);
	--funcrea--dark--header-bg: rgba(20, 16, 24, 0.82);
	/* In de donkere modus draagt de rand de vlakscheiding en is de schaduw
	   bijna onzichtbaar — precies omgekeerd aan de lichte modus. */
	--funcrea--dark--shadow-card: 0 18px 40px rgba(0, 0, 0, 0.45);
	--funcrea--dark--shadow-button: 0 10px 26px rgba(255, 77, 61, 0.35);

	/* --------------------------------------------------------------------
	   Modusafhankelijke schakelaars
	   --------------------------------------------------------------------
	   In de lichte modus dragen de schaduwen de vlakscheiding; in de donkere
	   modus is dat omgekeerd en doet een 1px rand het werk (afwijking 11).
	   Dat als variabele schrijven scheelt elke component twee keer opnemen
	   in het donkere blok — en houdt de donkere modus daarmee eerlijk: er is
	   één plek waar hij van de lichte afwijkt.
	   -------------------------------------------------------------------- */

	/* Volle-breedtebanden op `secondary` (aankondiging, USP, nieuwsbrief). */
	--funcrea--band-border: transparent;

	/* Verhoogde vlakken op `base-2` (kaart, panel, widget, totalen). */
	--funcrea--surface-border: transparent;

	/* Hero-kicker: `primary` op wit in licht; in donker is `accent` de
	   rustigere keuze en daar mág accent tekst zijn (regel A1, 12,63:1). */
	--funcrea--kicker-color: var(--wp--preset--color--primary);
}

/* De twee blokken uit het darkmode-contract. Ze zijn identiek en dat moet ook:
   het eerste dekt de bezoeker zonder JS die op een donker OS zit, het tweede de
   expliciete keuze. Beide selectors zijn specifieker dan de `:root` van global
   styles, dus het attribuut wint in béide richtingen — ongeacht in welke
   volgorde de stylesheets binnenkomen. */
@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) {
		--funcrea--band-border: var(--wp--preset--color--border);
		--funcrea--surface-border: var(--wp--preset--color--border);
		--funcrea--kicker-color: var(--wp--preset--color--accent);

		--wp--custom--surface--warm: var(--funcrea--dark--surface-warm);
		--wp--custom--primary--hover: var(--funcrea--dark--primary-hover);
		--wp--custom--primary--decor: var(--funcrea--dark--primary-decor);
		--wp--custom--tile--peach: var(--funcrea--dark--tile-peach);
		--wp--custom--tile--mint: var(--funcrea--dark--tile-mint);
		--wp--custom--tile--sky: var(--funcrea--dark--tile-sky);
		--wp--custom--tile--lavender: var(--funcrea--dark--tile-lavender);
		--wp--custom--tile--sun: var(--funcrea--dark--tile-sun);
		--wp--custom--tile--pink: var(--funcrea--dark--tile-pink);
		--wp--custom--gradient--warm: var(--funcrea--dark--gradient-warm);
		--wp--custom--header--bg: var(--funcrea--dark--header-bg);
		--wp--custom--shadow--card: var(--funcrea--dark--shadow-card);
		--wp--custom--shadow--button: var(--funcrea--dark--shadow-button);
	}
}

:root[data-theme="dark"] {
	--funcrea--band-border: var(--wp--preset--color--border);
	--funcrea--surface-border: var(--wp--preset--color--border);
	--funcrea--kicker-color: var(--wp--preset--color--accent);

	--wp--custom--surface--warm: var(--funcrea--dark--surface-warm);
	--wp--custom--primary--hover: var(--funcrea--dark--primary-hover);
	--wp--custom--primary--decor: var(--funcrea--dark--primary-decor);
	--wp--custom--tile--peach: var(--funcrea--dark--tile-peach);
	--wp--custom--tile--mint: var(--funcrea--dark--tile-mint);
	--wp--custom--tile--sky: var(--funcrea--dark--tile-sky);
	--wp--custom--tile--lavender: var(--funcrea--dark--tile-lavender);
	--wp--custom--tile--sun: var(--funcrea--dark--tile-sun);
	--wp--custom--tile--pink: var(--funcrea--dark--tile-pink);
	--wp--custom--gradient--warm: var(--funcrea--dark--gradient-warm);
	--wp--custom--header--bg: var(--funcrea--dark--header-bg);
	--wp--custom--shadow--card: var(--funcrea--dark--shadow-card);
	--wp--custom--shadow--button: var(--funcrea--dark--shadow-button);
}

/* Alleen de schakelaars terugzetten. De `custom`-tokens hoeven hier niet
   hersteld: geen van beide dark-blokken raakt een `[data-theme="light"]`-root,
   dus daar gelden vanzelf de waarden uit theme.json. */
:root[data-theme="light"] {
	--funcrea--band-border: transparent;
	--funcrea--surface-border: transparent;
	--funcrea--kicker-color: var(--wp--preset--color--primary);
}


/* ==========================================================================
   2. Focus en beweging
   ==========================================================================
   Regel F1: focus is altijd een 3px outline in `contrast` met 2px offset.
   `contrast` is de enige kleur die in beide paletten tegen elk vlak boven de
   15:1 blijft, dus één regel volstaat voor de hele site.

   Nergens in dit bestand staat `outline: none`. Dat is bewust: browsers
   zonder `:focus-visible` vallen daardoor terug op hun eigen focusring in
   plaats van op niets. De bron deed dit wél fout op formuliervelden
   (afwijking 7).
   ========================================================================== */

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
	outline: 3px solid var(--wp--preset--color--contrast);
	outline-offset: 2px;
}

/* Uitzondering op F1, en een die niet in visueel.md staat: in de lichte modus
   zijn `contrast` en `secondary` exact dezelfde hex. Een focusring op een
   donkere band is daar dus 1,00:1 — volledig onzichtbaar. Op die banden neemt
   `primary-contrast` het over (13,46:1 licht, 14,95:1 donker).
   Dit raakt vooral het nieuwsbriefformulier: het veld is wit, maar de ring
   valt door de 2px offset op de band eronder. */
.fc-announce a:focus-visible,
.fc-announce button:focus-visible,
.fc-trust a:focus-visible,
.fc-trust button:focus-visible,
.fc-news a:focus-visible,
.fc-news button:focus-visible,
.fc-news input:focus-visible {
	outline-color: var(--wp--preset--color--primary-contrast);
}

/* Beweging is versiering, geen betekenis: onder `reduce` valt alles weg.
   De bron heeft deze guard niet (afwijking 9).

   Dit stond tot 0.4.9 als een opsomming van twintig selectors, en dat is de
   verkeerde vorm voor deze regel: elke component die later bijkomt valt er
   buiten, en niemand merkt dat. Een universele regel kan niets vergeten.

   Waarom een duur van 0,01ms en niet `none`: een overgang die nul duurt vuurt
   geen `transitionend`, en JavaScript dat daarop wacht blijft dan hangen. Deze
   waarde is korter dan een beeldverversing — je ziet niets — maar de gebeurtenis
   komt wel.

   `!important` is hier nodig en geen luiheid: de regel moet elke
   componentdeclaratie verslaan, ook die van de parent en van WooCommerce.

   Eén bewust verschil met de oude opsomming: die zette ook `transform: none` op
   hover, waardoor kaarten en knoppen onder `reduce` helemaal niet meer optilden.
   Nu tillen ze wel op, maar zonder overgang — een directe standswijziging, geen
   beweging. Dat is wat de richtlijn vraagt, en het houdt de hover-terugkoppeling
   in stand voor wie hem nodig heeft. */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}


/* ==========================================================================
   2b. Sitecontainer en sectieritme
   ==========================================================================
   Staat niet in visueel.md §5: dat is een componenteninventaris, en dit is
   layout. Toch hoort het hier, want zonder deze twee regels hangen `.wrap` en
   de secties uit de ontwerpbron in de lucht — §5 verwijst er wel naar
   (`.fc-trust .fc-wrap`, `.fc-subhero .fc-wrap`) maar definieert ze nergens.

   Waarom niet `.csbn-container` van de parent: die rekent met
   `--wp--style--global--wide-size` (1136px) en `spacing 30` als binnenruimte.
   Het ontwerp wil 1180px inclusief 22px padding (afwijking 36) — dus een eigen
   container, en de parent-container blijft voor wat de parent zelf rendert. */

.fc-wrap {
	box-sizing: border-box;
	width: 100%;
	max-width: 1180px;
	margin-inline: auto;
	/* spacing 40 = 1,375rem = 22px. */
	padding-inline: var(--wp--preset--spacing--40);
}

/* Verticaal ritme tussen de secties op de homepage en de inhoudspagina's.
   De bron zette dit als inline `padding-top:0` op elke tweede sectie; hier is
   het één regel plus een modifier voor de secties die tegen de vorige aan
   moeten sluiten. */
.fc-block {
	padding-block: var(--wp--preset--spacing--70);
}

.fc-block.dicht {
	padding-top: 0;
}


/* ==========================================================================
   3. Aankondigingsbalk (.fc-announce)
   ==========================================================================
   Niet interactief, dus geen statussen. */

.fc-announce {
	background-color: var(--wp--preset--color--secondary);
	/* Regel P2 — op `secondary` staat `primary-contrast`, nooit `contrast`:
	   in de lichte modus is `contrast` exact dezelfde hex als `secondary`. */
	color: var(--wp--preset--color--primary-contrast);
	padding: var(--wp--preset--spacing--20) 0.75rem;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	letter-spacing: 0.014em;
	text-align: center;
	/* Zie §1: in de donkere modus is dit een verhoogd vlak dat zonder rand
	   niet van de pagina te onderscheiden is (1,22:1). */
	border-bottom: 1px solid var(--funcrea--band-border);
}

/* Het tweede tekstdeel staat gedempt. Op 85% blijft de verhouding 10,14:1,
   ruim binnen AA — daarom mag dit met opacity in plaats van met een tweede
   kleur, wat in de donkere modus vanzelf meeschaalt. */
.fc-announce span {
	opacity: 0.85;
}


/* ==========================================================================
   4. Regenboogbalk (.fc-rainbow)
   ==========================================================================
   Puur decoratief; hoort in de markup `aria-hidden="true"` te krijgen en geen
   tekst te bevatten. In beide modi identiek: de balk werkt op elk vlak.
   De kleuren zelf staan in §1 — verander ze daar, niet hier. */

.fc-rainbow {
	height: 6px;
	background-image: linear-gradient(
		90deg,
		var(--funcrea--rainbow--1),
		var(--funcrea--rainbow--2),
		var(--funcrea--rainbow--3),
		var(--funcrea--rainbow--4),
		var(--funcrea--rainbow--5),
		var(--funcrea--rainbow--6)
	);
}


/* ==========================================================================
   5. Header, logo, navigatie, gereedschap
   ========================================================================== */

header.fc-site {
	position: sticky;
	top: 0;
	z-index: 40;
	/* 92% dekkend `base` met blur; het token schuift in de donkere modus mee. */
	background-color: var(--wp--custom--header--bg);
	backdrop-filter: blur(8px);
	border-bottom: 1px solid var(--wp--preset--color--border);
}

.fc-navbar {
	/* Ankerpunt voor het zoekpaneel uit §5; zie de toelichting daar. */
	position: relative;
	display: flex;
	align-items: center;
	gap: 1.625rem;
	max-width: 1180px;
	margin-inline: auto;
	padding: 0.75rem var(--wp--preset--spacing--40);
}

/* --- Logo ---------------------------------------------------------------- */

.fc-logo {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	text-decoration: none;
}

.fc-logo img {
	height: 56px;
	width: auto;
}

/* Twee varianten van het volledige logo, één zichtbaar. Het woordmerk is cacao
   op transparant en valt weg op de donkere achtergrond; `mono-white` neemt het
   daar over. Dit speelt in de voettekst, waar het logo de naam draagt — de
   kopbalk gebruikt het beeldmerk, dat in beide modi staat. De schakelaars
   staan op dezelfde drie selectors als het darkmode-contract in §1, zodat
   licht/donker hier niet zijn eigen mechanisme krijgt.

   `display: none` haalt de verborgen variant ook uit de toegankelijkheidsboom,
   dus beide dragen dezelfde alt-tekst (zie `funcrea_logo_img()`). */
.fc-logo-donker {
	display: none;
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) .fc-logo-licht {
		display: none;
	}

	:root:not([data-theme="light"]) .fc-logo-donker {
		display: inline;
	}
}

:root[data-theme="dark"] .fc-logo-licht {
	display: none;
}

:root[data-theme="dark"] .fc-logo-donker {
	display: inline;
}

:root[data-theme="light"] .fc-logo-licht {
	display: inline;
}

:root[data-theme="light"] .fc-logo-donker {
	display: none;
}

.fc-logo .txt strong {
	display: block;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
	line-height: 1;
	color: var(--wp--preset--color--primary);
}

.fc-logo .txt small {
	font-size: var(--wp--custom--font-size--micro);
	color: var(--wp--preset--color--contrast-2);
}

/* --- Navigatie ----------------------------------------------------------- */

nav.fc-main {
	display: flex;
	gap: 1.25rem;
	margin-left: auto;
	font-weight: 700;
	font-size: var(--wp--preset--font-size--medium);
}

nav.fc-main a {
	padding: 0.375rem 2px;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
	border-bottom: 2px solid transparent;
	transition: color var(--wp--custom--transition--fast) ease,
		border-color var(--wp--custom--transition--fast) ease;
}

nav.fc-main a:hover {
	color: var(--wp--preset--color--primary);
	border-bottom-color: var(--wp--preset--color--primary);
}

/* De huidige pagina staat niet in de bron. Zelfde weergave als hover, maar
   dan permanent — en de aanduiding hangt aan `aria-current`, niet aan een
   klasse, zodat hulpsoftware en oog hetzelfde zien (afwijking 18). */
nav.fc-main a[aria-current="page"] {
	color: var(--wp--preset--color--primary);
	border-bottom-color: var(--wp--preset--color--primary);
}

/* De kopbalk ruimt in drie stappen op. De bron zet de navigatie pas op 860px
   weg, maar die had zes korte labels en drie knoppen; dit menu heeft
   "Poppenhuis 1:12" en er staan vier knoppen naast. Gemeten op 900px mét de
   echte fonts: de sitenaam liep over het eerste menu-item heen, "Poppenhuis
   1:12" brak over twee regels en de menuknop viel buiten beeld.

   Stap 1 — onder 1200px: de slogan weg. Die staat toch al ín het logoplaatje
   (visueel.md §7, punt 4: hij stond dubbel). */
@media (max-width: 1200px) {
	.fc-logo .txt small {
		display: none;
	}

	.fc-logo .txt strong {
		white-space: nowrap;
	}
}

/* Stap 2 — onder 1080px: de navigatie naar het paneel uit §5b. */
@media (max-width: 1080px) {
	nav.fc-main {
		display: none;
	}

	/* Met de navigatie weg zijn logo en gereedschap de twee flexitems. De
	   `margin-left:auto` die de navigatie naar rechts duwde is er dan niet
	   meer, dus neemt het gereedschap dat over. */
	.fc-tools {
		margin-left: auto;
		flex: 0 0 auto;
	}
}

/* Stap 3 — onder 860px: smallere marges en een kleiner logo. */
@media (max-width: 860px) {
	.fc-navbar {
		gap: 0.75rem;
		padding-inline: var(--wp--preset--spacing--30);
	}

	.fc-logo img {
		height: 44px;
	}
}

/* Op de smalste schermen blijft alleen het beeldmerk over; de naam staat daar
   ook in het plaatje. */
@media (max-width: 420px) {
	.fc-logo .txt {
		display: none;
	}
}

/* --- Gereedschap --------------------------------------------------------- */

.fc-tools {
	display: flex;
	align-items: center;
	gap: 0.625rem;
}

.fc-icon-btn {
	position: relative;
	/* 44px in plaats van de 42px uit de bron: WCAG 2.5.8 raakdoel
	   (afwijking 8).

	   Regel S1 — vaste maat als ondergrens, niet als maat. `min-height` en
	   niet `height`: legt de bezoeker een grotere letter of ruimere
	   tekstafstand op (WCAG 1.4.12), dan groeit de inhoud wel en het vak
	   niet, en loopt de tekst eruit. De 44px blijft zo de ondergrens voor
	   het raakdoel én mag meegroeien. Browserzoom speelt hier geen rol: die
	   schaalt de px mee.

	   S1 geldt bewust alleen op de hoogte. Dat is de as die faalt: 1,5×
	   regelafstand rekt de regelbox op, terwijl 0,12em letterafstand aan één
	   teken vrijwel niets doet. Breedte blijft dus vast, met twee redenen om
	   dat zo te houden: een te breed teken valt zichtbaar over de rand (geen
	   stil verlies), en `min-width` op een rij knoppen in een krappe kopbalk
	   is wél een layoutwijziging. Uitzondering zijn de twee knoppen binnen
	   `.fc-qty` — zie daar. */
	width: 44px;
	min-height: 44px;
	display: grid;
	place-items: center;
	padding: 0;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	/* Rand op `contrast-2`, niet op `border`: dit is een bedienbaar element
	   (regel R2) en de slug `border` haalt de 3:1 van WCAG 1.4.11 niet. */
	border: 1px solid var(--wp--preset--color--contrast-2);
	/* Regel S2 — hoort bij S1. `50%` is de helft van elke as, dus zodra de
	   hoogte meegroeit en de breedte vast blijft, wordt de cirkel een ovaal.
	   De pill-radius (999px) blijft bij elke maat een correcte cirkel. */
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	font-size: 1.1rem;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	transition: color var(--wp--custom--transition--fast) ease,
		border-color var(--wp--custom--transition--fast) ease;
}

/* Hover staat niet in de bron; dit volgt `.csbn-theme-toggle:hover` uit de
   parent, zodat alle knoppen in de kopbalk zich hetzelfde gedragen. */
.fc-icon-btn:hover {
	color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
}

/* De themaschakelaar hoort visueel bij `.fc-tools`; de parent geeft hem een
   rechthoekige vorm. Hier alleen de vorm bijstellen — kleuren, focus en
   iconen blijven van de parent, dat is het contract.

   Regel S1 en S2, hier door de maat juist wég te laten. De parent staat al op
   `min-width`/`min-height: 44px` (`csbn-base/assets/css/theme.css:210`); een
   vaste `width`/`height` erover zette precies die ondergrens weer om in een
   bovengrens. De pill-radius vervangt `50%`, dat bij een niet-vierkant vak een
   ovaal oplevert.

   Zichtbaar verandert er vandaag niets: de inhoud is `__icons`, een vast blok
   van 20x20px uit de parent, dus het vak blijft 44x44 bij 200% lettergrootte
   én bij ruimere tekstafstand. Wat vervalt is de bovengrens voor de stand
   waarin het label wél meedoet (`--csbn-toggle--label-display`): met de vaste
   breedte liep dat 46px buiten de knop, en 121px bij 200% plus tekstafstand. */
.fc-tools .csbn-theme-toggle {
	padding: 0;
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-tools .csbn-theme-toggle .csbn-theme-toggle__label {
	display: none;
}

/* De badge staat er ook bij een lege winkelwagen — WooCommerce kan bij een
   AJAX-toevoeging alleen vervangen wat er al staat. Op nul is hij leeg, en dan
   hoort hij niet als rood bolletje in de hoek te blijven hangen. */
.fc-icon-btn .badge:empty {
	display: none;
}

.fc-icon-btn .badge {
	position: absolute;
	top: -4px;
	right: -4px;
	min-width: 18px;
	/* Regel S1. Krapste vak van het theme: een cijfer op `font-weight: 800`
	   in 18px. `min-width` stond er al, `min-height` hoort erbij. */
	min-height: 18px;
	padding-inline: 4px;
	display: grid;
	place-items: center;
	background-color: var(--wp--preset--color--primary);
	/* Regel P1 — `base`, niet `primary-contrast`. visueel.md §5.3 noemt hier
	   nog `primary-contrast` (dat is de bronbeschrijving); met wit zakt dit
	   in de donkere modus naar 2,30:1. Met `base` is het 5,24:1 / 7,93:1. */
	color: var(--wp--preset--color--base);
	/* Regel S2. Stond op `9px` — met de hand de helft van 18, dus fout zodra
	   het vak groeit. */
	border-radius: var(--wp--custom--radius--pill);
	/* 0,7rem in plaats van 0,65rem: 10,4px is te klein (afwijking 12). */
	font-size: var(--wp--custom--font-size--tag);
	font-weight: 800;
	line-height: 1;
}

/* --- Zoeken (.fc-zoek, FUNC-26) ------------------------------------------
   Een <details> met het zoekformulier erin, geen dialoogvenster met eigen JS.
   Het paneel hangt onder de kopbalk en valt binnen de sticky kopbalk. De lage
   `z-index: 1` hieronder houdt het boven de pagina zonder hoge waarden.

   Het paneel hangt bewust aan `.fc-navbar` en niet aan het zoekicoon zelf. Het
   icoon is niet het rechtse item in de balk: er staan nog drie knoppen rechts
   van (winkelwagen, themaschakelaar, menu). Rechts uitlijnen op
   het icoon schoof het paneel op een telefoon dus ruim 200px het venster uit
   aan de linkerkant, en dat is geen overloop die je terugscrolt — links buiten
   beeld is weg. Rechts uitlijnen op de balk zet dezelfde rand precies binnen
   het venster. De `position: relative` die dat regelt staat bij `.fc-navbar`
   zelf, hierboven in deze paragraaf. */

/* De `<summary>` is hier de knop. Zonder deze twee regels zet de browser er
   zijn eigen driehoekje voor en klopt de 44px-cirkel van `.fc-icon-btn` niet
   meer. `display: grid` komt uit `.fc-icon-btn` en overschrijft `list-item`. */
.fc-zoek > summary {
	list-style: none;
	cursor: pointer;
}

.fc-zoek > summary::-webkit-details-marker {
	display: none;
}

.fc-zoek[open] > summary {
	color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
}

.fc-zoek-paneel {
	position: absolute;
	/* Rechts uitgelijnd op de balk. `right: 0` zou tegen de rand van het
	   venster liggen: het ankerpunt is de padding-box van `.fc-navbar` en die
	   loopt tot buiten de binnenruimte. Met `spacing 30` staat de rand van het
	   paneel op een telefoon gelijk met die van de balk zelf. */
	top: calc(100% + 0.625rem);
	right: var(--wp--preset--spacing--30);
	z-index: 1;
	box-sizing: border-box;
	/* Breed genoeg voor een zoekterm van een woord of drie, en op een smal
	   scherm nooit breder dan het venster. */
	width: min(22rem, calc(100vw - 2rem));
	padding: var(--wp--preset--spacing--30);
	background-color: var(--wp--preset--color--base);
	/* In de donkere modus draagt de rand de scheiding; zie §1. */
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-zoek-form {
	display: flex;
	gap: var(--wp--preset--spacing--20);
}

/* `min-width: 0` is niet overbodig: een flexkind krimpt standaard niet onder
   zijn eigen minimumbreedte, en die is bij een `input` de browserbreedte van
   ~20 tekens. Zonder deze regel duwt het veld de knop het paneel uit. */
.fc-zoek-form .search-field {
	flex: 1;
	min-width: 0;
}

.fc-zoek-form .fc-btn {
	flex: none;
}

/* --- Suggesties in het zoekpaneel (FUNC-47) ------------------------------
   De lijst staat in de HTML met `hidden` erop en het script haalt dat weg.
   Daarom staat hier bewust géén `display`: de UA-regel `[hidden]{display:none}`
   verliest van elke auteursdeclaratie, ook van een enkele klasse (valkuil 15).
   Eén `display: block` hieronder en `hidden` doet niets meer — zonder fout,
   zonder melding, met een lege lijst die permanent open staat. */
.fc-zoek-suggesties {
	margin: var(--wp--preset--spacing--20) 0 0;
	padding: 0;
	list-style: none;
	/* Vijf items passen; bij een langere lijst scrollt de lijst en niet het
	   paneel, zodat het zoekveld in beeld blijft. */
	max-height: 15rem;
	overflow-y: auto;
}

.fc-zoek-optie {
	display: flex;
	align-items: center;
	/* Regel S1: raakdoel van 44px. `min-height`, geen `height` — een titel van
	   twee regels moet het vak groter maken, niet eruit lopen (FUNC-38). */
	min-height: 44px;
	padding: var(--wp--preset--spacing--20);
	border-radius: var(--wp--custom--radius--medium);
	cursor: pointer;
}

/* Aanwijzen met de muis en aanwijzen met de pijltjes horen er hetzelfde uit te
   zien: het is dezelfde handeling. `aria-selected` is hier de bron van waarheid
   — het script zet niets anders, dus de opmaak kan niet uit de pas lopen met
   wat een schermlezer voorleest. */
.fc-zoek-optie:hover,
.fc-zoek-optie[aria-selected="true"] {
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--primary);
}


/* ==========================================================================
   5b. Mobiel menu (.fc-mobiel)
   ==========================================================================
   Staat niet in de ontwerpbron: daar verdwijnt `nav.fc-main` onder 860px zonder
   alternatief. Richting uit visueel.md §6 — paneel op `base`, volle hoogte,
   links op `medium`/700, 44px raakdoelen, sluitknop rechtsboven.

   Het is een <dialog>, dus focus-trap, Escape en het inert maken van de pagina
   komen uit de browser. Die brengt eigen standaardstijl mee (rand, marge,
   automatische breedte) en die wordt hier eerst uitgezet. */

.fc-menu-knop {
	display: none;
}

.fc-mobiel {
	/* Uit de standaardstijl van <dialog>. */
	padding: 0;
	border: 0;
	max-width: none;
	max-height: none;
	background: transparent;

	/* Volle hoogte tegen de rechterrand — het paneel schuift van de kant waar
	   de openknop staat.

	   `fixed` en een z-index zijn nodig, niet alleen netjes: met de
	   standaard-`absolute` van <dialog> staat het paneel vóór de hero in de
	   DOM, en de absoluut gepositioneerde hero-achtergrond schilderde er dan
	   overheen — het paneel was simpelweg onzichtbaar. In de modale stand valt
	   dat niet op (de top layer staat boven alles), maar de terugvalstand voor
	   browsers zonder showModal() gebruikt gewoon `open`, en daar wél. 60 is
	   boven de sticky kopbalk (40).

	   Let op de `auto` links: de UA-stijl van <dialog> zet `left: 0` én
	   `right: 0`. Met daarbij een vaste breedte is de doos overbepaald, en dan
	   negeert de browser in een links-naar-rechts-taal juist `right` — het
	   paneel kwam zo aan de verkeerde kant te staan. */
	position: fixed;
	inset: 0 0 0 auto;
	z-index: 60;
	margin: 0;
	width: min(20rem, 88vw);
	height: 100%;
}

.fc-mobiel::backdrop {
	background-color: rgba(0, 0, 0, 0.5);
}

.fc-mobiel-vlak {
	box-sizing: border-box;
	height: 100%;
	padding: var(--wp--preset--spacing--40);
	background-color: var(--wp--preset--color--base);
	/* In de donkere modus draagt de rand de scheiding; zie §1. */
	border-left: 1px solid var(--funcrea--surface-border);
	box-shadow: var(--wp--custom--shadow--card);
	overflow-y: auto;
}

.fc-mobiel-sluit {
	margin-left: auto;
	display: flex;
}

.fc-mobiel-nav {
	display: flex;
	flex-direction: column;
	margin-top: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 700;
}

.fc-mobiel-nav a {
	/* 44px raakdoel (WCAG 2.5.8), en de scheidingslijn houdt de rij leesbaar
	   zonder een tweede kleur nodig te hebben. */
	display: flex;
	align-items: center;
	min-height: 44px;
	padding-inline: 2px;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
	border-bottom: 1px solid var(--wp--preset--color--border);
	transition: color var(--wp--custom--transition--fast) ease;
}

.fc-mobiel-nav a:hover,
.fc-mobiel-nav a[aria-current="page"] {
	color: var(--wp--preset--color--primary);
}

/* Onder 1080px verdwijnt `nav.fc-main` (§5, stap 2) en neemt dit paneel het
   over; de openknop hoort dus op precies datzelfde punt te verschijnen. Blijven
   die twee getallen niet gelijk, dan is er een strook breedtes zonder enige
   navigatie — of met twee menu's tegelijk. */
@media (max-width: 1080px) {
	.fc-menu-knop {
		display: grid;
	}
}


/* ==========================================================================
   6. Hero (.fc-hero)
   ========================================================================== */

.fc-hero {
	position: relative;
	min-height: 520px;
	display: flex;
	align-items: center;
	overflow: hidden;
}

.fc-hero .bg {
	position: absolute;
	inset: 0;
}

/* De foto is een <img> en geen achtergrond, zodat de browser hem vroeg vindt,
   met `srcset` een passend formaat kiest en `fetchpriority` kan honoreren.
   `object-fit` en `object-position` doen hier wat `background-size: cover` en
   `background-position` deden. */
.fc-hero .bg .foto {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center 30%;
}

/* De leesbaarheidslaag over de foto. `color-mix` in plaats van een rgba-hex,
   zodat de sluier in de donkere modus vanzelf donker wordt — met een vaste
   crèmekleur zou de hero daar oplichten.
   De tweede stop staat op 88% dekking en loopt door tot voorbij de tekstkolom
   (max-width 600px in een wrap van 1180px). De bron had daar .80 op 42%, wat
   het laatste stuk kop en alinea op een te dunne sluier zette (afwijking 10). */
.fc-hero .bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background-image: linear-gradient(
		90deg,
		color-mix(in srgb, var(--wp--preset--color--base) 96%, transparent) 0%,
		color-mix(in srgb, var(--wp--preset--color--base) 88%, transparent) 55%,
		color-mix(in srgb, var(--wp--preset--color--base) 15%, transparent) 78%,
		transparent 100%
	);
}

/* De sluier loopt van links naar rechts, en dat werkt zolang de tekstkolom in
   de linkerhelft staat. Op een smal scherm vult de tekst de hele breedte en
   staat hij dus op het doorschijnende deel van de foto — gemeten op 390px:
   onleesbaar. Onder 760px daarom van boven naar onder, met de foto zichtbaar
   onder de tekst in plaats van erachter. */
@media (max-width: 760px) {
	.fc-hero .bg::after {
		background-image: linear-gradient(
			180deg,
			color-mix(in srgb, var(--wp--preset--color--base) 94%, transparent) 0%,
			color-mix(in srgb, var(--wp--preset--color--base) 90%, transparent) 72%,
			color-mix(in srgb, var(--wp--preset--color--base) 45%, transparent) 100%
		);
	}
}

.fc-hero .inner {
	position: relative;
	z-index: 2;
	max-width: 600px;
	padding-block: var(--wp--preset--spacing--60);
}

.fc-hero .kicker {
	display: inline-block;
	margin-bottom: 1.125rem;
	padding: 0.375rem 0.875rem;
	background-color: var(--wp--preset--color--base-2);
	color: var(--funcrea--kicker-color);
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	font-size: var(--wp--custom--font-size--eyebrow);
	font-weight: 800;
	letter-spacing: 0.117em;
	text-transform: uppercase;
}

.fc-hero h1 {
	font-size: var(--wp--preset--font-size--huge);
	line-height: 1.15;
	margin: 0 0 0.875rem;
}

/* Eén woord uitgelicht. `--primary--decor` is het originele, feller rood dat
   als kleine tekst zakt door AA; op deze maat (minimaal 2,2rem, gewicht 600)
   geldt de grens voor grote tekst en mag het. Nergens anders gebruiken. */
.fc-hero h1 em {
	font-style: normal;
	color: var(--wp--custom--primary--decor);
}

.fc-hero p {
	max-width: var(--wp--custom--measure--lead);
	margin: 0 0 1.625rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: 1.12rem;
}

.fc-cta-row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--30);
}


/* ==========================================================================
   7. Knoppen — alle varianten en statussen
   ==========================================================================
   De bron definieert alleen de rusttoestand en hover. Actief, uitgeschakeld
   en focus zijn hier toegevoegd; focus volgt het parent-contract uit §2. */

.fc-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	padding: 0.875rem 1.625rem;
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 600;
	/* De bron erft 1,6 van body; in een pil staat dat te ruim en groeit de
	   knop onnodig (afwijking 27). */
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
	cursor: pointer;
	transition: background-color var(--wp--custom--transition--base) ease,
		box-shadow var(--wp--custom--transition--base) ease,
		transform var(--wp--custom--transition--base) ease;
}

/* --- Primair ------------------------------------------------------------- */

.fc-btn-primary {
	background-color: var(--wp--preset--color--primary);
	/* Regel P1: `base`, niet `primary-contrast` (afwijking 2). */
	color: var(--wp--preset--color--base);
	box-shadow: var(--wp--custom--shadow--button);
}

.fc-btn-primary:hover {
	background-color: var(--wp--custom--primary--hover);
	transform: translateY(-2px);
}

/* Ingedrukt: terug naar de grondlijn, schaduw korter. Geeft de knop een
   fysieke terugkoppeling die los staat van hover — belangrijk op touch, waar
   hover blijft plakken. */
.fc-btn-primary:active {
	transform: translateY(0);
	box-shadow: 0 4px 10px transparent;
}

/* --- Ghost --------------------------------------------------------------- */

.fc-btn-ghost {
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	box-shadow: var(--wp--custom--shadow--card);
	/* In de donkere modus draagt de rand de vlakscheiding (zie §1). */
	border: 1px solid var(--funcrea--surface-border);
}

.fc-btn-ghost:hover {
	transform: translateY(-2px);
}

.fc-btn-ghost:active {
	transform: translateY(0);
}

/* --- Groot --------------------------------------------------------------- */

.fc-btn.big {
	padding: 0.9375rem 1.875rem;
}

/* --- Uitgeschakeld -------------------------------------------------------
   Geldt voor beide varianten. `aria-disabled` staat erbij omdat een link geen
   `disabled` kent en een uitgeschakelde koopknop soms een link is; de klasse
   maakt hem grijs, de markup moet de klik zelf tegenhouden. */

.fc-btn[disabled],
.fc-btn[aria-disabled="true"] {
	background-color: var(--wp--preset--color--border);
	/* 5,03:1 in licht, 5,47:1 in donker — ook uitgeschakelde tekst blijft
	   leesbaar, ook al eist WCAG dat niet. */
	color: var(--wp--preset--color--contrast-2);
	box-shadow: none;
	transform: none;
	cursor: not-allowed;
}

.fc-btn[disabled]:hover,
.fc-btn[aria-disabled="true"]:hover {
	background-color: var(--wp--preset--color--border);
	transform: none;
}


/* ==========================================================================
   8. USP-band (.fc-trust) en USP-kaarten (.fc-usps / .fc-usp)
   ========================================================================== */

.fc-trust {
	background-color: var(--wp--preset--color--secondary);
	color: var(--wp--preset--color--primary-contrast);
	/* Boven én onder een rand in de donkere modus: de band is daar een
	   verhoogd vlak en zonder scheiding niet te zien (afwijking 11). */
	border-block: 1px solid var(--funcrea--band-border);
}

.fc-trust .fc-wrap {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--40);
	padding: var(--wp--preset--spacing--40);
	text-align: center;
}

.fc-trust div {
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-trust .em {
	display: block;
	margin-bottom: 2px;
	font-size: 1.35rem;
}

@media (max-width: 760px) {
	.fc-trust .fc-wrap {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* --- Kaartvariant op de over-pagina -------------------------------------- */

.fc-usps {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--40);
	margin-block: var(--wp--preset--spacing--60);
}

.fc-usp {
	padding: 1.5rem 1.25rem;
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
	text-align: center;
	transition: transform 200ms ease;
}

/* De vier pasteltinten. Tekst hierop blijft `contrast` / `contrast-2`: de
   donkere tegenhangers van deze tinten zitten in dezelfde luminantiehoek als
   `base-2`, dus de verhoudingen kloppen in beide modi. */
.fc-usp.u1 { background-color: var(--wp--custom--tile--peach); }
.fc-usp.u2 { background-color: var(--wp--custom--tile--mint); }
.fc-usp.u3 { background-color: var(--wp--custom--tile--sky); }
.fc-usp.u4 { background-color: var(--wp--custom--tile--pink); }

.fc-usp:hover {
	transform: translateY(-4px);
}

.fc-usp .ic {
	font-size: 2rem;
	margin-bottom: var(--wp--preset--spacing--20);
}

.fc-usp b {
	display: block;
	margin-bottom: 4px;
	color: var(--wp--preset--color--contrast);
}

.fc-usp span {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

@media (max-width: 820px) {
	.fc-usps {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 480px) {
	.fc-usps {
		grid-template-columns: 1fr;
	}
}


/* ==========================================================================
   9. Sectiekop (.fc-head)
   ========================================================================== */

.fc-head {
	max-width: var(--wp--custom--measure--intro);
	margin: 0 auto var(--wp--preset--spacing--50);
	text-align: center;
}

/* Ook de story-band heeft een kopregel (visueel.md §5.14). De bron zette daar
   een inline stijl met dezelfde waarden; hier hangt hij aan dezelfde regel,
   zodat de kopregels van de sectiekop en de story-band niet uit elkaar kunnen
   lopen. */
.fc-head .eyebrow,
.fc-story .eyebrow {
	display: block;
	color: var(--wp--preset--color--primary);
	font-size: var(--wp--custom--font-size--eyebrow);
	font-weight: 800;
	letter-spacing: 0.117em;
	text-transform: uppercase;
}

.fc-story .eyebrow {
	margin-bottom: var(--wp--preset--spacing--20);
}

.fc-head h2 {
	font-size: var(--wp--preset--font-size--xx-large);
	margin: var(--wp--preset--spacing--20) 0 0.625rem;
}

.fc-head p {
	margin: 0;
	color: var(--wp--preset--color--contrast-2);
}

/* Linksuitgelijnde variant (over-pagina). */
.fc-head.left {
	max-width: none;
	margin-inline: 0;
	text-align: left;
}


/* ==========================================================================
   10. Categorietegels (.fc-cats / .fc-cat)
   ==========================================================================
   Layout dichter bij preview Optie 3 (voorbeeld2 “Donker & modern”):
   compacte kaarten, 6-koloms grid, gekleurde accentstreep boven, icoon
   gecentreerd. In light mode blijven de pastel-tegels als vlakkleur; in dark
   mode surface + border + accentstreep (preview-tokens). */

.fc-cats {
	display: grid;
	grid-template-columns: repeat(6, 1fr);
	gap: 0.875rem;
}

.fc-cat {
	--fc-cat-accent: var(--wp--preset--color--primary);
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 0.35rem;
	min-height: 0;
	padding: 1.375rem 1rem;
	text-align: center;
	border-radius: var(--wp--custom--radius--large);
	border: 1px solid transparent;
	box-shadow: var(--wp--custom--shadow--card);
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
	overflow: hidden;
	transition: transform 200ms ease, border-color 200ms ease, background-color 200ms ease;
}

.fc-cat::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	height: 3px;
	width: 100%;
	background: var(--fc-cat-accent);
}

.fc-cat.c1 {
	background-color: var(--wp--custom--tile--peach);
	--fc-cat-accent: #ff8c42;
}

.fc-cat.c2 {
	background-color: var(--wp--custom--tile--mint);
	--fc-cat-accent: #5fd0b4;
}

.fc-cat.c3 {
	background-color: var(--wp--custom--tile--sky);
	--fc-cat-accent: #5aa9e6;
}

.fc-cat.c4 {
	background-color: var(--wp--custom--tile--lavender);
	--fc-cat-accent: #b79bff;
}

.fc-cat.c5 {
	background-color: var(--wp--custom--tile--sun);
	--fc-cat-accent: #ffc24b;
}

.fc-cat.c6 {
	background-color: var(--wp--custom--tile--pink);
	--fc-cat-accent: #ff8fb3;
}

.fc-cat:hover {
	transform: translateY(-4px);
	border-color: var(--fc-cat-accent);
}

/* De tegel heeft `overflow: hidden`, dus een outline met positieve offset
   wordt afgeknipt. Naar binnen halen in plaats van de overflow opgeven. */
.fc-cat:focus-visible {
	outline: 3px solid var(--wp--preset--color--contrast);
	outline-offset: -3px;
}

.fc-cat .emoji,
.fc-cat .icon {
	position: static;
	display: block;
	margin: 0 0 0.35rem;
	font-size: 2rem;
	line-height: 1;
	opacity: 0.95;
}

.fc-cat .icon {
	width: 2rem;
	height: 2rem;
	color: var(--wp--preset--color--contrast);
}

.fc-cat .icon svg,
.fc-cat .icon img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.fc-cat .icon svg {
	fill: currentColor;
}

.fc-cat h3 {
	margin: 0;
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 600;
}

.fc-cat > span:not(.emoji):not(.icon) {
	color: var(--wp--preset--color--contrast-2);
	font-size: 0.74rem;
	font-weight: 500;
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) .fc-cat {
		background-color: var(--wp--preset--color--base-2);
		border-color: var(--wp--preset--color--border);
		box-shadow: none;
	}

	:root:not([data-theme="light"]) .fc-cat:hover {
		background-color: var(--wp--custom--surface--warm);
		border-color: var(--fc-cat-accent);
	}
}

:root[data-theme="dark"] .fc-cat {
	background-color: var(--wp--preset--color--base-2);
	border-color: var(--wp--preset--color--border);
	box-shadow: none;
}

:root[data-theme="dark"] .fc-cat:hover {
	background-color: var(--wp--custom--surface--warm);
	border-color: var(--fc-cat-accent);
}

@media (max-width: 900px) {
	.fc-cats {
		grid-template-columns: repeat(3, 1fr);
	}
}

@media (max-width: 520px) {
	.fc-cats {
		grid-template-columns: repeat(2, 1fr);
	}
}


/* ==========================================================================
   11. Productkaart (.fc-card)
   ==========================================================================
   Het meest hergebruikte onderdeel: home, shop en "gerelateerd" op de
   productpagina. Markupafspraak (afwijking 13): de kaart is een link en de
   "+"-knop is een echte `<button>` daarbuiten — een knop binnen een link is
   geen geldige HTML. De stijl hieronder werkt in beide gevallen, en de
   hover-lift hangt ook aan `:focus-within` zodat toetsenbordgebruikers
   dezelfde terugkoppeling krijgen. */

.fc-card {
	display: flex;
	flex-direction: column;
	position: relative;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
	text-decoration: none;
	transition: transform 200ms ease;
}

.fc-card:hover,
.fc-card:focus-within {
	transform: translateY(-5px);
}

.fc-card .ph {
	position: relative;
	aspect-ratio: 1 / 1;
	/* Warm vlak als placeholder zolang er geen afbeelding is — een leeg wit
	   vierkant leest als een laadfout. */
	background-color: var(--wp--custom--surface--warm);
	overflow: hidden;
}

.fc-card .ph img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform var(--wp--custom--transition--slow) ease;
}

.fc-card:hover .ph img,
.fc-card:focus-within .ph img {
	transform: scale(1.06);
}

.fc-card .tag {
	position: absolute;
	top: 0.75rem;
	left: 0.75rem;
	padding: 4px 0.625rem;
	background-color: var(--wp--preset--color--primary);
	/* Regel P1 (afwijking 2): was wit in de bron. */
	color: var(--wp--preset--color--base);
	border-radius: var(--wp--custom--radius--pill);
	font-size: var(--wp--custom--font-size--tag);
	font-weight: 800;
	line-height: 1.4;
}

/* Favoriet. Dit is een knop en hoort er een te zijn (`<button aria-pressed>`
   met een tekstueel label, afwijking 14). 44×44 in plaats van de 34×34 uit de
   bron: raakdoel (afwijking 8). */
.fc-card .fav {
	position: absolute;
	top: 0.625rem;
	right: 0.625rem;
	width: 44px;
	min-height: 44px; /* Regel S1. */
	display: grid;
	place-items: center;
	padding: 0;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	/* Rand op `contrast-2` (regel R2) en niet op de modusschakelaar uit §1:
	   deze knop ligt op een productfoto, en tegen een lichte foto valt een
	   witte cirkel met alleen een schaduw weg. */
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--pill); /* Regel S2. */
	box-shadow: var(--wp--custom--shadow--card);
	font-size: 0.9rem;
	line-height: 1;
	cursor: pointer;
	transition: color var(--wp--custom--transition--fast) ease;
}

.fc-card .fav:hover,
.fc-card .fav[aria-pressed="true"] {
	color: var(--wp--preset--color--primary);
}

/* Deze knop ligt op een productfoto, en een ring met positieve offset landt
   dus op onbekende beeldinhoud — daar valt geen contrast voor te garanderen.
   Naar binnen halen zet hem op het eigen `base-2`-vlak: 13,46:1 in licht,
   14,54:1 in donker, ongeacht de foto. */
.fc-card .fav:focus-visible {
	outline-offset: -3px;
}

.fc-card .body {
	display: flex;
	flex: 1;
	flex-direction: column;
	gap: 6px;
	padding: var(--wp--preset--spacing--30) 1rem 1.125rem;
}

.fc-card .cat-lbl {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro);
	font-weight: 700;
	letter-spacing: 0.045em;
	text-transform: uppercase;
}

.fc-card .body h3 {
	margin: 0;
	font-size: var(--wp--preset--font-size--medium);
	font-family: var(--wp--preset--font-family--heading);
}

/* De titel ís de kaartlink (afwijking 13: de kaart zelf mag geen <a> zijn,
   want er staat een knop in). Hij hoort er dus uit te zien als de kop en niet
   als een losse link — de hele kaart licht al op bij hover en focus. De
   onderstreping komt terug op hover, zodat de link niet alleen op kleur te
   herkennen is (WCAG 1.4.1). */
.fc-card .body h3 a {
	color: inherit;
	text-decoration: none;
}

.fc-card .body h3 a:hover {
	color: var(--wp--preset--color--primary);
	text-decoration: underline;
}

.fc-card .buy {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--20);
}

/* De "+"-knop. Rust op `secondary` met `primary-contrast` (regel P2); bij
   hover wordt het vlak `primary` en schuift de tekst mee naar `base` (P1). */
.fc-card .add {
	width: 40px;
	min-height: 40px; /* Regel S1. */
	display: grid;
	place-items: center;
	padding: 0;
	background-color: var(--wp--preset--color--secondary);
	color: var(--wp--preset--color--primary-contrast);
	border: 0;
	border-radius: var(--wp--custom--radius--small);
	font-size: 1.2rem;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	transition: background-color var(--wp--custom--transition--fast) ease,
		color var(--wp--custom--transition--fast) ease;
}

.fc-card:hover .add,
.fc-card .add:hover {
	background-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
}

/* --- Uitverkocht ---------------------------------------------------------
   Niet in de bron. De kaart blijft klikbaar (de klant wil kunnen zien wat er
   normaal is), maar hij tilt niet meer op en de koopknop is dood. Nooit
   alleen kleur: de tag zegt het ook. */

.fc-card.is-uitverkocht:hover,
.fc-card.is-uitverkocht:focus-within {
	transform: none;
}

.fc-card.is-uitverkocht .ph img {
	opacity: 0.7;
}

.fc-card.is-uitverkocht:hover .ph img {
	transform: none;
}

.fc-card.is-uitverkocht .tag {
	background-color: var(--wp--preset--color--contrast-2);
	/* `base` op `contrast-2`: 6,14:1 in licht, 8,52:1 in donker. */
	color: var(--wp--preset--color--base);
}

.fc-card.is-uitverkocht .add {
	background-color: var(--wp--preset--color--border);
	color: var(--wp--preset--color--contrast-2);
	cursor: not-allowed;
}


/* ==========================================================================
   12. Productgrid (.fc-prods)
   ========================================================================== */

.fc-prods {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--40);
}

@media (max-width: 900px) {
	.fc-prods {
		grid-template-columns: repeat(2, 1fr);
	}
}

.fc-center {
	margin-top: 2.25rem;
	text-align: center;
}


/* ==========================================================================
   13. Prijsweergave
   ==========================================================================
   Drie maten, alle drie kopfont / 600 / `primary`. In de donkere modus blijft
   de prijs `primary` (7,22:1) — Optie 3 maakte hem wit, maar met het lichtere
   koraalrood is dat niet nodig. */

.fc-card .fc-price,
.fc-pinfo .fc-price,
.fc-cart-row .sub,
.fc-totals .grand span:last-child {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	color: var(--wp--preset--color--primary);
}

.fc-card .fc-price {
	font-size: var(--wp--preset--font-size--large);
}

.fc-pinfo .fc-price {
	/* Bron: 2rem vast. Op `xx-large` gezet met een eigen regel, zodat de prijs
	   met de rest van de schaal meeschaalt (afwijking 24). */
	font-size: var(--wp--preset--font-size--xx-large);
	margin: 0 0 1.125rem;
}

/* --- Afgeprijsd ----------------------------------------------------------
   Niet in de bron; dit is de WooCommerce-markup `<del>` + `<ins>`. De oude
   prijs is doorgestreept én gedempt én kleiner: doorhalen alleen is voor een
   schermlezer niet altijd hoorbaar, dus de markup hoort er een verborgen
   "Oorspronkelijke prijs"-label bij te zetten. */

.fc-price del,
.fc-price .woocommerce-Price-amount ~ del {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;
	text-decoration: line-through;
	margin-right: var(--wp--preset--spacing--20);
}

.fc-price ins {
	text-decoration: none;
	color: var(--wp--preset--color--primary);
}


/* ==========================================================================
   14. Formuliervelden
   ==========================================================================
   Twee veranderingen ten opzichte van de bron (afwijkingen 6 en 7):
   1. De rand is `contrast-2`, niet `border` — regel R2. `border` staat op
      1,22:1 en haalt WCAG 1.4.11 niet.
   2. De bron zette `outline: none` op focus en wisselde in plaats daarvan de
      randkleur. Dat is een 2.4.7-fout, en de wissel zelf haalde de vereiste
      3:1-verandering niet. De outline uit §2 doet het werk; de rand blijft
      staan. */

.fc-form .field {
	margin-bottom: 1rem;
}

.fc-form label {
	display: block;
	margin-bottom: 6px;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-form input,
.fc-form select,
.fc-form textarea {
	width: 100%;
	padding: 0.8125rem 1rem;
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--medium);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--medium);
	transition: border-color var(--wp--custom--transition--fast) ease;
}

.fc-form textarea {
	min-height: 150px;
	resize: vertical;
}

/* De browserstandaard voor placeholders zit vaak onder AA. `contrast-2` haalt
   6,14:1 op `base` en schuift in de donkere modus mee. */
.fc-form ::placeholder {
	color: var(--wp--preset--color--contrast-2);
	opacity: 1;
}

/* --- Foutstatus ----------------------------------------------------------
   Ontbreekt volledig in de bron. Kleur alleen is niet genoeg: het veld hoort
   `aria-invalid="true"` te krijgen en via `aria-describedby` naar de melding
   te wijzen. De 2px rand zorgt dat de fout ook zonder kleurwaarneming
   opvalt. */

.fc-form input[aria-invalid="true"],
.fc-form select[aria-invalid="true"],
.fc-form textarea[aria-invalid="true"] {
	border-width: 2px;
	border-color: var(--wp--preset--color--primary);
}

.fc-form .fout {
	display: block;
	margin-top: 6px;
	color: var(--wp--preset--color--primary);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

/* --- Uitgeschakeld -------------------------------------------------------- */

.fc-form input[disabled],
.fc-form select[disabled],
.fc-form textarea[disabled] {
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--contrast-2);
	cursor: not-allowed;
}


/* ==========================================================================
   15. Pills en filters (.fc-pills)
   ==========================================================================
   Ook de variatiekiezer (kleur/maat) gebruikt deze vorm — zie visueel.md §6.
   Voor die toepassing horen het `<button>`s met `aria-pressed`, niet links. */

.fc-pills {
	display: flex;
	flex-wrap: wrap;
	gap: 0.625rem;
	margin-bottom: 1.875rem;
	padding: 0;
	list-style: none;
}

.fc-pills a,
.fc-pills button {
	padding: 0.5625rem 1.125rem;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	/* Bedienbaar element: rand op `contrast-2` (regel R2). */
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	text-decoration: none;
	cursor: pointer;
	transition: color var(--wp--custom--transition--fast) ease,
		background-color var(--wp--custom--transition--fast) ease,
		transform var(--wp--custom--transition--fast) ease;
}

.fc-pills a:hover,
.fc-pills button:hover {
	transform: translateY(-2px);
	color: var(--wp--preset--color--primary);
}

/* Actief filter. `aria-current`/`aria-pressed` staat erbij zodat de aanduiding
   niet alleen visueel is; de klasse blijft voor markup die dat (nog) niet
   heeft. */
.fc-pills a.active,
.fc-pills a[aria-current="page"],
.fc-pills button.active,
.fc-pills button[aria-pressed="true"] {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	/* Regel P1. */
	color: var(--wp--preset--color--base);
}

.fc-pills a.active:hover,
.fc-pills button.active:hover,
.fc-pills button[aria-pressed="true"]:hover {
	color: var(--wp--preset--color--base);
}

/* De tweede rij: hetzelfde ding, een niveau lager.
   Zonder zichtbaar verschil lezen de twee rijen als zestien gelijkwaardige
   knoppen, en dan ben je juist de hiërarchie kwijt die je wilde tonen. Geen
   schaduw, een lichtere rand en iets kleiner is genoeg — dezelfde vorm, minder
   nadruk. */
.fc-subpills {
	margin-top: -1rem;
	margin-bottom: 1.875rem;
}

.fc-subpills a {
	padding: 0.4375rem 0.9375rem;
	background-color: transparent;
	border-color: var(--wp--preset--color--border);
	box-shadow: none;
	font-size: var(--wp--custom--font-size--label, 0.78rem);
	font-weight: 600;
}

.fc-subpills a:hover {
	background-color: var(--wp--preset--color--base-2);
}

/* Op een primary-vlak hoort `base`; die wisselt mee met de donkere modus
   (valkuil 11). */
.fc-subpills a.active,
.fc-subpills a[aria-current="page"] {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
	box-shadow: none;
}

/* Op een telefoon vouwt negen pillen om naar vier regels, en dan sta je alsnog
   naar navigatie te kijken in plaats van naar producten. Eén strook die je opzij
   schuift houdt het op één regel.

   `flex: none` moet erbij: in een scrollende flexrij krimpen de pillen anders
   tot hun tekst breekt. En een beetje lucht rechts, zodat de laatste pil niet
   tegen de rand plakt en je ziet dat er meer is. */
@media (max-width: 600px) {
	.fc-subpills {
		flex-wrap: nowrap;
		overflow-x: auto;
		padding-right: 1.25rem;
		overscroll-behavior-x: contain;
		scrollbar-width: none;
	}

	.fc-subpills::-webkit-scrollbar {
		display: none;
	}

	.fc-subpills a {
		flex: none;
	}
}


/* ==========================================================================
   16. Paginering (.fc-pager)
   ========================================================================== */

.fc-pager {
	display: flex;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	margin-top: var(--wp--preset--spacing--60);
	padding: 0;
	list-style: none;
}

.fc-pager a,
.fc-pager span {
	min-width: 44px;
	min-height: 44px; /* Regel S1; `min-width` stond er al. */
	display: grid;
	place-items: center;
	padding-inline: var(--wp--preset--spacing--20);
	border-radius: var(--wp--custom--radius--medium);
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	text-decoration: none;
}

.fc-pager a {
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	box-shadow: var(--wp--custom--shadow--card);
	transition: color var(--wp--custom--transition--fast) ease,
		background-color var(--wp--custom--transition--fast) ease,
		transform var(--wp--custom--transition--fast) ease;
}

.fc-pager a:hover {
	transform: translateY(-2px);
	color: var(--wp--preset--color--primary);
}

/* `[aria-current]` zonder elementnaam, want de huidige pagina is geen link:
   `paginate_links()` levert daar een `<span class="page-numbers current">` voor.
   Met `span.active` uit de eerste opzet bleef die ongemarkeerd — en dan is de
   enige aanduiding van waar je bent, weg. */
.fc-pager a.active,
.fc-pager [aria-current="page"],
.fc-pager span.active {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
}

/* De "…"-cel bij veel pagina's (visueel.md §6): geen vlak, geen rand — het is
   geen bestemming, dus het moet er ook niet als knop uitzien. */
.fc-pager .dots {
	background: none;
	border: 0;
	box-shadow: none;
	color: var(--wp--preset--color--contrast-2);
}


/* ==========================================================================
   17. Subhero en kruimelpad (.fc-subhero / .fc-bc)
   ========================================================================== */

.fc-subhero {
	background-image: var(--wp--custom--gradient--warm);
	border-bottom: 1px solid var(--wp--preset--color--border);
}

.fc-subhero .fc-wrap {
	padding: 2.125rem var(--wp--preset--spacing--40);
}

.fc-subhero h1 {
	/* Subpagina-h1 op `xx-large`; de bron had hier drie verschillende clamps
	   (afwijking 23). */
	font-size: var(--wp--preset--font-size--xx-large);
	margin: 0 0 6px;
}

/* Kruimelpad. Hoort semantisch een `<nav aria-label="Kruimelpad">` met een
   `<ol>` te zijn en de laatste kruimel `aria-current="page"` (afwijking 15).
   De opsomming wordt hier plat gemaakt; het scheidingsteken komt uit CSS
   zodat het niet in de toegankelijke naam terechtkomt. */
.fc-bc {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-bc ol {
	display: flex;
	flex-wrap: wrap;
	gap: 0.375rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.fc-bc li:not(:last-child)::after {
	content: " /";
	margin-left: 0.375rem;
}

.fc-bc a {
	color: var(--wp--preset--color--primary);
	text-decoration: none;
}

/* Onderstrepen bij hover, niet een kleurwissel: de link is al rood en een
   tweede rood zou geen waarneembaar verschil geven. */
.fc-bc a:hover {
	text-decoration: underline;
}


/* --- Winkelraamwerk ------------------------------------------------------
   `.fc-shopwrap`, `.fc-shophead` en `.count` staan wél in de ontwerpbron
   (voorbeeld-shop.html) maar hadden hier nul regels — de component-CSS volgde
   visueel.md §5, en dat is een componenteninventaris, geen paginaraamwerk.
   Waarden uit de bron: padding 44px 0 64px, kop 18px onderruimte, aantal in
   0,9rem/700 op `contrast-2`. */

.fc-shopwrap {
	padding-block: var(--wp--preset--spacing--60) var(--wp--preset--spacing--70);
}

/* De bron heeft hier alleen het aantal. De sorteerkeuze staat er in de
   gebouwde site naast, want die weghalen zou functieverlies zijn (zie
   woocommerce/loop/orderby.php). Vandaar flex met ruimte ertussen in plaats
   van een blok. */
.fc-shophead {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--30);
	margin-bottom: var(--wp--preset--spacing--40);
}

/* WooCommerce zet hier altijd een meldingenhouder neer, ook als er niets te
   melden is. Die telt als flexitem mee en duwde het aantal met
   `space-between` naar de verkeerde kant zodra de regel afbrak. */
.fc-shophead .woocommerce-notices-wrapper:empty {
	display: none;
}

.fc-shophead .count {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

/* De sorteerkeuze erft de veldstijl uit §14; alleen de breedte moet terug,
   want die velden staan daar op volle breedte in een formulier. */
.fc-sorteer {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--20);
	margin: 0;
}

.fc-sorteer select {
	width: auto;
	min-width: 13rem;
}

/* Categorietegels en productkaarten staan in hetzelfde raster: WooCommerce
   toont bij `category_archive_display = both` eerst de subcategorieën en daarna
   de producten, in dezelfde loop. Een tegel is lager dan een kaart, dus zonder
   deze regel rekt de laatste tegel mee tot kaarthoogte en staat er een leeg
   gekleurd vlak in de rij. */
.fc-prods .fc-cat {
	align-self: start;
	min-height: 8.5rem;
}


/* ==========================================================================
   18. Story-band (.fc-story) en highlight (.fc-highlight)
   ========================================================================== */

.fc-story {
	display: grid;
	grid-template-columns: 1.2fr 1fr;
	align-items: center;
	gap: var(--wp--preset--spacing--50);
	padding: var(--wp--preset--spacing--60);
	background-image: var(--wp--custom--gradient--warm);
	border-radius: var(--wp--custom--radius--x-large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-story h2 {
	font-size: var(--wp--preset--font-size--x-large);
	margin: 0 0 0.875rem;
}

.fc-story p {
	margin: 0 0 0.75rem;
	color: var(--wp--preset--color--contrast-2);
}

.fc-story .art {
	font-size: 8rem;
	line-height: 1;
	text-align: center;
}

@media (max-width: 760px) {
	.fc-story {
		grid-template-columns: 1fr;
		padding: 2.125rem;
		text-align: center;
	}

	.fc-story .art {
		font-size: 5rem;
	}
}

/* Dezelfde gradiënt in het klein, binnen een panel. */
.fc-highlight {
	display: flex;
	align-items: flex-start;
	gap: 0.75rem;
	margin-top: var(--wp--preset--spacing--20);
	padding: 1rem 1.125rem;
	background-image: var(--wp--custom--gradient--warm);
	border-radius: var(--wp--custom--radius--medium);
	font-size: var(--wp--preset--font-size--small);
}

.fc-highlight b {
	color: var(--wp--preset--color--contrast);
}


/* ==========================================================================
   19. Braderie-agenda (.fc-events / .fc-ev) en agenda-widget (.fc-widget)
   ========================================================================== */

.fc-events {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--40);
	margin-top: var(--wp--preset--spacing--20);
}

.fc-ev {
	padding: 1.25rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	/* De accentrand is het enige gekleurde randje in het hele ontwerp; hij
	   staat los van de rand-in-donker uit §1 en blijft dus altijd staan. */
	border-left: 5px solid var(--wp--preset--color--primary);
	border-radius: var(--wp--custom--radius--medium);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-ev .date {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: 1.05rem;
	color: var(--wp--preset--color--primary);
}

.fc-ev .place {
	font-weight: 700;
	color: var(--wp--preset--color--contrast);
}

/* --- Afgelopen evenement -------------------------------------------------

   De agenda vult zichzelf aan met wat net geweest is, zodat de sectie niet
   hele maanden leeg staat. Dan moet je er wél aan zien dat het voorbij is.

   Gedempt, maar niet grijs-op-grijs: de plaatsnaam blijft `contrast-2` op wit
   (7,1:1) en het label staat op het warme vlak (6,8:1). Het accentrandje gaat
   van `primary` naar de randkleur — dat is het verschil dat je in een rij
   kaarten meteen ziet, en het label zegt het daarnaast gewoon in woorden.
   ------------------------------------------------------------------------ */

.fc-ev--voorbij {
	border-left-color: var(--wp--preset--color--border);
	box-shadow: none;
}

.fc-ev--voorbij .date,
.fc-ev--voorbij .place {
	color: var(--wp--preset--color--contrast-2);
}

.fc-ev__geweest {
	display: inline-block;
	margin-top: 0.625rem;
	padding: 0.15rem 0.55rem;
	background-color: var(--wp--custom--surface--warm);
	border-radius: var(--wp--custom--radius--pill);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro, 0.72rem);
	font-weight: 800;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

/* Klikbare kaart. `.fc-ev` bestaat in twee smaken en dat is geen slordigheid:
   de evenementen uit de CPT hebben een eigen pagina en zijn een `<a>`, de
   terugvalregels uit de Customizer hebben die niet en blijven een `<div>`. Alle
   opmaak hierboven geldt voor allebei; hieronder staat alleen wat een link
   extra nodig heeft.

   Geen aparte focusregel: regel F1 uit §2 pakt elke `a:focus-visible` al, en
   de kaart staat op `base-2` waar die ring ruim boven de 15:1 blijft. */
a.fc-ev {
	display: block;
	color: inherit;
	text-decoration: none;
	transition: transform var(--wp--custom--transition--base) ease;
}

/* Zelfde optilbeweging als de productkaart (§11), zodat "hier kun je op
   klikken" op de hele site hetzelfde signaal is. Bewust géén `border-color` in
   de hover: `.fc-ev` zet een losse `border-left` in `primary`, en de verkorte
   eigenschap zou juist dat accentrandje overschrijven. */
a.fc-ev:hover {
	transform: translateY(-4px);
}

/* Variant voor de evenementpagina: daar staan er hooguit drie andere
   evenementen naast elkaar en soms maar één. Een vast raster van vier kolommen
   levert dan een smal kaartje met een half scherm leegte ernaast. */
.fc-events.auto {
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

@media (max-width: 820px) {
	.fc-events {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* --- Widgetvariant ------------------------------------------------------- */

.fc-widget {
	margin-bottom: var(--wp--preset--spacing--40);
	padding: 1.625rem 1.75rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-widget h3 {
	margin: 0 0 4px;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
}

.fc-widget .bar {
	width: 52px;
	height: 4px;
	margin: 0 0 1rem;
	background-color: var(--wp--preset--color--primary);
	border-radius: var(--wp--custom--radius--pill);
}

.fc-widget ul {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.fc-widget li {
	display: flex;
	align-items: baseline;
	gap: var(--wp--preset--spacing--30);
	font-weight: 700;
}

.fc-widget li .d {
	min-width: 74px;
	color: var(--wp--preset--color--primary);
	font-family: var(--wp--preset--font-family--heading);
}

.fc-widget li span:last-child {
	color: var(--wp--preset--color--contrast-2);
}


/* ==========================================================================
   20. Nieuwsbriefblok (.fc-news)
   ========================================================================== */

.fc-news {
	padding: var(--wp--preset--spacing--60);
	background-color: var(--wp--preset--color--secondary);
	color: var(--wp--preset--color--primary-contrast);
	border: 1px solid var(--funcrea--band-border);
	border-radius: var(--wp--custom--radius--x-large);
	text-align: center;
}

.fc-news h2 {
	margin: 0 0 var(--wp--preset--spacing--20);
	color: var(--wp--preset--color--primary-contrast);
	font-size: var(--wp--preset--font-size--x-large);
}

.fc-news p {
	max-width: var(--wp--custom--measure--lead);
	margin: 0 auto 1.5rem;
	/* Regel P2 met wat lucht eraf; op 88% blijft de verhouding ruim boven AA
	   en het schuift met de donkere band mee. De bron zette hier een vaste
	   crèmetint neer, die in de donkere modus zou blijven staan. */
	color: var(--wp--preset--color--primary-contrast);
	opacity: 0.88;
}

.fc-news form {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.625rem;
	max-width: 440px;
	margin-inline: auto;
}

.fc-news input {
	flex: 1;
	min-width: 220px;
	padding: 0.875rem 1.25rem;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	/* De bron heeft hier `border: 0`. In de lichte modus valt het witte veld
	   nog op tegen de donkere band, maar in de donkere modus liggen `base-2`
	   en `secondary` op 1,15:1 en verdwijnt het veld. Regel R2 lost dat op. */
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--pill);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--medium);
}

.fc-news ::placeholder {
	color: var(--wp--preset--color--contrast-2);
	opacity: 1;
}

/* Terugkoppeling na verzenden ontbreekt in de bron. Beide meldingen horen in
   een `aria-live="polite"`-regio te staan, anders hoort een schermlezer het
   niet. */
.fc-news .melding {
	display: block;
	margin-top: 0.75rem;
	font-weight: 700;
}

.fc-news .melding.gelukt {
	color: var(--wp--preset--color--accent);
}

/* Fout op de donkere band: `accent` is hier de leesbaarste waarschuwkleur in
   beide modi; `primary` haalt op `secondary` te weinig. De tekst zegt zelf
   wat er mis is — kleur is nooit de enige drager. */
.fc-news .melding.fout {
	color: var(--wp--preset--color--accent);
	text-decoration: underline;
}


/* ==========================================================================
   21. Footer (footer.fc-site)
   ==========================================================================
   Let op: csbn-base/parts/footer.html gebruikt een `secondary`-vlak met
   `primary-contrast`. Dit ontwerp wil een licht warm vlak met `contrast`
   (afwijking 33) — de template-part moet dus in het child overschreven
   worden, anders vecht deze CSS met de parent-markup. */

footer.fc-site {
	margin-top: var(--wp--preset--spacing--70);
	padding-top: var(--wp--preset--spacing--60);
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--contrast);
}

/* Vier kolommen in het ontwerp: merk (breed) plus drie linklijsten. Maar een
   kolom zonder aangewezen menu wordt niet uitgevoerd, en met een vaste
   `1.4fr 1fr 1fr 1fr` bleef er dan lege ruimte staan. Daarom de merkkolom vast
   en de rest als autokolommen: bij drie lijsten precies het ontwerp, bij minder
   verdeelt het zich netjes. */
.fc-fgrid {
	display: grid;
	grid-template-columns: 1.4fr;
	grid-auto-flow: column;
	grid-auto-columns: 1fr;
	gap: 1.875rem;
}

footer.fc-site h4 {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
	font-weight: 600;
}

footer.fc-site ul {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--20);
	margin: 0;
	padding: 0;
	list-style: none;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--contrast-2);
}

footer.fc-site ul a {
	color: inherit;
	text-decoration: none;
	transition: color var(--wp--custom--transition--fast) ease;
}

footer.fc-site ul a:hover {
	color: var(--wp--preset--color--primary);
	text-decoration: underline;
}

.fc-fbrand img {
	height: 92px;
	width: auto;
}

.fc-fbrand p {
	max-width: 280px;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

.fc-fbot {
	margin-top: var(--wp--preset--spacing--50);
	padding-block: 1.125rem;
	border-top: 1px solid var(--wp--preset--color--border);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	text-align: center;
}

/* De cookie-instellingenlink staat hier (`[csbn_cookie_settings]`). De
   linklijsten in de kolommen erboven hebben een eigen regel die deze niet
   raakt, dus hij heeft er zelf een nodig — anders is het een kale blauwe
   browserlink onder een verzorgde footer. */
.fc-fbot a {
	color: inherit;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.fc-fbot a:hover {
	color: var(--wp--preset--color--primary);
}

@media (max-width: 760px) {
	.fc-fgrid {
		/* Twee kolommen naast elkaar; de autokolomstand van hierboven moet dan
		   terug naar rijen, anders blijft alles op één regel staan. */
		grid-template-columns: 1fr 1fr;
		grid-auto-flow: row;
	}

	.fc-fbrand img {
		height: 78px;
	}
}


/* ==========================================================================
   22. Productdetail
   ========================================================================== */

.fc-product {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 2.75rem;
	padding-block: var(--wp--preset--spacing--60);
}

@media (max-width: 900px) {
	.fc-product {
		grid-template-columns: 1fr;
		gap: 1.75rem;
	}
}

/* --- Galerij ------------------------------------------------------------- */

/* De hoofdafbeelding is een link naar het volledige bestand (FUNC-28), zodat
   vergroten ook werkt zonder JS. `product.js` vangt de klik af en toont hem in
   de <dialog> hieronder. De <div>-variant blijft bestaan wanneer er geen
   afbeelding is, of wanneer het volledige bestand niet op te halen is.

   `text-decoration` en `color` staan er expliciet in: dit is nu een <a>, dus
   hij erft de linkkleur uit theme.json van csbn-base en de onderstreping van de
   browser. Er staat alleen een <img> in, maar de witruimte eromheen valt wél
   binnen de regel — één regel hier scheelt dat uitzoeken. */
.fc-gallery a.main-img {
	display: block;
	color: inherit;
	text-decoration: none;
	cursor: zoom-in;
}

.fc-gallery .main-img {
	aspect-ratio: 1 / 1;
	background-color: var(--wp--custom--surface--warm);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
}

.fc-gallery .main-img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fc-thumbs {
	display: flex;
	gap: var(--wp--preset--spacing--30);
	margin-top: var(--wp--preset--spacing--30);
}

/* De miniaturen wisselen de hoofdafbeelding. In de bron gebeurt dat via een
   inline `onclick`; het horen `<button>`s met een echte listener, een
   tekstueel label en `aria-pressed` te zijn (afwijking 17). */
.fc-thumbs button {
	flex: 1;
	aspect-ratio: 1 / 1;
	padding: 0;
	background-color: var(--wp--custom--surface--warm);
	/* 2px transparant, zodat de actieve staat de rand alleen inkleurt en de
	   miniatuur niet verspringt. */
	border: 2px solid transparent;
	border-radius: var(--wp--custom--radius--medium);
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
	cursor: pointer;
	transition: border-color var(--wp--custom--transition--fast) ease;
}

.fc-thumbs button:hover,
.fc-thumbs button.active,
.fc-thumbs button[aria-pressed="true"] {
	border-color: var(--wp--preset--color--primary);
}

.fc-thumbs img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* --- Vergroting (FUNC-28) ------------------------------------------------
   Tweede <dialog> in dit theme; zelfde afspraken als het mobiele menu in §5b.
   De browser doet Escape, de focus-trap en de sluier, dit blok doet alleen de
   vorm. Standaardstijl van <dialog> eerst uitzetten. */

.fc-lightbox {
	/* Uit de standaardstijl van <dialog>. */
	padding: 0;
	border: 0;
	background: transparent;

	/* De foto mag het venster niet vullen: eromheen moet zichtbaar blijven dat
	   er iets áchter ligt, anders lijkt het een nieuwe pagina. */
	max-width: 92vw;
	max-height: 92vh;
	overflow: visible;
}

.fc-lightbox::backdrop {
	/* Zelfde sluier als het mobiele menu, alleen dieper: hieronder ligt een
	   pagina met veel warm wit en die zou door een lichtere sluier heen blijven
	   trekken. Donker in beide modi — de sluier ligt achter een foto, niet
	   achter tekst, dus hij hoeft niet om te klappen. */
	background-color: rgba(0, 0, 0, 0.75);
}

.fc-lightbox-img {
	display: block;
	max-width: 92vw;
	max-height: 92vh;
	/* Geen `object-fit: cover` zoals de hoofdafbeelding: bijsnijden is precies
	   wat vergroten moest oplossen. */
	width: auto;
	height: auto;
	/* Zichtbare plek tijdens het laden. `width`/`height` komen uit de
	   data-attributen op de link, dus de verhouding staat al vast voordat het
	   bestand binnen is; zonder achtergrond kijk je tot die tijd door de foto
	   heen naar de sluier en lijkt het dialoog leeg. Een volledig bestand is
	   zomaar een paar MB. */
	background-color: var(--wp--custom--surface--warm);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-lightbox-sluit {
	/* Over de foto heen, binnen het venster. `fixed` en niet `absolute`: de
	   <dialog> staat in de top layer en krult mee met de fotomaat, dus een
	   absolute hoek springt per afbeelding. */
	position: fixed;
	top: var(--wp--preset--spacing--30);
	right: var(--wp--preset--spacing--30);
	z-index: 1;
}

/* --- Doorbladeren in de vergroting (FUNC-39) -----------------------------
   Zelfde reden voor `fixed` als bij de sluitknop hierboven: de <dialog> is zo
   groot als de foto erin, dus alles wat aan de <dialog> hangt verspringt bij
   elke andere verhouding. Aan het venster hangen ze stil.

   Alle drie staan ze daarmee buiten de stroom. Dat is hier geen detail: de
   <dialog> is `width: fit-content`, dus een van deze drie in de stroom zou het
   venster breder maken dan de foto. */

.fc-lightbox-vorige,
.fc-lightbox-volgende {
	position: fixed;
	top: 50%;
	/* Op de verticale as gecentreerd, niet op de hoogte van de foto: die
	   verschilt per afbeelding en de knoppen horen stil te staan. */
	transform: translateY(-50%);
	z-index: 1;
}

.fc-lightbox-vorige {
	left: var(--wp--preset--spacing--30);
}

.fc-lightbox-volgende {
	right: var(--wp--preset--spacing--30);
}

.fc-lightbox-tel {
	position: fixed;
	bottom: var(--wp--preset--spacing--30);
	left: 50%;
	transform: translateX(-50%);
	z-index: 1;
	margin: 0;
	/* Dezelfde pil als de knoppen ernaast: zelfde vlak, zelfde rand, zelfde
	   radius. Geen nieuwe kleuren — dit moet leesbaar zijn boven zowel een
	   donkere sluier als een lichte foto, en die combinatie is hierboven al
	   opgelost voor `.fc-icon-btn`. */
	padding: 0.35rem 0.9rem;
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	font-size: var(--wp--custom--font-size--label);
	font-weight: 700;
	/* Geen vaste hoogte, dus regel S1 speelt hier niet: het vak volgt de
	   tekst en groeit vanzelf mee met een ruimere tekstafstand. */
	white-space: nowrap;
}

/* --- Koopinfo ------------------------------------------------------------ */

.fc-pinfo .lbl {
	display: block;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro);
	font-weight: 800;
	letter-spacing: 0.043em;
	text-transform: uppercase;
}

/* --- Variantkeuze --------------------------------------------------------
   De select blijft voor WooCommerce de functionele bron. JS verbergt hem pas
   nadat de gesynchroniseerde, radio-achtige pilknoppen zijn opgebouwd. */

.fc-varianten {
	margin-bottom: var(--wp--preset--spacing--40);
}

.fc-varianten .field {
	margin-bottom: var(--wp--preset--spacing--30);
}

.fc-variant-pills-ready select {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.fc-variant-pills {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--20);
	margin-top: var(--wp--preset--spacing--20);
}

.fc-variant-pills button {
	padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--contrast);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	line-height: 1.2;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	cursor: pointer;
	transition:
		color var(--wp--custom--transition--fast) ease,
		background-color var(--wp--custom--transition--fast) ease,
		border-color var(--wp--custom--transition--fast) ease,
		transform var(--wp--custom--transition--fast) ease;
}

.fc-variant-pills button:hover {
	color: var(--wp--preset--color--primary);
	transform: translateY(-2px);
}

.fc-variant-pills button[aria-checked="true"] {
	color: var(--wp--preset--color--base);
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	transform: none;
}

.fc-variant-pills button[aria-disabled="true"] {
	color: var(--wp--preset--color--contrast-2);
	background-color: var(--wp--preset--color--border);
	border-color: var(--wp--preset--color--border);
	box-shadow: none;
	cursor: not-allowed;
	opacity: 0.7;
	transform: none;
}

.fc-varianten .reset_variations {
	display: inline-block;
	margin-top: var(--wp--preset--spacing--20);
	color: var(--wp--preset--color--primary);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

/* Woo zet deze klasse op de knopcontainer zolang er geen geldige combinatie
   gekozen is. Zonder eigen regel blijft de knop er volledig normaal uitzien en
   klikt de bezoeker tegen niets aan. */
.woocommerce-variation-add-to-cart-disabled .fc-btn {
	opacity: 0.55;
	cursor: not-allowed;
}

/* De prijs van de gekozen variant staat in `.woocommerce-variation-price`;
   die volgt dezelfde opmaak als de productprijs. */
.fc-pinfo .woocommerce-variation-price .price {
	color: var(--wp--preset--color--primary);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--x-large);
	font-weight: 600;
}


/* `.titel` staat er naast `h1` omdat de titel in de koopkolom géén tweede `h1`
   is: die staat al in de subhero. De ontwerpbron zet hem twee keer als `h1` op
   dezelfde pagina, en dan leest een schermlezer de productnaam dubbel voor
   zonder dat er iets bijkomt. Visueel identiek. */
.fc-pinfo h1,
.fc-pinfo .titel {
	margin: var(--wp--preset--spacing--20) 0 0.75rem;
	font-size: var(--wp--preset--font-size--xx-large);
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	line-height: 1.15;
}

.fc-pinfo .desc {
	margin: 0 0 var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--contrast-2);
}

/* --- Aantal-stepper ------------------------------------------------------ */

.fc-qtyrow {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1rem;
	margin-bottom: var(--wp--preset--spacing--20);
}

.fc-qty {
	display: inline-flex;
	align-items: center;
	background-color: var(--wp--preset--color--base-2);
	/* Bedienbaar element: rand op `contrast-2` (regel R2, afwijking 6). */
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
}

/* Regel S1, en hier het scherpst — op béíde assen. `.fc-qty` eromheen staat op
   `overflow: hidden`, dus wat hier buiten de knop valt wordt weggeknipt in
   plaats van dat het zichtbaar overloopt: geen scrollbalk, geen melding, de
   "+" is gewoon weg. Dat stille karakter is de reden dat de breedte hier wél
   meegroeit en bij de andere knoppen niet.

   Let op bij het uitbreiden: `.fc-qty input` hieronder moet juist een váste
   `width` houden. Een `input[type=number]` claimt zonder die breedte ruim
   170px, en dan sprong de koopknop naar de volgende regel. */
.fc-qty button {
	min-width: 46px;
	min-height: 48px;
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
	border: 0;
	font-size: 1.3rem;
	line-height: 1;
	cursor: pointer;
	transition: background-color var(--wp--custom--transition--fast) ease,
		color var(--wp--custom--transition--fast) ease;
}

.fc-qty button:hover {
	background-color: var(--wp--preset--color--primary);
	/* Regel P1. */
	color: var(--wp--preset--color--base);
}

/* De "−" hoort dood te zijn bij aantal 1. Staat niet in de bron; zonder deze
   staat kun je naar 0 klikken zonder dat er iets gebeurt. */
.fc-qty button[disabled] {
	color: var(--wp--preset--color--contrast-2);
	cursor: not-allowed;
}

.fc-qty button[disabled]:hover {
	background-color: transparent;
	color: var(--wp--preset--color--contrast-2);
}

/* De waarde. In de bron een `<span>`; dat moet een `<input type="number">`
   worden of minstens een `aria-live`-regio, anders is de wijziging voor een
   schermlezer onhoorbaar (afwijking 16). De styling dekt beide. */
.fc-qty span,
.fc-qty input {
	min-width: 46px;
	background: none;
	border: 0;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 1.1rem;
	font-weight: 600;
	text-align: center;
}

/* Zonder vaste breedte houdt een `input[type=number]` zijn eigen maat van
   ruim 170px aan; `.fc-qty` werd daardoor zo breed dat de koopknop naar de
   volgende regel sprong. En de eigen pijltjes van de browser kunnen weg: de
   twee knoppen ernaast doen hetzelfde, met een raakdoel van 44px. */
.fc-qty input {
	width: 46px;
	appearance: textfield;
	-moz-appearance: textfield;
}

.fc-qty input::-webkit-outer-spin-button,
.fc-qty input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

/* --- Meta --------------------------------------------------------------- */

.fc-meta {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	margin-top: 1.625rem;
	padding-top: 1.25rem;
	border-top: 1px solid var(--wp--preset--color--border);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
}

.fc-meta b {
	color: var(--wp--preset--color--contrast);
}

.fc-meta .row {
	display: flex;
	align-items: center;
	gap: 0.625rem;
}

/* --- Lange beschrijving en panel ----------------------------------------- */

.fc-longdesc,
.fc-panel {
	padding: 2.125rem 2.25rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-longdesc {
	margin-bottom: 3.5rem;
}

.fc-longdesc h2,
.fc-panel h2 {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--x-large);
}

.fc-longdesc p,
.fc-panel p {
	margin: 0 0 var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--contrast-2);
}

.fc-longdesc ul {
	margin: 0 0 var(--wp--preset--spacing--30);
	padding-left: 1.25rem;
	color: var(--wp--preset--color--contrast-2);
}

.fc-longdesc li {
	margin-bottom: 6px;
}

.fc-panel .lead {
	margin: 0 0 1rem;
	color: var(--wp--preset--color--contrast);
	font-size: 1.1rem;
	font-weight: 700;
}

@media (max-width: 520px) {
	.fc-longdesc,
	.fc-panel {
		padding: 1.625rem var(--wp--preset--spacing--40);
	}
}


/* ==========================================================================
   23. Winkelwagen
   ========================================================================== */

.fc-cart {
	display: grid;
	grid-template-columns: 1fr 340px;
	gap: var(--wp--preset--spacing--50);
	padding-top: var(--wp--preset--spacing--60);
	padding-bottom: var(--wp--preset--spacing--70);
}

@media (max-width: 900px) {
	.fc-cart {
		grid-template-columns: 1fr;
	}
}

.fc-cart-table {
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
}

.fc-cart-row {
	display: grid;
	/* Zes kolommen, niet de vijf uit de bron: daar ontbrak de verwijderknop.
	   Zonder die knop kun je een regel alleen kwijtraken door het aantal op nul
	   te zetten, en de stepper laat dat niet toe. */
	grid-template-columns: 84px 1fr auto auto auto 44px;
	align-items: center;
	gap: 1rem;
	padding: 1rem 1.125rem;
	border-bottom: 1px solid var(--wp--preset--color--border);
}

.fc-cart-row:last-child {
	border-bottom: 0;
}

.fc-cart-row .thumb {
	width: 84px;
	height: 84px;
	background-color: var(--wp--custom--surface--warm);
	border-radius: var(--wp--custom--radius--medium);
	overflow: hidden;
}

.fc-cart-row .thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fc-cart-row .name {
	color: var(--wp--preset--color--contrast);
	font-weight: 800;
}

.fc-cart-row .name small {
	display: block;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--label);
	font-weight: 700;
	letter-spacing: 0.045em;
	text-transform: uppercase;
}

.fc-cart-row .unit {
	color: var(--wp--preset--color--contrast-2);
	font-weight: 700;
	white-space: nowrap;
}

.fc-cart-row .sub {
	min-width: 70px;
	text-align: right;
	white-space: nowrap;
}

/* De aantal-stepper staat in de winkelwagen kleiner. Wél 44px hoog en breed
   houden: raakdoel (afwijking 8). De bron zat op 36×36. */
.fc-cart-row .fc-qty button {
	min-width: 44px; /* Regel S1, beide assen — zie `.fc-qty button`. */
	min-height: 44px;
	font-size: 1.1rem;
}

.fc-cart-row .fc-qty span,
.fc-cart-row .fc-qty input {
	min-width: 34px;
	font-size: var(--wp--preset--font-size--small);
}

.fc-head-row {
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro);
	font-weight: 800;
	letter-spacing: 0.087em;
	text-transform: uppercase;
}

/* Verwijderknop per regel — ontbreekt in de bron. Onopvallend tot je hem
   nodig hebt, maar met een volwaardig raakdoel en een tekstueel label
   (`aria-label="… verwijderen"`), want een kruisje alleen zegt niets. */
/* De selector draagt `.remove` mee, en dat is geen sierletter. WooCommerce
   levert dit element als `<a class="verwijder remove">` en zet er zelf
   `.woocommerce a.remove { width: 1em }` op. Die selector is specifieker dan
   `.fc-cart-row .verwijder`, dus Woo won de breedte terwijl onze `min-height`
   de hoogte won: 24 bij 44, een ovaal met een pilvormige radius. Met `.remove`
   erbij wint deze regel ongeacht de volgorde waarin de stylesheets binnenkomen. */
.fc-cart-row .verwijder.remove {
	width: 44px;
	min-height: 44px; /* Regel S1. */
	/* Een rastercel rekt ook mee met de hoogte van zijn rij; `align-self` haalt
	   hem daaruit en `aspect-ratio` houdt hem vierkant als de inhoud groeit. */
	align-self: center;
	aspect-ratio: 1;
	display: grid;
	place-items: center;
	padding: 0;
	background: none;
	color: var(--wp--preset--color--contrast-2);
	border: 0;
	border-radius: var(--wp--custom--radius--pill); /* Regel S2. */
	font-size: 1.1rem;
	line-height: 1;
	cursor: pointer;
	transition: color var(--wp--custom--transition--fast) ease;
}

.fc-cart-row .verwijder:hover {
	color: var(--wp--preset--color--primary);
}

/* De labels horen bij de gestapelde weergave hieronder. */
.fc-cart-row .lab {
	display: none;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro);
	font-weight: 800;
	letter-spacing: 0.087em;
	text-transform: uppercase;
}

/* Onder 640px stapelt de rij tot een kaart: de kop-rij verdwijnt en de
   verborgen labels nemen zijn functie over. Nette oplossing uit de bron;
   ongewijzigd overgenomen. */
@media (max-width: 640px) {
	.fc-head-row {
		display: none;
	}

	.fc-cart-row {
		grid-template-columns: 70px 1fr;
		grid-auto-rows: auto;
		gap: 6px var(--wp--preset--spacing--30);
		padding: 1rem;
	}

	.fc-cart-row .thumb {
		width: 70px;
		height: 70px;
		/* Vijf rijen naast de foto: naam, prijs, aantal, subtotaal en de
		   verwijderknop. Loopt dit getal niet mee met het aantal cellen, dan
		   schuift de foto over de rijen eronder heen. */
		grid-row: span 5;
	}

	.fc-cart-row .name,
	.fc-cart-row .unit,
	.fc-cart-row .fc-qty,
	.fc-cart-row .sub,
	.fc-cart-row .verwijder {
		grid-column: 2;
		justify-self: start;
		text-align: left;
	}

	.fc-cart-row .sub {
		min-width: 0;
	}

	.fc-cart-row .lab {
		display: inline;
	}
}

/* --- Totalen ------------------------------------------------------------- */

.fc-totals {
	align-self: start;
	padding: 1.75rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-totals h3 {
	margin: 0 0 1rem;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
}

.fc-totals .line {
	display: flex;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--30);
	padding-block: 0.6875rem;
	border-bottom: 1px solid var(--wp--preset--color--border);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-totals .line span:last-child {
	color: var(--wp--preset--color--contrast);
	text-align: right;
}

/* --- Verzendkeuze in het totalenblok -------------------------------------

   Zie `woocommerce/cart/cart-shipping.php`: WooCommerce levert dit als
   tabelrij en dat overleeft een `div` niet. Sinds dat sjabloon is het een
   gewoon blok, en hier krijgt het de vorm van de regels eromheen.
   ------------------------------------------------------------------------ */

.fc-totals .fc-verzending {
	padding-block: 0.6875rem;
	border-bottom: 1px solid var(--wp--preset--color--border);
}

.fc-totals .fc-verzending__kop {
	display: block;
	margin-bottom: 0.5rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-totals .fc-verzending__opties {
	margin: 0;
	padding: 0;
	list-style: none;
}

.fc-totals .fc-verzending__opties li {
	margin: 0;
}

/* De hele regel is aanklikbaar en haalt het raakdoel; een keuzerondje van 13px
   is op een telefoon niet te raken. `accent-color` kleurt het rondje zelf mee
   in de merkkleur — dat is de nette weg, in plaats van het rondje verbergen en
   er een nagemaakt bolletje voor in de plaats zetten. */
.fc-totals .fc-verzending__opties label {
	display: flex;
	align-items: center;
	gap: 0.625rem;
	min-height: 44px;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	cursor: pointer;
}

.fc-totals .fc-verzending__opties input[type="radio"] {
	flex: 0 0 auto;
	width: 1.125rem;
	height: 1.125rem;
	margin: 0;
	accent-color: var(--wp--preset--color--primary);
	cursor: pointer;
}

.fc-totals .fc-verzending__opties input[type="radio"]:focus-visible {
	outline: 3px solid var(--wp--preset--color--contrast);
	outline-offset: 2px;
}

.fc-totals .fc-verzending__noot {
	margin: 0.5rem 0 0;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro, 0.72rem);
	line-height: 1.5;
}

.fc-totals .grand {
	display: flex;
	justify-content: space-between;
	padding: 1rem 0 4px;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
	font-weight: 600;
}

/* Afrekenen is de enige echte actie op deze pagina en hoort de kaart te
   vullen. Hij stond op `width: auto` en kromp daardoor tot zijn tekst, links
   in het blok, terwijl "Verder winkelen" eronder gecentreerd stond — twee
   uitlijningen onder elkaar leest als een fout. */
.fc-totals .fc-btn {
	width: 100%;
	margin-top: 1.25rem;
}

/* Alleen de volle breedte; de hoogte blijft die van elke andere knop op de
   site. Een extra `min-height` maakte er een blok van 85px van. */
.fc-totals .checkout-button {
	display: flex;
}

/* Onder de knop, en gecentreerd omdat de knop nu de volle breedte heeft: dan
   staan ze op één as in plaats van allebei ergens anders. Eigen padding zodat
   het raakdoel 44px haalt — een link van 20px hoog mis je op een telefoon. */
.fc-totals .cont {
	display: block;
	margin-top: 0.75rem;
	padding: 0.75rem 0.5rem;
	color: var(--wp--preset--color--primary);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	text-align: center;
	text-decoration: none;
}

.fc-totals .cont:hover {
	text-decoration: underline;
}

/* "Bereken verzendkosten" is een schakelaar en dus een raakdoel. Gemeten was
   hij 171 x 22: op een telefoon mis je die. */
.fc-totals .shipping-calculator-button {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	color: var(--wp--preset--color--primary);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

/* Lege winkelwagen — ontbreekt in de bron. Zelfde vorm als een "geen
   resultaten"-scherm: uitleg plus een weg terug, nooit een doodlopend blok. */
.fc-cart-leeg {
	max-width: var(--wp--custom--measure--intro);
	margin-inline: auto;
	padding-block: var(--wp--preset--spacing--60);
	color: var(--wp--preset--color--contrast-2);
	text-align: center;
}

.fc-cart-leeg__titel {
	margin: 0 0 var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--x-large);
	font-weight: 600;
}

.fc-cart-leeg .fc-btn {
	margin-top: var(--wp--preset--spacing--40);
}

/* --- Acties onder de winkelwagen ----------------------------------------
   Bijwerken en de kortingscode. Staan niet in de ontwerpbron — die tekende
   alleen de rijen — maar zonder bijwerkknop kan een bezoeker zonder JS zijn
   aantal niet doorgeven, en kortingscodes staan in WooCommerce aan. */

.fc-cart-acties {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--30);
	margin-top: var(--wp--preset--spacing--40);
}

.fc-coupon {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--20);
	margin: 0;
}

.fc-coupon input {
	width: auto;
	min-width: 11rem;
}

/* --- Paginaomhulsel ------------------------------------------------------
   `page.php` van het child. De winkelwagen brengt zijn eigen ruimte mee
   (`.fc-cart`), dus die krijgt hier niets extra's. */

.fc-pagina-inhoud {
	padding-block: var(--wp--preset--spacing--60) var(--wp--preset--spacing--70);
}

.fc-pagina-inhoud > .fc-cart {
	padding-block: 0;
}


/* ===========================================================================
   23b. Over- en contactpagina
   ===========================================================================
   De inhoud van deze pagina's staat als blokken in wp-admin. Dit theme levert
   alleen de layout-klassen, zodat teksten en blokken gewoon door de klant te
   wijzigen blijven via Pagina's. */

.fc-about,
.fc-contact {
	display: grid;
	grid-template-columns: minmax(0, 1.4fr) minmax(280px, 1fr);
	gap: var(--wp--preset--spacing--50);
	align-items: start;
}

.fc-contact {
	grid-template-columns: minmax(0, 1fr) minmax(280px, 0.78fr);
}

.fc-about > *,
.fc-contact > * {
	min-width: 0;
}

.fc-aside {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--40);
}

.fc-aside .fc-widget {
	margin-bottom: 0;
}

.fc-panel > :last-child,
.fc-widget > :last-child,
.fc-highlight > :last-child,
.fc-usp > :last-child {
	margin-bottom: 0;
}

.fc-highlight p {
	margin: 0;
	color: var(--wp--preset--color--contrast-2);
}

.fc-usp h3 {
	margin: 0 0 4px;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--medium);
}

.fc-usp p:not(.ic) {
	margin: 0;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-widget p {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-contact .csbn-form {
	box-sizing: border-box;
	max-width: none;
}

.fc-contact .csbn-form *,
.fc-contact .csbn-form *::before,
.fc-contact .csbn-form *::after {
	box-sizing: border-box;
}

.fc-contact .csbn-form form {
	margin-top: var(--wp--preset--spacing--40);
}

.fc-contact .csbn-form__field {
	margin: 0 0 1rem;
}

.fc-contact .csbn-form__field label {
	display: block;
	margin-bottom: 6px;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-contact .csbn-form .csbn-form__field input,
.fc-contact .csbn-form .csbn-form__field select,
.fc-contact .csbn-form .csbn-form__field textarea {
	display: block;
	width: 100%;
	padding: 0.8125rem 1rem;
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--medium);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--medium);
}

.fc-contact .csbn-form .csbn-form__field textarea {
	min-height: 150px;
	resize: vertical;
}

.fc-contact .csbn-form__required,
.fc-contact .csbn-form__message--error {
	color: var(--wp--preset--color--primary);
}

.fc-contact .csbn-form__message {
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--medium);
	font-weight: 700;
}

.fc-contact .csbn-form__message--ok {
	background-color: var(--wp--custom--tile--mint);
	color: var(--wp--preset--color--contrast);
}

.fc-contact .csbn-form__message--error {
	background-color: var(--wp--custom--tile--peach);
}

.fc-contact .csbn-form__submit {
	margin-bottom: 0;
}

.fc-contact .csbn-form__submit button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 0.78rem 1.15rem;
	background-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--button);
	font-family: inherit;
	font-weight: 800;
	text-decoration: none;
	cursor: pointer;
}

.fc-contact .csbn-form__submit button:hover {
	background-color: var(--wp--custom--primary--hover);
}

@media (max-width: 520px) {
	.fc-contact .csbn-form__submit button {
		width: 100%;
	}
}

@media (max-width: 820px) {
	.fc-about,
	.fc-contact {
		grid-template-columns: 1fr;
	}
}

.fc-contact .fc-widget li .d {
	min-width: 6rem;
}

/* Mobiel lag de consentbanner over de contactgegevens heen. Compact houden,
   zonder de accept/reject-gelijkwaardigheid uit csbn-core te slopen. */
@media (max-width: 480px) {
	.csbn-consent {
		left: 0.75rem;
		right: 0.75rem;
		bottom: 0.75rem;
	}

	.csbn-consent__inner {
		max-height: 42vh;
		overflow: auto;
		padding: 0.85rem 1rem;
		font-size: 0.9rem;
	}

	.csbn-consent__title {
		margin-bottom: 0.2rem;
	}

	.csbn-consent__text {
		margin-bottom: 0.65rem;
		line-height: 1.45;
	}

	.csbn-consent__actions {
		display: grid;
		grid-template-columns: 1fr 1fr;
		gap: 0.5rem;
	}

	.csbn-consent__btn {
		width: 100%;
		padding: 0.55rem 0.75rem;
	}

	.csbn-consent__btn--prefs,
	.csbn-consent__btn--save {
		grid-column: 1 / -1;
	}
}


/* ===========================================================================
   23c. Afrekenen — WooCommerce block-checkout
   ===========================================================================
   Woo's block-checkout rendert geen PHP-template maar React-markup met
   `wc-block-*`-klassen. Daarom hier bewust een smalle, pagina-gebonden laag:
   alleen selectors onder `.wc-block-checkout`, zodat winkelwagen en product-
   templates niet meeliften. */

.wc-block-checkout,
.wc-block-checkout *,
.wc-block-checkout *::before,
.wc-block-checkout *::after {
	box-sizing: border-box;
}

.wc-block-checkout {
	color: var(--wp--preset--color--contrast);
}

@media (min-width: 901px) {
	.wc-block-checkout .wc-block-components-sidebar-layout {
		display: grid;
		grid-template-columns: minmax(0, 1fr) 360px;
		gap: var(--wp--preset--spacing--50);
		align-items: start;
	}

	.wc-block-checkout .wc-block-components-main,
	.wc-block-checkout .wc-block-components-sidebar {
		width: auto;
		max-width: none;
	}

	.wc-block-checkout .wc-block-components-sidebar {
		position: sticky;
		top: var(--wp--preset--spacing--40);
		align-self: start;
	}
}

.wc-block-checkout .wc-block-components-main {
	padding-right: 0;
}

.wc-block-checkout .wc-block-components-sidebar {
	padding: 1.5rem;
}

.wc-block-checkout .wc-block-components-checkout-step {
	margin: 0 0 var(--wp--preset--spacing--50);
	padding: 0;
	border: 0;
}

.wc-block-checkout .wc-block-components-checkout-step__heading {
	margin: 0 0 var(--wp--preset--spacing--30);
}

.wc-block-checkout .wc-block-components-checkout-step__title,
.wc-block-checkout .wc-block-components-title,
.wc-block-checkout .wc-block-components-checkout-order-summary__title-text {
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
}

.wc-block-checkout .wc-block-components-checkout-step__heading-content,
.wc-block-checkout .wc-block-checkout__guest-checkout-notice,
.wc-block-checkout .wc-block-components-product-metadata,
.wc-block-checkout .wc-block-components-product-metadata__description,
.wc-block-checkout .wc-block-components-totals-item__description,
.wc-block-checkout .wc-block-checkout__terms {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

.wc-block-checkout .wc-block-components-text-input input,
.wc-block-checkout .wc-blocks-components-select select,
.wc-block-checkout textarea {
	min-height: 52px;
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--medium);
	font-family: inherit;
}

.wc-block-checkout .wc-block-components-text-input input::placeholder,
.wc-block-checkout textarea::placeholder {
	color: var(--wp--preset--color--contrast-2);
	opacity: 1;
}

html[data-theme="dark"] .wc-block-checkout .wc-block-components-text-input input,
html[data-theme="dark"] .wc-block-checkout .wc-blocks-components-select select,
html[data-theme="dark"] .wc-block-checkout textarea,
html[data-theme="dark"] .wc-block-checkout .wc-blocks-components-select__container {
	background-color: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--contrast);
	border-color: var(--funcrea--surface-border);
}

html[data-theme="dark"] .wc-block-checkout .wc-block-components-text-input input::placeholder,
html[data-theme="dark"] .wc-block-checkout textarea::placeholder {
	color: var(--wp--preset--color--contrast-2);
	opacity: 1;
}

.wc-block-checkout .wc-block-components-text-input input:focus,
.wc-block-checkout .wc-blocks-components-select select:focus,
.wc-block-checkout textarea:focus {
	outline: 3px solid var(--wp--preset--color--contrast);
	outline-offset: 2px;
	border-color: var(--wp--preset--color--contrast-2);
}

.wc-block-checkout .wc-block-components-checkbox__input,
.wc-block-checkout .wc-block-components-radio-control__input {
	accent-color: var(--wp--preset--color--primary);
}

.wc-block-checkout .wc-block-checkout__shipping-method-container,
.wc-block-checkout .wc-block-components-radio-control,
.wc-block-checkout .wc-block-components-radio-control__option,
.wc-block-checkout .wc-block-components-address-card-wrapper {
	background-color: var(--wp--preset--color--base-2);
	border-color: var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--medium);
}

.wc-block-checkout .wc-block-components-radio-control__option,
.wc-block-checkout .wc-block-checkout__shipping-method-option {
	transition: border-color var(--wp--custom--transition--fast) ease,
		background-color var(--wp--custom--transition--fast) ease;
}

.wc-block-checkout .wc-block-components-radio-control--highlight-checked::after,
.wc-block-checkout .wc-block-components-radio-control--highlight-checked .wc-block-components-radio-control__option::after,
.wc-block-checkout .wc-block-components-radio-control--highlight-checked div.wc-block-components-radio-control-accordion-option::after {
	display: none;
}

.wc-block-checkout .wc-block-components-radio-control__option-checked,
.wc-block-checkout .wc-block-components-radio-control__option--checked-option-highlighted,
.wc-block-checkout .wc-block-components-radio-control-accordion-option--checked-option-highlighted,
.wc-block-checkout .wc-block-checkout__shipping-method-option--selected {
	background-color: var(--wp--custom--surface--warm);
	border: 1px solid var(--wp--preset--color--primary);
	border-radius: var(--wp--custom--radius--medium);
	box-shadow: none;
}

.wc-block-checkout .wc-block-components-radio-control-accordion-option--checked-option-highlighted .wc-block-components-radio-control__option {
	border: 0;
	border-radius: var(--wp--custom--radius--medium) var(--wp--custom--radius--medium) 0 0;
}

.wc-block-checkout .wc-block-components-radio-control-accordion-content {
	margin: 0;
	padding: 0 1rem 1rem 48px;
	background: transparent;
	border: 0;
	border-radius: 0;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.55;
}

.wc-block-checkout .wc-block-components-radio-control-accordion-content > div {
	max-width: 42rem;
}

/* De gekozen betaalmethode had een eigen, zwaardere opmaak dan de rest van de
   afrekenpagina: witte kaart, slagschaduw en een balk van 5px. Naast de rustig
   gemarkeerde levering en afhaallocatie eiste dat blok alle aandacht op, terwijl
   het dezelfde soort keuze is. Nu volgt het de gewone selectiestijl — warme
   vulling met een randje in de accentkleur — met alleen een smallere balk links
   als extra houvast. */
.wc-block-checkout .wc-block-checkout__payment-method .wc-block-components-radio-control-accordion-option--checked-option-highlighted {
	background-color: var(--wp--custom--surface--warm);
	border-color: var(--wp--preset--color--primary);
	border-left: 3px solid var(--wp--preset--color--primary);
	box-shadow: none;
}

.wc-block-checkout .wc-block-checkout__payment-method .wc-block-components-radio-control-accordion-option--checked-option-highlighted .wc-block-components-radio-control__option {
	background: transparent;
}

.wc-block-checkout .wc-block-components-sidebar {
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.wc-block-checkout .wc-block-components-order-summary {
	overflow: visible;
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
}

.wc-block-checkout .wc-block-components-order-summary-item {
	margin: var(--wp--preset--spacing--20) 0;
	padding: var(--wp--preset--spacing--20);
	background-color: var(--wp--custom--surface--warm);
	border-radius: var(--wp--custom--radius--medium);
}

.wc-block-checkout .wc-block-components-order-summary-item__image img {
	border-radius: var(--wp--custom--radius--small);
}

.wc-block-checkout .wc-block-components-product-name {
	color: var(--wp--preset--color--contrast);
	font-weight: 800;
}

.wc-block-checkout .wc-block-formatted-money-amount,
.wc-block-checkout .wc-block-components-totals-footer-item .wc-block-components-totals-item__value {
	color: var(--wp--preset--color--primary);
	font-weight: 800;
}

.wc-block-checkout .wc-block-components-totals-wrapper {
	border-color: var(--wp--preset--color--border);
}

.wc-block-checkout .wc-block-components-button.wp-element-button,
.wc-block-checkout .wc-block-components-checkout-place-order-button {
	min-height: 44px;
	background-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--button);
	font-family: inherit;
	font-weight: 800;
}

.wc-block-checkout .wc-block-components-button.wp-element-button:hover,
.wc-block-checkout .wc-block-components-checkout-place-order-button:hover {
	background-color: var(--wp--custom--primary--hover);
	color: var(--wp--preset--color--base);
}

.wc-block-checkout a {
	color: var(--wp--preset--color--primary);
	font-weight: 700;
}

@media (max-width: 700px) {
	.wc-block-checkout .wc-block-components-sidebar-layout {
		gap: var(--wp--preset--spacing--40);
	}

	.wc-block-checkout .wc-block-components-sidebar {
		padding: 1.125rem;
	}

	.wc-block-checkout .wc-block-components-checkout-step {
		margin-bottom: var(--wp--preset--spacing--40);
	}
}


/* ==========================================================================
   24. Meldingen (WooCommerce)
   ==========================================================================
   Niet in de ontwerpbron; richting uit visueel.md §6. Altijd een icoon én
   tekst — kleur is nooit de enige drager van de betekenis (WCAG 1.4.1). Het
   icoon hoort in de markup te staan met `aria-hidden="true"`, de betekenis in
   de tekst. De houder hoort een `role="status"` (succes/info) of
   `role="alert"` (fout) te krijgen. */

/* De houder staat in header.php, direct onder de kopbalk. Hij heeft alleen
   ruimte nodig als er ook echt een melding in staat — anders zou er op elke
   pagina een gat onder de kopbalk vallen. */
.fc-meldingen:not(:has(.woocommerce-message, .woocommerce-info, .woocommerce-error)) {
	display: none;
}

.fc-meldingen {
	padding-top: var(--wp--preset--spacing--40);
}

.woocommerce-message,
.woocommerce-info,
.woocommerce-error {
	display: flex;
	align-items: flex-start;
	gap: 0.75rem;
	margin-bottom: var(--wp--preset--spacing--40);
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
	/* Woo zet hier een 3px gekleurde bovenrand neer (groen bij succes, geel bij
	   info). Die valt buiten het palet en botst met de afgeronde hoek. Het vlak
	   draagt de betekenis al, samen met het teken ervoor. */
	border: 0;
	border-radius: var(--wp--custom--radius--medium);
	list-style: none;
	font-weight: 700;
}

.woocommerce-message {
	background-color: var(--wp--custom--tile--mint);
	color: var(--wp--preset--color--contrast);
}

.woocommerce-info {
	background-color: var(--wp--custom--tile--sky);
	color: var(--wp--preset--color--contrast);
}

.woocommerce-error {
	background-color: var(--wp--preset--color--primary);
	/* Regel P1. */
	color: var(--wp--preset--color--base);
}

/* WooCommerce zet zijn eigen icoon als `::before`: absoluut gepositioneerd,
   met een eigen icoonfont en met linkerpadding die hierboven overschreven
   wordt. Het gevolg was een tekentje dat over de eerste letters van de melding
   viel. Hier teruggebracht tot een gewoon flexitem in de tekstkleur.
   Kanttekening: een `::before` is geen markup, dus hij is niet op
   `aria-hidden` te zetten — sommige schermlezers spreken het teken uit. De
   betekenis staat daarom altijd óók in de tekst, nooit alleen in het icoon. */
.woocommerce-message::before,
.woocommerce-info::before,
.woocommerce-error::before {
	position: static;
	flex: 0 0 auto;
	margin: 0;
	padding: 0;
	color: inherit;
	font-family: inherit;
	font-size: 1.05em;
	line-height: 1.5;
}

.woocommerce-message::before {
	content: "✓";
}

.woocommerce-info::before {
	content: "i";
}

.woocommerce-error::before {
	content: "!";
}

/* Links in een melding erven de tekstkleur en worden onderstreept: op een
   `primary`-vlak zou een `primary`-link onzichtbaar zijn. */
.woocommerce-message a,
.woocommerce-info a,
.woocommerce-error a {
	color: inherit;
	text-decoration: underline;
}

/* Woo zet in zijn meldingen een `.button` ("Bekijk winkelwagen"). Die valt
   buiten `.fc-btn` en kwam er dus als grijze standaardknop uit. Zelfde vorm als
   `.fc-btn-ghost`, maar meelopend met de tekstkleur van de melding — op het
   `primary`-vlak van een foutmelding zou een vaste kleur wegvallen. */
/* `body.woocommerce-page a.button` (0,3,1) zet sinds 0.6.3 de volle rode knop
   op élke Woo-pagina. Deze regel moet daar dus overheen, vandaar `body` en de
   elementkiezer erbij. Zonder dat viel `margin-left: auto` weg en plakte de
   knop tegen de tekst.

   `order: 1` omdat WooCommerce de knop nu eens vóór en dan weer ná de tekst in
   de HTML zet: bij "toegevoegd aan winkelwagen" erna, bij "e-mailadres
   bevestigen" ervoor. De tekst is een naamloos flexitem met order 0 en komt
   daarmee altijd eerst. De vololgorde in de HTML blijft ongemoeid. */
body.woocommerce-page .woocommerce-message a.button,
body.woocommerce-page .woocommerce-info a.button,
body.woocommerce-page .woocommerce-error a.button,
.woocommerce-message .button,
.woocommerce-info .button,
.woocommerce-error .button {
	order: 1;
	margin-left: auto;
	padding: 0.5rem 1rem;
	background: none;
	color: inherit;
	/* De knopschaduw van `body.woocommerce-page a.button` is een rode gloed
	   zonder verspringing. Op een melding is dat decoratie, geen diepte. */
	box-shadow: none;
	border: 1px solid currentColor;
	border-radius: var(--wp--custom--radius--pill);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	text-decoration: none;
	white-space: nowrap;
}

body.woocommerce-page .woocommerce-message a.button:hover,
body.woocommerce-page .woocommerce-info a.button:hover,
body.woocommerce-page .woocommerce-error a.button:hover,
.woocommerce-message .button:hover,
.woocommerce-info .button:hover,
.woocommerce-error .button:hover {
	background: none;
	color: inherit;
	text-decoration: underline;
	transform: none;
}

/* Woo's clearfix. In een flexbox wordt dat een leeg item achter de knop. Het
   teken ervóór blijft wél staan — dat is het bewuste ✓/i/! uit dit systeem en
   niet een icoonfont die niet laadt. */
.woocommerce-message::after,
.woocommerce-info::after,
.woocommerce-error::after {
	display: none;
}

@media (max-width: 640px) {
	.woocommerce-message,
	.woocommerce-info,
	.woocommerce-error {
		flex-wrap: wrap;
	}

	.woocommerce-message .button,
	.woocommerce-info .button,
	.woocommerce-error .button {
		margin-top: 0.35rem;
		margin-left: calc(1.05em + 0.75rem);
		max-width: calc(100% - 1.05em - 0.75rem);
		white-space: normal;
		text-align: center;
	}
}

/* Focus in een foutmelding: `contrast` verdwijnt bijna op een `primary`-vlak
   (1,7:1 in licht). `base` is daar de enige kleur die eruit springt — dit is
   de enige plek waar regel F1 een uitzondering krijgt, en om dezelfde reden
   als F1 zelf bestaat. */
.woocommerce-error a:focus-visible,
.woocommerce-error button:focus-visible {
	outline-color: var(--wp--preset--color--base);
}


/* ==========================================================================
   25. Evenementpagina (.fc-event)
   ==========================================================================
   `single-csbn_event.php`. De pagina hergebruikt de subhero (§17), de sectiekop
   (§9) en de agendakaart (§19); hier staat alleen wat daar niet in past.

   Alles op deze pagina kan leeg zijn behalve de datum en de plaats: de
   evenementen hebben op dit moment geen tekst en geen afbeelding. De template
   laat lege onderdelen daarom helemaal weg in plaats van ze te verbergen — dat
   scheelt hier de regels die anders de overgebleven witruimte moeten opruimen.

   Kleuren: dit blok voegt geen enkel nieuw gekleurd vlak toe. De metaregels
   staan op de warme band van de subhero, met dezelfde `contrast-2`/`contrast`
   als het kruimelpad ernaast; de "geweest"-melding staat op `base-2`, net als
   de agendakaart. Beide combinaties waren al doorgerekend in beide paletten. */

/* Datum en plaats onder de titel. Naast elkaar zolang het past, daaronder als
   het niet past — vandaar `flex-wrap` en geen raster met vaste kolommen. */
.fc-event-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem var(--wp--preset--spacing--40);
	margin-top: 0.875rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
}

.fc-event-meta .row {
	display: flex;
	align-items: center;
	gap: 0.625rem;
}

.fc-event-meta b {
	color: var(--wp--preset--color--contrast);
}

/* Een evenementpagina blijft na afloop gewoon bereikbaar via Google, een
   bookmark of de sitemap. Zonder deze melding leest zo'n pagina als een
   aankondiging voor iets dat al is geweest. `inline-block` zodat de melding
   niet de hele bandbreedte pakt voor één regel tekst. */
.fc-event-voorbij {
	display: inline-block;
	margin: 0.875rem 0 0;
	padding: 0.5rem 0.875rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-left: 5px solid var(--wp--preset--color--primary);
	border-radius: var(--wp--custom--radius--small);
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.fc-event-body {
	padding-block: var(--wp--preset--spacing--60);
}

/* Leeskolom binnen de sitecontainer. `.fc-wrap` is 1180px breed — dat is goed
   voor rasters, maar veel te breed voor lopende tekst. */
.fc-event-figuur,
.fc-event-tekst,
.fc-event-meer {
	max-width: 760px;
	margin-inline: auto;
}

.fc-event-figuur {
	margin-block: 0 var(--wp--preset--spacing--40);
	border-radius: var(--wp--custom--radius--large);
	overflow: hidden;
}

.fc-event-figuur img {
	display: block;
	width: 100%;
	height: auto;
}

/* De tekst komt uit de editor, dus de blokken brengen hun eigen marges mee.
   Alleen de buitenste worden weggehaald: anders staat er boven en onder het
   tekstblok een tweede keer ruimte, bovenop de padding van `.fc-event-body`. */
.fc-event-tekst > :first-child {
	margin-top: 0;
}

.fc-event-tekst > :last-child {
	margin-bottom: 0;
}

.fc-event-meer {
	margin-block: var(--wp--preset--spacing--40) 0;
}

/* De winkelknop onder de agenda. Staat er ook als er geen ander evenement is —
   dan is dit het enige dat de pagina nog te bieden heeft, en een detailpagina
   die doodloopt is precies wat deze template moest oplossen. */
.fc-event-slot {
	margin: var(--wp--preset--spacing--50) 0 0;
	text-align: center;
}


/* ==========================================================================
   26. Windows-contrastmodus (forced-colors)
   ==========================================================================

   Zelfde reden als bij `.csbn-theme-toggle` in de parent
   (`csbn-base/assets/css/theme.css:312`): forced-colors negeert var()-kleuren.
   Het systeem zet vlak, tekst en rand naar zijn eigen palet en tekent
   `box-shadow` niet meer; alleen systeemkleuren komen er nog doorheen. Elke
   aanduiding die in het gewone theme aan `primary` hangt, moet hier dus
   opnieuw gezegd worden.

   Gemeten in Chromium met `forced-colors: active`: bij zeven standen waren
   vlak, tekst én rand in beide standen exact gelijk. `aria-current`,
   `aria-pressed` en `aria-checked` staan overal netjes, dus een schermlezer
   merkt er niets van — dit treft de ziende gebruiker van de contrastmodus.

   Twee systeemkleuren dragen dit blok. `Highlight`/`HighlightText` is het paar
   voor "dit is gekozen" en werkt in elk contrastthema, ook als de kleuren
   omgekeerd staan. `Canvas` op een rand die in het gewone theme doorzichtig is
   houdt hem onzichtbaar: het systeem tekent een doorzichtige rand namelijk wél
   in, en dan draagt élk item de markering die alleen bij het huidige hoort. */

@media (forced-colors: active) {

	/* --- Gekozen: vlak in de systeemselectiekleur --------------------------
	   Vlak in plaats van alleen tekst- of randkleur, want de kleuren van een
	   contrastthema liggen niet vast: een gevuld vak is in elk thema het
	   verschil tussen wel en niet gekozen. */
	.fc-pills a.active,
	.fc-pills a[aria-current="page"],
	.fc-pills button.active,
	.fc-pills button[aria-pressed="true"],
	.fc-pager a.active,
	.fc-pager [aria-current="page"],
	.fc-pager span.active,
	.fc-variant-pills button[aria-checked="true"] {
		background-color: Highlight;
		color: HighlightText;
		border-color: Highlight;
	}

	/* --- Hoofdmenu ---------------------------------------------------------
	   `nav.fc-main a` heeft een doorzichtige onderrand die alleen bij de
	   huidige pagina wordt ingekleurd (§5). Zonder de `Canvas`-regel hieronder
	   staat er in deze modus onder élk menu-item een streep. */
	nav.fc-main a {
		border-bottom-color: Canvas;
	}

	nav.fc-main a[aria-current="page"] {
		border-bottom-color: Highlight;
	}

	/* --- Mobiel menu -------------------------------------------------------
	   Hier staat onder elk item al een scheidingslijn, dus die kan de
	   aanduiding niet dragen. Een onderstreping wel: die staat er in de basis
	   niet, en `text-decoration-line` wordt niet overschreven. */
	.fc-mobiel-nav a[aria-current="page"] {
		text-decoration: underline;
		text-underline-offset: 3px;
	}

	/* --- Miniatuurstrip ----------------------------------------------------
	   Zelfde doorzichtige rand als in het hoofdmenu, hier 2px (§22). */
	.fc-thumbs button {
		border-color: Canvas;
	}

	.fc-thumbs button.active,
	.fc-thumbs button[aria-pressed="true"] {
		border-color: Highlight;
	}

	/* --- Niet-leverbare variant --------------------------------------------
	   Van de drie aanduidingen (vlak, rand, dekking) blijft alleen `opacity`
	   over, en dat is een gradatie, geen stand. `GrayText` is de systeemkleur
	   voor "kan niet". */
	.fc-variant-pills button[aria-disabled="true"] {
		color: GrayText;
		border-color: GrayText;
	}

	/* --- Knoppen zonder rand -----------------------------------------------
	   Deze drie staan op `border: 0` en leunen op vlakkleur plus schaduw. In
	   deze modus vallen die allebei weg, en dan is een knop niet meer van
	   lopende tekst te onderscheiden en zweeft het aantal in de badge los over
	   de rand van het winkelwagenicoon. `ButtonText` volgt de parent. */
	.fc-btn,
	.fc-card .add,
	.fc-icon-btn .badge {
		border: 1px solid ButtonText;
	}
}

/* --- Mijn account ---------------------------------------------------------

   Alles onder /mijn-account/. WooCommerce levert hier zijn eigen markup; die
   klassen worden hieronder op de tokens van dit thema gelegd. Alleen het
   overzicht, de navigatie en het omhulsel hebben een eigen template — de rest
   is opmaak, en een overschreven template moet je bij elke Woo-update nalopen.

   De indeling: twee kolommen, links wat er loopt en rechts wat je eerder
   kocht. Op de telefoon onder elkaar met "Loopt nu" eerst, want daar kijken de
   meeste klanten.
   ------------------------------------------------------------------------ */

.fc-account-wrap {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--40);
}

/* De navigatie staat ná de inhoud in de bron, zodat wie met Tab of een
   schermlezer binnenkomt meteen bij zijn bestelling is. Op een breed scherm
   hoort hij visueel wél bovenaan. */
.fc-account-nav {
	order: -1;
}

.fc-account-nav ul {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.fc-account-nav a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	padding: 0.5rem 1.125rem;
	color: var(--wp--preset--color--contrast-2);
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--pill);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	text-decoration: none;
	transition: color var(--wp--custom--transition--fast) ease,
		background-color var(--wp--custom--transition--fast) ease;
}

.fc-account-nav a:hover {
	color: var(--wp--preset--color--contrast);
}

/* Op een primary-vlak hoort `base` en niet `primary-contrast`: die wisselt mee
   met de donkere modus (valkuil 11 in de toolkit). */
.fc-account-nav a.is-actief {
	color: var(--wp--preset--color--base);
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
}

.fc-account-hallo {
	margin: 0 0 var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--contrast-2);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
}

.fc-account-kolommen {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wp--preset--spacing--40);
}

@media (min-width: 861px) {
	.fc-account-kolommen {
		/* Loopt nu krijgt meer ruimte: daar staat de vraag waarmee iemand
		   binnenkomt. */
		grid-template-columns: 1.35fr 1fr;
	}
}

.fc-account-kolom h2 {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--x-large);
}

.fc-account-stil {
	color: var(--wp--preset--color--contrast-2);
}

/* --- Een lopende bestelling ---------------------------------------------- */

.fc-bestelkaart {
	margin-bottom: var(--wp--preset--spacing--30);
	padding: 1.5rem 1.625rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.fc-bestelkaart h3 {
	margin: 0;
	font-size: var(--wp--preset--font-size--large);
}

.fc-bestelkaart-meta {
	margin: 2px 0 1.25rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

.fc-bestelkaart-noot {
	margin: 1rem 0 1.25rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

.fc-bestelkaart .fc-btn {
	gap: 0.4rem;
}

/* De stand in drie stappen. De kleur is niet de enige drager: elke stap houdt
   zijn woord, en de huidige is ook aan het gewicht te zien (WCAG 1.4.1). */
.fc-stappen {
	display: grid;
	grid-auto-flow: column;
	grid-auto-columns: 1fr;
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: none;
}

.fc-stappen li {
	position: relative;
	padding-top: 1.5rem;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--label, 0.78rem);
	font-weight: 700;
	text-align: center;
}

/* De lijn tussen twee stippen. Loopt van het midden van deze stip naar het
   midden van de vorige, dus niet onder de eerste. */
.fc-stappen li::before {
	content: "";
	position: absolute;
	top: 5px;
	right: 50%;
	left: -50%;
	height: 2px;
	background-color: var(--wp--preset--color--border);
}

.fc-stappen li:first-child::before {
	display: none;
}

.fc-stappen li.is-gedaan::before,
.fc-stappen li.is-nu::before {
	background-color: var(--wp--preset--color--primary);
}

.fc-stappen .stip {
	position: absolute;
	top: 0;
	left: 50%;
	width: 12px;
	height: 12px;
	background-color: var(--wp--preset--color--base-2);
	border: 2px solid var(--wp--preset--color--border);
	border-radius: 50%;
	transform: translateX(-50%);
}

.fc-stappen li.is-gedaan .stip {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
}

.fc-stappen li.is-nu {
	color: var(--wp--preset--color--primary);
}

.fc-stappen li.is-nu .stip {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	box-shadow: 0 0 0 4px rgb(198 43 34 / 18%);
}

/* --- Eerder besteld ------------------------------------------------------ */

.fc-eerder {
	margin: 0;
	padding: 0;
	list-style: none;
}

.fc-eerder li {
	display: grid;
	grid-template-columns: 56px 1fr auto;
	align-items: center;
	gap: 0.875rem;
	padding: 0.75rem 0;
	border-bottom: 1px solid var(--wp--preset--color--border);
}

.fc-eerder li:last-child {
	border-bottom: 0;
}

.fc-eerder .beeld img {
	display: block;
	width: 56px;
	height: 56px;
	border-radius: var(--wp--custom--radius--medium);
	object-fit: cover;
}

.fc-eerder .tekst {
	min-width: 0;
}

.fc-eerder .naam {
	display: block;
	color: var(--wp--preset--color--contrast);
	font-weight: 700;
	line-height: 1.3;
	text-decoration: none;
}

.fc-eerder .naam:hover {
	text-decoration: underline;
}

.fc-eerder .prijs {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

.fc-btn.klein {
	min-height: 44px;
	padding: 0.5rem 1rem;
	font-size: var(--wp--preset--font-size--small);
}

.fc-icoon {
	flex: none;
}

/* --- Lege staat ----------------------------------------------------------- */

.fc-leeg {
	padding: 2.25rem 1.75rem;
	background-color: var(--wp--custom--surface--warm);
	border-radius: var(--wp--custom--radius--large);
	text-align: center;
}

.fc-leeg .fc-icoon {
	width: 34px;
	height: 34px;
	color: var(--wp--preset--color--primary);
}

.fc-leeg p {
	max-width: 34ch;
	margin: 0.75rem auto 1.25rem;
	color: var(--wp--preset--color--contrast-2);
}

/* --- WooCommerce' eigen schermen ------------------------------------------

   Inloggen, registreren, adressen, accountgegevens en de bestellingenlijst
   houden hun eigen markup. Hieronder liggen die klassen op dezelfde knoppen,
   velden en kaders als de rest van de site.
   ------------------------------------------------------------------------ */

/* Deze selectors zijn met opzet zwaarder dan ze eruitzien. WooCommerce zet de
   kolommen met `.woocommerce-page .col2-set .col-1` — drie klassen. Twee
   klassen verliezen daarvan, en dan blijft de float staan terwijl je denkt dat
   je een grid hebt. Gemeten op 21-08: precies dat gebeurde. */
body.woocommerce-account .u-columns.col2-set {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wp--preset--spacing--40);
}

@media (min-width: 861px) {
	body.woocommerce-account .u-columns.col2-set {
		grid-template-columns: 1fr 1fr;
	}
}

/* Dit is de regel waar het op stukliep. WooCommerce hangt een ouderwetse
   clearfix aan deze container: `::before` en `::after` met `content: " "` en
   `display: table`. In een grid zijn dat geen onzichtbare hulpjes meer maar
   volwaardige gridcellen — de eerste cel ging naar `::before`, en Inloggen
   schoof daardoor naar rechts met Registreren op de regel eronder. Precies het
   beeld dat er stond. In een grid heeft clearfixen ook geen enkel nut meer. */
body.woocommerce-account .u-columns.col2-set::before,
body.woocommerce-account .u-columns.col2-set::after {
	display: none;
}

/* WooCommerce laat deze twee zwemmen met `float` en `width: 48%`. In een grid
   doet de float niets meer, maar die breedte wél: dan wordt elke kolom 48% van
   zijn eigen cel en staan er twee smalle kaarten met een gat ertussen. */
body.woocommerce-account .col2-set .u-column1,
body.woocommerce-account .col2-set .u-column2 {
	float: none;
	width: auto;
}

/* Woo zet een eigen kader met radius 5 om het formulier heen. Samen met de
   kaart eromheen is dat een doos in een doos — en die radius hoort bij geen
   enkele andere vorm op deze site. */
.woocommerce-account form.login,
.woocommerce-account form.register {
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
}

/* Woo propt het vinkje "Onthouden" en de knop in één regel. Naast elkaar
   leest dat als één ding; onder elkaar is het een keuze en daarna een actie. */
.woocommerce-account .woocommerce-form-login p.form-row:not(.woocommerce-form-row),
.woocommerce-account .woocommerce-form-register p.form-row:not(.woocommerce-form-row) {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.5rem;
}

.woocommerce-account .u-column1,
.woocommerce-account .u-column2,
.woocommerce-account .woocommerce-Address,
.woocommerce-account .woocommerce-EditAccountForm {
	padding: 2rem 2.125rem;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.woocommerce-account .u-column1 > h2,
.woocommerce-account .u-column2 > h2 {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--x-large);
}

.woocommerce-account .woocommerce-form-row,
.woocommerce-account .form-row {
	margin: 0 0 1rem;
}

.woocommerce-account label {
	display: block;
	margin-bottom: 6px;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
}

.woocommerce-account .input-text,
.woocommerce-account input[type="text"],
.woocommerce-account input[type="email"],
.woocommerce-account input[type="tel"],
.woocommerce-account input[type="password"],
.woocommerce-account select,
.woocommerce-account textarea {
	width: 100%;
	padding: 0.8125rem 1rem;
	background-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast-2);
	border-radius: var(--wp--custom--radius--medium);
	font-family: inherit;
	font-size: var(--wp--preset--font-size--medium);
	transition: border-color var(--wp--custom--transition--fast) ease;
}

.woocommerce-account .input-text:focus,
.woocommerce-account select:focus,
.woocommerce-account textarea:focus {
	border-color: var(--wp--preset--color--primary);
}

/* Het vinkje "Onthouden" is geen veld met een label erboven maar een regel om
   te lezen; de algemene labelregel hierboven zou hem als kop opmaken. */
.woocommerce-account .woocommerce-form-login__rememberme {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	margin: 0 0 1rem;
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 400;
}

.woocommerce-account .woocommerce-form-login__rememberme input {
	width: auto;
	margin: 0;
}

/* Bewust `woocommerce-page` en niet `woocommerce-account`: WooCommerce zet die
   klasse op ál zijn klassieke pagina's. De knopregels stonden eerst alleen op
   het account, en op /afrekenen/order-pay/ stond daardoor nog Woo's eigen
   paarse `.button.alt` (#720eec). Eén regelset in plaats van twee die uit
   elkaar lopen.

   De blok-winkelwagen en blok-checkout blijven hier buiten: die gebruiken
   `wc-block-components-button` en geen `.button`. */
body.woocommerce-page .woocommerce-button,
body.woocommerce-page button.button,
body.woocommerce-page a.button,
body.woocommerce-page input.button,
body.woocommerce-page button#place_order {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	min-height: 44px;
	padding: 0.875rem 1.625rem;
	background-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--base);
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	box-shadow: var(--wp--custom--shadow--button);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 600;
	line-height: 1.2;
	text-decoration: none;
	cursor: pointer;
	transition: background-color var(--wp--custom--transition--base) ease,
		transform var(--wp--custom--transition--base) ease;
}

body.woocommerce-page .woocommerce-button:hover,
body.woocommerce-page button.button:hover,
body.woocommerce-page a.button:hover,
body.woocommerce-page button#place_order:hover {
	background-color: var(--wp--custom--primary--hover);
	transform: translateY(-2px);
}

/* Bekijken, Bewerken en Annuleren zijn bijrollen; die krijgen de lichte knop,
   anders staat er een rij rode pillen die allemaal om aandacht vragen. */
/* Warm en niet wit. De kaarten hieronder zijn zelf wit, dus een witte knop op
   een witte kaart is geen knop meer maar een stukje tekst met een randje —
   precies wat er op de adressenpagina stond. */
.woocommerce-account .woocommerce-orders-table a.button,
.woocommerce-account .woocommerce-Address a.button,
.woocommerce-account .woocommerce-button--cancel {
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--border);
	box-shadow: none;
}

/* De knop op de adreskaart is geen `.button` maar onze eigen `.fc-btn-ghost`
   uit §knoppen, en die staat op wit. Op een cremekleurige pagina klopt dat,
   op een witte kaart verdwijnt hij. Alleen daar dus warm. */
.woocommerce-account .woocommerce-Address .fc-btn-ghost {
	background-color: var(--wp--custom--surface--warm);
	border-color: var(--wp--preset--color--border);
	box-shadow: none;
}

.woocommerce-account .woocommerce-Address .fc-btn-ghost:hover {
	background-color: var(--wp--preset--color--base-2);
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--primary);
}

/* Bij muisaanwijzing loopt de rand mee in de merkkleur, gelijk aan de knop in
   een melding. Eén taal voor "dit is een bijrol maar je kunt erop klikken". */
.woocommerce-account .woocommerce-orders-table a.button:hover,
.woocommerce-account .woocommerce-Address a.button:hover,
.woocommerce-account .woocommerce-button--cancel:hover {
	background-color: var(--wp--preset--color--base-2);
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--primary);
}

.woocommerce-account .woocommerce-LostPassword {
	margin: 0;
}

.woocommerce-account .woocommerce-privacy-policy-text {
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
}

/* --- Bestellingenlijst ---------------------------------------------------- */

.woocommerce-orders-table {
	width: 100%;
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	border-collapse: separate;
	border-spacing: 0;
	box-shadow: var(--wp--custom--shadow--card);
	overflow: hidden;
}

.woocommerce-orders-table thead th {
	padding: 0.75rem 1.125rem;
	background-color: var(--wp--custom--surface--warm);
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro, 0.72rem);
	font-weight: 800;
	text-align: left;
	text-transform: uppercase;
}

.woocommerce-orders-table td {
	padding: 1rem 1.125rem;
	border-top: 1px solid var(--wp--preset--color--border);
}

/* Zes kolommen passen niet op een telefoon. Daar wordt elke rij een kaartje
   met het kolomlabel ervoor; dat label zit al als `data-title` in de markup
   van WooCommerce. */
@media (max-width: 860px) {
	.woocommerce-orders-table,
	.woocommerce-orders-table tbody,
	.woocommerce-orders-table tr,
	.woocommerce-orders-table td {
		display: block;
		width: 100%;
		/* Zonder dit telt de padding van 2x1,125rem bij de 100% op: gemeten op
		   een scherm van 390px waren de cellen 384 breed in een kaart van 350,
		   en werd elke waarde rechts afgekapt. Een tabelcel erft `box-sizing`
		   niet van de `*`-regel, want die staat hier op `border-box` voor
		   alles behalve wat de UA-stylesheet zelf zet. */
		box-sizing: border-box;
	}

	.woocommerce-orders-table thead {
		position: absolute;
		width: 1px;
		height: 1px;
		overflow: hidden;
		clip-path: inset(50%);
		white-space: nowrap;
	}

	.woocommerce-orders-table tr {
		padding: 0.5rem 0;
		border-top: 1px solid var(--wp--preset--color--border);
	}

	.woocommerce-orders-table tr:first-child {
		border-top: 0;
	}

	.woocommerce-orders-table td {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 1rem;
		padding: 0.4rem 1.125rem;
		border-top: 0;
	}

	.woocommerce-orders-table td::before {
		content: attr(data-title);
		color: var(--wp--preset--color--contrast-2);
		font-size: var(--wp--custom--font-size--micro, 0.72rem);
		font-weight: 800;
		text-transform: uppercase;
	}
}

/* --- Meldingen ------------------------------------------------------------ */

.woocommerce-account .woocommerce-message,
.woocommerce-account .woocommerce-info,
.woocommerce-account .woocommerce-error {
	margin: 0 0 var(--wp--preset--spacing--40);
	padding: 1rem 1.25rem;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--medium);
	background-color: var(--wp--custom--surface--warm);
	list-style: none;
}

.woocommerce-account .woocommerce-error {
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--contrast);
}

/* --- Wat de browser zelf tekent -------------------------------------------

   Selectie, caret en het vinkje komen anders in het blauw van het
   besturingssysteem uit de bus. Dat hoort bij geen enkel ontwerp.
   ------------------------------------------------------------------------ */

.woocommerce-account ::selection {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--contrast);
}

.woocommerce-account input,
.woocommerce-account textarea,
.woocommerce-account select {
	caret-color: var(--wp--preset--color--primary);
	accent-color: var(--wp--preset--color--primary);
}

/* --- Mijn account: de overige schermen ------------------------------------

   Overzicht en inloggen staan hierboven. Dit zijn de schermen die je pas ziet
   als je ingelogd bent: bestellingen, één bestelling bekijken, downloads,
   adressen, accountgegevens en wachtwoord vergeten. Ze houden allemaal de
   markup van WooCommerce; hieronder liggen die klassen op dezelfde kaders,
   velden en tabellen als de rest.
   ------------------------------------------------------------------------ */

/* Elk scherm dat uit één blok bestaat krijgt hetzelfde kader als het overzicht.
   `.woocommerce-Addresses` niet: dat is de container van twee kaarten, en een
   kaart in een kaart is altijd fout. */
.woocommerce-account .woocommerce-ResetPassword,
.woocommerce-account .woocommerce-order-details,
.woocommerce-account .woocommerce-customer-details,
.woocommerce-account .woocommerce-MyAccount-orders-wrapper {
	padding: 2rem 2.125rem;
	margin: 0 0 var(--wp--preset--spacing--40);
	background-color: var(--wp--preset--color--base-2);
	border: 1px solid var(--funcrea--surface-border);
	border-radius: var(--wp--custom--radius--large);
	box-shadow: var(--wp--custom--shadow--card);
}

.woocommerce-account .woocommerce-order-details__title,
.woocommerce-account .woocommerce-column__title,
.woocommerce-account .woocommerce-Address-title h2,
.woocommerce-account .woocommerce-Address-title h3 {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--x-large);
}

/* --- Adressen ------------------------------------------------------------- */

.woocommerce-account .woocommerce-Addresses {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wp--preset--spacing--40);
}

@media (min-width: 861px) {
	.woocommerce-account .woocommerce-Addresses {
		grid-template-columns: 1fr 1fr;
	}
}

/* Dezelfde clearfix-val als bij de inlogkolommen: `::before` en `::after` met
   `display: table` worden in een grid volwaardige cellen. */
.woocommerce-account .woocommerce-Addresses::before,
.woocommerce-account .woocommerce-Addresses::after,
.woocommerce-account .woocommerce-Address::before,
.woocommerce-account .woocommerce-Address::after {
	display: none;
}

.woocommerce-account .woocommerce-Addresses .woocommerce-Address {
	float: none;
	width: auto;
}

/* Kop en bewerklink horen op één regel: de titel zegt welk adres het is, de
   link is de enige actie erbij. */
.woocommerce-account .woocommerce-Address-title {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: var(--wp--preset--spacing--30);
}

/* Voor de derde keer dezelfde val, nu in flex in plaats van grid: Woo hangt aan
   `.addresses .title` een clearfix met `::before`/`::after` en `display: table`.
   In een flexbox zijn dat volwaardige flex-items. Met `space-between` staat de
   kop daardoor niet links maar in het midden — het leek een centrering, het
   waren twee onzichtbare buren. */
.woocommerce-account .addresses .title::before,
.woocommerce-account .addresses .title::after,
.woocommerce-account .woocommerce-Address-title::before,
.woocommerce-account .woocommerce-Address-title::after {
	display: none;
}

/* Woo laat `.title h3` zweven; wij gebruiken een h2, maar dekken beide af. */
.woocommerce-account .woocommerce-Address-title h2,
.woocommerce-account .woocommerce-Address-title h3 {
	float: none;
	margin: 0;
	text-align: left;
}

.woocommerce-account .woocommerce-Address-title a {
	flex: none;
	font-size: var(--wp--preset--font-size--small);
	text-decoration: none;
}

.woocommerce-account .woocommerce-Address address {
	color: var(--wp--preset--color--contrast-2);
	font-style: normal;
	line-height: 1.7;
}

/* --- Velden naast elkaar --------------------------------------------------

   Woo zet voornaam/achternaam en postcode/plaats met `--first` en `--last`
   naast elkaar via floats van 47%. Als grid houden ze hun paar zonder dat er
   iets zweeft, en op een telefoon vallen ze vanzelf onder elkaar.
   ------------------------------------------------------------------------ */

.woocommerce-account .woocommerce-address-fields__field-wrapper,
.woocommerce-account .woocommerce-EditAccountForm {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0 1rem;
}

@media (min-width: 601px) {
	.woocommerce-account .woocommerce-address-fields__field-wrapper,
	.woocommerce-account .woocommerce-EditAccountForm {
		grid-template-columns: 1fr 1fr;
	}

	/*
	 * Omgekeerd geregeld, en dat is met opzet: standaard neemt élk kind de volle
	 * breedte, en alleen wat Woo expliciet als paar markeert (`--first` en
	 * `--last`) krijgt een halve kolom. Andersom — alles half, uitzonderingen
	 * heel — moet je elke losse alinea die Woo ooit toevoegt achterna. Bij
	 * "wachtwoord vergeten" ging dat meteen mis: de uitleg stond naast het veld
	 * en de knop eronder.
	 */
	.woocommerce-account .woocommerce-address-fields__field-wrapper > *,
	.woocommerce-account .woocommerce-EditAccountForm > * {
		grid-column: 1 / -1;
	}

	.woocommerce-account .woocommerce-address-fields__field-wrapper > .form-row-first,
	.woocommerce-account .woocommerce-address-fields__field-wrapper > .woocommerce-form-row--first,
	.woocommerce-account .woocommerce-EditAccountForm > .form-row-first,
	.woocommerce-account .woocommerce-EditAccountForm > .woocommerce-form-row--first {
		grid-column: 1 / 2;
	}

	.woocommerce-account .woocommerce-address-fields__field-wrapper > .form-row-last,
	.woocommerce-account .woocommerce-address-fields__field-wrapper > .woocommerce-form-row--last,
	.woocommerce-account .woocommerce-EditAccountForm > .form-row-last,
	.woocommerce-account .woocommerce-EditAccountForm > .woocommerce-form-row--last {
		grid-column: 2 / 3;
	}
}

/* Woo zet `width: 47%` op deze twee met `.woocommerce form .form-row-first`
   (0,2,1). Wij deelden de rij al met een grid, dus die 47% werd 47% van een
   halve kolom: gemeten stonden voor- en achternaam als velden van 135px in
   kolommen van 285. Vandaar `body` ervoor — dat is 0,3,1 en wint. */
body.woocommerce-account form .form-row-first,
body.woocommerce-account form .form-row-last,
body.woocommerce-account form .woocommerce-form-row--first,
body.woocommerce-account form .woocommerce-form-row--last {
	float: none;
	width: auto;
}

.woocommerce-account fieldset {
	margin: var(--wp--preset--spacing--30) 0 0;
	padding: 1.375rem 1.5rem 1.5rem;
	background-color: var(--wp--custom--surface--warm);
	border: 0;
	border-radius: var(--wp--custom--radius--medium);
}

/* Een `legend` staat standaard óp de rand van de fieldset en steekt daardoor
   half boven het vlak uit — met `border: 0` betekent dat: de kop hangt los
   boven het blok in plaats van erin. `float: left` met volle breedte zet hem
   gewoon in de stroom, als kop van het blok. */
.woocommerce-account fieldset legend {
	float: left;
	width: 100%;
	margin: 0 0 1.125rem;
	padding: 0 0 0.75rem;
	border-bottom: 1px solid var(--wp--preset--color--border);
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--large);
	font-weight: 700;
	line-height: 1.2;
}

/* De float opheffen, anders schuift het eerste veld ernaast in plaats van
   eronder. */
.woocommerce-account fieldset legend ~ * {
	clear: both;
}

/* De uitleg onder een veld is toelichting, geen label. */
.woocommerce-account .woocommerce-form-row span em,
.woocommerce-account .woocommerce-address-fields span em {
	display: block;
	margin-top: 4px;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--preset--font-size--small);
	font-style: normal;
}

/* --- Eén bestelling bekijken ---------------------------------------------- */

.woocommerce-account .woocommerce-table--order-details,
.woocommerce-account .woocommerce-table--order-downloads {
	width: 100%;
	border-collapse: collapse;
}

.woocommerce-account .woocommerce-table--order-details th,
.woocommerce-account .woocommerce-table--order-downloads th {
	padding: 0.6rem 0;
	color: var(--wp--preset--color--contrast-2);
	font-size: var(--wp--custom--font-size--micro, 0.72rem);
	font-weight: 800;
	text-align: left;
	text-transform: uppercase;
}

.woocommerce-account .woocommerce-table--order-details td,
.woocommerce-account .woocommerce-table--order-downloads td {
	padding: 0.85rem 0;
	border-top: 1px solid var(--wp--preset--color--border);
	vertical-align: top;
}

.woocommerce-account .woocommerce-table--order-details tfoot th {
	padding: 0.6rem 0;
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--medium);
	text-transform: none;
}

/* Het eindbedrag is waar het oog naartoe gaat; dat mag het zwaarste zijn. */
.woocommerce-account .woocommerce-table--order-details tfoot tr:last-child th,
.woocommerce-account .woocommerce-table--order-details tfoot tr:last-child td {
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--large);
	font-weight: 800;
}

.woocommerce-account .woocommerce-table__product-name a {
	color: var(--wp--preset--color--contrast);
	font-weight: 700;
	text-decoration: none;
}

.woocommerce-account .woocommerce-table__product-name a:hover {
	text-decoration: underline;
}

/* Getallen in een kolom horen onder elkaar uit te lijnen; met tabulaire cijfers
   springt het bedrag niet meer per regel op. */
.woocommerce-account .woocommerce-Price-amount,
.woocommerce-account .woocommerce-orders-table__cell-order-total,
.woocommerce-account .woocommerce-table--order-details td:last-child {
	font-variant-numeric: tabular-nums;
}

/* Factuur- en verzendadres naast elkaar, met dezelfde valkuil als hierboven. */
.woocommerce-account .woocommerce-customer-details .woocommerce-columns {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wp--preset--spacing--40);
}

@media (min-width: 861px) {
	.woocommerce-account .woocommerce-customer-details .woocommerce-columns--2 {
		grid-template-columns: 1fr 1fr;
	}
}

.woocommerce-account .woocommerce-customer-details .woocommerce-columns::before,
.woocommerce-account .woocommerce-customer-details .woocommerce-columns::after {
	display: none;
}

.woocommerce-account .woocommerce-customer-details .col-1,
.woocommerce-account .woocommerce-customer-details .col-2 {
	float: none;
	width: auto;
}

.woocommerce-account .woocommerce-customer-details address {
	padding: 1rem 1.125rem;
	background-color: var(--wp--custom--surface--warm);
	border: 0;
	border-radius: var(--wp--custom--radius--medium);
	color: var(--wp--preset--color--contrast-2);
	font-style: normal;
	line-height: 1.7;
}

/* --- Downloads ------------------------------------------------------------ */

.woocommerce-account .woocommerce-table--order-downloads {
	margin: 0;
}

@media (max-width: 860px) {
	.woocommerce-account .woocommerce-table--order-downloads,
	.woocommerce-account .woocommerce-table--order-downloads tbody,
	.woocommerce-account .woocommerce-table--order-downloads tr,
	.woocommerce-account .woocommerce-table--order-downloads td {
		display: block;
		width: 100%;
	}

	.woocommerce-account .woocommerce-table--order-downloads thead {
		position: absolute;
		width: 1px;
		height: 1px;
		overflow: hidden;
		clip-path: inset(50%);
		white-space: nowrap;
	}

	.woocommerce-account .woocommerce-table--order-downloads td {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 1rem;
		padding: 0.4rem 0;
		border-top: 0;
	}

	.woocommerce-account .woocommerce-table--order-downloads td::before {
		content: attr(data-title);
		color: var(--wp--preset--color--contrast-2);
		font-size: var(--wp--custom--font-size--micro, 0.72rem);
		font-weight: 800;
		text-transform: uppercase;
	}
}

/* --- Lege staten ----------------------------------------------------------

   "Je hebt nog geen bestellingen" is geen foutmelding en hoort er niet als
   waarschuwing uit te zien. Woo gebruikt hier `.woocommerce-info`, dezelfde
   klasse als voor echte mededelingen; op de accountschermen is dat bijna altijd
   een lege staat.
   ------------------------------------------------------------------------ */

.woocommerce-account .woocommerce-MyAccount-content > .woocommerce-info {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 2rem 2.125rem;
	background-color: var(--wp--custom--surface--warm);
	border: 0;
	color: var(--wp--preset--color--contrast-2);
}

/* Op dit warme vlak is de tekst gedempt, en een knop in diezelfde gedempte
   kleur leest niet als iets waar je op klikt. Hier dus wél de merkkleur; op de
   rode foutmelding blijft `currentColor` gelden, want daar zou rood wegvallen. */
.woocommerce-account .woocommerce-MyAccount-content > .woocommerce-info .button {
	margin: 0;
	color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	/* Niet meegroeien met de regel: een knop over de volle breedte van de balk
	   leest als de hoofdactie van de pagina, en dat is dit niet. */
	flex: 0 0 auto;
	justify-self: end;
}

/* Op desktop drie kolommen: het teken, de uitleg, en rechts de knop. Onder
   601px blijft het de flexbox hierboven en valt de knop onder de tekst.

   Drie en niet twee, want het `::before` met het `i` is óók een item. Dat is
   geen restje maar het teken uit het meldingensysteem: kleur mag nooit de
   enige drager van de betekenis zijn. De tekst ertussen is een naamloos
   grid-item dat de browser zelf maakt van de losse tekstregel — werkt, maar je
   kunt er niets aan hangen, dus de uitlijning zit op de container. */
@media (min-width: 601px) {
	.woocommerce-account .woocommerce-MyAccount-content > .woocommerce-info {
		display: grid;
		grid-template-columns: auto 1fr auto;
		align-items: center;
		gap: 1.25rem 1rem;
	}
}

/* --- Acties in de bestellingentabel ---------------------------------------

   Drie knoppen op volle maat (Bekijken, Factuur afdrukken, Download factuur)
   zijn samen ~470px. De cel heeft dat niet, en onder 860px erft die cel
   `display: flex` van `.woocommerce-orders-table td` zonder `flex-wrap` — dus
   liepen de knoppen de kaart uit in plaats van te wikkelen.

   Twee klassen, want die td-regel in de media query heeft er ook twee.
   ------------------------------------------------------------------------ */

.woocommerce-orders-table .woocommerce-orders-table__cell-order-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	/* Links, gelijk met de kolomkop erboven. Rechts uitlijnen zag er bij twee
	   regels uit als twee losse knoppen in plaats van één groep. */
	justify-content: flex-start;
	gap: 0.4rem;
}

/* De datum hoort op één regel; "26-07-" met "2026" eronder leest als een fout. */
.woocommerce-orders-table .woocommerce-orders-table__cell-order-date {
	white-space: nowrap;
}

/* Compacter: minder ruimte opzij en een kleinere letter. `min-height: 44px`
   blijft staan — dat is het raakdoel, en een rij die net past maar niet meer
   te raken is geen verbetering. */
.woocommerce-account .woocommerce-orders-table__cell-order-actions a.button {
	/* Alleen de maat: kleur en rand komen van de gedeelde regel hierboven. */
	padding: 0.4rem 0.85rem;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	white-space: nowrap;
}

/* Onder 768px legt WooCommerce er zijn eigen `woocommerce-smallscreen.css`
   overheen: `table.shop_table_responsive tr td` met `display: block` en
   `text-align: right !important`, en een `::before` die links zweeft. Dat is
   0,2,3 mét !important, dus mijn regels van hierboven verloren het daar zonder
   dat er iets van te zien was in de code — alleen op een telefoon.

   Vandaar de zwaardere selector en het ene !important: dat is er om er één
   terug te draaien, niet om iets te forceren. */
@media (max-width: 860px) {
	body.woocommerce-page table.shop_table_responsive tr td.woocommerce-orders-table__cell-order-actions {
		display: flex;
		flex-wrap: wrap;
		justify-content: flex-start;
		align-items: center;
		gap: 0.5rem;
		padding-top: 0.6rem;
		padding-bottom: 0.85rem;
		text-align: left !important;
	}

	/* Het kolomlabel ("ACTIES") op een eigen regel; de knoppen staan er dan als
	   groep onder in plaats van ernaast geperst. `float: none` omdat Woo hem
	   laat zweven — binnen een flexbox doet dat niets, maar zo staat het er
	   niet meer verwarrend bij. */
	body.woocommerce-page table.shop_table_responsive tr td.woocommerce-orders-table__cell-order-actions::before {
		flex: 1 0 100%;
		float: none;
	}

	/* Dezelfde botsing voor de andere cellen: zonder dit staat er tussen 768 en
	   860px een andere indeling dan eronder. */
	body.woocommerce-page table.woocommerce-orders-table.shop_table_responsive tr td {
		display: flex;
		align-items: baseline;
		flex-wrap: wrap;
		justify-content: flex-start;
		gap: 0.35rem;
		text-align: left !important;
	}

	/* Het label duwt de rest naar rechts. Met `space-between` werden "€ 7,95"
	   en "voor 1 item" twee losse flex-items aan weerszijden van de kaart. */
	body.woocommerce-page table.woocommerce-orders-table.shop_table_responsive tr td::before {
		float: none;
		margin-right: auto;
	}
}


/* Het zoekformulier op de 404-pagina komt uit csbn-base met de neutrale radius
   van dat thema. Hier zijn knoppen en velden pillen; twee vormen naast elkaar
   op één pagina leest als een fout. */
.search-form .search-field,
.search-form .search-submit {
	border-radius: var(--wp--custom--radius--pill);
}
