/* ==========================================================================
   Hotel landing (/boutique, /budget) - één layout, twee merken.
   Het merk komt van de body-class .brand-boutique / .brand-budget (ACF-veld "Brand").
   ========================================================================== */

/* Visueel verborgen, wel voorleesbaar - voor het logo-alternatief in de header */
.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* --- Merk-tokens ---------------------------------------------------------- */

.brand-boutique {
	--brand-bar-bg: #F1E1D0;
	--brand-ink: #42222A;
	--brand-gold: #96713C;
	--brand-accent: #E64C98;
	--brand-pill-bg: #F1E1D0;
	--brand-pill-ink: #42222A;
	--brand-book-bg: #E64C98;
	--brand-book-ink: #FFFFFF;
	--brand-rooms-bg: var(--brand-ink);
	--brand-rooms-ink: var(--brand-bar-bg);
	--menu-bg: var(--brand-gold);
	--menu-ink: #FFF0E5;
	/* Onderste contact-balk: roze achtergrond, witte tekst */
	--footer-bar-bg: var(--brand-accent);
	--footer-bar-ink: #FFFFFF;

	--brand-heading-font: var(--font-boutique-serif);
	--brand-heading-weight: 500;
	--brand-text-font: var(--font-boutique-serif);
	--brand-text-weight: 400;
	--brand-strong-weight: 500;
	--brand-ui-font: var(--font-boutique-display);
	--brand-button-weight: 600;
	--brand-badge-font: var(--font-boutique-display);
	/* Sangbleu/Degular in de knoppen is van zichzelf kleiner dan Fakt Pro; volgens design
	   23px voor boutique, 20px voor budget - zie --hotel-size-button/-budget hieronder. */
	--brand-button-text-size: var(--hotel-size-button);
	/* Zelfde sizing-logica als de knop op de keuzepagina (.split-half__cta): line-height
	   per merk zo gekozen dat de regelhoogte een rond aantal px is (28px bij 23px font). */
	--brand-button-line-height: 1.217;
}

/* Voorlopige waarden: het budget-ontwerp voor deze pagina is nog niet aangeleverd. */
.brand-budget {
	--brand-bar-bg: #FFFFFF;
	--brand-ink: #FF6900;
	--brand-gold: #FF6900;
	--brand-accent: #FF6900;
	--brand-pill-bg: #FF6900;
	--brand-pill-ink: #FFFFFF;
	--brand-book-bg: #FFFFFF;
	--brand-book-ink: #FF6900;
	--brand-rooms-bg: #FFFFFF;
	--brand-rooms-ink: #FF6900;
	--menu-bg: #FF6900;
	--menu-ink: #FFFFFF;
	/* Onderste contact-balk: witte achtergrond, oranje tekst (omgekeerd t.o.v. boutique) */
	--footer-bar-bg: #FFFFFF;
	--footer-bar-ink: var(--brand-accent);

	--brand-heading-font: var(--font-budget-sans);
	--brand-heading-weight: 600;
	--brand-text-font: var(--font-budget-sans);
	--brand-text-weight: 600;
	--brand-strong-weight: 700;
	--brand-ui-font: var(--font-budget-sans);
	--brand-button-weight: 700;
	--brand-badge-font: var(--font-budget-sans);
	--brand-button-text-size: var(--hotel-size-button-budget);
	--brand-button-line-height: 1.2;
}

/* --- Fluid schaal: min bij 375px, max bij 1600px schermbreedte --------------- */

.hotel-page {
	position: relative;
	margin: 0;
	background: var(--brand-bar-bg);

	--hotel-gutter: clamp(1.25rem, 0.025rem + 5.224vw, 5.25rem);
	/* Content-blokken onder de hero: iets bredere rand dan de titel in de hero (~1.9x) */
	--hotel-content-gutter: clamp(2.375rem, 0.232rem + 9.143vw, 9.375rem);
	/* De inhoud onder de hero wordt nooit breder dan 2400px: de zijpadding groeit mee
	   zodra het scherm breder is (% = breedte van het blok zelf, dus op elk blok te gebruiken). */
	--hotel-content-max: 2400px;
	--hotel-content-pad: max(var(--hotel-content-gutter), calc((100% - var(--hotel-content-max)) / 2));
	/* "Smalle" content: twee keer de content-rand, ook binnen de 2400px-limiet */
	--hotel-content-small-pad: calc(var(--hotel-content-pad) + var(--hotel-content-gutter));
	/* Ruimte tussen twee content-blokken = onderpadding van het blok erboven (--hotel-space-bar,
	   net als onder de hero-balk) + deze bovenpadding van het blok eronder. Overal gelijk. */
	--hotel-block-top: clamp(1.5rem, 1rem + 3vw, 4rem);
	--hotel-menu-duration: 550ms;
	--hotel-menu-ease: cubic-bezier(0.65, 0, 0.35, 1);
	/* Afstand bovenkant header tot schermrand (zie .hotel-header padding-top): het uitgeklapte
	   menu (.hotel-menu) gebruikt precies diezelfde afstand aan alle vier de kanten, zodat de
	   bovenkant van het menu exact op de hoogte van de header komt. */
	--hotel-header-offset: 2.5rem;
	/* Breedte van het Rooms-blok (titel + pijlen): op .hotel-page gezet, niet op .hotel-rooms
	   zelf, zodat andere blokken (zoals Location) er ook naar kunnen verwijzen.
	   Schaal t.o.v. het ontwerp (desktop): 1 = ontwerp, 0.8 = 20% kleiner, gecentreerd in de
	   content (hoogte gaat evenredig mee). Om te testen: pas alleen dit getal aan. */
	--rooms-scale: 0.8;
	--rooms-max: calc(1400px * var(--rooms-scale));
	--rooms-pad: max(
		calc(var(--hotel-content-pad) * var(--rooms-scale) + (1 - var(--rooms-scale)) * 50%),
		calc((100% - var(--rooms-max)) / 2)
	);
	--hotel-gap: clamp(0.75rem, 0.406rem + 1.469vw, 1.875rem);
	--hotel-space-bar: clamp(1.25rem, 0.868rem + 1.633vw, 2.5rem);
	--hotel-size-title: clamp(3rem, 1.622rem + 5.878vw, 7.5rem);    /* 120px, was 100px (x1.2) */
	--hotel-size-room-title: clamp(3.25rem, 1.758rem + 6.367vw, 8.125rem); /* 130px */
	--hotel-size-badge: clamp(1.1rem, 0.671rem + 1.829vw, 2.5rem); /* 40px, was 50px (x0.8) */
	--hotel-size-text: clamp(0.9rem, 0.755rem + 0.62vw, 1.375rem);     /* 22px */
	--hotel-size-back: clamp(0.875rem, 0.76rem + 0.49vw, 1.25rem);     /* 20px */
	--hotel-size-button: clamp(0.875rem, 0.703rem + 0.735vw, 1.4375rem); /* 23px, boutique (Degular) */
	/* Zelfde curve als hierboven, uniform geschaald naar een top van 20px (20/23) voor budget
	   (Fakt Pro), die van zichzelf al groter oogt dan Degular op dezelfde px-waarde. */
	--hotel-size-button-budget: clamp(0.761rem, 0.611rem + 0.639vw, 1.25rem); /* 20px, budget (Fakt Pro) */
	--hotel-size-thumb: clamp(4.5rem, 2.337rem + 9.224vw, 11.5rem);    /* intro-foto breedte */
	/* Alleen nog voor de header "Book now"-knop (met opzet ongewijzigd gelaten) en de losse
	   pijl-/kruis-iconen (die geen tekst-knop zijn); .hotel-button zelf gebruikt sinds de
	   sizing-gelijktrekking naar .split-half__cta zijn eigen padding+line-height, zie daar. */
	--hotel-button-height: calc(var(--hotel-size-button) * 2.3);
}

/* --- Header (zwevend boven de hero, blijft staan bij scrollen) --------------
   Logo 1.8rem hoog (keuzepagina: 1.6rem), 1.8rem zijpadding, 2.5rem afstand tot de bovenkant.
   De pill is zo hoog als de BOOK NOW-knop plus 0.5rem boven/onder.
   De header zelf laat klikken door; alleen "Take me back" en de pill vangen ze op. */

.hotel-header {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	z-index: 20;
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	padding: var(--hotel-header-offset) var(--hotel-gutter) 0;
	pointer-events: none;
}

.hotel-header__back,
.hotel-header__pill {
	pointer-events: auto;
}

/* Ingelogde beheerders: de header onder de WordPress-adminbalk laten staan */
.admin-bar .hotel-header {
	top: 32px;
}

.admin-bar .hotel-menu {
	top: calc(var(--hotel-header-offset) + 32px);
}

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

	.admin-bar .hotel-menu {
		top: calc(var(--hotel-header-offset) + 46px);
	}
}

.hotel-header__back {
	grid-column: 1;
	justify-self: start;
	display: inline-flex;
	align-items: baseline; /* chevron staat op dezelfde basislijn als de tekst */
	gap: 0.7em;
	color: #fff;
	transition: color var(--hotel-menu-duration) var(--hotel-menu-ease);
	font-family: var(--font-budget-sans);
	font-weight: 700;
	font-size: var(--hotel-size-back);
	line-height: 1;
	text-transform: uppercase;
	text-decoration: none;
}

/* "Take me back" verdwijnt zodra het menu open is */
.menu-open .hotel-header__back {
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--hotel-menu-duration) var(--hotel-menu-ease),
		visibility 0s linear var(--hotel-menu-duration);
}

/* Chevron even hoog als de hoofdletters, onderkant op de basislijn van de tekst */
.hotel-header__back-icon {
	width: 0.43em;
	height: 0.72em;
	flex: none;
}

.hotel-header__pill {
	grid-column: 2;
	position: relative;
	z-index: 2; /* boven .hotel-menu, dat er precies achter/onder groeit */
	display: flex;
	align-items: center;
	gap: 1.5rem;
	padding: 0.5rem 1.8rem;
	border-radius: 999px;
	background: var(--brand-pill-bg);
	transition: background-color var(--hotel-menu-duration) var(--hotel-menu-ease);
}

/* Zodra het menu open is krijgt de pill de menu-achtergrond, zodat hij optisch overloopt
   in het grote paneel erachter (dat op dezelfde plek/kleur begint) - het logo/Book now/
   hamburger blijven daarbij letterlijk staan waar ze staan, er verandert alleen een kleur. */
.menu-open .hotel-header__pill {
	background: var(--menu-bg);
}

.hotel-header__logo {
	position: relative; /* nodig om boven .hotel-menu te blijven staan, zie de toelichting daar */
	display: block;
	line-height: 0;
}

/* Logo als CSS-mask i.p.v. <img>, zodat de kleur (via currentColor) mee kan animeren
   tussen de pill-kleur (dicht) en de menu-inktkleur (open) - zie .hotel-header__logo-mark. */
.hotel-header__logo-mark {
	display: block;
	height: 1.8rem;
	width: auto;
	aspect-ratio: 197.96 / 35.67; /* zelfde verhouding als de logo-svg's viewbox */
	background-color: currentColor;
	-webkit-mask: var(--logo-src) center / contain no-repeat;
	mask: var(--logo-src) center / contain no-repeat;
	color: var(--brand-pill-ink);
	transition: color var(--hotel-menu-duration) var(--hotel-menu-ease);
}

.menu-open .hotel-header__logo-mark {
	color: var(--menu-ink);
}

.hotel-header__book {
	position: relative; /* nodig om boven .hotel-menu te blijven staan, zie de toelichting daar */
	display: inline-flex;
	align-items: center;
	height: var(--hotel-button-height);
	margin-left: 5rem; /* extra ruimte tussen logo en knop (samen met de gap 6.5rem) */
	padding: 0 1.3em;
	border-radius: 999px;
	background: var(--brand-book-bg);
	color: var(--brand-book-ink);
	font-family: var(--brand-ui-font);
	font-weight: var(--brand-button-weight);
	font-size: var(--brand-button-text-size);
	line-height: 1;
	text-transform: uppercase;
	text-decoration: none;
	white-space: nowrap;
}

/* Fakt Pro 2px lager: hier is (i.t.t. .hotel-button hierboven) geen bestaande boven/onder-
   padding om vanaf te herverdelen (de knop wordt puur door zijn vaste hoogte gecentreerd),
   dus deze knop wordt voor budget 2px hoger dan voor boutique - binnen de 0.5rem ruimte die
   de header-pill er al omheen laat (zie de toelichting bij .hotel-header), niet zichtbaar. */
.brand-budget .hotel-header__book {
	padding-top: 2px;
}

.hotel-header__menu {
	position: relative; /* nodig om boven .hotel-menu te blijven staan, zie de toelichting daar */
	display: inline-flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0;
	border: 0;
	background: none;
	color: var(--brand-pill-ink);
	font-family: var(--font-budget-sans);
	font-weight: 700;
	font-size: var(--hotel-size-back);
	text-transform: uppercase;
	line-height: 1;
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--hotel-menu-duration) var(--hotel-menu-ease);
}

.menu-open .hotel-header__menu {
	color: var(--menu-ink);
}

/* Hamburger: 3 balkjes die tot een kruis draaien. Balk 1 en 3 draaien 45°/-45° en schuiven
   naar het midden, balk 2 (midden) vervaagt - het klassieke hamburger-naar-kruis-effect. */
.hotel-header__menu-icon {
	display: flex;
	flex: none;
	flex-direction: column;
	justify-content: center;
	gap: 6px;
	width: 1.5rem;
	height: 1.5rem;
}

.hotel-header__menu-bar {
	display: block;
	width: 100%;
	height: 2px;
	background: currentColor;
	transform-origin: center;
	transition: transform var(--hotel-menu-duration) var(--hotel-menu-ease),
		opacity var(--hotel-menu-duration) var(--hotel-menu-ease);
}

.menu-open .hotel-header__menu-bar:nth-child(1) {
	transform: translateY(8px) rotate(45deg);
}

.menu-open .hotel-header__menu-bar:nth-child(2) {
	opacity: 0;
}

.menu-open .hotel-header__menu-bar:nth-child(3) {
	transform: translateY(-8px) rotate(-45deg);
}

/* "Close menu": alleen zichtbaar naast het kruis, en alleen op desktop (zie mobiele media query) */
.hotel-header__menu-label {
	position: relative;
	top: 2px;
	max-width: 0;
	overflow: hidden;
	opacity: 0;
	white-space: nowrap;
	transition: max-width var(--hotel-menu-duration) var(--hotel-menu-ease),
		opacity var(--hotel-menu-duration) var(--hotel-menu-ease);
}

.menu-open .hotel-header__menu-label {
	max-width: 10rem;
	opacity: 1;
}

/* --- Uitgeklapt menu ------------------------------------------------------------
   Eén paneel dat vanaf de plek van de pill "opgroeit": transform-origin bovenin/midden,
   zodat het visueel aanvoelt alsof de pill zelf uitdijt, terwijl logo/Book now/hamburger
   (in .hotel-header__pill, die zelf nooit van grootte/plek verandert) daar los bovenop
   blijven staan. De bovenkant van het menu staat op precies dezelfde hoogte als de
   bovenkant van de header (--hotel-header-offset); diezelfde afstand wordt ook links,
   rechts en onderaan gebruikt. */

.hotel-menu {
	/* Geen eigen z-index: het paneel is nu een kind van .hotel-header__pill (zie template) en
	   moet binnen die pill vóór alle andere (positioned) kinderen komen, puur via de HTML-
	   volgorde - logo/Book now/hamburger staan later in de HTML en tekenen daardoor automatisch
	   erboven. */
	position: fixed;
	inset: var(--hotel-header-offset);
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: hidden auto;
	border-radius: 2rem;
	background: var(--menu-bg);
	color: var(--menu-ink);
	opacity: 0;
	visibility: hidden;
	transform: scale(0.82);
	transform-origin: top center;
	transition: transform var(--hotel-menu-duration) var(--hotel-menu-ease),
		opacity var(--hotel-menu-duration) var(--hotel-menu-ease),
		visibility 0s linear var(--hotel-menu-duration);
}

.menu-open .hotel-menu {
	opacity: 1;
	visibility: visible;
	transform: scale(1);
	transition: transform var(--hotel-menu-duration) var(--hotel-menu-ease),
		opacity var(--hotel-menu-duration) var(--hotel-menu-ease),
		visibility 0s linear 0s;
}

@media (prefers-reduced-motion: reduce) {
	.hotel-header__pill,
	.hotel-header__logo-mark,
	.hotel-header__menu,
	.hotel-header__menu-bar,
	.hotel-header__menu-label,
	.hotel-menu {
		transition-duration: 0.01ms !important;
	}
}

.hotel-menu__inner {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: clamp(4rem, 8vw, 10rem); /* 2x zoveel ruimte tussen de linktitels en het contactform */
	width: 100%;
	max-width: 72rem;
	margin: 0 auto;
	padding: clamp(6rem, 8vw, 9rem) clamp(1.5rem, 4vw, 4rem) clamp(2rem, 4vw, 4rem);
}

.hotel-menu__nav {
	display: flex;
	flex-direction: column;
	gap: clamp(1.5rem, 3vw, 3rem);
}

.hotel-menu__nav a {
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.5rem, 0.811rem + 2.939vw, 3.75rem); /* 60px */
	line-height: 1;
	color: inherit;
	text-decoration: none;
	text-transform: uppercase;
}

/* Budget: menu-links x0.8 t.o.v. boutique (zelfde clamp-formule, alle drie de waarden x0.8). */
.brand-budget .hotel-menu__nav a {
	font-size: clamp(1.2rem, 0.649rem + 2.351vw, 3rem); /* 48px */
}

.hotel-menu__form p {
	margin: 0 0 1.5rem;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-menu__form form {
	display: flex;
	flex-direction: column;
	gap: 1rem;
	min-width: 0; /* anders eist deze flexcontainer de intrinsieke breedte van de invulvelden op */
}

/* .hotel-menu ervoor: extra specificiteit, anders verliest de rand het van de latere
   ".hotel-button { border: 0; }"-reset verderop in dit bestand (zelfde bug als bij de
   Send-knop hieronder - bij gelijke specificiteit wint de regel die later in het bestand staat). */
.hotel-menu .hotel-menu__form input,
.hotel-menu .hotel-menu__form textarea {
	box-sizing: border-box;
	width: 100%;
	min-width: 0; /* zonder dit blijven invulvelden hun eigen minimumbreedte opeisen in een flex/grid-ouder */
	padding: 0.9em 1.4em;
	border-width: 4px;
	border-style: solid;
	border-color: var(--menu-ink);
	border-radius: 999px; /* zelfde als de knoppen */
	background: transparent;
	color: var(--menu-ink);
	font-family: var(--brand-ui-font);
	font-weight: 600;
	font-size: clamp(0.875rem, 0.703rem + 0.735vw, 1.4375rem); /* 23px */
	line-height: 1; /* nodig zodat de hoekradius hieronder precies te berekenen is */
	text-transform: uppercase;
	resize: vertical;
}

/* De textarea ("Question") krijgt exact dezelfde hoekradius als de eenregelige velden erboven
   (die zelf effectief uitkomen op de helft van hún eigen hoogte: 0.9em padding + 1em regelhoogte
   + 4px rand, gedeeld door 2 = 1.4em + 4px) - alleen is de textarea zelf hoger, dus blijft er
   een recht stuk over tussen de twee ronde hoeken in plaats van een volledige pil. */
.hotel-menu .hotel-menu__form textarea {
	border-radius: calc(1.4em + 4px);
}

.hotel-menu__form input::placeholder,
.hotel-menu__form textarea::placeholder {
	color: currentColor;
	opacity: 0.7;
}

.hotel-menu__form-row {
	display: flex;
	align-items: center;
	gap: 1rem;
	flex-wrap: wrap;
}

/* Budget: witte knop (--menu-ink), oranje tekst (--menu-bg). Geen rand nodig - dat regelt de
   ".hotel-button { border: 0; }"-reset verderop al. */
.hotel-menu .hotel-menu__submit {
	background: var(--menu-ink);
	color: var(--menu-bg);
}

/* Boutique: zelfde beige knop, maar de tekst is plum (--brand-ink) i.p.v. het menu-goud
   (--menu-bg), dus dit kan niet met dezelfde --menu-bg/--menu-ink-logica als budget. */
.brand-boutique .hotel-menu .hotel-menu__submit {
	color: var(--brand-ink);
}

.hotel-menu__form-status {
	margin: 0;
	font-family: var(--brand-text-font);
	font-size: var(--hotel-size-text);
}

.hotel-menu__form-status[data-state="error"] {
	color: #ffdddd;
}

/* --- Hero: foto-deel + balk, samen minimaal de hoogte van het scherm ------------ */

.hotel-hero,
.room-hero {
	display: flex;
	flex-direction: column;
}

.hotel-hero {
	min-height: 100vh;
	min-height: 100svh;
}

.room-hero {
	min-height: 60vh;
	min-height: 60svh;
}

.hotel-hero__photo,
.room-hero__photo {
	position: relative;
	flex: 1 1 auto;
	display: flex;
	align-items: center;
	min-height: 22rem;
	/* padding-top: minimaal onder de header (2.5rem + pill van max ~5rem) + ademruimte */
	padding: max(clamp(5rem, 4rem + 4vw, 8rem), 9rem) var(--hotel-gutter) clamp(3rem, 1.8rem + 4vw, 6rem);
	background: var(--brand-ink);
}

.hotel-hero__image,
.room-hero__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.hotel-hero__title {
	position: relative;
	z-index: 1;
	margin: 0;
	color: #fff;
	font-family: var(--brand-heading-font);
	font-weight: var(--brand-heading-weight);
	font-size: var(--hotel-size-title);
	line-height: 0.975;
	text-transform: uppercase;
}

/* Zwevende badge: half over de foto, half over de balk, tegen de linkerrand */
.hotel-hero__badge {
	position: absolute;
	left: 0;
	bottom: 0;
	z-index: 3;
	margin: 0;
	padding: 0.5em 1em 0.5em 0.45em;
	transform: translateY(50%);
	border-radius: 0 999px 999px 0;
	background: var(--brand-accent);
	color: #fff;
	font-family: var(--brand-badge-font);
	font-weight: 700;
	font-size: var(--hotel-size-badge);
	line-height: 0.95;
	text-align: center;
	text-transform: uppercase;
	box-shadow: 0 0.35rem 1rem rgba(0, 0, 0, 0.25);
}

/* --- Room hero: zelfde structuur als .hotel-hero__photo, maar eigen titelstijl -------- */

/* max-width in em (meeschalend met de fluid font-size hierboven, dus zelfde gedrag op elke
   breedte): bij de huidige kamertitels ("Deluxe Double Room" = 9.43em, "Small Double Room" =
   9.02em, in Degular Display Bold) breekt dit ze netjes af na het 2e woord ("Deluxe Double" /
   "Room", 6.67em). Kortere titels ("Double Room" 6.09em, "Family Room" 5.80em) blijven op één
   regel. Op smalle mobiele schermen wint de werkelijke containerbreedte toch van deze max-width,
   dus daar breekt de tekst vanzelf nog verder af zonder dat er iets overloopt. */
.room-hero__title {
	position: relative;
	z-index: 1;
	max-width: 7.5em;
	margin: 0;
	color: var(--menu-ink);
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 700;
	font-size: var(--hotel-size-room-title);
	line-height: 0.975;
	text-transform: uppercase;
}

/* --- Room: "About this room" -----------------------------------------------------
   Titel breekt bewust met een vaste <br> na "About": bij Degular Display Bold is
   "ABOUT THIS" (4.852em) maar 5% breder dan "THIS ROOM" (4.603em) - te weinig marge
   voor een betrouwbare max-width-afbreking, dus dit is de robuustere oplossing. */

.room-about {
	/* Zelfde --rooms-pad/--rooms-max-schaal als Rooms/Location/Recommendations/Footer,
	   zodat de inhoud van dit blok even breed is als die van het Recommendations-blok. */
	padding: var(--hotel-block-top) var(--rooms-pad);
	background: var(--brand-ink);
	color: var(--menu-ink);
}

/* Staat dit blok direct na de header, zonder hero ertussen (zoals op de Terms-pagina)? Dan
   heeft het zelf de ruimte nodig om onder de zwevende header te beginnen - zelfde veilige
   afstand (9rem) als de hero's elders gebruiken (zie .hotel-hero__photo/.room-hero__photo). */
.room-about--no-hero {
	padding-top: 9rem;
}

.room-about__inner {
	max-width: var(--rooms-max);
	margin: 0 auto;
}

.room-about__title {
	margin: 0 0 var(--hotel-block-top);
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als "OUR ROOMS" */
	line-height: 1;
	text-transform: uppercase;
}

.room-about__columns {
	display: grid;
	grid-template-columns: minmax(0, 30fr) minmax(0, 70fr);
	grid-template-areas: "price content";
	column-gap: calc(var(--hotel-content-gutter) * 2 / 3);
	align-items: stretch;
}

.room-about__price {
	grid-area: price;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: flex-end;
	gap: 1rem; /* 16px tussen "Per night" en de Book now-knop */
}

.room-about__price-info {
	display: flex;
	flex-direction: column;
	line-height: 1;
	gap: 0.05em;
}

/* From/Per night: zelfde opzet als op de keuzepagina (split-half__price) */
.room-about__price-label,
.room-about__price-unit {
	font-family: var(--brand-ui-font);
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 0.967;
	text-transform: uppercase;
}

.room-about__price-label {
	font-weight: 600;
}

.room-about__price-unit {
	font-weight: 400;
}

.room-about__price-amount {
	margin: 0;
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als de titel hierboven */
	line-height: 0.9;
}

/* Zelfde roze "Book now"-knop als in de header. Specificiteit met de ".room-about"-ouder
   erbij (i.p.v. alleen ".room-about__cta"), anders wint de latere ".hotel-button"-regel
   verderop in dit bestand bij gelijke specificiteit (zelfde valkuil als bij Location/Rooms). */
.room-about .room-about__cta {
	align-self: flex-start;
	background: var(--brand-book-bg);
	color: var(--brand-book-ink);
}

.room-about__content {
	grid-area: content;
	display: flex;
	flex-direction: column;
	min-width: 0;
}

/* Ruimte tussen Description en Equipment: de helft van de normale blok-tussenruimte */
.room-about__group + .room-about__group {
	margin-top: calc(var(--hotel-block-top) / 2);
}

/* Description/Equipment-titels: zelfde formaat als de kolomtitels in de footer */
.room-about__group-title {
	margin: 0;
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 600;
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 1.15;
	text-transform: uppercase;
}

.room-about__text {
	margin: 0;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

/* Twee losse alinea's in één group zonder eigen titel (bv. de "Last updated"-regel + de
   introtekst op de Privacy-pagina): een beetje ruimte ertussen. */
.room-about__text + .room-about__text {
	margin-top: 0.75em;
}

/* Ruimte boven de specs-knoppen: de normale (volledige) blok-tussenruimte.
   Row-gap/column-gap tussen de knoppen zelf: 4px. */
.room-about__specs {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: var(--hotel-block-top);
}

/* Heeft de kamer deze spec wel: gevulde beige knop, plum tekst (zelfde als de footerknop).
   Specificiteit met de ".room-about"-ouder erbij, zelfde reden als bij ".room-about__cta".
   --btn-pad-y 3px korter, zelfde reden als bij Rooms/Location hierboven. */
.room-about .room-about__spec {
	--btn-pad-y: calc(1rem - 3px);
	border: 3px solid var(--menu-ink);
	background: var(--menu-ink);
	color: var(--brand-ink);
}

/* Heeft de kamer deze spec niet: alleen een beige rand */
.room-about .room-about__spec.hotel-button--outline {
	background: transparent;
	color: var(--menu-ink);
}

/* --- Room: Gallery-carousel --------------------------------------------------------
   Zelfde opbouw/techniek als de Rooms-carousel hierboven (.hotel-rooms): zes kaarten
   (posities -2 t/m 3) op absolute left/width, die bij een klik naar hun nieuwe plek
   schuiven via een CSS-transitie, met dezelfde duur/easing (--gallery-move/-ease).
   Verschillen met die carousel: geen tekstpaneel (dus geen fade-choreografie nodig),
   alle foto's hebben dezelfde hoogte (i.p.v. per positie een eigen beeldverhouding),
   en er zijn hier 4 zichtbaar op desktop / 2 op mobiel i.p.v. 1 hoofdfoto + buren.
   Kleuren: beige/wit achtergrond + plum/oranje tekst (--brand-bar-bg/--brand-ink,
   zelfde tokens als het Statement/About-blok), niet de omgekeerde Rooms-kleuren. */

.hotel-gallery {
	--gallery-move: 600ms;
	--gallery-ease: cubic-bezier(0.65, 0, 0.35, 1);
	overflow: hidden;
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) var(--rooms-pad);
	background: var(--brand-bar-bg);
	color: var(--brand-ink);
}

@media (prefers-reduced-motion: reduce) {
	.hotel-gallery {
		--gallery-move: 0ms;
	}
}

.hotel-gallery__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: clamp(1.25rem, 0.8rem + 2vw, 2.5rem);
}

.hotel-gallery__title {
	margin: 0;
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als "OUR ROOMS" */
	line-height: 1;
	text-transform: uppercase;
}

.hotel-gallery__arrows {
	display: flex;
	gap: 0.4rem;
}

/* Zelfde pijl-techniek als bij Rooms: de SVG is een masker, dus de kleur volgt --brand-ink */
.hotel-gallery__arrow {
	flex: none;
	width: var(--hotel-button-height);
	height: var(--hotel-button-height);
	padding: 0;
	border: 0;
	background-color: var(--brand-ink);
	-webkit-mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	cursor: pointer;
}

.hotel-gallery__arrow--prev {
	transform: rotate(90deg);
}

.hotel-gallery__arrow--next {
	transform: rotate(-90deg);
}

.hotel-gallery__viewport {
	position: relative;
	container-type: inline-size;
}

/* Vaste hoogte voor alle foto's (i.p.v. de per-kaart aspect-ratio-formule bij Rooms).
   Clip-path stopt precies na de buitenste (deels zichtbare) foto's, zodat de nog verder
   liggende buffer-posities (voor het doorschuif-mechanisme) geen extra ruimte innemen. */
.hotel-gallery__stage {
	position: relative;
	aspect-ratio: 100 / 57; /* 1,5x zo hoog als eerst (was 100/38) */
	/* Symmetrisch (36.505cqw beide kanten), want de hoofdfoto's staan nu gecentreerd - zie
	   de toelichting bij de posities hieronder. */
	clip-path: inset(0 -36.505cqw 0 -36.505cqw);
	touch-action: pan-y;
	cursor: grab;
	user-select: none;
	-webkit-user-select: none;
}

.hotel-gallery__card {
	position: absolute;
	top: 0;
	left: var(--l);
	width: var(--w);
	height: 100%;
	overflow: hidden;
	border-radius: 0.75rem;
	transition:
		left var(--gallery-move) var(--gallery-ease),
		width var(--gallery-move) var(--gallery-ease);
}

.hotel-gallery__card.is-jumping {
	transition: none;
}

.hotel-gallery__card img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	-webkit-user-drag: none;
}

/* Posities (q = 0/1 zijn de twee volledig zichtbare foto's, -1/2 overlappen de randen).
   De twee hoofdfoto's (0/1) staan als paar GECENTREERD in de content (i.p.v. links
   uitgelijnd vanaf 0cqw): (100 - 44 - 1.67 - 44) / 2 = 5.165cqw marge aan beide kanten,
   zodat -1/2 symmetrisch evenveel buiten de content uitsteken. Die overstap (36.505cqw,
   dezelfde marge van het peek-vak dat niet als "sliver" zichtbaar is) is met opzet ruim
   genomen: pas voorbij ~1920px-breed scherm wordt --rooms-pad groter dan deze vaste
   cqw-waarde en stopt het overlappen met de schermrand vanzelf (net als bij Rooms/Location).
   -3, -2, 3 en 4 liggen volledig buiten beeld: -2/3 zijn de buffer-kaarten die na een klik
   naar de andere kant springen (zie hotel-gallery.js); -3/4 zijn waar zo'n kaart daarna
   ANIMEERT (met transitie) naar zijn nieuwe rustpositie (-2 resp. 3) - net als bij Rooms. */
.hotel-gallery__card[data-q="-3"] { --l: -119.845cqw; --w: 40cqw; }
.hotel-gallery__card[data-q="-2"] { --l: -78.175cqw; --w: 40cqw; }
.hotel-gallery__card[data-q="-1"] { --l: -36.505cqw; --w: 40cqw; }
.hotel-gallery__card[data-q="0"] { --l: 5.165cqw; --w: 44cqw; }
.hotel-gallery__card[data-q="1"] { --l: 50.835cqw; --w: 44cqw; }
.hotel-gallery__card[data-q="2"] { --l: 96.505cqw; --w: 40cqw; }
.hotel-gallery__card[data-q="3"] { --l: 138.175cqw; --w: 40cqw; }
.hotel-gallery__card[data-q="4"] { --l: 179.845cqw; --w: 40cqw; }

.hotel-gallery__card {
	cursor: zoom-in;
}

/* --- Gallery-lightbox: een tik/klik (geen swipe) opent de foto op ware grootte ------ */

.hotel-gallery__lightbox {
	position: fixed;
	inset: 0;
	z-index: 50; /* boven de zwevende header (z-index: 20) */
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(1.5rem, 1rem + 2vw, 3rem);
	background: rgba(0, 0, 0, 0.92);
	opacity: 0;
	visibility: hidden;
	transition: opacity 200ms ease, visibility 0s linear 200ms;
}

.hotel-gallery__lightbox.is-open {
	opacity: 1;
	visibility: visible;
	transition: opacity 200ms ease, visibility 0s linear 0s;
}

.hotel-gallery__lightbox-img {
	display: block;
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	border-radius: 0.5rem;
}

.hotel-gallery__lightbox-close {
	position: absolute;
	top: clamp(1rem, 0.6rem + 1.5vw, 2rem);
	right: clamp(1rem, 0.6rem + 1.5vw, 2rem);
	width: calc(var(--hotel-button-height) * 0.7);
	height: calc(var(--hotel-button-height) * 0.7);
	padding: 0.5rem;
	border: 0;
	background: transparent;
	color: #fff;
	cursor: pointer;
}

.hotel-gallery__lightbox-close svg {
	display: block;
	width: 100%;
	height: 100%;
}

/* Zelfde pijl-techniek als de carousel-pijlen hierboven, alleen wit (op de donkere overlay) */
.hotel-gallery__lightbox-arrow {
	position: absolute;
	top: 50%;
	flex: none;
	width: var(--hotel-button-height);
	height: var(--hotel-button-height);
	padding: 0;
	border: 0;
	background-color: #fff;
	-webkit-mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	cursor: pointer;
}

.hotel-gallery__lightbox-arrow--prev {
	left: clamp(1rem, 0.6rem + 1.5vw, 2rem);
	transform: translateY(-50%) rotate(90deg);
}

.hotel-gallery__lightbox-arrow--next {
	right: clamp(1rem, 0.6rem + 1.5vw, 2rem);
	transform: translateY(-50%) rotate(-90deg);
}

/* --- Balk onder de foto: inhoud begint iets links van het midden van de pagina ---- */

.hotel-bar {
	padding: var(--hotel-space-bar) 0;
	background: var(--brand-bar-bg);
	color: var(--brand-ink);
}

.hotel-bar__inner {
	display: flex;
	align-items: stretch; /* foto wordt even hoog als tekst + knop */
	gap: var(--hotel-gap);
	margin-left: 41.5%;
	padding-right: var(--hotel-gutter);
}

/* De foto zit absoluut in dit vak, zodat zijn eigen afmetingen de rijhoogte niet bepalen:
   het vak rekt mee met de tekstkolom en de foto vult het vak. */
.hotel-bar__media {
	position: relative;
	flex: 0 0 var(--hotel-size-thumb);
	min-height: 4rem;
}

.hotel-bar__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 10px;
}

.hotel-bar__content {
	flex: 1 1 auto;
	min-width: 0;
	max-width: 27rem;
}

.hotel-bar__text {
	margin: 0 0 var(--hotel-gap);
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-bar__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: calc(var(--hotel-gap) * 0.5);
}

/* Zelfde sizing-logica als de knop op de keuzepagina (.split-half__cta): de hoogte komt
   puur uit padding + line-height (geen aparte min-height-variabele meer), zodat alle
   knoppen - met en zonder rand - dezelfde hoogte krijgen. --btn-pad-y is de boven/onder-
   padding vóór de Fakt Pro-verschuiving hieronder; knoppen met een 3px-rand (Rooms/Location/
   room-about-specs) korten 'm met 3px in, zodat de rand niet extra hoogte toevoegt. */
.hotel-button {
	--btn-pad-y: 1rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	max-width: 100%;
	padding: var(--btn-pad-y) 2.25rem;
	border: 0; /* reset: <button>-elementen (i.t.t. <a>) hebben een eigen browser-rand, die anders naast de achtergrondkleur bleef staan */
	cursor: pointer; /* <button>-elementen (i.t.t. <a>) krijgen dit niet automatisch van de browser */
	border-radius: 999px;
	background: var(--brand-gold);
	color: #fff;
	font-family: var(--brand-ui-font);
	font-weight: var(--brand-button-weight);
	font-size: var(--brand-button-text-size);
	line-height: var(--brand-button-line-height);
	text-align: center;
	text-transform: uppercase;
	text-decoration: none;
}

/* Fakt Pro (budget) oogt iets hoger geplaatst dan Degular in dezelfde knop; 2px lager, met
   dezelfde padding-som (dus zelfde knophoogte) door evenveel van onder af te halen. Leest
   --btn-pad-y uit i.p.v. een vaste waarde, zodat dit ook correct optelt bovenop de
   rand-correctie hieronder. */
.brand-budget .hotel-button {
	padding-top: calc(var(--btn-pad-y) + 2px);
	padding-bottom: calc(var(--btn-pad-y) - 2px);
}

/* Pijl-icoon: de SVG is een masker, zodat hij de kleur van het merk krijgt */
.hotel-arrow {
	flex: none;
	display: block;
	width: var(--hotel-button-height);
	height: var(--hotel-button-height);
	background-color: var(--brand-ink);
	-webkit-mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
}

/* --- Statement: één groot tekstblok onder de hero ------------------------------ */

.hotel-statement {
	container-type: inline-size; /* de tekstgrootte hieronder is gekoppeld aan de breedte van dit blok */
	padding: var(--hotel-block-top) var(--hotel-content-pad) var(--hotel-space-bar);
	background: var(--brand-bar-bg);
}

/* De langste regel ("THE BOUTIQUE") is 8.43em breed in Sangbleu Sunrise Medium. Met een
   lettergrootte van breedte / 8.6 vult die regel altijd ~98% van de tekstbreedte, dus de
   tekst breekt op elk scherm in dezelfde vier regels. x0.8 verkleind (/ 8.6 x 1.25 = / 10.75),
   zelfde factor op mobiel (cqw-formule schaalt vanzelf mee, geen aparte mobiele regel nodig). */
.hotel-statement__text {
	margin: 0;
	color: var(--brand-gold);
	font-family: var(--brand-heading-font);
	font-weight: var(--brand-heading-weight);
	font-size: clamp(1.8rem, 7vw, 7rem); /* fallback voor browsers zonder cqw */
	font-size: calc(100cqw / 10.75);
	line-height: 0.975;
	text-transform: uppercase;
}

/* --- About: foto links, tekst + knop rechts (smalle content) ---------------------
   Verhouding uit het ontwerp: foto 44% | ruimte 7% | tekst 49% van de beschikbare breedte.
   De foto past zich altijd aan de tekst aan: hij is precies zo hoog als tekst + knop samen. */

.hotel-about {
	display: grid;
	/* Inhoud maximaal 1000px breed (zonder de zijpadding), rechts uitgelijnd zodra er meer ruimte is.
	   De achtergrond valt weg tegen de pagina-achtergrond, die dezelfde kleur heeft. */
	max-width: 1000px;
	margin-left: auto;
	grid-template-columns: minmax(0, 44fr) minmax(0, 49fr);
	column-gap: 5%;
	align-items: stretch;
	padding: var(--hotel-block-top) var(--hotel-content-small-pad) clamp(2rem, 1rem + 5.5vw, 6rem);
	background: var(--brand-bar-bg);
	color: var(--brand-ink);
}

/* Geen eigen beeldverhouding: de hoogte komt uit de tekstkolom (stretch). De foto zit
   absoluut in dit vak en beïnvloedt de rijhoogte dus niet. */
.hotel-about__media {
	position: relative;
	min-height: 10rem;
}

.hotel-about__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 0.75rem;
}

.hotel-about__content {
	display: flex;
	flex-direction: column;
	align-items: flex-start; /* de knop is precies zo breed als zijn tekst + padding */
	justify-content: space-between; /* alleen merkbaar als de foto (min-hoogte) hoger is dan de tekst */
	min-width: 0;
	overflow-wrap: break-word;
}

.hotel-about__text {
	margin: 0 0 1.15em;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.15;
}

.hotel-about__text--strong {
	margin-bottom: 1.5em;
	font-weight: var(--brand-strong-weight);
}

/* --- Good to know: tussen About en Ticker. Zelfde opzet/techniek als het Recommendations-
   accordeon verderop (zie .hotel-recs), met drie bewuste verschillen: eigen kleuren (goud/
   oranje achtergrond i.p.v. de gewone --brand-bar-bg, dus ook de randen/plusjes in --menu-ink
   i.p.v. --brand-ink/--brand-gold, anders onzichtbaar), een los lopend tekstblok per item
   i.p.v. een <ul> met losse (eventueel doorklikbare) items, en maar één knop (geen losse
   "strong"-intro-regel). De uitklapanimatie gebruikt daarom ook eigen --hotel-gtk-*-variabelen
   i.p.v. die van Recommendations, en de open/dicht-logica zit in een los script
   (assets/js/hotel-good-to-know.js) zodat de twee accordeons elkaar niet kunnen sluiten. */

.hotel-gtk {
	--hotel-gtk-duration: 220ms;
	--hotel-gtk-ease: cubic-bezier(0.65, 0, 0.35, 1);
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) var(--rooms-pad);
	background: var(--brand-gold);
	color: var(--menu-ink);
}

@media (prefers-reduced-motion: reduce) {
	.hotel-gtk {
		--hotel-gtk-duration: 0ms;
	}
}

.hotel-gtk__inner {
	max-width: var(--rooms-max);
	margin: 0 auto;
}

.hotel-gtk__title {
	margin: 0 0 clamp(4rem, 2.4rem + 8vw, 8rem);
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als "OUR ROOMS" */
	line-height: 1;
	text-transform: uppercase;
}

.hotel-gtk__row {
	display: grid;
	grid-template-columns: minmax(0, 30fr) minmax(0, 65fr);
	column-gap: 5%;
	align-items: end; /* intro-kolom lijnt onderin uit met de accordeon */
}

.hotel-gtk__intro-text {
	margin: 0 0 1.1em;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

/* Knop: transparant met --menu-ink-rand (beige op boutique, wit op budget). --btn-pad-y
   3px korter, zelfde reden als bij Rooms/Location/room-about-specs (zie .hotel-button). */
.hotel-gtk .hotel-button {
	--btn-pad-y: calc(1rem - 3px);
	border: 3px solid var(--menu-ink);
	background: transparent;
	color: var(--menu-ink);
}

/* Rand in --menu-ink (i.p.v. --brand-ink zoals Recommendations): die zou op deze goud/oranje
   achtergrond nauwelijks zichtbaar zijn. */
.hotel-gtk__item {
	border-bottom: 1px solid var(--menu-ink);
}

.hotel-gtk__item:first-child {
	border-top: 1px solid var(--menu-ink);
}

.hotel-gtk__row-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 2.2em 0;
	list-style: none;
	cursor: pointer;
}

.hotel-gtk__row-head::-webkit-details-marker {
	display: none;
}

.hotel-gtk__row-title {
	font-family: var(--brand-ui-font);
	font-weight: 600;
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 1;
	text-transform: uppercase;
}

/* Plusje in --menu-ink (i.p.v. --brand-gold: op een gouden/oranje achtergrond zou dat
   wegvallen). Het verticale streepje verdwijnt als de rij openstaat, blijft een - over. */
.hotel-gtk__icon {
	position: relative;
	flex: none;
	width: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem);
	height: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem);
}

.hotel-gtk__icon::before,
.hotel-gtk__icon::after {
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	background: var(--menu-ink);
	transform: translate(-50%, -50%);
}

.hotel-gtk__icon::before {
	width: 100%;
	height: 2px;
}

.hotel-gtk__icon::after {
	width: 2px;
	height: 100%;
	transition: transform var(--hotel-gtk-duration) var(--hotel-gtk-ease);
}

.hotel-gtk__item.is-open .hotel-gtk__icon::after {
	transform: translate(-50%, -50%) scaleY(0);
}

/* Zelfde 0fr -> 1fr grid-transitietechniek als bij Recommendations. */
.hotel-gtk__panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--hotel-gtk-duration) var(--hotel-gtk-ease);
}

.hotel-gtk__item.is-open .hotel-gtk__panel {
	grid-template-rows: 1fr;
}

.hotel-gtk__text {
	margin: 0;
	padding: 0 0 1.5em;
	overflow: hidden;
	min-height: 0; /* nodig binnen een grid-rij, anders blijft de content zijn eigen hoogte opeisen */
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
	white-space: pre-line; /* een lege regel in het veld = eigen alinea, net als bij een <p> per stuk */
}

/* --- Ticker: rustig scrollende USP-balk direct onder het About-blok ---------------
   Twee identieke groepen achter elkaar; de track schuift precies één groep op en begint dan
   opnieuw, dus de lus is naadloos. Een groep bevat 4 items (samen ~114em breed), genoeg om
   ook een ultrawide scherm te vullen (het lettertype stopt op 54px). */

.hotel-ticker {
	overflow: hidden;
	padding-block: 0.85em;
	background: var(--brand-accent);
	color: var(--brand-bar-bg);
	font-family: var(--brand-ui-font);
	font-size: clamp(1.375rem, 0.763rem + 2.612vw, 3.375rem); /* 54px vanaf 1600px */
	line-height: 1;
	letter-spacing: 0.12em; /* tracking 120 (Illustrator) */
	text-transform: uppercase;
}

.hotel-ticker__track {
	display: flex;
	width: max-content;
	animation: hotel-ticker 100s linear infinite;
	will-change: transform;
}

.hotel-ticker__group {
	display: flex;
	flex: none;
}

.hotel-ticker__item {
	flex: none;
	white-space: pre; /* bewaart de spatie tussen de delen en achter elk item */
}

.hotel-ticker__strong {
	font-weight: var(--brand-button-weight); /* semibold */
}

.hotel-ticker__regular {
	font-weight: 400;
}

@keyframes hotel-ticker {
	to {
		transform: translateX(-50%);
	}
}

@media (prefers-reduced-motion: reduce) {
	.hotel-ticker__track {
		animation: none;
	}
}

/* --- Rooms: carousel met de kamers van dit merk ---------------------------------
   Alle maten in de carousel zijn een percentage van de content-breedte (cqw, van
   .hotel-rooms__viewport), zodat hij op elk scherm dezelfde verhoudingen houdt. Uit het ontwerp:
   actieve foto 59.29% | ruimte 1.67% | volgende foto 39.04% (samen 100%). De foto's links en
   rechts steken buiten de content en worden door de schermrand afgeknipt. Vanaf --rooms-max
   groeit de content niet meer mee; de zijkanten worden dan breder en de buitenste foto's komen
   helemaal in beeld (het afknippen, .hotel-rooms__stage, stopt precies na de buitenste foto's). */

/* Zodat de zwevende header (position: fixed) niet bovenop het blok komt te staan bij een
   sprong vanuit het menu (#good-to-know/#rooms/#location/#recommendations) - zelfde hoogte
   als de pill (--hotel-button-height) + zijn afstand tot de bovenkant (--hotel-header-offset)
   + ademruimte. */
#good-to-know,
#rooms,
#location,
#recommendations {
	scroll-margin-top: calc(var(--hotel-header-offset) + var(--hotel-button-height) + 1.5rem);
}

.hotel-rooms {
	--rooms-move: 600ms;
	--rooms-fade: 200ms;
	--rooms-ease: cubic-bezier(0.65, 0, 0.35, 1);
	overflow: hidden;
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) var(--rooms-pad);
	background: var(--brand-rooms-bg);
	color: var(--brand-rooms-ink);
}

@media (prefers-reduced-motion: reduce) {
	.hotel-rooms {
		--rooms-move: 0ms;
		--rooms-fade: 0ms;
	}

	.hotel-recs {
		--hotel-recs-duration: 0ms;
	}
}

.hotel-rooms__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	/* De helft van de normale blok-afstand: deze ruimte geldt nu naar de intro-tekst toe
	   (of, als die leeg is, rechtstreeks naar de carousel). */
	margin-bottom: clamp(0.625rem, 0.4rem + 1vw, 1.25rem);
}

.hotel-rooms__title {
	margin: 0;
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px */
	line-height: 1;
	text-transform: uppercase;
}

/* Tekst tussen de titel en de carousel, in de gewone merkstijl (Sangbleu/Fakt Pro) en gewone
   tekstgrootte. Max-width: de helft van de ruimte die 'm normaal (volle breedte) toekomt. */
.hotel-rooms__intro {
	max-width: 50%;
	margin: 0 0 clamp(1.25rem, 0.8rem + 2vw, 2.5rem);
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-rooms__arrows {
	display: flex;
	gap: 0.4rem;
}

/* Pijl uit de hero, gedraaid naar links/rechts; de SVG is een masker, dus de kleur volgt het merk */
.hotel-rooms__arrow {
	flex: none;
	width: var(--hotel-button-height);
	height: var(--hotel-button-height);
	padding: 0;
	border: 0;
	background-color: var(--brand-rooms-ink);
	-webkit-mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	mask: url('../images/logos/boutique/boutique-arrow.svg') center / contain no-repeat;
	cursor: pointer;
}

.hotel-rooms__arrow--prev {
	transform: rotate(90deg);
}

.hotel-rooms__arrow--next {
	transform: rotate(-90deg);
}

/* Foto's en tekst delen dezelfde cel: de rij is minstens zo hoog als de foto's, en groeit mee als de
   tekst (die onder de volgende foto moet blijven staan) hoger is dan de ruimte daar. */
.hotel-rooms__viewport {
	position: relative;
	display: grid;
	container-type: inline-size;
}

/* Hoogte = hoogte van de actieve foto (59.29cqw breed, beeldverhouding 0.74).
   clip-path: knipt precies af na de buitenste foto's (links 40.71cqw, rechts 30.17cqw buiten de content). */
.hotel-rooms__stage {
	position: relative;
	grid-area: 1 / 1;
	align-self: start;
	aspect-ratio: 100 / 80.12;
	clip-path: inset(0 -30.17cqw 0 -40.71cqw);
	touch-action: pan-y; /* horizontaal swipen/slepen is voor de carousel, verticaal scrollen blijft van de pagina */
	cursor: grab;
	user-select: none;
	-webkit-user-select: none;
}

.hotel-rooms__card {
	position: absolute;
	top: 0;
	left: var(--l);
	width: var(--w);
	height: calc(var(--w) / 0.74);
	overflow: hidden;
	border-radius: 0.75rem;
	transition:
		left var(--rooms-move) var(--rooms-ease),
		width var(--rooms-move) var(--rooms-ease),
		height var(--rooms-move) var(--rooms-ease);
}

.hotel-rooms__card.is-jumping {
	transition: none;
}

.hotel-rooms__card img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	-webkit-user-drag: none;
}

/* Posities (q = 0 is de actieve kamer). -3, -2, 3 en 4 liggen buiten beeld. */
.hotel-rooms__card[data-q="-3"] { --l: -101.05cqw; --w: 28.5cqw; }
.hotel-rooms__card[data-q="-2"] { --l: -70.88cqw; --w: 28.5cqw; }
.hotel-rooms__card[data-q="-1"] { --l: -40.71cqw; --w: 39.04cqw; }
.hotel-rooms__card[data-q="0"] { --l: 0cqw; --w: 59.29cqw; }
.hotel-rooms__card[data-q="1"] { --l: 60.96cqw; --w: 39.04cqw; }
.hotel-rooms__card[data-q="2"] { --l: 101.67cqw; --w: 28.5cqw; }
.hotel-rooms__card[data-q="3"] { --l: 131.84cqw; --w: 28.5cqw; }
.hotel-rooms__card[data-q="4"] { --l: 162.01cqw; --w: 28.5cqw; }

/* Tekst + knoppen: rechts onder de volgende foto, onderkant gelijk met de actieve foto */
.hotel-rooms__panel {
	position: relative;
	z-index: 2;
	grid-area: 1 / 1;
	align-self: end;
	justify-self: start;
	/* margin-top = onderkant van de volgende foto (52.75cqw) + de ruimte ertussen (1.67cqw) */
	margin: calc(52.75cqw + 1.67cqw) 0 0 65.16cqw;
	width: 40.7cqw;
	transition: opacity var(--rooms-fade) ease;
}

.hotel-rooms__panel.is-hidden {
	opacity: 0;
	pointer-events: none;
}

.hotel-rooms__name {
	margin: 0 0 0.25em;
	font-family: var(--brand-ui-font);
	font-weight: var(--brand-button-weight);
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 1.15;
	text-transform: uppercase;
}

.hotel-rooms__text {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 5;
	line-clamp: 5;
	overflow: hidden;
	margin: 0 0 1.1em;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.15;
}

.hotel-rooms__buttons {
	display: flex;
	flex-wrap: wrap;
	gap: calc(var(--hotel-gap) * 0.5);
}

/* Knoppen zoals overal, in de kleuren van dit blok. Beide krijgen dezelfde 3px rand,
   zodat ze even hoog zijn; de rechter heeft een transparante achtergrond. --btn-pad-y
   3px korter, zodat de rand niet bovenop de normale knophoogte optelt (zie .hotel-button). */
.hotel-rooms .hotel-button {
	--btn-pad-y: calc(1rem - 3px);
	border: 3px solid var(--brand-rooms-ink);
	background: var(--brand-rooms-ink);
	color: var(--brand-rooms-bg);
}

.hotel-rooms .hotel-button--outline {
	background: transparent;
	color: var(--brand-rooms-ink);
}

/* --- Location: foto links, titel + tekst + knoppen rechts ------------------------
   Maximale breedte = precies de breedte van de "OUR ROOMS"-titel + pijlen hierboven
   (dezelfde --rooms-pad/--rooms-max), en gecentreerd i.p.v. links/rechts uitgelijnd.
   CSS Grid met named areas: de foto beslaat beide rijen en wordt zo (via stretch)
   vanzelf precies zo hoog als titel + tussenruimte + tekstgroep samen. */

.hotel-location {
	/* Zelfde bovenpadding als het Rooms-blok hierboven */
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) var(--rooms-pad) clamp(2.5rem, 1.5rem + 5vw, 6rem);
	background: var(--brand-bar-bg);
	color: var(--brand-ink);
}

/* Kolomverhouding zo gekozen dat de tekstkolom (38%) niet breder is dan de rendered breedte
   van "OUR LOCATION" op 70px Degular Display bold (~432px bij de maximale content-breedte
   van 1120px) - de foto-kolom is daarom breder (55%) dan in het About-blok. */
.hotel-location__inner {
	display: grid;
	max-width: var(--rooms-max);
	margin: 0 auto;
	grid-template-columns: minmax(0, 55fr) minmax(0, 38fr);
	grid-template-areas:
		"media title"
		"media group";
	column-gap: 5%;
	row-gap: clamp(3rem, 2.25rem + 5.25vw, 6rem); /* gegarandeerde minimale ruimte tussen titel en ondertitel */
}

.hotel-location__title {
	grid-area: title;
	align-self: start;
	margin: 0;
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als "OUR ROOMS" */
	line-height: 1;
	text-transform: uppercase;
}

/* Geen eigen beeldverhouding: door "grid-row: span 2" + stretch (default) wordt de foto altijd
   precies zo hoog als titel + rij-tussenruimte + tekstgroep samen. */
.hotel-location__media {
	position: relative;
	grid-area: media;
	min-height: 10rem;
}

.hotel-location__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 0.75rem;
}

/* --- Leaflet-kaart (OpenStreetMap) i.p.v. een link naar Google Maps ----------------
   Op desktop: exact dezelfde plek/maat als de foto hierboven (toggle via de "View map"-
   knop, zie assets/js/hotel-location-map.js). Op mobiel (zie media query onderaan dit
   bestand): een bijna-volledig-scherm overlay met eigen kruisje en klik-ernaast-om-te-
   sluiten, i.p.v. inline op dezelfde plek als de foto. */
.hotel-map {
	position: absolute;
	inset: 0;
	z-index: 2;
	overflow: hidden;
	border-radius: 0.75rem;
	opacity: 0;
	visibility: hidden;
	transition: opacity 250ms ease, visibility 0s linear 250ms;
}

.hotel-map.is-open {
	opacity: 1;
	visibility: visible;
	transition: opacity 250ms ease, visibility 0s linear 0s;
}

.hotel-map__viewport {
	position: relative;
	width: 100%;
	height: 100%;
	overflow: hidden;
}

/* De Leaflet-kaart mount hier in (zie hotel-location-map.js); Leaflet regelt zijn eigen
   tiles/cursor/dragging/attributie via leaflet.css, dit is puur de afmeting van het vak. */
.hotel-map__canvas {
	position: absolute;
	inset: 0;
}

/* Alleen zichtbaar op mobiel (zie media query onderaan dit bestand) */
.hotel-map__close {
	display: none;
}

.hotel-location__group {
	grid-area: group;
	align-self: start;
}

.hotel-location__subtitle {
	margin: 0 0 0.6em;
	font-family: var(--brand-text-font);
	font-weight: 500;
	font-size: clamp(1.15rem, 0.96rem + 0.79vw, 1.75rem); /* 28px */
	line-height: 1.25;
}

.hotel-location__text {
	margin: 0 0 1.4em;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-location__buttons {
	display: flex;
	flex-wrap: wrap;
	gap: calc(var(--hotel-gap) * 0.5);
}

/* Linkerknop roze/gevuld, rechterknop transparant met gouden rand. Beide krijgen dezelfde
   rand, zodat ze even hoog blijven. --btn-pad-y 3px korter, zelfde reden als bij Rooms. */
.hotel-location .hotel-button {
	--btn-pad-y: calc(1rem - 3px);
	border: 3px solid var(--brand-accent);
	background: var(--brand-accent);
	color: #fff;
}

.hotel-location .hotel-button--outline {
	border-color: var(--brand-gold);
	background: transparent;
	color: var(--brand-gold);
}

/* --- Recommendations: intro + knop links, accordeon rechts ----------------------
   Zelfde content-breedte als Rooms/Location. Onderpadding is bewust dubbel zo groot
   als bij de andere blokken (dit is voorlopig het laatste blok op de pagina). */

.hotel-recs {
	/* Duur/easing van de uitklapanimatie: hier zodat CSS (icoontje) en JS (paneelhoogte,
	   assets/js/hotel-recs.js) precies gelijk lopen. Snel, maar met een merkbare ease. */
	--hotel-recs-duration: 220ms;
	--hotel-recs-ease: cubic-bezier(0.65, 0, 0.35, 1);
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) var(--rooms-pad) calc(clamp(2.5rem, 1.5rem + 5vw, 6rem) * 2);
	background: var(--brand-bar-bg);
	color: var(--brand-ink);
}

.hotel-recs__inner {
	max-width: var(--rooms-max);
	margin: 0 auto;
}

.hotel-recs__title {
	margin: 0 0 clamp(4rem, 2.4rem + 8vw, 8rem);
	font-family: var(--brand-ui-font);
	font-weight: 700;
	font-size: clamp(1.75rem, 0.946rem + 3.429vw, 4.375rem); /* 70px, zelfde als "OUR ROOMS" */
	line-height: 1;
	text-transform: uppercase;
}

.hotel-recs__row {
	display: grid;
	grid-template-columns: minmax(0, 30fr) minmax(0, 65fr);
	column-gap: 5%;
	align-items: end; /* intro-kolom lijnt onderin uit met de accordeon */
}

.hotel-recs__intro-text {
	margin: 0 0 1.1em;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-recs__intro-text--strong {
	font-weight: var(--brand-strong-weight);
}

/* Elke rij is een <details>; de rand tussen rijen is in tekstkleur, alleen de eerste rij
   krijgt ook een rand erboven, zodat er niet twee lijnen op elkaar staan. */
.hotel-recs__item {
	border-bottom: 1px solid var(--brand-ink);
}

.hotel-recs__item:first-child {
	border-top: 1px solid var(--brand-ink);
}

.hotel-recs__row-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 2.2em 0;
	list-style: none;
	cursor: pointer;
}

.hotel-recs__row-head::-webkit-details-marker {
	display: none;
}

.hotel-recs__row-title {
	font-family: var(--brand-ui-font);
	font-weight: 600;
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 1;
	text-transform: uppercase;
}

/* Plusje in goud; het verticale streepje verdwijnt als de rij openstaat, zodat er een - blijft */
.hotel-recs__icon {
	position: relative;
	flex: none;
	width: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem);
	height: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem);
}

.hotel-recs__icon::before,
.hotel-recs__icon::after {
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	background: var(--brand-gold);
	transform: translate(-50%, -50%);
}

.hotel-recs__icon::before {
	width: 100%;
	height: 2px;
}

.hotel-recs__icon::after {
	width: 2px;
	height: 100%;
	transition: transform var(--hotel-recs-duration) var(--hotel-recs-ease);
}

/* .is-open i.p.v. het native [open]-attribuut, zodat dit precies gelijk loopt met de
   panel-animatie hieronder (assets/js/hotel-recs.js zet/haalt beide tegelijk weg). */
.hotel-recs__item.is-open .hotel-recs__icon::after {
	transform: translate(-50%, -50%) scaleY(0);
}

/* Zelfde soepele techniek als bijvoorbeeld [data-q] bij de room-carousel: een pure
   CSS-transition, geen JS die elke frame de hoogte herberekent. Het paneel is een
   1-rijige grid die van 0fr naar 1fr gaat; de <ul> erin krijgt daardoor vanzelf zijn
   echte hoogte als bovengrens, zonder dat we die in JS hoeven te meten. */
.hotel-recs__panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--hotel-recs-duration) var(--hotel-recs-ease);
}

.hotel-recs__item.is-open .hotel-recs__panel {
	grid-template-rows: 1fr;
}

.hotel-recs__list {
	margin: 0;
	padding: 0 0 1.5em;
	list-style: none;
	overflow: hidden;
	min-height: 0; /* nodig binnen een grid-rij, anders blijft de content zijn eigen hoogte opeisen */
}

.hotel-recs__list li + li {
	margin-top: 0.6em;
}

.hotel-recs__list li {
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-recs__list a {
	color: inherit;
	text-decoration: underline;
	text-underline-offset: 0.2em;
}

/* --- Crosssell: het enige blok dat bewust de stijl van het ANDERE merk toont -------
   Op een boutique-pagina dus in budget-kleuren/fonts (en andersom), los van de
   --brand-*-tokens hierboven (die volgen altijd het merk van de huidige pagina).
   Fonts komen wel uit dezelfde, merk-neutrale --font-*-vars uit variables.css. */

.hotel-crosssell {
	padding: clamp(2.5rem, 1.5rem + 5vw, 6rem) 1.5rem;
	text-align: center;
}

.hotel-crosssell__title {
	margin: 0 0 clamp(1.5rem, 1rem + 3vw, 3rem);
	line-height: 0.95;
	text-transform: uppercase;
}

/* Zelfde sizing-logica als .hotel-button (zie hierboven): hoogte uit padding + line-height,
   Fakt Pro standaard 2px lager (dit is de standaardstijl; de boutique-upsell hieronder zet
   het weer recht). */
.hotel-crosssell__button {
	--btn-pad-y: 1rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: calc(var(--btn-pad-y) + 2px) 1.75em calc(var(--btn-pad-y) - 2px);
	border-radius: 999px;
	font-family: var(--font-budget-sans);
	font-weight: 700;
	font-size: var(--hotel-size-button-budget);
	line-height: 1.2;
	text-transform: uppercase;
	text-decoration: none;
}

/* Downsell (op boutique): budget-oranje, FaktPro bold, 150px op groot scherm */
.hotel-crosssell--budget {
	background: #FF6900;
	color: #fff;
}

.hotel-crosssell--budget .hotel-crosssell__title {
	font-family: var(--font-budget-sans);
	font-weight: 700;
	font-size: clamp(3.75rem, 2.028rem + 7.347vw, 9.375rem); /* 150px */
	line-height: 0.8; /* 120px bij 150px font-size, unitless zodat 'm meeschaalt met de fluid size */
}

.hotel-crosssell--budget .hotel-crosssell__button {
	background: #fff;
	color: #FF6900;
}

/* Upsell (op budget): boutique-plum, Sangbleu Sunrise medium, 120px op groot scherm */
.hotel-crosssell--boutique {
	background: #42222A;
	color: #FFF0E5;
}

.hotel-crosssell--boutique .hotel-crosssell__title {
	font-family: var(--font-boutique-serif);
	font-weight: 500;
	font-size: clamp(3rem, 1.622rem + 5.878vw, 7.5rem); /* 120px */
}

.hotel-crosssell--boutique .hotel-crosssell__button {
	background: #FFF0E5;
	color: #42222A;
	font-family: var(--font-boutique-display);
	font-size: var(--hotel-size-button);
	line-height: 1.217;
	/* Geen 2px-verschuiving: die is alleen voor Fakt Pro (budget), niet voor Sangbleu/Degular. */
	padding-top: var(--btn-pad-y);
	padding-bottom: var(--btn-pad-y);
}

/* --- Footer -----------------------------------------------------------------------
   Achtergrond/tekstkleur hergebruiken de bestaande merktokens (--brand-ink is voor
   boutique donker plum en voor budget al oranje; --menu-ink is crème/wit). Titel en
   links gebruiken bewust letterlijk Degular Display (niet de per-merk --brand-ui-font),
   op verzoek voor beide merken hetzelfde lettertype. Content-breedte = zelfde
   --rooms-max/--rooms-pad-schaal als Rooms/Location/Recommendations hierboven. */

.hotel-footer {
	padding: var(--hotel-block-top) var(--rooms-pad) clamp(2rem, 1.2rem + 4vw, 4rem);
	background: var(--brand-ink);
	color: var(--menu-ink);
}

.hotel-footer__inner {
	display: grid;
	max-width: var(--rooms-max);
	margin: 0 auto;
	grid-template-columns: 16fr 45fr 27fr 27fr; /* "about" (tekst+knop) 1.5x breder dan voorheen */
	column-gap: clamp(2rem, 4vw, 4rem);
	row-gap: clamp(2rem, 4vw, 3.5rem);
	grid-template-areas:
		"logo about col1 col2"
		".    rights privacy terms";
	align-items: start;
}

/* Op desktop "onzichtbaar" als layout-element: logo/about behouden hun eigen grid-area
   t.o.v. .hotel-footer__inner. Wordt op mobiel (< 700px) een echte flex-rij. */
.hotel-footer__top {
	display: contents;
}

.hotel-footer__logo {
	grid-area: logo;
}

.hotel-footer__logo-mark {
	display: block;
	width: clamp(8.25rem, 5.4rem + 9vw, 12.75rem); /* 1.5x de vorige maat */
	aspect-ratio: 1 / 1;
	background-color: currentColor;
	-webkit-mask: var(--logo-src) center / contain no-repeat;
	mask: var(--logo-src) center / contain no-repeat;
}

.hotel-footer__about {
	grid-area: about;
}

.hotel-footer__about p {
	margin: 0 0 1.5rem;
	font-family: var(--brand-text-font);
	font-weight: var(--brand-text-weight);
	font-size: var(--hotel-size-text);
	line-height: 1.4;
}

.hotel-footer__button {
	background: var(--menu-ink);
	color: var(--brand-ink);
}

.hotel-footer__col--1 {
	grid-area: col1;
}

.hotel-footer__col--2 {
	grid-area: col2;
}

.hotel-footer__col-title {
	margin: 0 0 1.5rem;
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 600;
	font-size: clamp(0.875rem, 0.569rem + 1.306vw, 1.875rem); /* 30px */
	line-height: 1.15;
	text-transform: uppercase;
}

.hotel-footer__col ul {
	display: flex;
	flex-direction: column;
	gap: 0.375rem; /* was 0.75rem: links dichter op elkaar (zelfde maat als al op mobiel) */
	margin: 0;
	padding: 0;
	list-style: none;
}

.hotel-footer__col a {
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 500;
	font-size: clamp(0.55rem, 0.297rem + 1.078vw, 1.375rem); /* 22px */
	line-height: 1.3;
	color: inherit;
	text-decoration: none;
}

.hotel-footer__divider {
	display: none;
}

.hotel-footer__rights,
.hotel-footer__legal-link {
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 500;
	font-size: clamp(0.45rem, 0.243rem + 0.882vw, 1.125rem); /* 18px */
	line-height: 1.3;
}

.hotel-footer__rights {
	grid-area: rights;
	margin: 0;
	text-transform: uppercase;
}

.hotel-footer__legal-link {
	color: inherit;
	text-decoration: none;
}

.hotel-footer__legal-link--privacy {
	grid-area: privacy;
}

.hotel-footer__legal-link--terms {
	grid-area: terms;
}

/* --- Contact-balk onder de footer: adres/telefoon/e-mail, volle breedte, eigen kleuren
   (--footer-bar-bg/-ink, zie de merk-tokens bovenin) i.p.v. de gewone footerkleuren.
   Blijft bewust op één regel (geen wrap); overflow-x: auto als vangnet voor het geval de
   tekst op een heel smal scherm toch niet past, zodat die nooit de hele pagina breder maakt. */

.hotel-footer-bar {
	padding: 1em var(--rooms-pad);
	overflow-x: auto;
	background: var(--footer-bar-bg);
	color: var(--footer-bar-ink);
}

.hotel-footer-bar__inner {
	display: flex;
	flex-wrap: nowrap;
	justify-content: center;
	width: max-content;
	max-width: var(--rooms-max);
	margin: 0 auto;
	font-family: var(--font-boutique-display); /* = Degular Display, bewust merk-onafhankelijk */
	font-weight: 400;
	font-size: clamp(1rem, 0.847rem + 0.653vw, 1.5rem); /* 24px, 16px op kleine schermen */
	line-height: 1.3;
	text-align: center;
	white-space: nowrap;
}

.hotel-footer-bar__item {
	color: inherit;
	text-decoration: none;
}

/* Bolletje tussen de drie onderdelen; niet na het laatste. */
.hotel-footer-bar__item:not(:last-child)::after {
	content: '\00B7';
	display: inline-block;
	margin: 0 0.5em;
}

/* --- Kleine schermen: voorlopige fallback tot het mobiele ontwerp er is ---------- */

/* Header: mobiele opzet vanaf 950px en kleiner ("Take me back" boven de pill, pill over de
   volle breedte). De rest van de mobiele opzet (hieronder) begint pas bij 700px. */
@media (max-width: 950px) {
	.hotel-page {
		/* Afstand tot de schermrand: voor "Take me back", de pill, de titel en de balk */
		--hotel-inset: 1rem;
		/* Bovenkant van "Take me back" én de plek waar de pill blijft plakken bij scrollen */
		--hotel-sticky-top: 1rem;
	}

	/* Op mobiel scrolt "Take me back" gewoon mee met de pagina; alleen de pill blijft plakken
	   (sticky). De header is daarvoor even hoog als de hele pagina (absoluut over de hero heen),
	   want een sticky element blijft alleen plakken binnen zijn eigen bovenliggende blok. */
	.hotel-header {
		position: absolute;
		inset: 0;
		display: block;
		padding: var(--hotel-sticky-top) var(--hotel-inset) 0;
	}

	.hotel-header__back {
		display: flex;
		width: fit-content;
	}

	/* Bovenaan de pagina staat de pill gewoon onder "Take me back" en schuift dus nergens
	   overheen; pas bij scrollen komt hij op de bovenkant van "Take me back" vast te zitten. */
	.hotel-header__pill {
		position: sticky;
		top: var(--hotel-sticky-top);
		margin-top: 0.75rem;
		gap: 1rem;
		padding: 0.4rem 1.25rem;
	}

	/* Ingelogde beheerders: de header staat al onder de adminbalk (html heeft een marge),
	   alleen de sticky pill moet onder de vaste adminbalk blijven. */
	.admin-bar .hotel-header {
		top: 0;
	}

	.admin-bar .hotel-header__pill {
		top: calc(var(--hotel-sticky-top) + 32px);
	}

	.hotel-header__logo-mark {
		height: 1.2rem;
	}

	/* De pill is nu zo breed als het scherm (min de rand): die extra breedte komt uit de
	   ruimte tussen logo en BOOK NOW. */
	.hotel-header__book {
		margin-left: auto;
	}

	/* "Close menu"-tekst staat hier nooit, alleen het kruisje (zie ook de knop-gap hieronder) */
	.hotel-header__menu-label {
		display: none;
	}

	.hotel-header__menu {
		gap: 0;
	}

	/* Menu: nu een kind van .hotel-header__pill (zie template), zodat het letterlijk meebeweegt
	   met de pill zelf - ook op het exacte moment dat de pill "sticky" wordt tijdens scrollen.
	   "top: 0" betekent hier dus "waar de pill nu ook staat", niet een vaste viewport-afstand. */
	.hotel-menu {
		position: absolute;
		inset: auto;
		top: 0;
		left: 50%;
		width: calc(100vw - 2 * var(--hotel-inset));
		height: calc(100vh - var(--hotel-sticky-top) - 1.5rem);
		border-radius: 1.25rem;
		/* De centrering (translateX) moet in dezelfde transform-waarde staan als de open/dicht-
		   schaal hieronder, anders overschrijft de één de ander. */
		transform: translateX(-50%) scale(0.82);
		/* align-items blijft op de standaard "stretch": .hotel-menu__inner moet de volle hoogte
		   van het paneel vullen, anders heeft "justify-content: space-between" hieronder niets
		   om ruimte in te verdelen. */
	}

	.menu-open .hotel-menu {
		transform: translateX(-50%) scale(1);
	}

	/* Links boven uitgelijnd, formulier onder: met space-between groeit de tussenruimte vanzelf
	   mee als het paneel (op een hoger scherm, of met meer/minder content) langer/korter is. */
	.hotel-menu__inner {
		display: flex;
		flex-direction: column;
		justify-content: space-between;
		gap: 2.5rem; /* ondergrens, voor als de inhoud niet in de beschikbare hoogte past */
		padding: 5.5rem 1.5rem 2.5rem;
		text-align: left;
	}

	.hotel-menu__nav a {
		font-size: 1.875rem; /* 30px */
	}

	.brand-budget .hotel-menu__nav a {
		font-size: 1.5rem; /* 30px x0.8 = 24px */
	}

	/* About: foto boven (links, 2/3 van de breedte), tekst + knop eronder (rechts, 75%).
	   Ruimte onder de statement-tekst (eigen padding-bottom + .hotel-about's padding-top,
	   die hieronder op 0 staat) gelijk aan de ruimte erboven (padding-top, ongewijzigd). */
	.hotel-statement {
		padding-bottom: var(--hotel-block-top);
	}

	.hotel-about {
		display: block;
		padding-top: 0;
	}

	.hotel-about__media {
		width: 66.667%;
		min-height: 0;
		aspect-ratio: 5 / 4;
	}

	.hotel-about__content {
		width: 75%;
		margin-top: 1.5rem;
		margin-left: auto;
	}

	/* Rooms, Location, Recommendations, Footer, Room-About, Gallery, Good-to-know en de
	   footer-contactbalk gebruiken op mobiel de gewone content-rand i.p.v. de desktop-schaal */
	.hotel-rooms,
	.hotel-location,
	.hotel-recs,
	.hotel-footer,
	.room-about,
	.hotel-gallery,
	.hotel-gtk,
	.hotel-footer-bar {
		--rooms-pad: var(--hotel-content-pad);
	}

	.hotel-rooms__stage {
		aspect-ratio: 100 / 121.62;
		clip-path: none;
	}

	.hotel-rooms__card[data-q="-3"] { --l: -232cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="-2"] { --l: -170cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="-1"] { --l: -110cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="0"] { --l: 0cqw; --w: 90cqw; }
	.hotel-rooms__card[data-q="1"] { --l: 92.2cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="2"] { --l: 154cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="3"] { --l: 216cqw; --w: 59.8cqw; }
	.hotel-rooms__card[data-q="4"] { --l: 278cqw; --w: 59.8cqw; }

	/* Gallery op mobiel: 1 hoofdfoto + 1 die rechts overlapt met de schermrand - zelfde
	   verhoudingen als de Rooms-carousel hierboven op mobiel (90cqw hoofd + 59.8cqw buur).
	   Hoogte zo gekozen dat een foto er hetzelfde formaat (breedte : hoogte) uitziet als
	   op desktop: 90cqw breed / (44/57 van de desktop-verhouding) = 116.6cqw hoog. */
	.hotel-gallery__stage {
		aspect-ratio: 100 / 116.6;
		clip-path: none;
	}

	.hotel-gallery__card[data-q="-3"] { --l: -232cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="-2"] { --l: -170cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="-1"] { --l: -110cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="0"] { --l: 0cqw; --w: 90cqw; }
	.hotel-gallery__card[data-q="1"] { --l: 92.2cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="2"] { --l: 154cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="3"] { --l: 216cqw; --w: 59.8cqw; }
	.hotel-gallery__card[data-q="4"] { --l: 278cqw; --w: 59.8cqw; }

	.hotel-rooms__viewport {
		display: block;
	}

	.hotel-rooms__panel {
		width: auto;
		margin: clamp(1rem, 0.6rem + 2vw, 1.5rem) 0 0;
	}

	/* Kamernaam iets groter op mobiel (17px op 390px breed); sluit bij 950px aan op de desktop-maat */
	.hotel-rooms__name {
		font-size: clamp(1.0625rem, 0.866rem + 0.804vw, 1.5rem);
	}

	/* De tekst neemt maar 60% van de beschikbare breedte in; de knoppen eronder blijven vrij */
	.hotel-rooms__name,
	.hotel-rooms__text {
		max-width: 60%;
	}

	/* Location: zelfde opzet als About, maar met de titel als eigen volle-breedte rij bovenaan
	   (title -> media -> group), i.s.v. naast de foto zoals op desktop. */
	.hotel-location__inner {
		grid-template-columns: 1fr;
		grid-template-areas:
			"title"
			"media"
			"group";
		row-gap: 0;
	}

	.hotel-location__title {
		margin-bottom: 4rem;
	}

	.hotel-location__media {
		width: 66.667%;
		min-height: 0;
		aspect-ratio: 3 / 4;
	}

	/* Op mobiel geen inline kaart op de plek van de foto, maar een bijna-volledig-scherm
	   overlay erbovenop, met een donkere rand eromheen (klik erop = sluiten, zie de JS). */
	.hotel-map {
		position: fixed;
		inset: 0;
		z-index: 50; /* boven de zwevende header (z-index: 20) */
		display: flex;
		align-items: center;
		justify-content: center;
		padding: 2.5rem 1.5rem;
		border-radius: 0;
		background: rgba(0, 0, 0, 0.6);
	}

	/* Vierkant i.p.v. het hele scherm: begrensd door de kleinste van breedte/hoogte (op
	   staand formaat dus de breedte), gecentreerd via .hotel-map hierboven. Scheelt ook
	   meteen een hoop onnodig uitvergroten van de (landscape, 1632x964px) brondata. */
	.hotel-map__viewport {
		width: 100%;
		max-height: 100%;
		aspect-ratio: 1 / 1;
		border-radius: 1rem;
	}

	.hotel-map__close {
		display: flex;
		align-items: center;
		justify-content: center;
		position: absolute;
		top: 1.25rem;
		right: 1.25rem;
		/* Hoger dan Leaflet's eigen interne elementen (zoom-knoppen/attributie zitten op
		   z-index: 1000), anders ligt de kaart er met knijpen/slepen overheen en is dit
		   kruisje niet meer te klikken. */
		z-index: 1001;
		width: 2.5rem;
		height: 2.5rem;
		padding: 0.6rem;
		border: 0;
		border-radius: 50%;
		background: rgba(0, 0, 0, 0.5);
		color: #fff;
	}

	.hotel-map__close svg {
		display: block;
		width: 100%;
		height: 100%;
	}

	.hotel-location__group {
		width: 75%;
		margin-top: 1.5rem;
		margin-left: auto;
	}

	/* Op mobiel is de ondertitel gewoon de lopende tekst, geen apart formaat/gewicht */
	.hotel-location__subtitle {
		font-weight: var(--brand-text-weight);
		font-size: var(--hotel-size-text);
		line-height: 1.4;
	}

	/* "OUR ROOMS", "OUR LOCATION" en "RECOMMENDATIONS": 30px vast op mobiel, i.p.v. de
	   vloeiende desktopschaal */
	.hotel-rooms__title,
	.hotel-location__title,
	.hotel-recs__title,
	.room-about__title,
	.hotel-gallery__title,
	.hotel-gtk__title {
		font-size: 1.875rem;
	}

	/* Recommendations/Good-to-know: titel -> accordeon (volle breedte) -> intro + knop (70%,
	   rechtsuitgelijnd). Zelfde ruimte titel->content als bij Location hierboven. */
	.hotel-recs__title,
	.hotel-gtk__title {
		margin-bottom: 4rem;
	}

	/* Accordeon-titels ("HAVE BREAKFAST" etc.): 24px vast op mobiel */
	.hotel-recs__row-title,
	.hotel-gtk__row-title {
		font-size: 1.5rem;
	}

	/* Grid i.p.v. block, puur om de accordeon (die later in de HTML staat, voor de knopvolgorde
	   bij toetsenbordgebruik) hier vóór de intro te tonen. Zelfde opzet voor Good-to-know. */
	.hotel-recs__row,
	.hotel-gtk__row {
		display: grid;
		grid-template-columns: 1fr;
		grid-template-areas:
			"accordion"
			"intro";
	}

	.hotel-recs__accordion,
	.hotel-gtk__accordion {
		grid-area: accordion;
	}

	.hotel-recs__intro,
	.hotel-gtk__intro {
		grid-area: intro;
		width: 75%;
		margin: 1.5rem 0 0 auto;
	}

	/* Crosssell, FaktPro (downsell op boutique): 60px vast op mobiel.
	   De Sangbleu-variant (upsell op budget) heeft hier bewust GEEN eigen mobiele regel: die
	   volgt zijn vloeiende schaal (75px bij ~834px breed, kleiner op telefoons). */
	.hotel-crosssell--budget .hotel-crosssell__title {
		font-size: 3.75rem;
	}

	/* Footer: logo+tekst/knop naast elkaar, daaronder de 2 linkkolommen naast elkaar,
	   dan privacy+terms naast elkaar, en onderaan de all-rights-tekst over de volle breedte. */
	.hotel-footer__inner {
		grid-template-columns: 1fr 1fr;
		column-gap: 1rem; /* de 2 linkkolommen dichter bij elkaar */
		row-gap: 2rem;
		grid-template-areas:
			"logo    about"
			"col1    col2"
			"privacy terms"
			"rights  rights";
	}

	.hotel-footer__logo-mark {
		width: clamp(6rem, 4.5rem + 7.5vw, 8.25rem); /* 1.5x de vorige maat */
	}

	.hotel-footer__rights {
		margin-top: 0.5rem;
	}

	/* Links, Privacy/Terms en All rights krijgen op mobiel dezelfde grootte als de gewone
	   footertekst (.hotel-footer__about p) i.p.v. hun eigen (kleinere) schaal. */
	.hotel-footer__col a,
	.hotel-footer__rights,
	.hotel-footer__legal-link {
		font-size: var(--hotel-size-text);
	}
}

/* WordPress-adminbalk: 46px hoog onder 783px, en onder 601px scrolt hij zelf mee weg */
@media (max-width: 782px) {
	.admin-bar .hotel-header__pill {
		top: calc(var(--hotel-sticky-top) + 46px);
	}
}

@media (max-width: 600px) {
	.admin-bar .hotel-header__pill {
		top: var(--hotel-sticky-top);
	}
}

@media (max-width: 700px) {
	.hotel-page {
		/* Zijrand tot de schermrand vanaf hier overal 32px (was 16px) */
		--hotel-inset: 2rem;
		/* Helft van de badge-hoogte (2 regels x 0.95 + 1em padding, gedeeld door 2) */
		--hotel-badge-overhang: calc(var(--hotel-size-badge) * 1.45);
		/* Op mobiel is de zijrand van de content gelijk aan die van de hero */
		--hotel-content-gutter: var(--hotel-inset);
		/* De smalle content gebruikt op mobiel dezelfde rand, zodat er zoveel mogelijk breedte is */
		--hotel-content-small-pad: var(--hotel-content-pad);
	}

	/* Op mobiel 2/3 van de ruimte i.p.v. de helft op desktop */
	.hotel-rooms__intro {
		max-width: 66.667%;
	}

	/* Knoppen: zelfde mobiele padding als op de keuzepagina (.split-half__cta), i.p.v. de
	   vaste desktop-rem's. --btn-pad-y hier opnieuw zetten (i.p.v. alleen padding), zodat de
	   rand-correctie en de Fakt Pro-verschuiving (die allebei var(--btn-pad-y) gebruiken) op
	   mobiel automatisch meeschalen met deze kleinere waarde. */
	.hotel-button {
		--btn-pad-y: 0.9em;
		padding: var(--btn-pad-y) 1.4em;
	}

	.hotel-rooms .hotel-button,
	.hotel-location .hotel-button,
	.room-about .room-about__spec,
	.hotel-gtk .hotel-button {
		--btn-pad-y: calc(0.9em - 3px);
	}

	.hotel-crosssell__button {
		--btn-pad-y: 0.9em;
	}

	/* Titel linksonder in het fotoblok, boven de plek waar de badge in de foto hangt.
	   Geldt ook voor de room-hero (.room-hero__photo = alias van .hotel-hero__photo), die
	   geen badge heeft maar dezelfde onderpadding gebruikt voor exact hetzelfde mobiele gedrag. */
	.hotel-hero__photo,
	.room-hero__photo {
		align-items: flex-end;
		padding: 8rem var(--hotel-inset) calc(var(--hotel-badge-overhang) + 1rem);
	}

	/* Zelfde 8rem als de hero's hierboven op mobiel (i.p.v. de 9rem op desktop) */
	.room-about--no-hero {
		padding-top: 8rem;
	}

	/* Badge rechts in plaats van links */
	.hotel-hero__badge {
		left: auto;
		right: 0;
		padding: 0.5em 0.45em 0.5em 1em;
		border-radius: 999px 0 0 999px;
	}

	/* Extra ruimte boven in de balk, zodat de badge nooit over de inhoud valt */
	.hotel-bar {
		padding-top: calc(var(--hotel-badge-overhang) + var(--hotel-space-bar));
	}

	/* Room "About this room": alles onder elkaar, in document-volgorde (content vóór prijs) */
	.room-about__columns {
		display: flex;
		flex-direction: column;
		gap: var(--hotel-block-top);
	}

	.room-about__price {
		justify-content: flex-start;
	}

	/* Description/Equipment-titels: 24px vast op mobiel i.p.v. de vloeiende desktopschaal */
	.room-about__group-title {
		font-size: 1.5rem;
	}

	/* From/prijs/Per night: 1,5x zo groot als de normale mobiele weergave hierboven
	   (30px -> 45px voor het bedrag, ~14px -> 21px voor from/per night). Alleen op deze
	   room-template-pagina, want deze klassen bestaan alleen hier. */
	.room-about__price-label,
	.room-about__price-unit {
		font-size: 1.3125rem;
	}

	.room-about__price-amount {
		font-size: 2.8125rem;
	}

	.hotel-bar__inner {
		margin-left: 0;
		padding-left: var(--hotel-inset);
		padding-right: var(--hotel-inset);
	}

	/* Footer: logo op zijn eigen (ongewijzigde) breedte, tekst+knop neemt de rest van de
	   breedte in - los van de kolombreedtes die de linkblokken eronder gebruiken. */
	.hotel-footer__top {
		display: flex;
		align-items: flex-start;
		gap: 1.5rem;
		grid-area: top;
	}

	.hotel-footer__inner {
		grid-template-areas:
			"top     top"
			"col1    col2"
			"privacy terms"
			"rights  rights";
	}

	.hotel-footer__logo {
		flex: none;
	}

	.hotel-footer__about {
		flex: 1;
		min-width: 0;
	}

	/* Titels van de linkblokken: 24px vast i.p.v. de vloeiende schaal */
	.hotel-footer__col-title {
		font-size: 1.5rem;
	}
}
