/*
Theme Name: Watermolen
Theme URI:
Author: Koen Wensing
Description: Block theme for Moulin de Laval — een beschikbaarheidsschema en reserveringsformulier voor de vakantiemolen in Frankrijk.
Version: 1.1.0
Requires at least: 6.4
Tested up to: 6.7
Requires PHP: 8.0
License: Private
Text Domain: starter-theme
*/

/* ============================================
   DESIGN TOKENS
   Semantic CSS variables map onto the theme.json palette.
   Swap the hex placeholders (or the theme.json palette) per client.
   ============================================ */

:root {
	--color-primary:      var(--wp--preset--color--primary, #2c5f8a);
	--color-primary-dark: var(--wp--preset--color--primary-dark, #1f4763);
	--color-accent:       var(--wp--preset--color--accent, #d98e2b);
	--color-accent-dark:  var(--wp--preset--color--accent-dark, #b87421);
	--color-dark:         var(--wp--preset--color--dark, #1a1d1f);
	--color-grey-900:     var(--wp--preset--color--grey-900, #1c1c1c);
	--color-grey-700:     var(--wp--preset--color--grey-700, #44474a);
	--color-grey-600:     var(--wp--preset--color--grey-600, #6b6e72);
	--color-grey-400:     var(--wp--preset--color--grey-400, #a3a6aa);
	--color-grey-200:     var(--wp--preset--color--grey-200, #dcdee0);
	--color-grey-100:     var(--wp--preset--color--grey-100, #eef0f1);
	--color-light:        var(--wp--preset--color--light, #f4f5f6);
	--color-white:        #ffffff;
}

/* ============================================
   GLOBAL RESETS & FIXES
   ============================================ */

/* Fix: theme.json blockGap injects margin-block-start between template parts/blocks.
   With a fixed header this shows as a visible strip above the hero. Kill it. */
.wp-site-blocks > * + * {
	margin-block-start: 0;
}

/* Smooth scrolling for anchor links. */
html {
	scroll-behavior: smooth;
}

/* overflow-x: clip on BODY ONLY — never on html.
   - hidden/clip on html breaks position:fixed and hides the scrollbar sitewide.
   - clip on body contains horizontal overflow with neither side effect. */
body {
	overflow-x: clip;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

/* Header gotcha #1: the default 4rem padding on post-content pushes the hero
   under the fixed header. Remove it; spacing is handled per-template/per-hero. */
.wp-block-post-content {
	padding-top: 0 !important;
}

/* WordPress injects default margins between wp:html blocks.
   On full-bleed pages this creates visible body-color gaps between sections. */
.wp-block-html {
	margin-top: 0 !important;
	margin-bottom: 0 !important;
}

/* Defensive horizontal-overflow guard for the custom (wp:html) sections.
   Flex/grid items default to min-width:auto and grid `1fr` tracks size to their
   content's min-content, so a long unbreakable word (URL, email, placeholder
   token) can push a track past the viewport on narrow phones (~360px).
   `min-width:0` frees flex/grid items to shrink; `overflow-wrap:anywhere`
   (not `break-word`) reduces the min-content used for track sizing so the long
   word can break instead of forcing horizontal scroll. */
.wp-block-html * {
	min-width: 0;
}

.wp-block-html h1,
.wp-block-html h2,
.wp-block-html h3,
.wp-block-html h4,
.wp-block-html p,
.wp-block-html li,
.wp-block-html a,
.wp-block-html span,
.wp-block-html strong {
	overflow-wrap: anywhere;
}

/* WordPress admin bar offset — push the fixed header below the admin bar. */
.admin-bar .site-header {
	top: 32px;
}

@media screen and (max-width: 782px) {
	.admin-bar .site-header {
		top: 46px;
	}
}

/* Global selection colour. */
::selection {
	background-color: var(--color-accent);
	color: #fff;
}

/* ============================================
   TYPOGRAPHY
   ============================================ */

body {
	font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
	color: var(--color-grey-700);
}

h1, h2, h3, h4, h5, h6 {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	color: var(--color-dark);
}

/* ============================================
   HEADER

   Mode B (ACTIVE): transparent header that becomes solid on scroll.
   JS toggles `.scrolled` on .site-header past 20px of scroll.
   backdrop-filter lives on a ::before pseudo-element so it never creates a
   containing block that traps the position:fixed mobile nav overlay.
   ============================================ */

.site-header {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	z-index: 50;
	transition: box-shadow 0.3s ease;
}

.site-header::before {
	content: '';
	position: absolute;
	inset: 0;
	background-color: transparent;
	border-bottom: 1px solid transparent;
	transition: background-color 0.3s ease, backdrop-filter 0.3s ease, border-color 0.3s ease;
	z-index: -1;
	pointer-events: none;
}

.site-header.scrolled::before {
	background-color: rgba(255, 255, 255, 0.95);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--color-grey-200);
}

.site-header.scrolled {
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.08);
}

/* ----- Mode A (solid light header) — INACTIVE.
   To use Mode A instead of Mode B: remove the transparent defaults above and
   uncomment this block (give .site-header::before a permanent solid background).
.site-header::before {
	background-color: rgba(244, 245, 246, 0.95);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-bottom: 1px solid transparent;
}
.site-logo-text { color: var(--color-dark); }
.nav-link { color: var(--color-grey-700); }
.nav-mobile-toggle { color: var(--color-grey-700); }
----- end Mode A ----- */

.site-header-inner {
	max-width: 80rem; /* 1280px */
	margin: 0 auto;
	padding: 0 1rem;
	display: flex;
	justify-content: space-between;
	align-items: center;
	height: 5rem; /* 80px */
}

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

/* Logo = single horizontal line. Explicit colour token, NEVER inherit
   (global link styles override inherit). Light on the transparent header,
   dark once the header is solid. */
.site-logo-text {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	font-weight: 700;
	font-size: 1.5rem;
	line-height: 1;
	white-space: nowrap;
	color: var(--color-white);
}

.site-header.scrolled .site-logo-text {
	color: var(--color-dark);
}

/* Desktop nav */
.nav-desktop {
	display: none;
	align-items: center;
	gap: 2rem;
}

@media (min-width: 768px) {
	.nav-desktop {
		display: flex;
	}
	.site-header .nav-mobile-toggle {
		display: none !important;
	}
}

.nav-link {
	color: var(--color-white);
	font-weight: 600;
	text-decoration: none;
	transition: color 0.2s ease;
}

.nav-link:hover {
	color: var(--color-accent);
}

.site-header.scrolled .nav-link {
	color: var(--color-grey-700);
}

.site-header.scrolled .nav-link:hover {
	color: var(--color-primary);
}

/* Header CTA — never let it break character-by-character; hide on mobile
   (the mobile overlay carries its own CTA instead). */
.header-cta {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	background-color: var(--color-accent);
	color: #fff;
	padding: 0.625rem 1.5rem;
	border-radius: 9999px;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
	transition: all 0.2s ease;
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}

.header-cta:hover {
	background-color: var(--color-accent-dark);
	color: #fff;
	transform: scale(1.05);
}

@media (max-width: 768px) {
	.header-cta {
		display: none;
	}
}

/* Mobile menu toggle */
.nav-mobile-toggle {
	background: none;
	border: none;
	cursor: pointer;
	color: var(--color-white);
	font-size: 1.875rem;
	padding: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	line-height: 1;
	/* Fixed 44px tap target — also keeps the button hittable if the icon font
	   fails to load (it would otherwise collapse to near-zero width). */
	width: 2.75rem;
	height: 2.75rem;
}

/* Render the hamburger as a reliable unicode glyph (☰) in a system font, so the menu
   button works even if the icon font fails to load. Header markup uses <span class="menu-glyph">. */
.nav-mobile-toggle .menu-glyph::before {
	content: '\2630';
	font-family: system-ui, -apple-system, 'Segoe UI', sans-serif;
}

.site-header.scrolled .nav-mobile-toggle {
	color: var(--color-grey-700);
}

/* Mobile menu panel */
.nav-mobile-panel {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	background-color: #fff;
	border-bottom: 1px solid var(--color-grey-200);
	box-shadow: 0 12px 24px -4px rgba(0, 0, 0, 0.12);
	padding: 1rem 1.25rem 1.25rem;
}

.nav-mobile-panel.open {
	display: block;
}

.nav-mobile-panel nav {
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
	border-bottom: 1px solid var(--color-grey-100);
	padding-bottom: 0.75rem;
	margin-bottom: 0.75rem;
}

.nav-mobile-panel a {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	padding: 0.65rem 0.875rem;
	color: var(--color-grey-700);
	font-weight: 600;
	font-size: 0.9375rem;
	text-decoration: none;
	border-radius: 0.5rem;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.nav-mobile-panel a:hover {
	background-color: var(--color-grey-100);
	color: var(--color-dark);
}

.nav-mobile-panel a.nav-cta-mobile {
	background-color: var(--color-accent);
	color: #fff;
	justify-content: center;
	border-radius: 0.625rem;
	padding: 0.75rem 1rem;
	font-weight: 700;
}

.nav-mobile-panel a.nav-cta-mobile:hover {
	background-color: var(--color-accent-dark);
	color: #fff;
}

@media (min-width: 768px) {
	.nav-mobile-panel {
		display: none !important;
	}
}

/* Inner pages (everything except the homepage template) have no full-bleed hero
   behind the header, so force the header into its solid state for readability and
   push the page content down to clear the fixed header. */
body:not(.page-template-page-homepage) {
	padding-top: 5rem;
}

body:not(.page-template-page-homepage) .site-header::before {
	background-color: rgba(255, 255, 255, 0.95);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--color-grey-200);
}

body:not(.page-template-page-homepage) .site-logo-text {
	color: var(--color-dark);
}

body:not(.page-template-page-homepage) .nav-link {
	color: var(--color-grey-700);
}

body:not(.page-template-page-homepage) .nav-link:hover {
	color: var(--color-primary);
}

body:not(.page-template-page-homepage) .nav-mobile-toggle {
	color: var(--color-grey-700);
}

/* ============================================
   FOOTER
   ============================================ */

.site-footer {
	background-color: var(--color-grey-900);
	color: var(--color-grey-400);
	padding: 4rem 0;
	border-top: 8px solid var(--color-accent);
}

.site-footer h3,
.site-footer h4 {
	color: #fff;
}

.site-footer a {
	color: var(--color-grey-400);
	text-decoration: none;
	transition: color 0.2s ease;
}

.site-footer a:hover {
	color: #fff;
}

.footer-inner {
	max-width: 80rem;
	margin: 0 auto;
	padding: 0 1rem;
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
}

@media (min-width: 768px) {
	.footer-inner {
		grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr);
	}
}

.footer-brand-name {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	font-weight: 700;
	font-size: 1.5rem;
	margin-bottom: 1rem;
}

.footer-section-title {
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	font-size: 0.875rem;
	margin-bottom: 1.5rem;
}

.footer-social-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 9999px;
	background-color: var(--color-grey-700);
	color: #fff;
	transition: background-color 0.2s ease;
}

.footer-social-link:hover {
	color: #fff;
	background-color: var(--color-accent);
}

.footer-contact-item {
	display: flex;
	align-items: flex-start;
	gap: 0.75rem;
	margin-bottom: 1rem;
}

.footer-contact-icon {
	color: var(--color-accent);
	font-size: 1.25rem;
	margin-top: 0.125rem;
	flex-shrink: 0;
}

.footer-links-list {
	list-style: none;
	padding: 0;
	margin: 0;
}

.footer-links-list li {
	margin-bottom: 0.5rem;
}

.footer-bottom {
	max-width: 80rem;
	margin: 3rem auto 0;
	padding: 2rem 1rem 0;
	border-top: 1px solid var(--color-grey-700);
	font-size: 0.875rem;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 0.5rem;
}

@media (min-width: 768px) {
	.footer-bottom {
		flex-direction: row;
		justify-content: space-between;
		text-align: left;
	}
}

/* ============================================
   HERO / COVER SECTIONS
   ============================================ */

.hero-section {
	position: relative;
	min-height: 100vh;
	display: flex;
	align-items: center;
	justify-content: center;
	padding-top: 5rem; /* clear fixed header */
	background-size: cover;
	background-position: center;
}

.hero-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(rgba(26, 29, 31, 0.45), rgba(26, 29, 31, 0.7));
	z-index: 1;
}

.hero-content {
	position: relative;
	z-index: 2;
	text-align: center;
	padding: 0 1rem;
	max-width: 56rem;
	width: 100%;
	min-width: 0; /* allow the flex item to shrink below its content's intrinsic width */
	margin: 0 auto;
}

/* Never let a long word push past the viewport (placeholder tokens, URLs, etc.) */
.hero-heading,
.hero-subtitle,
.hero-eyebrow {
	overflow-wrap: anywhere;
}

.hero-eyebrow {
	color: var(--color-accent);
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	font-size: 0.875rem;
	margin-bottom: 1rem;
}

.hero-heading {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	font-weight: 700;
	color: #fff;
	font-size: 3rem;
	line-height: 1.1;
	margin-bottom: 1.5rem;
	text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}

@media (min-width: 768px) {
	.hero-heading {
		font-size: 4.5rem;
	}
}

.hero-heading em {
	color: var(--color-grey-200);
	font-style: italic;
}

.hero-subtitle {
	color: var(--color-light);
	font-size: 1.25rem;
	font-weight: 300;
	margin-bottom: 2.5rem;
	max-width: 42rem;
	margin-left: auto;
	margin-right: auto;
	text-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

@media (min-width: 768px) {
	.hero-subtitle {
		font-size: 1.5rem;
	}
}

.hero-actions {
	display: flex;
	flex-direction: column;
	gap: 1rem;
	justify-content: center;
	align-items: center;
}

@media (min-width: 640px) {
	.hero-actions {
		flex-direction: row;
	}
}

.btn-ghost {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	border: 2px solid #fff;
	color: #fff;
	padding: 0.75rem 2rem;
	border-radius: 9999px;
	font-weight: 700;
	font-size: 1.125rem;
	text-decoration: none;
	transition: all 0.2s ease;
}

.btn-ghost:hover {
	background-color: #fff;
	color: var(--color-dark);
}

.btn-primary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	background-color: var(--color-accent);
	color: #fff;
	padding: 0.75rem 2rem;
	border-radius: 9999px;
	font-weight: 700;
	font-size: 1.125rem;
	text-decoration: none;
	transition: all 0.2s ease;
	box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}

.btn-primary:hover {
	background-color: var(--color-accent-dark);
	color: #fff;
}

/* ============================================
   SECTION PATTERNS
   ============================================ */

.section {
	padding: 5rem 0;
}

@media (min-width: 768px) {
	.section {
		padding: 8rem 0;
	}
}

.section-inner {
	max-width: 80rem;
	margin: 0 auto;
	padding: 0 1rem;
}

.section-eyebrow {
	color: var(--color-accent);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	font-size: 0.875rem;
	margin-bottom: 0.5rem;
}

.section-heading {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	font-weight: 700;
	color: var(--color-dark);
	font-size: 2.25rem;
	margin-bottom: 1.5rem;
}

@media (min-width: 768px) {
	.section-heading {
		font-size: 3rem;
	}
}

/* Background variants */
.section-white { background-color: #fff; }
.section-light { background-color: var(--color-light); }
.section-grey  { background-color: var(--color-grey-100); }
.section-dark  { background-color: var(--color-dark); color: var(--color-light); }
.section-dark .section-heading { color: #fff; }

/* Two-column helper (stacks on mobile, splits on ≥1024px) */
.two-col {
	display: grid;
	grid-template-columns: 1fr;
	gap: 4rem;
	align-items: center;
}

@media (min-width: 1024px) {
	.two-col {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
}

/* ============================================
   UNIT CARD (generic product / room / property card)
   ============================================ */

.unit-card {
	background-color: #fff;
	border-radius: 1.5rem;
	overflow: hidden;
	box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
	border: 1px solid var(--color-grey-200);
	display: flex;
	flex-direction: column;
	margin-bottom: 4rem;
}

@media (min-width: 1024px) {
	.unit-card {
		flex-direction: row;
	}
	.unit-card.reversed {
		flex-direction: row-reverse;
	}
}

.unit-card-image {
	position: relative;
	height: 24rem;
	overflow: hidden;
	background-color: var(--color-grey-100);
}

@media (min-width: 1024px) {
	.unit-card-image {
		width: 50%;
		height: auto;
	}
}

.unit-card-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.7s ease;
}

.unit-card:hover .unit-card-image img {
	transform: scale(1.05);
}

.unit-card-badge {
	position: absolute;
	bottom: 1.5rem;
	left: 1.5rem;
	background-color: var(--color-accent);
	color: #fff;
	font-size: 0.75rem;
	font-weight: 700;
	text-transform: uppercase;
	padding: 0.25rem 0.75rem;
	border-radius: 9999px;
}

.unit-card.reversed .unit-card-badge {
	left: auto;
	right: 1.5rem;
}

.unit-card-content {
	padding: 2rem;
	display: flex;
	flex-direction: column;
	justify-content: center;
}

@media (min-width: 1024px) {
	.unit-card-content {
		width: 50%;
		padding: 3rem;
	}
}

.unit-card-title {
	font-family: 'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif;
	font-weight: 700;
	font-size: 1.875rem;
	color: var(--color-dark);
	margin-bottom: 1rem;
}

.unit-features {
	list-style: none;
	padding: 0;
	margin: 0 0 2rem;
	display: grid;
	grid-template-columns: 1fr;
	gap: 0.75rem;
}

@media (min-width: 640px) {
	.unit-features {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.unit-features li {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	color: var(--color-grey-700);
}

.unit-features .check-icon {
	color: var(--color-accent);
	font-size: 1.25rem;
	flex-shrink: 0;
}

.unit-card-footer {
	margin-top: auto;
	padding-top: 1.5rem;
	border-top: 1px solid var(--color-grey-200);
	display: flex;
	justify-content: space-between;
	align-items: center;
}

.unit-link {
	color: var(--color-primary);
	font-weight: 700;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
	transition: color 0.2s ease;
}

.unit-link:hover {
	color: var(--color-accent);
}

/* ============================================
   GALLERY GRID
   ============================================ */

.gallery-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 1rem;
}

@media (min-width: 768px) {
	.gallery-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.gallery-grid img,
.gallery-grid .gallery-tile {
	width: 100%;
	height: 14rem;
	object-fit: cover;
	border-radius: 1rem;
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}

/* Placeholder tile (no image yet) */
.gallery-tile {
	display: flex;
	align-items: center;
	justify-content: center;
	background-color: var(--color-grey-100);
	color: var(--color-grey-400);
	font-weight: 600;
}

/* ============================================
   CONTACT FORM 7 — BASE STYLING
   ============================================ */

.wpcf7 *,
.wpcf7 *::before,
.wpcf7 *::after {
	box-sizing: border-box;
}

.wpcf7 input[type="text"],
.wpcf7 input[type="email"],
.wpcf7 input[type="tel"],
.wpcf7 input[type="url"],
.wpcf7 input[type="date"],
.wpcf7 input[type="number"],
.wpcf7 textarea,
.wpcf7 select {
	width: 100%;
	padding: 0.75rem 1rem;
	border: 2px solid var(--color-grey-200);
	border-radius: 0.5rem;
	background-color: #fff;
	color: var(--color-grey-700);
	font-family: inherit;
	font-size: 1rem;
	transition: border-color 0.2s ease;
	outline: none;
}

.wpcf7 input:focus,
.wpcf7 textarea:focus,
.wpcf7 select:focus {
	border-color: var(--color-accent);
}

.wpcf7 textarea {
	min-height: 8rem;
	resize: vertical;
}

.wpcf7 input[type="submit"] {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	background-color: var(--color-accent); /* accent submit button */
	color: #fff;
	font-weight: 700;
	padding: 1rem 2.5rem;
	border: none;
	border-radius: 0.75rem;
	font-size: 1.125rem;
	cursor: pointer;
	transition: all 0.2s ease;
	box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}

.wpcf7 input[type="submit"]:hover {
	background-color: var(--color-accent-dark);
	transform: translateY(-2px);
}

.wpcf7 .wpcf7-acceptance label {
	display: flex;
	align-items: flex-start;
	gap: 0.75rem;
	cursor: pointer;
	font-size: 0.875rem;
	color: var(--color-grey-600);
}

.wpcf7 .wpcf7-acceptance input[type="checkbox"] {
	width: 1.25rem;
	height: 1.25rem;
	margin-top: 0.125rem;
	flex-shrink: 0;
}

/* Form card wrapper */
.form-card {
	max-width: 48rem;
	margin: 0 auto;
	background-color: #fff;
	border-radius: 1.5rem;
	padding: 1.5rem 1.25rem;
	box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
	box-sizing: border-box;
	width: 100%;
	min-width: 0;
}

@media (min-width: 640px) {
	.form-card {
		padding: 2.5rem;
	}
}

/* Responsive form grid — single col on mobile, two cols on ≥640px */
.form-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0 1.5rem;
}

@media (min-width: 640px) {
	.form-grid {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
}

.wpcf7 {
	min-width: 0;
	width: 100%;
}

/* ============================================
   GLOBAL DESIGN CONSISTENCY
   Border-radius + box-shadow on images, buttons, cards — applied globally.
   ============================================ */

.wp-block-image img {
	border-radius: 1rem;
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}

.wp-block-button__link {
	border-radius: 9999px;
}

/* Custom scrollbar */
::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: var(--color-grey-100); }
::-webkit-scrollbar-thumb { background: var(--color-grey-400); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--color-grey-600); }

/* ============================================
   UTILITY CLASSES
   ============================================ */

.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border-width: 0;
}

/* ============================================================================
   COMMON SECTION COMPONENTS
   Demo-agnostic building blocks. The gemini.html and camping-boerlap templates
   (and most hospitality demos) reuse the same sections: hero, feature cards,
   vertical listing/price cards, a two-image "about" stack, a gallery mosaic, and
   a coloured booking/CTA section with a form card. Use these classes in
   page-content/*.html; recolour only via the --color-* tokens / theme.json.
   ============================================================================ */

/* ----- Section heading accent bar (thin underline under a centred heading) ----- */
.heading-bar {
	width: 6rem;
	height: 3px;
	background-color: var(--color-accent);
	margin: 0 auto 1.5rem;
	border-radius: 2px;
}

/* ----- Hero scroll-down indicator (optional; sits at the bottom of a full hero) ----- */
.hero-scroll {
	position: absolute;
	bottom: 2.5rem;
	left: 50%;
	transform: translateX(-50%);
	color: var(--color-light);
	font-size: 1.875rem;
	opacity: 0.85;
	text-decoration: none;
	z-index: 2;
	animation: starter-bounce 1.6s infinite;
}
.hero-scroll:hover { opacity: 1; color: var(--color-light); }
@keyframes starter-bounce {
	0%, 100% { transform: translate(-50%, 0); }
	50%      { transform: translate(-50%, -10px); }
}

/* ----- Feature / USP cards (icon circle + title + blurb) ----- */
.feature-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 2rem;
}
@media (min-width: 640px)  { .feature-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .feature-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.feature-card {
	background-color: var(--color-light);
	border: 1px solid var(--color-grey-200);
	border-radius: 1.5rem;
	padding: 2rem;
	text-align: center;
	transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.feature-card:hover { transform: translateY(-5px); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1); }
.feature-icon {
	width: 4rem; height: 4rem; margin: 0 auto 1.25rem;
	background-color: #fff;
	border-radius: 9999px;
	display: flex; align-items: center; justify-content: center;
	color: var(--color-accent); font-size: 1.5rem;
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.06);
}
.feature-card h3 {
	font-weight: 700; font-size: 1.25rem;
	color: var(--color-primary); margin: 0 0 0.5rem;
}
.feature-card p { font-size: 0.9rem; color: var(--color-grey-700); margin: 0; }

/* ----- Vertical listing / price card (image on top, badge, body, features, action) ----- */
.listing-grid {
	display: grid; grid-template-columns: 1fr; gap: 2.5rem;
}
@media (min-width: 768px)  { .listing-grid.cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .listing-grid.cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.listing-card {
	background-color: #fff;
	border: 1px solid var(--color-grey-200);
	border-radius: 1rem;
	overflow: hidden;
	display: flex; flex-direction: column;
	box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.08);
	transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.listing-card:hover { transform: translateY(-5px); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.12); }
.listing-media { position: relative; height: 16rem; overflow: hidden; }
.listing-media img {
	width: 100%; height: 100%; object-fit: cover;
	border-radius: 0; box-shadow: none; transition: transform 0.5s ease;
}
.listing-card:hover .listing-media img { transform: scale(1.05); }
.listing-badge {
	position: absolute; top: 1rem; right: 1rem;
	background-color: var(--color-light);
	color: var(--color-primary);
	padding: 0.25rem 0.75rem; border-radius: 9999px;
	font-size: 0.875rem; font-weight: 700;
	box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.15);
}
.listing-body { padding: 2rem; display: flex; flex-direction: column; flex-grow: 1; }
.listing-title { font-weight: 700; font-size: 1.5rem; color: var(--color-primary); margin: 0 0 0.5rem; }
.listing-eyebrow {
	font-size: 0.78rem; font-weight: 600; color: var(--color-accent);
	text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 1rem;
}
.listing-desc { color: var(--color-grey-700); margin-bottom: 1.5rem; flex-grow: 1; }
.listing-features {
	display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0.75rem 1rem; font-size: 0.875rem;
	margin-bottom: 1.5rem; padding-bottom: 1.5rem;
	border-bottom: 1px solid var(--color-grey-200);
}
.listing-features > * { display: flex; align-items: center; gap: 0.5rem; }
.listing-features i { color: var(--color-primary); width: 1.25rem; text-align: center; flex-shrink: 0; }
.listing-btn {
	display: block; width: 100%; text-align: center;
	border: 2px solid var(--color-primary); color: var(--color-primary);
	background: transparent; font-weight: 700; padding: 0.75rem;
	border-radius: 0.5rem; text-decoration: none; cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}
.listing-btn:hover { background-color: var(--color-primary); color: var(--color-light); }

/* ----- Two-image "about" stack (main image + overlapping inset) ----- */
.media-stack { position: relative; }
.media-stack > img {
	width: 100%; display: block;
	border-radius: 1rem; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.2);
}
.media-stack-inset {
	position: absolute; bottom: -2rem; right: -2rem; width: 60%;
	border: 8px solid var(--color-light);
	border-radius: 1rem; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
	display: none;
}
@media (min-width: 768px) { .media-stack-inset { display: block; } }
.media-stack-inset img { width: 100%; display: block; border-radius: 0.5rem; box-shadow: none; }

/* Highlight / call-out box (coloured left border) */
.callout {
	background-color: var(--color-grey-100);
	padding: 1.5rem; border-radius: 0.5rem;
	border-left: 4px solid var(--color-accent);
	margin: 1.5rem 0;
}
.callout h4 { font-weight: 700; font-size: 1.25rem; color: var(--color-primary); margin: 0 0 0.5rem; }
.callout p { font-size: 0.9rem; margin: 0; }

/* ----- Gallery mosaic (add .span-2 to a tile to make it twice as wide on desktop) ----- */
.gallery-mosaic {
	display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;
}
@media (min-width: 768px) { .gallery-mosaic { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.gallery-mosaic figure {
	margin: 0; overflow: hidden; border-radius: 1rem;
	height: 12rem; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}
@media (min-width: 768px) { .gallery-mosaic figure { height: 16rem; } }
.gallery-mosaic img {
	width: 100%; height: 100%; object-fit: cover;
	border-radius: 0; box-shadow: none; transition: transform 0.5s ease;
}
.gallery-mosaic figure:hover img { transform: scale(1.1); }
@media (min-width: 768px) { .gallery-mosaic .span-2 { grid-column: span 2; } }

/* ----- CTA / booking section (coloured bg + faded image + form card) ----- */
.cta-section {
	background-color: var(--color-primary);
	color: var(--color-light);
	position: relative; overflow: hidden;
}
.cta-bg { position: absolute; inset: 0; opacity: 0.1; }
.cta-bg img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; box-shadow: none; }
.cta-inner { position: relative; z-index: 2; max-width: 56rem; margin: 0 auto; padding: 0 1rem; }
.cta-section .section-heading,
.cta-section h2 { color: var(--color-light); }
.cta-card {
	background-color: var(--color-light);
	color: var(--color-grey-700);
	padding: 2rem; border-radius: 1rem;
	box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.2);
}
@media (min-width: 768px) { .cta-card { padding: 2.5rem; } }

/* CF7 inside a .cta-card: two-column grid + labels + an options box. Pair with
   add_filter('wpcf7_autop_or_not','__return_false') in functions.php (already set). */
.cta-card .cf7-grid { display: grid; grid-template-columns: 1fr; gap: 1.25rem 1.5rem; }
@media (min-width: 640px) { .cta-card .cf7-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.cta-card .cf7-grid .cf7-full { grid-column: 1 / -1; }
.cta-card label { display: block; font-size: 0.875rem; font-weight: 700; margin-bottom: 0.4rem; color: var(--color-grey-700); }
.cta-card .cf7-options {
	background-color: var(--color-grey-100);
	border: 1px solid var(--color-grey-200);
	border-radius: 0.5rem; padding: 1rem; display: grid; gap: 0.5rem;
}
.cta-card .cf7-options .wpcf7-list-item { display: block; margin: 0; }
.cta-card .cf7-fineprint { font-size: 0.75rem; text-align: center; opacity: 0.7; margin-top: 1rem; }

/* ----- Property / detail page (page-property template) -----
   DEFAULT architecture: one page per property/room/unit (not a single one-pager).
   The homepage cards link to /<slug>; each property page uses this full-bleed image
   hero with the name overlaid at the bottom; the footer deep-links to the same pages. */
body.page-template-page-property { padding-top: 0; } /* hero sits under the floating header */
.property-hero {
	position: relative;
	height: 62vh;
	min-height: 26rem;
	display: flex;
	align-items: flex-end;
	background-size: cover;
	background-position: center;
	padding: 3rem 0;
}
.property-hero-overlay {
	position: absolute; inset: 0;
	background: linear-gradient(to top, rgba(26,29,31,0.85) 0%, rgba(26,29,31,0.35) 50%, transparent 100%);
	z-index: 1;
}
.property-hero-content {
	position: relative; z-index: 2;
	max-width: 80rem; margin: 0 auto; padding: 0 1rem; width: 100%;
}
.property-hero-content h1 {
	font-weight: 700; font-size: 3rem; color: #fff;
	margin: 0 0 0.5rem; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
@media (min-width: 768px) { .property-hero-content h1 { font-size: 4rem; } }
.property-hero-subtitle {
	color: var(--color-light);
	font-size: 0.95rem; font-weight: 700;
	letter-spacing: 0.08em; text-transform: uppercase; margin: 0;
}
.property-features { list-style: none; padding: 0; margin: 0 0 2rem; }
.property-features li { display: flex; align-items: center; gap: 0.625rem; margin-bottom: 0.75rem; color: var(--color-grey-700); }
.property-features i, .property-features .check-icon { color: var(--color-accent); flex-shrink: 0; }
/* (section backgrounds: reuse the existing .section-white / .section-light / .section-grey / .section-dark) */

/* ==========================================================================
   COMPONENT LIBRARY v1.1 — additive components shared by BOTH demo families
   ("gemini": Cormorant/Inter, hero+2-col+dark-cards+pairs+CTA-banner+pricing-form;
    "camping": Playfair/Nunito, hero+feature-cards+listing-cards+overlap-about+
    reverse-checklist+gallery+split-booking+privacy-footer).
   All neutral-token based. New client = copy theme, these come along. See THEME-FACTS.md.
   ========================================================================== */

/* --- Listing card: force dark text on the white card, even when the card sits
   inside a .section-dark (fixes the white-on-white feature list). --- */
.listing-card { color: var(--color-grey-700); }
.listing-card .listing-features li { color: var(--color-grey-700); }

/* Dark listing-card variant (an accent "experience" card among white ones). */
.listing-card.is-dark { background-color: var(--color-dark); border-color: transparent; color: rgba(255,255,255,0.82); }
.listing-card.is-dark .listing-title { color: #fff; }
.listing-card.is-dark .listing-eyebrow { color: var(--color-accent); }
.listing-card.is-dark .listing-desc { color: rgba(255,255,255,0.82); }
.listing-card.is-dark .listing-features { border-color: rgba(255,255,255,0.15); color: rgba(255,255,255,0.82); }
.listing-card.is-dark .listing-features li { color: rgba(255,255,255,0.82); }
.listing-card.is-dark .listing-features i { color: var(--color-accent); }
.listing-card.is-dark .listing-btn { border-color: rgba(255,255,255,0.5); color: #fff; }
.listing-card.is-dark .listing-btn:hover { background-color: #fff; color: var(--color-dark); }

/* --- CTA section: default vertical breathing room (was 0 → cramped banners). --- */
.cta-section { padding-top: 6rem; padding-bottom: 6rem; }

/* --- Image-backed CTA banner: full-bleed photo + dark overlay + centred text.
   Set the photo via inline style="background-image:url(...)"; tint per client by
   overriding --cta-overlay (e.g. a dark-green rgba). --- */
.cta-banner {
	--cta-overlay: rgba(26, 29, 31, 0.78);
	position: relative; overflow: hidden;
	padding: 7rem 1.5rem; text-align: center;
	background-size: cover; background-position: center;
}
.cta-banner::before { content: ''; position: absolute; inset: 0; background: var(--cta-overlay); }
.cta-banner-inner { position: relative; z-index: 2; max-width: 46rem; margin: 0 auto; }
.cta-banner-eyebrow { text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.8rem; font-weight: 700; color: var(--color-accent); margin: 0 0 0.75rem; }
.cta-banner h2 { font-family: var(--wp--preset--font-family--serif, Georgia, serif); color: #fff; font-size: clamp(2rem, 4vw, 2.75rem); line-height: 1.1; margin: 0 0 1rem; }
.cta-banner p { color: rgba(255,255,255,0.9); margin: 0 auto 2rem; max-width: 34rem; line-height: 1.6; }
.cta-banner-actions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; }

/* --- Button variants for banners / dark sections. --- */
.btn-accent {
	display: inline-flex; align-items: center; gap: 0.5rem;
	background-color: var(--color-accent); color: #fff;
	padding: 0.95rem 2rem; border-radius: 0.5rem; font-weight: 700; text-decoration: none;
	box-shadow: 0 10px 20px rgba(0,0,0,0.18); transition: background-color 0.2s ease;
}
.btn-accent:hover { background-color: var(--color-accent-dark); color: #fff; }
.btn-outline-light {
	display: inline-flex; align-items: center; gap: 0.5rem;
	background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.55); color: #fff;
	padding: 0.95rem 2rem; border-radius: 0.5rem; font-weight: 700; text-decoration: none; transition: background-color 0.2s ease;
}
.btn-outline-light:hover { background: rgba(255,255,255,0.22); color: #fff; }

/* --- Rich feature list (icon + bold serif title + description) for alternating
   "about / experience" 2-col sections (e.g. camping demo's #beleving). --- */
.feature-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 1.25rem; }
.feature-list li { display: flex; align-items: flex-start; gap: 1rem; }
.feature-list i { color: var(--color-primary); font-size: 1.15rem; margin-top: 0.3rem; flex-shrink: 0; }
.feature-list strong { display: block; font-family: var(--wp--preset--font-family--serif, Georgia, serif); font-size: 1.2rem; color: var(--color-dark); margin-bottom: 0.2rem; }
.feature-list span { color: var(--color-grey-700); font-size: 0.95rem; line-height: 1.6; }

/* --- Decorative round badge overlaying a .media-stack image composition. --- */
.media-stack .media-badge {
	position: absolute; z-index: 30; top: 50%; left: 0; transform: translate(-25%, -50%);
	width: 6rem; height: 6rem; border-radius: 9999px;
	background-color: var(--color-accent); color: #fff;
	display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center;
	box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}
.media-stack .media-badge .media-badge-num { font-family: var(--wp--preset--font-family--serif, Georgia, serif); font-size: 1.5rem; font-weight: 700; line-height: 1; }
.media-stack .media-badge .media-badge-label { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 0.2rem; }

/* --- Booking split: info aside + form inside one rounded card. Sits well inside a
   .cta-section image background. Add .is-dark to .booking-info for a dark aside. --- */
.booking-split { display: grid; gap: 0; border-radius: 1.25rem; overflow: hidden; background-color: var(--color-white); box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25); }
@media (min-width: 768px) { .booking-split { grid-template-columns: 2fr 3fr; } }
.booking-split > * { min-width: 0; }
.booking-info { background-color: var(--color-light); padding: 2.5rem; display: flex; flex-direction: column; justify-content: space-between; gap: 1.5rem; }
.booking-info.is-dark { background-color: var(--color-dark); color: rgba(255,255,255,0.85); }
.booking-info.is-dark h2, .booking-info.is-dark h3 { color: #fff; }
.booking-form { padding: 2.5rem; background-color: var(--color-white); }

/* --- Property/detail page: photo grid (1 large + 2 small) to balance the text
   column height. Real photos drop straight into the same 3 slots. --- */
.property-gallery { display: grid; gap: 1rem; }
.property-gallery .pg-main img { width: 100%; height: auto; display: block; border-radius: 1rem; box-shadow: 0 20px 25px -5px rgba(0,0,0,0.12); }
.property-gallery .pg-row { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 1rem; }
.property-gallery .pg-row img { width: 100%; height: 11rem; object-fit: cover; display: block; border-radius: 0.75rem; box-shadow: 0 10px 15px -3px rgba(0,0,0,0.08); }

/* --- Footer bottom utility links row (Contact · Privacy · Terms). --- */
.footer-meta { margin-top: 0.6rem; font-size: 0.85rem; }
.footer-meta a { color: rgba(255,255,255,0.7); text-decoration: none; }
.footer-meta a:hover { color: #fff; }

/* --- Reveal-on-scroll: both demo families fade sections in. assets/js/header.js
   toggles .is-visible. Respects reduced-motion; degrades to visible without JS. --- */
.reveal, .fade-in-up { opacity: 0; transform: translateY(28px); transition: opacity 0.7s ease, transform 0.7s ease; will-change: opacity, transform; }
.reveal.is-visible, .fade-in-up.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .reveal, .fade-in-up { opacity: 1; transform: none; transition: none; } }

/* --- Price list (seasonal tariff rows) for a pricing aside, e.g. inside .booking-info. --- */
.price-list { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 1rem; }
.price-row { display: flex; justify-content: space-between; align-items: center; gap: 1rem; background: var(--color-grey-100); border-radius: 0.5rem; padding: 0.7rem 1rem; }
.price-row .price-value { font-weight: 700; white-space: nowrap; }
.booking-info.is-dark .price-row { background: rgba(255,255,255,0.08); }

/* --- Lightbox: click a gallery / property image to view it enlarged. JS in assets/js/header.js;
   auto-applies to images inside .property-gallery / .gallery-mosaic / .gallery-grid, or any [data-lightbox]. --- */
.property-gallery img, .gallery-mosaic img, .gallery-grid img, [data-lightbox] { cursor: zoom-in; }
.lightbox-overlay { position: fixed; inset: 0; z-index: 9999; display: none; align-items: center; justify-content: center; padding: 1.5rem; background: rgba(0,0,0,0.9); cursor: zoom-out; opacity: 0; transition: opacity 0.25s ease; }
.lightbox-overlay.open { display: flex; opacity: 1; }
.lightbox-overlay img { max-width: 94vw; max-height: 92vh; border-radius: 0.5rem; box-shadow: 0 20px 60px rgba(0,0,0,0.5); cursor: default; }
.lightbox-close { position: absolute; top: 1rem; right: 1.25rem; width: 2.75rem; height: 2.75rem; border: none; border-radius: 9999px; background: rgba(255,255,255,0.15); color: #fff; font-size: 1.5rem; line-height: 1; cursor: pointer; transition: background-color 0.2s ease; }
.lightbox-close:hover { background: rgba(255,255,255,0.3); }

/* ============================================================================
   MOULIN DE LAVAL — client styles (Watermolen build)
   Appended below the starter component library (regression-safe; do NOT edit
   the starter rules above). Booking one-pager: availability schema + request
   form. Status colours are semantic (vrij = green / bezet = red); everything
   else uses the theme tokens.
   ============================================================================ */

/* --- Header mode. This front page (page-homepage template) has NO full-bleed
   hero, so force the header into its solid state from first paint and push the
   content clear of the fixed header — mirroring the starter's inner-page rules. */
body.page-template-page-homepage { padding-top: 5rem; }
body.page-template-page-homepage .site-header::before {
	background-color: rgba(255, 255, 255, 0.95);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--color-grey-200);
}
body.page-template-page-homepage .site-logo-text { color: var(--color-dark); }
body.page-template-page-homepage .nav-link { color: var(--color-grey-700); }
body.page-template-page-homepage .nav-link:hover { color: var(--color-primary); }
body.page-template-page-homepage .nav-mobile-toggle { color: var(--color-grey-700); }

/* --- Intro band: compact, no image. Sits right under the solid header. --- */
.molen-intro { background: var(--color-white); border-bottom: 1px solid var(--color-grey-200); }
.molen-intro .section-inner { max-width: 880px; }
.molen-intro .section-eyebrow { color: var(--color-accent); }
.molen-intro p { color: var(--color-grey-700); }
.molen-intro a { color: var(--color-primary); }

/* --- Header right-hand pair: language switcher + "Terug naar website" link. --- */
.site-header-actions { display: flex; align-items: center; gap: 0.6rem; flex: none; }

/* --- NL | EN switcher. This template's header is solid white from first paint
   (see the header-mode block above), so the tokens are read against white /
   grey-100 — never over the banner image, which sits below the header in the
   page content. Current language is a <span>, not a link. --- */
.molen-lang { display: inline-flex; align-items: center; gap: 0.15rem; flex: none; }
.molen-lang-item {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 2.1rem; min-height: 2rem; padding: 0.2rem 0.45rem;
	font-size: 0.85rem; font-weight: 700; letter-spacing: 0.04em;
	border-radius: 9999px; text-decoration: none;
	color: var(--color-grey-600);            /* 5.0:1 on white */
	transition: color 0.2s ease, background-color 0.2s ease;
}
a.molen-lang-item:hover { color: var(--color-primary); background: var(--color-grey-100); }
a.molen-lang-item:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.molen-lang-item.is-current { color: var(--color-white); background: var(--color-primary); cursor: default; } /* 6.4:1 */
.molen-lang-sep { color: var(--color-grey-200); font-size: 0.85rem; line-height: 1; }

/* --- Header "Terug naar website" link: always visible (desktop + mobile). --- */
.molen-back-link {
	display: inline-flex; align-items: center; gap: 0.5rem;
	font-size: 0.95rem; font-weight: 600; text-decoration: none;
	color: var(--color-primary);
	padding: 0.5rem 1rem; border-radius: 9999px;
	border: 1px solid var(--color-grey-200);
	background: var(--color-white);
	transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
	white-space: nowrap;
}
.molen-back-link:hover { color: var(--color-white); background: var(--color-primary); border-color: var(--color-primary); }
.molen-back-link i { font-size: 0.85em; }
.molen-back-short { display: none; }
@media (max-width: 480px) {
	.molen-back-full { display: none; }
	.molen-back-short { display: inline; }
	.molen-back-link { padding: 0.45rem 0.85rem; }
}

/* --- Mobile reflow for the three-control header. Measured, not guessed: before
   the switcher existed the 375px line was already at ~99% capacity (logo 221px +
   back link 110px inside 343px of usable width), so fitting a third control means
   compacting all three. ≤768px tightens the switcher; ≤480px also shrinks the
   wordmark, drops the "|" separator and drops the back link's arrow glyph (its
   text still says Website). Must come after the block above to win on source order. --- */
@media (max-width: 768px) {
	.site-header-actions { gap: 0.4rem; }
	.molen-lang-item { min-width: 1.95rem; padding: 0.2rem 0.35rem; font-size: 0.8rem; }
}
@media (max-width: 480px) {
	.site-header-inner { padding: 0 0.75rem; }
	.site-logo { gap: 0.5rem; }
	.site-logo-text { font-size: 1.1rem; }
	.site-header-actions { gap: 0.3rem; }
	.molen-lang { gap: 0; }
	.molen-lang-sep { display: none; }
	.molen-lang-item { min-width: 1.75rem; min-height: 1.9rem; padding: 0.15rem 0.25rem; font-size: 0.76rem; }
	.molen-back-link { gap: 0; padding: 0.4rem 0.6rem; }
	.molen-back-link i { display: none; }
}

/* --- Footer: simple centred contact line (no business credit). --- */
.molen-footer { max-width: 1280px; margin: 0 auto; padding: 0 1.5rem 1.5rem; text-align: center; }
.molen-footer .footer-brand-name { color: var(--color-white); margin: 0 0 0.75rem; }
.molen-footer-contact { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 0.5rem 0.9rem; margin: 0; }
.molen-footer-contact a { color: var(--color-grey-400); text-decoration: none; }
.molen-footer-contact a:hover { color: var(--color-white); }
.molen-footer-contact i { color: var(--color-accent); margin-right: 0.35rem; }
.molen-footer-sep { color: var(--color-grey-600); }
@media (max-width: 560px) {
	.molen-footer-sep { display: none; }
	.molen-footer-contact { flex-direction: column; gap: 0.6rem; }
}

/* ============================================================================
   AVAILABILITY SCHEMA  ([weekoverzicht])  — real table on desktop, stacked
   cards at 375px (no horizontal scroll). Status colours are semantic
   (vrij = green / bezet = muted red); the modern page inverts the old page's
   green=bezet convention. Layout + type use the theme tokens.
   ============================================================================ */
.molen-schema-section .section-inner { max-width: 1100px; }
.molen-schema-intro { color: var(--color-grey-600); max-width: 62ch; }

.wm-schema {
	--wm-vrij: #2f7d54;
	--wm-vrij-bg: #e7f3ec;
	--wm-bezet: #b04a43;
	--wm-bezet-bg: #f3e7e6;
	margin-top: 1.5rem;
}
.wm-schema, .wm-schema * { box-sizing: border-box; }
.wm-schema *, .wm-schema *::before { min-width: 0; }
.wm-hidden { display: none !important; }

/* Controls: year selector (tabs) */
.wm-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 1.5rem; margin-bottom: 1.1rem; }
.wm-years { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.wm-year-btn { display: inline-flex; align-items: center; gap: 0.4rem; min-height: 40px; padding: 0.4rem 1rem; border: 1px solid var(--color-grey-200); border-radius: 9999px; background: var(--color-white); color: var(--color-grey-700); font: inherit; font-weight: 600; cursor: pointer; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease; }
.wm-year-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.wm-year-btn.is-active { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-white); }
.wm-year-count { font-size: 0.8em; font-weight: 500; opacity: 0.9; }

/* Month band — full-width sub-heading row inside a year table */
.wm-month-row th { text-align: left; background: var(--color-grey-100); color: var(--color-dark); font-family: var(--wp--preset--font-family--serif); font-weight: 600; font-size: 1.05rem; padding: 0.5rem 1.1rem; border-top: 1px solid var(--color-grey-200); }
.wm-table tbody .wm-month-row:first-child th { border-top: none; }
.wm-year-empty { background: var(--color-white); border: 1px dashed var(--color-grey-200); border-radius: 0.75rem; padding: 1rem 1.25rem; color: var(--color-grey-600); margin-top: 0.75rem; }
/* Desktop: the month <th> holds a toggle button, but it must read as plain band
   text — no chrome, no chevron, no count (those are the mobile accordion only). */
.wm-month-toggle { display: inline; margin: 0; padding: 0; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: default; }
.wm-month-count, .wm-month-chevron { display: none; }

/* Legend */
.wm-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1.5rem; margin-bottom: 1rem; font-size: 0.9rem; color: var(--color-grey-700); }
.wm-legend-item { display: inline-flex; align-items: center; gap: 0.45rem; font-weight: 600; }
.wm-dot { width: 0.85rem; height: 0.85rem; border-radius: 9999px; display: inline-block; flex: none; }
.wm-dot-vrij { background: var(--wm-vrij); }
.wm-dot-bezet { background: var(--wm-bezet); }
.wm-legend-note { color: var(--color-grey-600); font-weight: 400; font-style: italic; }

/* Table — desktop */
.wm-table { width: 100%; border-collapse: collapse; background: var(--color-white); border: 1px solid var(--color-grey-200); border-radius: 1rem; overflow: hidden; box-shadow: 0 12px 24px -16px rgba(0,0,0,0.18); }
.wm-table thead th { text-align: left; font-family: var(--wp--preset--font-family--sans); font-size: 0.76rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-grey-600); background: var(--color-grey-100); padding: 0.55rem 1.1rem; border-bottom: 1px solid var(--color-grey-200); }
.wm-table tbody td { padding: 0.45rem 1.1rem; border-bottom: 1px solid var(--color-grey-200); vertical-align: middle; color: var(--color-grey-700); }
.wm-table tbody tr:last-child td { border-bottom: none; }
.wm-table tbody tr:hover { background: var(--color-grey-100); }
.wm-week { font-weight: 700; color: var(--color-dark); white-space: nowrap; }
.wm-periode { white-space: nowrap; }
.wm-prijs { font-weight: 600; color: var(--color-dark); white-space: nowrap; }
.wm-row.is-bezet td { color: var(--color-grey-600); }
.wm-row.is-bezet .wm-week, .wm-row.is-bezet .wm-prijs { color: var(--color-grey-600); font-weight: 600; }

/* Status badge */
.wm-status { display: inline-block; padding: 0.2rem 0.7rem; border-radius: 9999px; font-size: 0.8rem; font-weight: 700; }
.wm-status-vrij { background: var(--wm-vrij-bg); color: var(--wm-vrij); }
.wm-status-bezet { background: var(--wm-bezet-bg); color: var(--wm-bezet); }
.wm-avail { display: inline-flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; }

/* Aanvragen button */
.wm-aanvraag-btn { border: none; cursor: pointer; font: inherit; font-weight: 600; font-size: 0.85rem; color: var(--color-white); background: var(--color-accent); padding: 0.35rem 0.95rem; border-radius: 9999px; transition: background-color 0.2s ease; }
.wm-aanvraag-btn:hover { background: var(--color-accent-dark); }
.wm-aanvraag-btn:focus-visible { outline: 2px solid var(--color-dark); outline-offset: 2px; }

.wm-empty { background: var(--color-white); border: 1px solid var(--color-grey-200); border-radius: 0.75rem; padding: 1.25rem 1.5rem; color: var(--color-grey-700); }

/* Mobile (≤640px): compact one-row-per-week + collapsible month accordions.
   Scoped to this breakpoint so the approved desktop table is untouched. */
@media (max-width: 640px) {
	.wm-table { border: none; background: transparent; box-shadow: none; border-radius: 0; }
	.wm-table thead { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
	.wm-table, .wm-table tbody, .wm-table td { display: block; width: 100%; max-width: 100%; }
	.wm-table tr { display: block; width: 100%; max-width: 100%; }

	/* Compact week row — two tight lines, no repeated labels, status colour cue. */
	.wm-table .wm-row {
		display: grid;
		grid-template-columns: auto 1fr;
		grid-template-areas: "week periode" "prijs avail";
		align-items: center;
		column-gap: 0.7rem;
		row-gap: 0.1rem;
		padding: 0.45rem 0.85rem;
		background: var(--color-white);
		border: 1px solid var(--color-grey-200);
		border-top: none;
		border-left: 4px solid var(--color-grey-200);
		border-radius: 0;
		margin: 0;
		box-shadow: none;
	}
	.wm-table .wm-row.wm-collapsed { display: none; }
	.wm-table .wm-row.is-vrij { border-left-color: var(--wm-vrij); }
	.wm-table .wm-row.is-bezet { border-left-color: var(--wm-bezet); background: var(--color-grey-100); }
	.wm-month-row.is-open + .wm-row { border-top: 1px solid var(--color-grey-200); }
	.wm-table .wm-row td { display: block; padding: 0; border: none; text-align: left; }
	.wm-week { grid-area: week; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--color-grey-600); white-space: nowrap; }
	.wm-periode { grid-area: periode; font-size: 0.92rem; font-weight: 600; color: var(--color-dark); white-space: normal; overflow-wrap: anywhere; }
	.wm-prijs { grid-area: prijs; font-size: 0.95rem; font-weight: 700; color: var(--color-dark); white-space: nowrap; }
	.wm-beschikbaarheid { grid-area: avail; }
	.wm-avail { justify-content: flex-end; gap: 0.5rem; }
	.wm-status { padding: 0.15rem 0.55rem; font-size: 0.72rem; }
	.wm-aanvraag-btn { min-height: 44px; padding: 0.4rem 0.9rem; font-size: 0.8rem; }
	.wm-table .wm-row.is-bezet .wm-week, .wm-table .wm-row.is-bezet .wm-periode, .wm-table .wm-row.is-bezet .wm-prijs { color: var(--color-grey-600); }

	/* Month band → tap-to-toggle accordion header. */
	.wm-table tr.wm-month-row { display: block; background: transparent; border: none; border-radius: 0; box-shadow: none; padding: 0; margin: 1rem 0 0; }
	.wm-month-row th { display: block; width: 100%; padding: 0; border: none; background: transparent; }
	.wm-month-toggle {
		display: flex; align-items: center; gap: 0.5rem; width: 100%;
		min-height: 48px; padding: 0.6rem 0.85rem; margin: 0;
		background: var(--color-grey-100); border: 1px solid var(--color-grey-200);
		border-radius: 0.6rem; cursor: pointer; text-align: left; color: var(--color-dark);
		font: inherit; font-family: var(--wp--preset--font-family--serif);
	}
	.wm-month-toggle:hover { background: var(--color-grey-200); }
	.wm-month-name { font-weight: 600; font-size: 1.02rem; }
	.wm-month-count { display: inline; font-family: var(--wp--preset--font-family--sans); font-size: 0.8rem; font-weight: 600; color: var(--wm-vrij); }
	.wm-month-chevron { display: block; margin-left: auto; width: 0.55rem; height: 0.55rem; border-right: 2px solid var(--color-grey-600); border-bottom: 2px solid var(--color-grey-600); transform: rotate(45deg); transition: transform 0.2s ease; }
	.wm-month-row.is-open .wm-month-chevron { transform: rotate(225deg); }

	/* Comfortable tap targets for the year controls. */
	.wm-year-btn { min-height: 44px; }
	.wm-controls { gap: 0.6rem 1rem; }
}

/* Form (CTA) section: keep intro copy readable on the coloured background. */
.molen-form-section .section-eyebrow { color: var(--color-white); opacity: 0.82; }
.molen-form-section .cta-inner > p { color: rgba(255,255,255,0.92); }

/* CF7 form rhythm — tight, even spacing. The grid is already 2-col >=640px, so
   Postcode/Woonplaats and the aantal-velden already pair; here we just reset the
   default <p> margins that compounded the row-gap, and style the group subheads. */
.cta-card .cf7-grid { gap: 0.85rem 1.25rem; }
.cta-card .cf7-grid > p,
.cta-card .cf7-grid > div { margin: 0; }
.cta-card .cf7-grid .wpcf7-form-control-wrap { display: block; }
.cta-card .molen-subhead { margin-top: 0.6rem; }
.cta-card .molen-subhead label { margin-bottom: 0; padding-bottom: 0.35rem; border-bottom: 1px solid var(--color-grey-200); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-primary); }
/* Cost fineprint now sits mid-form under the linen fields — left-aligned reads better. */
.cta-card .cf7-fineprint { text-align: left; margin-top: 0.25rem; }
/* Preserve the line breaks in the CF7 success/response message. */
.cta-card .wpcf7-response-output { white-space: pre-line; }

/* ---- Client banner (top of page) — hotlinked for preview; host at launch. ---- */
.molen-banner { text-align: center; padding: 0.5rem 1rem 0; line-height: 0; }
.molen-banner img { max-width: 100%; height: auto; display: inline-block; }

/* ---- Week selection highlight (single week or multi-week span). ---- */
.wm-row.is-sel { background-color: rgba(196, 122, 61, 0.14) !important; }
.wm-row.is-sel-start, .wm-row.is-sel-end { box-shadow: inset 0 0 0 2px var(--color-accent); }

/* ---- Selection info box, injected at the top of the form card by the JS. ---- */
.wm-selinfo { margin: 0 0 1.25rem; padding: 0.75rem 1rem; border-radius: 0.6rem; background: #e7f3ec; border: 1px solid #cfe6d8; color: var(--color-dark); font-size: 0.92rem; }
.wm-selinfo[hidden] { display: none; }
.wm-selinfo.is-error { background: #f6e9e7; border-color: #e6c9c3; }
.wm-selinfo-text { font-weight: 600; }
.wm-selinfo.is-error .wm-selinfo-text { color: #b04a43; }
.wm-selinfo-clear { margin-left: 0.5rem; border: 1px solid #cbd3cc; background: #fff; border-radius: 9999px; padding: 0.15rem 0.75rem; font: inherit; font-size: 0.8rem; font-weight: 600; cursor: pointer; }
.wm-selinfo-clear:hover { background: var(--color-grey-100); }
.wm-selinfo-hint { display: block; margin-top: 0.35rem; font-size: 0.82rem; font-weight: 400; color: var(--color-grey-600); }
