/**
 * DVR — public (front-end) styles: search bar + villa listing + map.
 */

html:has(.dvr-villa-single) { scroll-behavior: smooth; }
/* Belt-and-braces: the full-bleed villa page must never introduce a
   horizontal scrollbar, even a sub-pixel one. */
html:has(.dvr-villa-single), html:has(.dvr-villas) { overflow-x: clip; }

.dvr-public {
	--dvr-blue: #1e94d2;
	--dvr-blue-dark: #1577ad;
	--dvr-ink: #1f2937;
	--dvr-muted: #6b7280;
	--dvr-border: #e5e7eb;
	box-sizing: border-box;
	max-width: 1200px;
	margin: 0 auto;
}

.is-layout-constrained > :where(.dvr-public.alignfull) {
	max-width: none !important;
	width: 100% !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}

.dvr-public.alignfull {
	max-width: none !important;
	width: 100% !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}

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

/* Buttons */
.dvr-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	border: 1px solid transparent;
	border-radius: 10px;
	padding: 10px 20px;
	font-size: 15px;
	font-weight: 600;
	cursor: pointer;
	text-decoration: none;
	line-height: 1.2;
	transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.dvr-btn--primary {
	background: var(--dvr-blue);
	color: #fff;
}

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

.dvr-btn--ghost {
	background: transparent;
	border-color: var(--dvr-border);
	color: var(--dvr-ink);
}

/* Placeholder (stub shortcodes) */
.dvr-public-placeholder {
	border: 1px dashed #cbd5e1;
	border-radius: 12px;
	padding: 28px;
	text-align: center;
	color: #475569;
	background: #f8fafc;
}
.dvr-public-placeholder strong { display: block; font-size: 18px; color: #0f172a; margin-bottom: 6px; }

/* -- Shared editorial palette ------------------------------------------- */
/*
 * Warm sand + deep green + antique gold, plus a serif display face. Declared
 * on :root rather than .dvr-public because flatpickr appends its popup
 * calendars straight to <body>, outside every plugin root — they need the
 * tokens too. The older --dvr-blue tokens above still drive the dashboard.
 */
:root {
	--lx-ink: #1c2a24;
	--lx-body: #4d564f;
	--lx-muted: #8a8b82;
	--lx-line: #e4ded1;
	--lx-sand: #f7f3ea;
	--lx-sand-2: #efe8da;
	--lx-card: #fffdf9;
	--lx-forest: #1f4034;
	--lx-forest-2: #2b5a49;
	--lx-gold: #a9814a;
	--lx-gold-2: #8c6935;
	--lx-serif: 'Cormorant Garamond', 'Playfair Display', Georgia, 'Times New Roman', serif;
}

.dvr-public .dvr-i { width: 18px; height: 18px; flex: 0 0 auto; }

/* Chevron for selects whose native arrow is suppressed by appearance:none.
   Applied as background-image, so anything that recolours these fields must
   set `background-color`, never the `background` shorthand. */
:root {
	--lx-caret: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none' stroke='%238a8b82' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.6 6 6.4l5-4.8'/%3E%3C/svg%3E");
}

/* -- Full-bleed breakout for the listing surfaces ----------------------- */
/*
 * The sand ground has to reach both page edges and the map has to sit flush
 * to the right one. The shared .dvr-public.alignfull rule above forces
 * margin-left/right to 0, which cancels the negative margins WP core gives
 * alignfull children of a has-global-padding container — so these two roots
 * break out explicitly instead. --dvr-vw is the scrollbar-free viewport
 * width published by public.js; see the note on .dvr-villa-single.
 */
.dvr-public.dvr-searchband,
.dvr-public.dvr-villas {
	width: calc(100 * var(--dvr-vw, 1vw)) !important;
	max-width: none !important;
	margin-left: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	margin-right: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
}

/* -- Search band -------------------------------------------------------- */
/*
 * A full-bleed sand band with the filter form floating in it as a paper card.
 * The band sticks to the top of the viewport while the results scroll past —
 * its containing block is the theme's .entry-content, which wraps both the
 * form and the listing, so it stays stuck for the whole results column.
 * public.js adds .is-stuck (compact state) and publishes the stuck height as
 * --dvr-sf-h so the sticky map column can sit right below it.
 */
.dvr-searchband__sentinel { height: 1px; margin: 0 !important; }
.dvr-searchband {
	position: sticky;
	top: 0;
	z-index: 40;
	margin-bottom: 0 !important;
	padding: clamp(18px, 3vw, 34px) clamp(16px, 4vw, 32px);
	background: var(--lx-sand);
	transition: padding 0.25s ease, box-shadow 0.25s ease;
}
.dvr-searchband.is-stuck {
	padding-top: 10px;
	padding-bottom: 10px;
	box-shadow: 0 14px 34px -22px rgba(28, 42, 36, 0.55);
}

.dvr-searchbar {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 12px;
	max-width: 1220px;
	margin: 0 auto;
	padding: 16px 18px;
	background: var(--lx-card);
	border: 1px solid var(--lx-line);
	border-radius: 18px;
	box-shadow: 0 26px 50px -34px rgba(28, 42, 36, 0.5);
	transition: padding 0.25s ease, border-radius 0.25s ease, box-shadow 0.25s ease;
}
.is-stuck .dvr-searchbar { padding: 10px 12px; border-radius: 14px; box-shadow: none; }

.dvr-searchbar__field { flex: 1 1 165px; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.dvr-searchbar__field--dates { flex: 1.5 1 230px; }
.dvr-searchbar__field--price { flex: 1.3 1 210px; }
.dvr-searchbar__field--num { flex: 0 1 118px; }
.dvr-searchbar__field--features { position: relative; flex: 0 1 160px; }
.dvr-searchbar__label {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--lx-muted);
	white-space: nowrap;
}
.dvr-searchbar__input {
	width: 100%;
	padding: 11px 13px;
	border: 1px solid var(--lx-line);
	border-radius: 11px;
	background-color: var(--lx-sand);
	font-family: inherit;
	font-size: 14.5px;
	color: var(--lx-ink);
	-webkit-appearance: none;
	appearance: none;
}
select.dvr-searchbar__input {
	padding-right: 32px;
	background-image: var(--lx-caret);
	background-repeat: no-repeat;
	background-position: right 12px center;
	background-size: 11px;
	cursor: pointer;
}
.dvr-searchbar__input:focus { outline: none; border-color: var(--lx-forest-2); background-color: #fff; }
.dvr-searchbar__input::placeholder { color: var(--lx-muted); }

.dvr-searchbar__actions { flex: 0 0 auto; display: flex; align-items: flex-end; gap: 8px; }
.dvr-searchbar__submit,
.dvr-searchbar__reset {
	border-radius: 11px;
	padding: 12px 22px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
}
.dvr-searchbar__submit { background: var(--lx-gold); color: #fff; border: 0; }
.dvr-searchbar__submit:hover { background: var(--lx-gold-2); color: #fff; }
.dvr-searchbar__reset { background: transparent; border: 1px solid var(--lx-line); color: var(--lx-body); }
.dvr-searchbar__reset:hover { border-color: var(--lx-forest-2); color: var(--lx-forest); background: transparent; }

/* Price range: two thumbs sharing one track. The inputs are transparent and
   pointer-events:none so only the thumbs are grabbable. */
.dvr-range__out { font-weight: 700; color: var(--lx-ink); letter-spacing: 0; text-transform: none; }
.dvr-range { position: relative; height: 34px; display: flex; align-items: center; }
.dvr-range__track { position: absolute; left: 0; right: 0; height: 4px; border-radius: 4px; background: var(--lx-sand-2); }
.dvr-range__fill { position: absolute; top: 0; bottom: 0; border-radius: 4px; background: var(--lx-forest-2); }
.dvr-range input[type="range"] {
	position: absolute;
	left: 0;
	width: 100%;
	margin: 0;
	background: none;
	pointer-events: none;
	-webkit-appearance: none;
	appearance: none;
}
.dvr-range input[type="range"]::-webkit-slider-thumb {
	-webkit-appearance: none;
	appearance: none;
	pointer-events: auto;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: var(--lx-card);
	border: 2px solid var(--lx-forest);
	box-shadow: 0 2px 6px rgba(28, 42, 36, 0.28);
	cursor: pointer;
}
.dvr-range input[type="range"]::-moz-range-thumb {
	pointer-events: auto;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: var(--lx-card);
	border: 2px solid var(--lx-forest);
	box-shadow: 0 2px 6px rgba(28, 42, 36, 0.28);
	cursor: pointer;
}
.dvr-range input[type="range"]::-moz-range-track { background: none; }

/* Features multi-select */
.dvr-searchbar__features summary {
	padding: 11px 13px;
	border: 1px solid var(--lx-line);
	border-radius: 11px;
	background: var(--lx-sand);
	font-size: 14px;
	color: var(--lx-ink);
	list-style: none;
	white-space: nowrap;
	cursor: pointer;
}
.dvr-searchbar__features summary::-webkit-details-marker { display: none; }
.dvr-searchbar__features-list {
	position: absolute;
	z-index: 20;
	margin-top: 6px;
	padding: 12px;
	min-width: 230px;
	max-height: 260px;
	overflow: auto;
	display: flex;
	flex-direction: column;
	gap: 7px;
	background: var(--lx-card);
	border: 1px solid var(--lx-line);
	border-radius: 14px;
	box-shadow: 0 20px 40px -22px rgba(28, 42, 36, 0.5);
}
.dvr-searchbar__features-list label { display: flex; align-items: center; gap: 9px; font-size: 13.5px; color: var(--lx-body); }

/* -- Listing: split view (cards left, map pinned right) ------------------ */
.dvr-villas {
	margin-top: 0 !important;
	padding-bottom: clamp(28px, 4vw, 56px);
	background: var(--lx-sand);
	color: var(--lx-body);
}
.dvr-villas__split { display: grid; grid-template-columns: 1fr; align-items: start; }
.dvr-villas--map .dvr-villas__split { grid-template-columns: minmax(0, 1fr) minmax(0, 42%); }
.dvr-villas__list { min-width: 0; padding: clamp(20px, 3vw, 30px) clamp(16px, 4vw, 32px) 0; }
.dvr-villas:not(.dvr-villas--map) .dvr-villas__list { max-width: 1220px; margin: 0 auto; width: 100%; }

/* The map is flush to the viewport edge and holds the full height beside the
   scrolling cards. --dvr-sf-h keeps it clear of the stuck search band. */
.dvr-villas__mapcol {
	position: sticky;
	top: var(--dvr-sf-h, 0px);
	height: calc(100svh - var(--dvr-sf-h, 0px));
	min-height: 420px;
}
.dvr-villas__map { width: 100%; height: 100%; background: var(--lx-sand-2); }

/* -- Listing head: chips, count, sort ----------------------------------- */
.dvr-villas__head { padding-bottom: clamp(16px, 2vw, 22px); }
.dvr-villas__chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.dvr-chip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 7px 13px;
	border: 1px solid var(--lx-line);
	border-radius: 999px;
	background: var(--lx-card);
	color: var(--lx-body);
	font-size: 12.5px;
	text-decoration: none;
	transition: border-color 0.2s, color 0.2s;
}
.dvr-chip svg { width: 13px; height: 13px; color: var(--lx-muted); }
.dvr-chip:hover { border-color: var(--lx-forest-2); color: var(--lx-forest); }
.dvr-chip:hover svg { color: var(--lx-forest); }
.dvr-chip--clear { background: transparent; border-style: dashed; color: var(--lx-muted); }

.dvr-villas__toolbar { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px; }
.dvr-villas__count { display: flex; align-items: baseline; gap: 9px; margin: 0; }
.dvr-villas__count strong { font-family: var(--lx-serif); font-size: clamp(28px, 3.4vw, 38px); font-weight: 600; line-height: 1; color: var(--lx-ink); }
.dvr-villas__count span { font-size: 10.5px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-villas__sort { display: inline-flex; align-items: center; gap: 10px; }
.dvr-villas__sort-label { font-size: 10.5px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); white-space: nowrap; }
.dvr-villas__sort select {
	padding: 9px 32px 9px 13px;
	border: 1px solid var(--lx-line);
	border-radius: 11px;
	background-color: var(--lx-card);
	background-image: var(--lx-caret);
	background-repeat: no-repeat;
	background-position: right 12px center;
	background-size: 11px;
	font-family: inherit;
	font-size: 13.5px;
	color: var(--lx-ink);
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
}

/* -- Card grid ---------------------------------------------------------- */
.dvr-villas__grid {
	display: grid;
	grid-template-columns: repeat(var(--dvr-cols, 2), minmax(0, 1fr));
	gap: clamp(16px, 2vw, 26px);
}
.dvr-villas__empty {
	grid-column: 1 / -1;
	padding: clamp(40px, 6vw, 76px) 24px;
	border: 1px dashed var(--lx-line);
	border-radius: 18px;
	background: var(--lx-card);
	font-family: var(--lx-serif);
	font-size: 21px;
	color: var(--lx-muted);
	text-align: center;
}

/* -- Villa card (overlay style) ----------------------------------------- */
/* Shared by the listing, the wishlist page and the single page's rails. */
.dvr-villa-card {
	position: relative;
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: var(--lx-card);
	border: 1px solid var(--lx-line);
	border-radius: 18px;
	transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.dvr-villa-card:hover,
.dvr-villa-card.is-hot {
	transform: translateY(-3px);
	border-color: #d8cfbb;
	box-shadow: 0 24px 44px -26px rgba(28, 42, 36, 0.5);
}

.dvr-villa-card__media { position: relative; aspect-ratio: 4 / 3; overflow: hidden; background: var(--lx-sand-2); }
.dvr-villa-card__media-link { position: relative; display: block; width: 100%; height: 100%; }
.dvr-villa-card__media-link img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.7s cubic-bezier(0.16, 0.84, 0.3, 1); }
.dvr-villa-card:hover .dvr-villa-card__media-link img { transform: scale(1.05); }
.dvr-villa-card__noimg { display: block; width: 100%; height: 100%; background: repeating-linear-gradient(45deg, var(--lx-sand-2), var(--lx-sand-2) 9px, var(--lx-sand) 9px, var(--lx-sand) 18px); }

/* Slider slides stack in place and cross-fade. */
.dvr-villa-card__media--slider .dvr-villa-card__slide { position: absolute; inset: 0; opacity: 0; transition: opacity 0.5s ease; }
.dvr-villa-card__media--slider .dvr-villa-card__slide.is-active { opacity: 1; }
.dvr-villa-card__nav {
	position: absolute;
	top: 50%;
	z-index: 3;
	transform: translateY(-50%);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 253, 249, 0.9);
	color: var(--lx-ink);
	font-size: 13px;
	line-height: 1;
	cursor: pointer;
	opacity: 0;
	transition: opacity 0.2s ease, background 0.2s ease;
}
.dvr-villa-card__nav--prev { left: 10px; }
.dvr-villa-card__nav--next { right: 10px; }
.dvr-villa-card:hover .dvr-villa-card__nav,
.dvr-villa-card__nav:focus-visible { opacity: 1; }
.dvr-villa-card__nav:hover { background: #fff; }
@media (hover: none) {
	.dvr-villa-card__nav { opacity: 1; }
}

/* Glass controls over the photo: save + compare top-left, rating top-right. */
.dvr-villa-card__tools { position: absolute; top: 12px; left: 12px; z-index: 4; display: flex; gap: 7px; }
.dvr-villa-card__wish,
.dvr-villa-card__compare {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 34px;
	padding: 0 12px;
	border: 1px solid rgba(255, 255, 255, 0.5);
	border-radius: 999px;
	background: rgba(20, 28, 22, 0.42);
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
	color: #fff;
	font-size: 12px;
	font-weight: 600;
	line-height: 1;
	cursor: pointer;
	transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.dvr-villa-card__wish { width: 34px; padding: 0; justify-content: center; }
.dvr-villa-card__wish .dvr-i,
.dvr-villa-card__compare .dvr-i { width: 16px; height: 16px; }
.dvr-villa-card__wish:hover,
.dvr-villa-card__compare:hover { background: rgba(255, 255, 255, 0.95); color: var(--lx-ink); border-color: transparent; }
.dvr-villa-card__wish.is-on { background: rgba(255, 255, 255, 0.95); border-color: transparent; }
.dvr-villa-card__wish.is-on .dvr-i { fill: #d0574d; stroke: #d0574d; }
.dvr-villa-card__compare.is-active { background: var(--lx-gold); border-color: transparent; color: #fff; }

.dvr-villa-card__rating {
	position: absolute;
	top: 12px;
	right: 12px;
	z-index: 4;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	height: 30px;
	padding: 0 12px;
	border-radius: 999px;
	background: rgba(255, 253, 249, 0.94);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	font-size: 12.5px;
	color: var(--lx-body);
}
.dvr-villa-card__rating strong { color: var(--lx-ink); font-weight: 700; }
.dvr-villa-card__rating .dvr-star { font-size: 13px; }
.dvr-villa-card__rating .dvr-star.is-on { color: var(--lx-gold); }

/* Price plate, on a gradient so it reads over any photo. */
.dvr-villa-card__plate {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 3;
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 4px 8px;
	padding: 34px 15px 13px;
	background: linear-gradient(to top, rgba(14, 22, 18, 0.8), rgba(14, 22, 18, 0));
	color: #fff;
	pointer-events: none;
}
.dvr-villa-card__price { font-family: var(--lx-serif); font-size: clamp(21px, 2.2vw, 26px); font-weight: 600; line-height: 1; }
.dvr-villa-card__price-note { font-size: 10.5px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; opacity: 0.88; }
.dvr-villa-card__price-note--only { font-size: 11.5px; letter-spacing: 0.08em; }

.dvr-villa-card__body { display: flex; flex-direction: column; gap: 9px; padding: 16px 18px 18px; }
.dvr-villa-card__title { margin: 0; font-family: var(--lx-serif); font-size: 22px; font-weight: 600; line-height: 1.2; }
.dvr-villa-card__title a { color: var(--lx-ink); text-decoration: none; }
.dvr-villa-card__title a:hover { color: var(--lx-gold-2); }
.dvr-villa-card__loc { display: flex; align-items: center; gap: 6px; margin: 0; font-size: 13px; color: var(--lx-muted); }
.dvr-villa-card__loc .dvr-i { width: 15px; height: 15px; color: var(--lx-gold); }
.dvr-villa-card__loc span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dvr-villa-card__stats {
	display: flex;
	flex-wrap: wrap;
	gap: 6px 15px;
	padding-top: 11px;
	border-top: 1px solid var(--lx-line);
	font-size: 12.5px;
	color: var(--lx-body);
}
.dvr-villa-card__stat { display: inline-flex; align-items: center; gap: 5px; }
.dvr-villa-card__stat .dvr-i { width: 15px; height: 15px; color: var(--lx-forest-2); }
.dvr-villa-card__stat strong { color: var(--lx-ink); font-weight: 700; }
.dvr-villa-card__cta {
	align-self: flex-start;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 2px;
	color: var(--lx-gold-2);
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
}
.dvr-villa-card__cta .dvr-i { width: 16px; height: 16px; transition: transform 0.2s ease; }
.dvr-villa-card__cta:hover { color: var(--lx-forest); }
.dvr-villa-card__cta:hover .dvr-i { transform: translateX(3px); }

/* Horizontal (list) layout variant */
.dvr-villas--list .dvr-villas__grid { grid-template-columns: 1fr; }
.dvr-villas--list .dvr-villa-card { flex-direction: row; }
.dvr-villas--list .dvr-villa-card__media { flex: 0 0 38%; max-width: 340px; aspect-ratio: auto; min-height: 240px; }
.dvr-villas--list .dvr-villa-card__body { flex: 1 1 auto; justify-content: center; }

/* -- Pagination / load more --------------------------------------------- */
.dvr-villas__pagination { display: flex; flex-wrap: wrap; gap: 7px; margin-top: clamp(22px, 3vw, 34px); }
.dvr-villas__page {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 12px;
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background: var(--lx-card);
	color: var(--lx-body);
	font-size: 14px;
	font-weight: 600;
	text-decoration: none;
	transition: border-color 0.2s, color 0.2s;
}
.dvr-villas__page:hover { border-color: var(--lx-forest-2); color: var(--lx-forest); }
.dvr-villas__page.is-active { background: var(--lx-forest); border-color: var(--lx-forest); color: #fff; }

.dvr-villas__loadmore { display: flex; justify-content: center; margin-top: clamp(22px, 3vw, 34px); }
.dvr-villas__loadmore .dvr-btn {
	min-width: 210px;
	padding: 15px 26px;
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-villas__loadmore .dvr-btn:hover { background: var(--lx-gold-2); color: #fff; }
.dvr-villas__loadmore .dvr-btn[hidden] { display: none; }
.dvr-villas__sentinel { display: flex; justify-content: center; padding: 28px 0; }
.dvr-villas__sentinel[hidden] { display: none; }
.dvr-villas__spinner {
	width: 26px;
	height: 26px;
	border: 3px solid var(--lx-line);
	border-top-color: var(--lx-gold);
	border-radius: 50%;
	animation: dvr-spin 0.8s linear infinite;
}
@keyframes dvr-spin { to { transform: rotate(360deg); } }

/* Compare tray sits over the sand page — align its buttons with the palette. */
.dvr-villas .dvr-compare-bar__actions .dvr-btn--primary { background: var(--lx-forest); border-color: var(--lx-forest); }
.dvr-villas .dvr-compare-bar__actions .dvr-btn--primary:hover { background: var(--lx-forest-2); border-color: var(--lx-forest-2); }
.dvr-villas .dvr-compare-bar__actions .dvr-btn--ghost { border-color: var(--lx-line); color: var(--lx-body); }

/* -- Map pins ----------------------------------------------------------- */
/* Custom pin (divIcon) — strip Leaflet's default white box. */
.leaflet-div-icon.dvr-pin, .dvr-pin { background: transparent; border: 0; }
.dvr-pin svg { display: block; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.35)); }
/* .is-hot is toggled from the card hover, so the pair reads as one object. */
.dvr-pin { transition: transform 0.18s ease; transform-origin: 50% 100%; }
.dvr-pin.is-hot { transform: scale(1.28); z-index: 600 !important; }
.dvr-pin.is-hot svg path { fill: var(--lx-gold); }

/* -- Listing responsive ------------------------------------------------- */
@media (max-width: 1180px) {
	.dvr-villas--map .dvr-villas__split { grid-template-columns: minmax(0, 1fr) minmax(0, 38%); }
}
@media (max-width: 1000px) {
	/* Map drops below the cards and takes the height configured in Settings. */
	.dvr-villas--map .dvr-villas__split { grid-template-columns: 1fr; }
	.dvr-villas--map .dvr-villas__list { max-width: 1220px; margin: 0 auto; width: 100%; }
	.dvr-villas__mapcol {
		position: static;
		height: var(--dvr-map-h, 420px);
		min-height: 0;
		margin: clamp(24px, 4vw, 36px) clamp(16px, 4vw, 32px) 0;
		border: 1px solid var(--lx-line);
		border-radius: 18px;
		overflow: hidden;
	}
}
@media (max-width: 760px) {
	.dvr-villas__grid { grid-template-columns: 1fr; }
	.dvr-villas--list .dvr-villa-card { flex-direction: column; }
	.dvr-villas--list .dvr-villa-card__media { flex: none; width: 100%; max-width: none; aspect-ratio: 4 / 3; min-height: 0; }
}
@media (max-width: 620px) {
	.dvr-searchbar { flex-direction: column; align-items: stretch; }
	.dvr-searchbar__field,
	.dvr-searchbar__field--num,
	.dvr-searchbar__field--features { flex: 1 1 auto; }
	.dvr-searchbar__actions > .dvr-btn { flex: 1 1 auto; }
	.dvr-villa-card__compare-label { display: none; }
	.dvr-villa-card__compare { width: 34px; padding: 0; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
	.dvr-villa-card,
	.dvr-villa-card__media-link img,
	.dvr-searchband,
	.dvr-searchbar { transition: none; }
	.dvr-villa-card:hover { transform: none; }
	.dvr-villa-card:hover .dvr-villa-card__media-link img { transform: none; }
}
/* -- Single villa page (editorial-luxury) -------------------------------- */
/*
 * The page-level layer for the property detail page. It draws the shared
 * --lx-* palette declared on .dvr-public near the top of this file.
 */
.dvr-villa-single {
	/*
	 * Break out of the theme's narrow content column — the hero needs edge to
	 * edge, and the sand ground has to cover the whole page section.
	 *
	 * `!important` is required: WP core's constrained-layout stylesheet sets
	 * `margin-left/right: auto !important` on every child of .entry-content.
	 *
	 * `--dvr-vw` is 1% of documentElement.clientWidth, set by public.js — it
	 * excludes the scrollbar, which `1vw` does not. Using raw vw here shifts
	 * the whole page half a scrollbar to the left. The `1vw` fallback keeps
	 * this correct (just scrollbar-offset) if the script has not run yet.
	 */
	width: calc(100 * var(--dvr-vw, 1vw)) !important;
	max-width: none !important;
	margin-left: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	margin-right: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	overflow-x: clip;
	background: var(--lx-sand);
	color: var(--lx-body);
	padding-bottom: clamp(30px, 5vw, 60px);
}

/*
 * The property page carries the title in its hero and the checkout carries its
 * own heading, so the theme's post header — H1, publish date, "— by <author>"
 * byline — is a duplicate sitting above them. Hidden, and the header group's
 * own spacing collapsed, or an empty band is left behind. The :has() guard
 * means only templates that opt in are affected: drop the
 * `data-dvr-hide-post-header` attribute to hand the header back to the theme.
 */
body:has([data-dvr-hide-post-header]) .wp-block-post-title,
body:has([data-dvr-hide-post-header]) .entry-header .entry-title,
body:has([data-dvr-hide-post-header]) .page-header .page-title,
body:has([data-dvr-hide-post-header]) h1.entry-title,
body:has([data-dvr-hide-post-header]) h1.page-title,
/* Block themes: the date/byline row (a post-meta template part). */
body:has([data-dvr-hide-post-header]) .wp-block-group:has(> .wp-block-post-date),
/* Classic themes: the equivalent meta line. */
body:has([data-dvr-hide-post-header]) .entry-header .entry-meta,
body:has([data-dvr-hide-post-header]) .entry-header .posted-on {
	display: none !important;
}
/* Collapse the now-empty header group — its padding/margin are inline styles
   from the theme's block markup, hence `!important`. */
body:has([data-dvr-hide-post-header]) main > .wp-block-group:has(.wp-block-post-title) {
	padding-top: 0 !important;
	padding-bottom: 0 !important;
	margin-top: 0 !important;
	margin-bottom: 0 !important;
}
/* Page templates space the title with spacer blocks carrying inline heights
   rather than group padding — collapse those too, header group only. */
body:has([data-dvr-hide-post-header]) main > .wp-block-group:has(.wp-block-post-title) .wp-block-spacer {
	height: 0 !important;
}

/* Content column: everything below the hero is centred at a comfortable
   property-page width. */
.dvr-villa__shell {
	max-width: 1220px;
	margin: 0 auto;
	padding: 0 clamp(16px, 4vw, 32px);
}

/* -- Hero --------------------------------------------------------------- */
.dvr-villa-hero { position: relative; margin: 0; }
.dvr-villa-hero__stage {
	position: relative;
	display: grid;
	gap: 6px;
	height: clamp(460px, 72vh, 680px);
	background: var(--lx-sand-2);
	overflow: hidden;
}
.dvr-villa-hero--collage .dvr-villa-hero__stage { grid-template-columns: minmax(0, 2.1fr) minmax(0, 1fr); }
.dvr-villa-hero__tiles {
	display: grid;
	grid-template-columns: 1fr 1fr;
	grid-template-rows: 1fr 1fr;
	gap: 6px;
	height: 100%;
	min-height: 0;
}
.dvr-villa-hero__lead-img,
.dvr-villa-hero__tile {
	display: block;
	width: 100%;
	height: 100%;
	min-height: 0;
	padding: 0;
	border: 0;
	overflow: hidden;
	background: var(--lx-sand-2);
	cursor: zoom-in;
}
.dvr-villa-hero__lead-img img,
.dvr-villa-hero__tile img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.7s cubic-bezier(0.16, 0.84, 0.3, 1);
}
.dvr-villa-hero__lead-img:hover img,
.dvr-villa-hero__tile:hover img { transform: scale(1.045); }

/* Cinematic bottom scrim so the caption stays legible on any photo. */
.dvr-villa-hero__scrim {
	position: absolute;
	inset: 0;
	z-index: 2;
	pointer-events: none;
	background: linear-gradient(to top, rgba(14, 22, 18, 0.84) 0%, rgba(14, 22, 18, 0.44) 24%, rgba(14, 22, 18, 0) 56%);
}

.dvr-villa-hero__tools {
	position: absolute;
	top: clamp(14px, 2.4vw, 26px);
	right: clamp(14px, 4vw, 32px);
	z-index: 4;
	display: flex;
	gap: 8px;
}
.dvr-villa-hero__tool {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	height: 40px;
	padding: 0 16px;
	border: 1px solid rgba(255, 255, 255, 0.42);
	border-radius: 999px;
	background: rgba(20, 28, 22, 0.42);
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
	color: #fff;
	font-size: 13px;
	font-weight: 600;
	line-height: 1;
	cursor: pointer;
	transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.dvr-villa-hero__tool:hover { background: rgba(255, 255, 255, 0.95); color: var(--lx-ink); border-color: transparent; }
.dvr-villa-hero__tool .dvr-i { width: 17px; height: 17px; }
.dvr-villa-hero__tool.is-on .dvr-i { fill: #d0574d; stroke: #d0574d; }

.dvr-villa-hero__caption {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 3;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: 18px 28px;
	max-width: 1220px;
	margin: 0 auto;
	padding: 0 clamp(16px, 4vw, 32px) clamp(22px, 4vw, 42px);
	color: #fff;
}
.dvr-villa-hero__lead { min-width: 0; }
.dvr-villa-hero__eyebrow {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 10px;
	font-size: 11.5px;
	font-weight: 600;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.88);
}
.dvr-villa-hero__eyebrow .dvr-i { width: 16px; height: 16px; color: #d8b07a; }
.dvr-villa-hero__title {
	font-family: var(--lx-serif);
	font-size: clamp(32px, 5.2vw, 58px);
	font-weight: 600;
	line-height: 1.04;
	letter-spacing: -0.01em;
	color: #fff;
	margin: 0;
	text-shadow: 0 2px 26px rgba(0, 0, 0, 0.34);
}
.dvr-villa-hero__rating {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	margin: 12px 0 0;
	font-size: 14px;
	color: rgba(255, 255, 255, 0.9);
}
.dvr-villa-hero__rating strong { color: #fff; font-weight: 700; }
.dvr-villa-hero__rating a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
/* Stars are translucent-white over the hero photo, warm grey everywhere else. */
.dvr-villa-single .dvr-star { color: #cfc7b6; }
.dvr-villa-single .dvr-star.is-on { color: var(--lx-gold); }
.dvr-villa-hero__rating .dvr-star { color: rgba(255, 255, 255, 0.42); }
.dvr-villa-hero__rating .dvr-star.is-on { color: #e0b579; }

.dvr-villa-hero__rate {
	flex: 0 0 auto;
	display: inline-flex;
	flex-direction: column;
	align-items: flex-end;
	padding: 14px 20px;
	border: 1px solid rgba(255, 255, 255, 0.3);
	border-radius: 16px;
	background: rgba(255, 255, 255, 0.14);
	-webkit-backdrop-filter: blur(12px);
	backdrop-filter: blur(12px);
	color: #fff;
}
.dvr-villa-hero__rate-from,
.dvr-villa-hero__rate-unit {
	font-size: 10.5px;
	font-weight: 600;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	opacity: 0.82;
}
.dvr-villa-hero__rate-value { font-family: var(--lx-serif); font-size: clamp(26px, 3vw, 34px); font-weight: 600; line-height: 1.1; }

/* Photo-less properties: the hero becomes a flat sand masthead. */
.dvr-villa-hero--empty .dvr-villa-hero__stage { height: auto; background: var(--lx-sand-2); }
.dvr-villa-hero--empty .dvr-villa-hero__scrim { display: none; }
.dvr-villa-hero--empty .dvr-villa-hero__caption { position: static; padding-top: clamp(28px, 4vw, 48px); color: var(--lx-ink); }
.dvr-villa-hero--empty .dvr-villa-hero__title { color: var(--lx-ink); text-shadow: none; }
.dvr-villa-hero--empty .dvr-villa-hero__eyebrow { color: var(--lx-muted); }
.dvr-villa-hero--empty .dvr-villa-hero__rating { color: var(--lx-body); }
.dvr-villa-hero--empty .dvr-villa-hero__rating strong { color: var(--lx-ink); }
.dvr-villa-hero--empty .dvr-villa-hero__rating a { color: var(--lx-gold-2); }
.dvr-villa-hero--empty .dvr-star { color: var(--lx-line); }
.dvr-villa-hero--empty .dvr-villa-hero__rate {
	background: var(--lx-card);
	border-color: var(--lx-line);
	color: var(--lx-ink);
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
}

/* Thumbnail rail (classic gallery style) — swaps the hero image in place. */
.dvr-villa-hero__strip {
	display: flex;
	gap: 10px;
	max-width: 1220px;
	margin: 0 auto;
	padding: 14px clamp(16px, 4vw, 32px) 0;
	overflow-x: auto;
	scroll-snap-type: x proximity;
}
.dvr-villa-hero__thumb {
	position: relative;
	flex: 0 0 104px;
	width: 104px;
	height: 72px;
	padding: 0;
	border: 0;
	border-radius: 10px;
	overflow: hidden;
	background: var(--lx-sand-2);
	box-shadow: inset 0 0 0 1px var(--lx-line);
	cursor: pointer;
	scroll-snap-align: start;
	transition: box-shadow 0.2s;
}
.dvr-villa-hero__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dvr-villa-hero__thumb:hover { box-shadow: inset 0 0 0 2px var(--lx-gold-2); }
.dvr-villa-hero__thumb.is-active { box-shadow: inset 0 0 0 3px var(--lx-gold); }

/* -- Photo-tour lightbox ------------------------------------------------- */
.dvr-gallery-modal { position: fixed; inset: 0; z-index: 100200; background: var(--lx-sand); overflow-y: auto; }
.dvr-gallery-modal[hidden] { display: none; }
.dvr-gallery-modal__bar {
	position: sticky;
	top: 0;
	z-index: 1;
	display: flex;
	align-items: center;
	gap: 16px;
	padding: 14px clamp(16px, 4vw, 28px);
	background: rgba(247, 243, 234, 0.94);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--lx-line);
}
.dvr-gallery-modal__close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 1px solid var(--lx-line);
	border-radius: 50%;
	background: var(--lx-card);
	color: var(--lx-ink);
	cursor: pointer;
}
.dvr-gallery-modal__close:hover { background: var(--lx-sand-2); }
.dvr-gallery-modal__close svg { width: 18px; height: 18px; }
.dvr-gallery-modal__title {
	font-family: var(--lx-serif);
	font-size: 21px;
	font-weight: 600;
	color: var(--lx-ink);
	margin-right: auto;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.dvr-gallery-modal__count { font-size: 11.5px; font-weight: 600; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-gallery-modal__grid { column-count: 2; column-gap: 14px; max-width: 1120px; margin: 0 auto; padding: clamp(16px, 3vw, 28px); }
.dvr-gallery-modal__item { margin: 0 0 14px; break-inside: avoid; }
.dvr-gallery-modal__item img { width: 100%; display: block; border-radius: 12px; }
body.dvr-gallery-modal-open { overflow: hidden; }

@media (min-width: 1000px) {
	.dvr-gallery-modal__grid { column-count: 3; }
}
@media (max-width: 600px) {
	.dvr-gallery-modal__grid { column-count: 1; }
	.dvr-gallery-modal__title { font-size: 17px; }
	.dvr-gallery-modal__count { display: none; }
}

/* -- Stat band ---------------------------------------------------------- */
.dvr-villa__facts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(155px, 1fr));
	gap: 1px;
	margin-top: clamp(22px, 3vw, 36px);
	border: 1px solid var(--lx-line);
	border-radius: 16px;
	background: var(--lx-line);
	overflow: hidden;
}
.dvr-villa__fact { display: flex; align-items: center; gap: 13px; padding: 19px 22px; background: var(--lx-card); }
.dvr-villa__fact-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	flex: 0 0 auto;
	border-radius: 50%;
	background: var(--lx-sand);
	color: var(--lx-forest);
}
.dvr-villa__fact-icon .dvr-i { width: 21px; height: 21px; }
.dvr-villa__fact-text { min-width: 0; }
.dvr-villa__fact-text strong { display: block; font-family: var(--lx-serif); font-size: 26px; font-weight: 600; line-height: 1; color: var(--lx-ink); }
.dvr-villa__fact-text > span { font-size: 10.5px; font-weight: 600; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }

/* -- Sticky section nav ------------------------------------------------- */
.dvr-villa-tabs {
	position: sticky;
	top: 0;
	z-index: 20;
	display: flex;
	gap: 6px;
	margin: clamp(20px, 3vw, 32px) 0 4px;
	padding: 10px 0;
	overflow-x: auto;
	background: var(--lx-sand);
	border-bottom: 1px solid var(--lx-line);
	scrollbar-width: none;
	/* Paint the sand ground across the shell's gutters too, so content does
	   not show through beside the bar while scrolling. */
	box-shadow: 0 0 0 100vmax var(--lx-sand);
	clip-path: inset(0 -100vmax);
}
.dvr-villa-tabs::-webkit-scrollbar { display: none; }
.dvr-villa-tabs__link {
	flex: 0 0 auto;
	padding: 10px 18px;
	border-radius: 999px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--lx-muted);
	text-decoration: none;
	white-space: nowrap;
	transition: background 0.2s, color 0.2s;
}
.dvr-villa-tabs__link:hover { background: var(--lx-card); color: var(--lx-ink); }
.dvr-villa-tabs__link.is-active { background: var(--lx-forest); color: #fff; }

/* -- Layout & sections -------------------------------------------------- */
.dvr-villa__layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 372px;
	gap: clamp(28px, 4vw, 56px);
	align-items: start;
}
.dvr-villa__main { min-width: 0; }
.dvr-villa__section {
	padding: clamp(30px, 4vw, 50px) 0;
	border-bottom: 1px solid var(--lx-line);
	scroll-margin-top: 92px;
}
.dvr-villa__main .dvr-villa__section:last-child,
.dvr-villa-rail:last-child { border-bottom: 0; }
.dvr-villa__h2 {
	position: relative;
	font-family: var(--lx-serif);
	font-size: clamp(26px, 3.2vw, 36px);
	font-weight: 600;
	line-height: 1.12;
	letter-spacing: 0.01em;
	color: var(--lx-ink);
	margin: 0 0 22px;
	padding-bottom: 14px;
}
.dvr-villa__h2::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 48px;
	height: 2px;
	background: var(--lx-gold);
}
.dvr-villa__desc { font-size: 16.5px; line-height: 1.85; color: var(--lx-body); }
.dvr-villa__desc a { color: var(--lx-gold-2); }

/* -- Amenities: pill chips grouped by attribute ------------------------- */
.dvr-villa__amenities { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 26px 32px; }
.dvr-villa__amgroup { min-width: 0; }
.dvr-villa__amlabel { font-family: var(--lx-serif); font-size: 19px; font-weight: 600; color: var(--lx-ink); margin: 0 0 12px; }
.dvr-villa__amlist { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.dvr-villa__amlist li {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 8px 15px 8px 12px;
	border: 1px solid var(--lx-line);
	border-radius: 999px;
	background: var(--lx-card);
	font-size: 13.5px;
	color: var(--lx-body);
}
.dvr-villa__amlist .dvr-i { width: 15px; height: 15px; color: var(--lx-gold); stroke-width: 2.2; }

/* -- Availability calendar ---------------------------------------------- */
/*
 * flatpickr in inline mode injects `.flatpickr-calendar` as a SIBLING of the
 * element it was bound to — never a child. So every rule below hangs off the
 * wrapper, which contains both, and the anchor div itself is hidden.
 *
 * flatpickr also hard-codes the grid: 307.875px per month column, 39px cells,
 * `justify-content: space-around` on a wrapping flex row. That leaves the
 * calendar narrower than its card and makes column positions drift. The rules
 * below swap each month onto a real 7-column CSS grid so the whole thing is
 * fluid and the columns line up exactly.
 */
.dvr-villa__calwrap {
	background: var(--lx-card);
	border: 1px solid var(--lx-line);
	border-radius: 18px;
	padding: clamp(14px, 2.2vw, 24px);
	overflow-x: auto;
	--dvr-cal-gap: clamp(16px, 3%, 36px);
}
.dvr-villa__calendar { display: none; }

.dvr-villa__calwrap .flatpickr-calendar {
	width: 100% !important;
	max-width: none;
	background: transparent;
	box-shadow: none;
	font-size: inherit;
	line-height: inherit;
}
/* Flatpickr sets an inline pixel height on these (for its month-change
   animation) sized for single-line days. Taller two-line day cells (below)
   need that overridden to auto, or rows overlap the ones after them. */
.dvr-villa__calwrap .flatpickr-innerContainer,
.dvr-villa__calwrap .flatpickr-rContainer,
.dvr-villa__calwrap .flatpickr-days,
.dvr-villa__calwrap .dayContainer { height: auto !important; overflow: visible !important; }
.dvr-villa__calwrap .flatpickr-innerContainer,
.dvr-villa__calwrap .flatpickr-rContainer { display: block; width: 100%; }

/* -- Month headings ----------------------------------------------------- */
/* Same auto-column grid as the day rows, so each heading sits dead centre
   over its own month. The prev/next arrows are absolutely positioned, so
   they generate no track. `grid-auto-flow: column` also keeps this correct
   for the single-month layout used on narrow screens. */
.dvr-villa__calwrap .flatpickr-months {
	position: relative;
	display: grid;
	grid-auto-flow: column;
	grid-auto-columns: minmax(0, 1fr);
	gap: var(--dvr-cal-gap);
	padding: 2px 0 16px;
}
/* Centre the heading over its own month column and keep "September 2026" on
   one line — the year is a separate <input>, so it wraps without this. */
.dvr-villa__calwrap .flatpickr-month { flex: 1 1 0; min-width: 0; height: auto; overflow: visible; display: flex; align-items: center; justify-content: center; }
.dvr-villa__calwrap .flatpickr-current-month {
	position: static;
	left: auto;
	width: auto;
	height: auto;
	padding: 0;
	display: inline-flex;
	align-items: baseline;
	white-space: nowrap;
	font-family: var(--lx-serif);
	font-size: 22px;
	font-weight: 600;
	line-height: 1.1;
	color: var(--lx-ink);
}
.dvr-villa__calwrap .flatpickr-current-month span.cur-month { font-family: inherit; font-weight: 600; margin: 0 0.25ch 0 0; color: inherit; }
/* One-month layouts render the month name as a <select>. This calendar is
   read-only, so strip the native chevron and centre the text in its box. */
.dvr-villa__calwrap select.flatpickr-monthDropdown-months {
	margin: 0 0.25ch 0 0;
	padding: 0;
	border: 0;
	background: transparent;
	font-family: inherit;
	font-size: inherit;
	font-weight: 600;
	color: var(--lx-ink);
	text-align: center;
	text-align-last: center;
	pointer-events: none;
	-webkit-appearance: none;
	appearance: none;
}
/* The year is a number input with spinner arrows — this calendar is read-only,
   so drop the arrows and make it render as plain type. */
.dvr-villa__calwrap .numInputWrapper { width: auto; display: inline-block; }
.dvr-villa__calwrap .numInputWrapper span { display: none; }
.dvr-villa__calwrap input.cur-year {
	width: auto;
	padding: 0;
	border: 0;
	background: transparent;
	font-family: inherit;
	font-size: inherit;
	font-weight: 400;
	color: var(--lx-muted);
	pointer-events: none;
	-webkit-appearance: none;
	appearance: none;
}

.dvr-villa__calwrap .flatpickr-prev-month,
.dvr-villa__calwrap .flatpickr-next-month {
	top: -2px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid var(--lx-line);
	border-radius: 50%;
	background: var(--lx-card);
	color: var(--lx-ink);
	transition: border-color 0.2s, color 0.2s;
}
.dvr-villa__calwrap .flatpickr-prev-month { left: 0; }
.dvr-villa__calwrap .flatpickr-next-month { right: 0; }
.dvr-villa__calwrap .flatpickr-prev-month:hover,
.dvr-villa__calwrap .flatpickr-next-month:hover { border-color: var(--lx-forest); color: var(--lx-forest); background: var(--lx-card); }
.dvr-villa__calwrap .flatpickr-prev-month svg,
.dvr-villa__calwrap .flatpickr-next-month svg { width: 11px; height: 11px; fill: currentColor; }
.dvr-villa__calwrap .flatpickr-prev-month.flatpickr-disabled,
.dvr-villa__calwrap .flatpickr-next-month.flatpickr-disabled { display: none; }

/* -- Weekday row + day grid --------------------------------------------- */
.dvr-villa__calwrap .flatpickr-weekdays { height: auto; padding-bottom: 8px; gap: var(--dvr-cal-gap); background: transparent; }
.dvr-villa__calwrap .flatpickr-weekdaycontainer { flex: 1 1 0; min-width: 0; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
.dvr-villa__calwrap span.flatpickr-weekday {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--lx-muted) !important;
	background: transparent;
}
.dvr-villa__calwrap .flatpickr-days { width: 100% !important; gap: var(--dvr-cal-gap); }
.dvr-villa__calwrap .dayContainer {
	flex: 1 1 0;
	width: auto !important;
	min-width: 0 !important;
	max-width: none !important;
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: 5px;
	box-shadow: none;
	transform: none;
}

/* Day cells: available reads as an open card, unavailable as flat hatched
   sand. The gap does the separating, so cells carry a real border. */
.dvr-villa__calwrap .flatpickr-day {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 2px;
	width: auto;
	max-width: none;
	flex-basis: auto;
	height: auto;
	min-height: 54px;
	margin: 0;
	padding: 4px 2px;
	box-sizing: border-box;
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background: #fff;
	color: var(--lx-ink);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.1;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}
.dvr-villa__calwrap .flatpickr-day:hover:not(.flatpickr-disabled):not(.selected):not(.startRange):not(.endRange):not(.inRange) {
	border-color: var(--lx-forest);
	background: #f3f7f3;
}
/* In two-month mode flatpickr renders no adjacent-month days; this covers the
   single-month layout used on narrow screens. */
.dvr-villa__calwrap .flatpickr-day.prevMonthDay,
.dvr-villa__calwrap .flatpickr-day.nextMonthDay { visibility: hidden; }
.dvr-villa__calwrap .flatpickr-day.today { border-color: var(--lx-gold); box-shadow: inset 0 0 0 1px var(--lx-gold); }

/* Selected / in-range nights — deep green card, white text. */
.dvr-villa__calwrap .flatpickr-day.selected,
.dvr-villa__calwrap .flatpickr-day.startRange,
.dvr-villa__calwrap .flatpickr-day.endRange,
.dvr-villa__calwrap .flatpickr-day.inRange {
	border-color: var(--lx-forest);
	background: var(--lx-forest);
	color: #fff;
	box-shadow: none;
}
.dvr-villa__calwrap .flatpickr-day.selected .dvr-villa-calendar__price,
.dvr-villa__calwrap .flatpickr-day.startRange .dvr-villa-calendar__price,
.dvr-villa__calwrap .flatpickr-day.endRange .dvr-villa-calendar__price,
.dvr-villa__calwrap .flatpickr-day.inRange .dvr-villa-calendar__price { color: rgba(255, 255, 255, 0.8); }

/* Booked / past nights — flat, hatched, no price to show. */
.dvr-villa__calwrap .flatpickr-day.flatpickr-disabled {
	border-color: transparent;
	background-color: var(--lx-sand-2);
	background-image: repeating-linear-gradient(135deg, rgba(140, 105, 53, 0.09) 0 1px, transparent 1px 7px);
	color: var(--lx-muted);
	font-weight: 500;
	cursor: default;
}
.dvr-villa__calwrap .flatpickr-day.flatpickr-disabled .dvr-villa-calendar__price { display: none; }
.dvr-villa-calendar__price { font-size: 10.5px; font-weight: 600; white-space: nowrap; color: var(--lx-gold-2); }

.dvr-villa__legend { display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 16px 0 0; font-size: 12.5px; color: var(--lx-muted); }
.dvr-villa__legend-item { display: inline-flex; align-items: center; gap: 8px; }
.dvr-villa__swatch { display: inline-block; width: 15px; height: 15px; border-radius: 5px; }
.dvr-villa__swatch--free { background: #fff; box-shadow: inset 0 0 0 1px var(--lx-line); }
.dvr-villa__swatch--busy {
	background-color: var(--lx-sand-2);
	background-image: repeating-linear-gradient(135deg, rgba(140, 105, 53, 0.14) 0 1px, transparent 1px 6px);
}

/* Narrow screens get one month (set in public.js), so the gap is unused and
   the cells can breathe less. */
@media (max-width: 700px) {
	.dvr-villa__calwrap .flatpickr-day { min-height: 46px; font-size: 13px; border-radius: 10px; }
	.dvr-villa__calwrap .dayContainer { gap: 4px; }
	.dvr-villa__calwrap .flatpickr-current-month { font-size: 19px; }
	.dvr-villa-calendar__price { font-size: 9.5px; }
}

/* -- Date-picker popups (check-in / check-out, search bar) -------------- */
/*
 * flatpickr appends these to <body>, so they sit outside every plugin root —
 * hence the bare `.flatpickr-calendar` selector and the :root palette. Only
 * front-end pages load this file, so every popup here belongs to the plugin.
 * The inline availability calendar is excluded; it has its own layout above.
 */
.flatpickr-calendar:not(.inline) {
	padding: 8px;
	border: 1px solid var(--lx-line);
	border-radius: 16px;
	background: var(--lx-card);
	box-shadow: 0 26px 50px -26px rgba(28, 42, 36, 0.45);
	font-size: 14px;
}
.flatpickr-calendar:not(.inline) .flatpickr-months { padding-bottom: 6px; }
.flatpickr-calendar:not(.inline) .flatpickr-current-month {
	font-family: var(--lx-serif);
	font-size: 19px;
	font-weight: 600;
	color: var(--lx-ink);
	padding-top: 4px;
}
.flatpickr-calendar:not(.inline) .flatpickr-current-month span.cur-month { font-family: inherit; font-weight: 600; }
.flatpickr-calendar:not(.inline) select.flatpickr-monthDropdown-months {
	border: 0;
	background: transparent;
	font-family: inherit;
	font-size: inherit;
	font-weight: 600;
	color: var(--lx-ink);
	-webkit-appearance: none;
	appearance: none;
}
.flatpickr-calendar:not(.inline) input.cur-year { font-family: inherit; font-weight: 400; color: var(--lx-muted); }
.flatpickr-calendar:not(.inline) .flatpickr-prev-month,
.flatpickr-calendar:not(.inline) .flatpickr-next-month { color: var(--lx-ink); fill: var(--lx-ink); }
.flatpickr-calendar:not(.inline) .flatpickr-prev-month:hover svg,
.flatpickr-calendar:not(.inline) .flatpickr-next-month:hover svg { fill: var(--lx-forest); }
.flatpickr-calendar:not(.inline) span.flatpickr-weekday {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--lx-muted) !important;
}
.flatpickr-calendar:not(.inline) .flatpickr-day {
	border-radius: 10px;
	color: var(--lx-ink);
	font-weight: 500;
}
.flatpickr-calendar:not(.inline) .flatpickr-day:hover:not(.flatpickr-disabled) { background: var(--lx-sand); border-color: var(--lx-sand); }
.flatpickr-calendar:not(.inline) .flatpickr-day.today { border-color: var(--lx-gold); }
.flatpickr-calendar:not(.inline) .flatpickr-day.selected,
.flatpickr-calendar:not(.inline) .flatpickr-day.startRange,
.flatpickr-calendar:not(.inline) .flatpickr-day.endRange {
	border-color: var(--lx-forest);
	background: var(--lx-forest);
	color: #fff;
}
.flatpickr-calendar:not(.inline) .flatpickr-day.inRange {
	border-color: var(--lx-sand-2);
	background: var(--lx-sand-2);
	color: var(--lx-ink);
	box-shadow: -5px 0 0 var(--lx-sand-2), 5px 0 0 var(--lx-sand-2);
}
.flatpickr-calendar:not(.inline) .flatpickr-day.flatpickr-disabled,
.flatpickr-calendar:not(.inline) .flatpickr-day.prevMonthDay,
.flatpickr-calendar:not(.inline) .flatpickr-day.nextMonthDay { color: #c6c0b2; }
.flatpickr-calendar:not(.inline) .flatpickr-day.flatpickr-disabled { text-decoration: line-through; }
/* -- Location ----------------------------------------------------------- */
.dvr-villa__loc { display: flex; align-items: center; gap: 8px; margin: 0 0 16px; font-size: 14.5px; color: var(--lx-muted); }
.dvr-villa__loc .dvr-i { color: var(--lx-gold); }
.dvr-villa__map { height: clamp(280px, 42vh, 420px); border: 1px solid var(--lx-line); border-radius: 18px; overflow: hidden; }

/* -- Reviews inside the section ---------------------------------------- */
/* The reviews partial is shared with the standalone reviews page, so its
   blue UI is only re-tinted here, inside the villa page. */
.dvr-villa-single .dvr-reviews { margin-top: 0; padding-top: 0; border-top: 0; }
.dvr-villa-single .dvr-reviews__summary { border-color: var(--lx-line); }
.dvr-villa-single .dvr-reviews__avg { font-family: var(--lx-serif); font-weight: 600; color: var(--lx-ink); }
.dvr-villa-single .dvr-reviews__count { color: var(--lx-muted); }
.dvr-villa-single .dvr-review { background: var(--lx-card); border-color: var(--lx-line); border-radius: 14px; }
.dvr-villa-single .dvr-review__author { color: var(--lx-ink); }
.dvr-villa-single .dvr-review__date { color: var(--lx-muted); }
.dvr-villa-single .dvr-review__body { color: var(--lx-body); }
.dvr-villa-single .dvr-review-form { background: var(--lx-card); border-color: var(--lx-line); border-radius: 16px; }
.dvr-villa-single .dvr-review-form__title { font-family: var(--lx-serif); font-size: 21px; font-weight: 600; color: var(--lx-ink); }
.dvr-villa-single .dvr-review-form__note { color: var(--lx-muted); }
.dvr-villa-single .dvr-review-form input,
.dvr-villa-single .dvr-review-form textarea { border-color: var(--lx-line); border-radius: 10px; background: #fff; color: var(--lx-ink); }
.dvr-villa-single .dvr-review-form input:focus,
.dvr-villa-single .dvr-review-form textarea:focus { outline: none; border-color: var(--lx-forest-2); }
.dvr-villa-single .dvr-review-form .dvr-btn {
	border: 0;
	border-radius: 10px;
	background: var(--lx-forest);
	color: #fff;
	font-size: 12.5px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	padding: 13px 22px;
}
.dvr-villa-single .dvr-review-form .dvr-btn:hover { background: var(--lx-forest-2); color: #fff; }
.dvr-villa-single .dvr-review-form__msg.is-ok { color: #2f7d52; }
.dvr-villa-single .dvr-review-form__msg.is-error { color: #b4463c; }

/* -- Booking card ------------------------------------------------------- */
.dvr-villa__booking { position: sticky; top: 92px; }
.dvr-villa-book {
	background: var(--lx-card);
	border: 1px solid var(--lx-line);
	border-radius: 20px;
	overflow: hidden;
	box-shadow: 0 30px 60px -26px rgba(28, 42, 36, 0.38);
}
.dvr-villa-book__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 20px 22px;
	background: var(--lx-forest);
	color: #fff;
}
.dvr-villa-book__price strong { font-family: var(--lx-serif); font-size: 30px; font-weight: 600; line-height: 1; }
.dvr-villa-book__price span { font-size: 12.5px; opacity: 0.82; margin-left: 5px; }
.dvr-villa-book__badge {
	flex: 0 0 auto;
	padding: 6px 11px;
	border-radius: 999px;
	background: var(--lx-gold);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.dvr-villa-book__inner { padding: 20px 22px 24px; }

.dvr-villa-book__dates { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 10px; }
.dvr-villa-book__field {
	display: block;
	padding: 9px 13px 11px;
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background: var(--lx-sand);
	cursor: pointer;
	transition: border-color 0.2s, background 0.2s;
}
.dvr-villa-book__field:hover { border-color: #d5cbb7; }
.dvr-villa-book__field:focus-within { border-color: var(--lx-forest-2); background: #fff; }
.dvr-villa-book__field--guests { margin-bottom: 2px; }
.dvr-villa-book__flabel {
	display: block;
	margin-bottom: 3px;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--lx-muted);
}
.dvr-villa-book__fctl { display: flex; align-items: center; gap: 9px; }
.dvr-villa-book__fctl .dvr-i { width: 17px; height: 17px; color: var(--lx-forest-2); }
.dvr-villa-book__fctl input,
.dvr-villa-book__fctl select {
	width: 100%;
	min-width: 0;
	padding: 0;
	border: 0;
	background: transparent;
	font-family: inherit;
	font-size: 14.5px;
	color: var(--lx-ink);
	cursor: pointer;
	outline: none;
	-webkit-appearance: none;
	appearance: none;
}
/* Native select caret is suppressed above — draw a matching chevron. */
.dvr-villa-book__field--guests .dvr-villa-book__fctl::after {
	content: "";
	flex: 0 0 auto;
	width: 7px;
	height: 7px;
	margin-bottom: 3px;
	border-right: 1.6px solid var(--lx-muted);
	border-bottom: 1.6px solid var(--lx-muted);
	transform: rotate(45deg);
}

/* Price breakdown (markup generated by public.js — class names are a contract). */
.dvr-villa-book__breakdown { margin: 16px 0 2px; padding-top: 14px; border-top: 1px solid var(--lx-line); }
.dvr-villa-book__breakdown[hidden] { display: none; }
.dvr-villa-book__line { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; font-size: 14.5px; color: var(--lx-body); }
.dvr-villa-book__fees { padding: 2px 0; }
.dvr-villa-book__fees summary { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; font-size: 14.5px; color: var(--lx-body); cursor: pointer; list-style: none; }
.dvr-villa-book__fees summary::-webkit-details-marker { display: none; }
.dvr-villa-book__fees summary span:first-child::after { content: " ⌄"; color: var(--lx-muted); }
.dvr-villa-book__fees[open] summary span:first-child::after { content: " ⌃"; }
.dvr-villa-book__feeline { display: flex; justify-content: space-between; gap: 12px; padding: 4px 0 4px 14px; font-size: 13px; color: var(--lx-muted); }
.dvr-villa-book__total {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	margin-top: 10px;
	padding-top: 14px;
	border-top: 1px solid var(--lx-line);
	font-size: 14px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--lx-muted);
}
.dvr-villa-book__total strong { font-family: var(--lx-serif); font-size: 27px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--lx-ink); }
.dvr-villa-book__deposit {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	margin-top: 10px;
	padding-top: 12px;
	border-top: 1px dashed var(--lx-line);
	font-size: 15px;
	font-weight: 600;
	color: var(--lx-ink);
}
.dvr-villa-book__deposit strong { color: var(--lx-gold-2); }
.dvr-villa-book__balance { margin-top: 3px; font-size: 12px; color: var(--lx-muted); text-align: right; }

.dvr-villa-book__promo { margin: 14px 0 2px; }
.dvr-villa-book__promo-toggle { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--lx-body); cursor: pointer; }
.dvr-villa-book__promo-row { display: flex; gap: 8px; margin-top: 10px; }
.dvr-villa-book__promo-row[hidden] { display: none; }
.dvr-villa-book__promo-row input {
	flex: 1 1 auto;
	min-width: 0;
	padding: 10px 13px;
	border: 1px solid var(--lx-line);
	border-radius: 10px;
	background: #fff;
	font-family: inherit;
	font-size: 14px;
	color: var(--lx-ink);
}
.dvr-villa-book__promo-row .dvr-btn {
	flex: 0 0 auto;
	padding: 9px 17px;
	border: 1px solid var(--lx-forest);
	border-radius: 10px;
	background: transparent;
	color: var(--lx-forest);
	font-size: 12.5px;
	font-weight: 700;
	letter-spacing: 0.06em;
}
.dvr-villa-book__promo-row .dvr-btn:hover { background: var(--lx-forest); color: #fff; }
.dvr-villa-book__coupon-msg { margin: 8px 0 0; font-size: 12.5px; }
.dvr-villa-book__coupon-msg.is-ok { color: #2f7d52; }
.dvr-villa-book__coupon-msg.is-err { color: #b4463c; }

.dvr-villa-book__cta {
	width: 100%;
	margin-top: 16px;
	padding: 16px;
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	font-size: 12.5px;
	font-weight: 700;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
}
.dvr-villa-book__cta:hover:not(:disabled) { background: var(--lx-gold-2); transform: translateY(-1px); box-shadow: 0 10px 22px -10px rgba(140, 105, 53, 0.7); }
.dvr-villa-book__cta:disabled { opacity: 0.45; cursor: not-allowed; transform: none; box-shadow: none; }
.dvr-villa-book__note { margin: 12px 0 0; font-size: 12px; font-style: italic; color: var(--lx-muted); text-align: center; }
.dvr-villa-book__error { margin: 10px 0 0; font-size: 13px; color: #b4463c; text-align: center; }

/* -- Sticky mobile price bar (plain anchor — no JS) --------------------- */
.dvr-villa-bar {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 60;
	display: none;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	padding: 11px clamp(14px, 4vw, 22px);
	background: rgba(255, 253, 249, 0.96);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
	border-top: 1px solid var(--lx-line);
	box-shadow: 0 -8px 24px rgba(28, 42, 36, 0.1);
}
.dvr-villa-bar__price { min-width: 0; }
.dvr-villa-bar__price strong { display: block; font-family: var(--lx-serif); font-size: 23px; font-weight: 600; line-height: 1.15; color: var(--lx-ink); }
.dvr-villa-bar__price span { font-size: 10px; font-weight: 600; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-villa-bar__cta {
	flex: 0 0 auto;
	padding: 13px 22px;
	border-radius: 999px;
	background: var(--lx-gold);
	color: #fff;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	text-decoration: none;
}
.dvr-villa-bar__cta:hover { background: var(--lx-gold-2); color: #fff; }

/* -- Single-page responsive -------------------------------------------- */
@media (max-width: 1080px) {
	.dvr-villa__layout { grid-template-columns: minmax(0, 1fr) 330px; gap: 28px; }
}
@media (max-width: 940px) {
	/* Booking card moves above the long-form content — dates first. */
	.dvr-villa__layout { grid-template-columns: 1fr; }
	.dvr-villa__booking { position: static; order: -1; }
	.dvr-villa-book { max-width: 520px; }
	.dvr-villa-bar { display: flex; }
	.dvr-villa-single { padding-bottom: 96px; }

	/* Collage collapses to the lead photo — the rest stay one tap away in
	   the "All N photos" lightbox. */
	.dvr-villa-hero__stage { display: block; height: clamp(360px, 56vh, 500px); }
	.dvr-villa-hero__tiles { display: none; }
	.dvr-villa-hero__caption { align-items: flex-start; flex-direction: column; }
	.dvr-villa-hero__rate { flex-direction: row; align-items: baseline; gap: 8px; padding: 10px 16px; }
	.dvr-villa-hero__rate-value { font-size: 24px; }
}
@media (max-width: 620px) {
	.dvr-villa__facts { grid-template-columns: 1fr 1fr; }
	.dvr-villa__fact { padding: 15px 16px; gap: 11px; }
	.dvr-villa__fact-icon { width: 36px; height: 36px; }
	.dvr-villa__fact-text strong { font-size: 22px; }
	.dvr-villa-book__dates { grid-template-columns: 1fr; }
	.dvr-villa-hero__tool:not(.dvr-villa-hero__tool--photos) span { display: none; }
	.dvr-villa-hero__tool { padding: 0 13px; height: 36px; font-size: 12px; }
	.dvr-villa-hero__thumb { flex-basis: 84px; width: 84px; height: 58px; }
	.dvr-villa__section { scroll-margin-top: 78px; }
}
@media (prefers-reduced-motion: reduce) {
	.dvr-villa-hero__lead-img img,
	.dvr-villa-hero__tile img,
	.dvr-villa-book__cta { transition: none; }
	.dvr-villa-hero__lead-img:hover img,
	.dvr-villa-hero__tile:hover img { transform: none; }
}
/* -- Checkout (editorial-luxury) ---------------------------------------- */
/*
 * The booking flow's last step and the two Booking Success surfaces. Same sand
 * ground, serif display type and gold/forest accents as the property pages —
 * see the --lx-* palette on .dvr-public near the top of this file.
 *
 * Two classes on the selector: .dvr-public sets max-width + auto margins, so
 * a single-class rule would lose to it.
 */
.dvr-public.dvr-checkout,
.dvr-public.dvr-successband {
	width: calc(100 * var(--dvr-vw, 1vw)) !important;
	max-width: none !important;
	margin-left: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	margin-right: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	background: var(--lx-sand);
	color: var(--lx-body);
}

.dvr-checkout__shell {
	max-width: 1120px;
	margin: 0 auto;
	padding: clamp(24px, 4vw, 46px) clamp(16px, 4vw, 32px) clamp(40px, 6vw, 72px);
}

.dvr-checkout__back {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	margin-bottom: 14px;
	color: var(--lx-gold-2);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
}
.dvr-checkout__back:hover { color: var(--lx-forest); }
.dvr-checkout__title {
	position: relative;
	margin: 0 0 clamp(22px, 3vw, 34px);
	padding-bottom: 14px;
	font-family: var(--lx-serif);
	font-size: clamp(30px, 4vw, 44px);
	font-weight: 600;
	line-height: 1.1;
	color: var(--lx-ink);
}
.dvr-checkout__title::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 48px;
	height: 2px;
	background: var(--lx-gold);
}

/* "Pick your dates first" fallback */
.dvr-checkout__notice {
	padding: clamp(36px, 6vw, 64px) 24px;
	border: 1px dashed var(--lx-line);
	border-radius: 20px;
	background: var(--lx-card);
	text-align: center;
}
.dvr-checkout__notice p { margin: 0; font-family: var(--lx-serif); font-size: 22px; color: var(--lx-ink); }
.dvr-checkout__notice .dvr-btn {
	margin-top: 18px;
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	padding: 14px 26px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-checkout__notice .dvr-btn:hover { background: var(--lx-gold-2); color: #fff; }

.dvr-checkout__grid { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: clamp(26px, 4vw, 52px); align-items: start; }
.dvr-checkout__form { min-width: 0; }

/* -- Step wizard -------------------------------------------------------- */
.dvr-checkout__steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 16px; }
.dvr-checkout__step {
	padding: 20px 22px;
	border: 1px solid var(--lx-line);
	border-radius: 18px;
	background: var(--lx-card);
	transition: border-color 0.2s, box-shadow 0.2s, opacity 0.2s;
}
.dvr-checkout__step.is-current { border-color: var(--lx-forest); box-shadow: 0 24px 44px -30px rgba(28, 42, 36, 0.55); }
.dvr-checkout__step.is-done { background: transparent; border-style: dashed; }
.dvr-checkout__step-head { display: flex; align-items: center; gap: 13px; }
.dvr-checkout__step-num {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	border: 1px solid var(--lx-line);
	border-radius: 50%;
	background: transparent;
	color: var(--lx-muted);
	font-family: var(--lx-serif);
	font-size: 16px;
	font-weight: 600;
	line-height: 1;
	transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.dvr-checkout__step.is-current .dvr-checkout__step-num { background: var(--lx-gold); border-color: transparent; color: #fff; }
.dvr-checkout__step.is-done .dvr-checkout__step-num { background: var(--lx-forest); border-color: transparent; color: #fff; }
.dvr-checkout__step-title { flex: 1 1 auto; margin: 0; font-family: var(--lx-serif); font-size: 21px; font-weight: 600; line-height: 1.2; color: var(--lx-ink); }
.dvr-checkout__step-edit {
	flex: 0 0 auto;
	padding: 4px 8px;
	border: 0;
	background: transparent;
	color: var(--lx-gold-2);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	cursor: pointer;
}
.dvr-checkout__step-edit:hover { color: var(--lx-forest); }
.dvr-checkout__step-body { display: flex; flex-direction: column; gap: 12px; margin-top: 18px; }
.dvr-checkout__step-body[hidden] { display: none; }
.dvr-checkout__step-actions { display: flex; gap: 10px; margin-top: 2px; }
.dvr-checkout__step-actions .dvr-btn { flex: 1 1 auto; }

/* -- Form fields -------------------------------------------------------- */
.dvr-checkout__row { display: flex; gap: 12px; }
.dvr-checkout__row > * { flex: 1 1 0; min-width: 0; }
.dvr-checkout__form input,
.dvr-checkout__form textarea,
.dvr-checkout__form select {
	width: 100%;
	padding: 12px 14px;
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background-color: var(--lx-sand);
	font-family: inherit;
	font-size: 14.5px;
	color: var(--lx-ink);
}
.dvr-checkout__form select {
	padding-right: 34px;
	background-image: var(--lx-caret);
	background-repeat: no-repeat;
	background-position: right 13px center;
	background-size: 11px;
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
}
.dvr-checkout__form textarea { resize: vertical; min-height: 84px; }
.dvr-checkout__form input::placeholder,
.dvr-checkout__form textarea::placeholder { color: var(--lx-muted); }
.dvr-checkout__form input:focus,
.dvr-checkout__form textarea:focus,
.dvr-checkout__form select:focus { outline: none; border-color: var(--lx-forest-2); background-color: #fff; }
/* Checkboxes keep their native box — the width:100% above would stretch them. */
.dvr-checkout__form input[type="checkbox"] { width: 17px; height: 17px; flex: 0 0 auto; padding: 0; accent-color: var(--lx-forest); }

.dvr-checkout__agree { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; line-height: 1.5; color: var(--lx-body); }
.dvr-checkout__agree input { margin-top: 2px; }
.dvr-checkout__error { margin: 0; font-size: 13px; color: #b4463c; }
.dvr-checkout__note { margin: 12px 0 0; font-size: 12px; font-style: italic; color: var(--lx-muted); text-align: center; }
.dvr-checkout__terms { margin-top: 4px; font-size: 13px; color: var(--lx-body); }
.dvr-checkout__terms summary { cursor: pointer; color: var(--lx-gold-2); font-weight: 600; }
.dvr-checkout__terms > div { margin-top: 10px; max-height: 220px; overflow: auto; padding: 14px; border: 1px solid var(--lx-line); border-radius: 12px; background: var(--lx-sand); line-height: 1.7; }

.dvr-checkout__payment { margin: 4px 0; padding: 16px; border: 1px solid var(--lx-line); border-radius: 14px; background: #fff; }
.dvr-checkout__payment[hidden] { display: none; }

.dvr-checkout__blocked {
	padding: 20px 22px;
	border: 1px solid #e6cfc4;
	border-radius: 18px;
	background: #fdf4f0;
	color: #8a4536;
}
.dvr-checkout__blocked strong { display: block; margin-bottom: 6px; font-family: var(--lx-serif); font-size: 19px; font-weight: 600; }
.dvr-checkout__blocked p { margin: 0; font-size: 14px; line-height: 1.6; }

/* Primary / secondary buttons inside the wizard */
.dvr-checkout__form .dvr-btn--primary,
.dvr-checkout__submit {
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	padding: 15px 26px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-checkout__form .dvr-btn--primary:hover,
.dvr-checkout__submit:hover { background: var(--lx-gold-2); color: #fff; }
.dvr-checkout__form .dvr-btn--primary:disabled,
.dvr-checkout__submit:disabled { opacity: 0.45; cursor: not-allowed; }
.dvr-checkout__submit { width: 100%; margin-top: 6px; }
.dvr-checkout__form .dvr-btn--ghost {
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background: transparent;
	color: var(--lx-body);
	padding: 15px 26px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-checkout__form .dvr-btn--ghost:hover { border-color: var(--lx-forest-2); color: var(--lx-forest); background: transparent; }

/* -- Optional extras / add-ons ------------------------------------------ */
.dvr-checkout__addons { margin: 4px 0 2px; padding-top: 16px; border-top: 1px solid var(--lx-line); }
.dvr-checkout__addons-title { margin: 0 0 12px; font-family: var(--lx-serif); font-size: 18px; font-weight: 600; color: var(--lx-ink); }
.dvr-addon {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 13px 15px;
	margin-bottom: 8px;
	border: 1px solid var(--lx-line);
	border-radius: 14px;
	background: var(--lx-sand);
	cursor: pointer;
	transition: border-color 0.2s, background 0.2s;
}
.dvr-addon:last-child { margin-bottom: 0; }
.dvr-addon:hover { border-color: var(--lx-forest-2); background: #fff; }
.dvr-addon:has(input:checked) { border-color: var(--lx-forest); background: #fff; }
.dvr-addon__main { flex: 1 1 auto; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dvr-addon__name { font-weight: 600; color: var(--lx-ink); font-size: 14.5px; }
.dvr-addon__desc { font-size: 12.5px; color: var(--lx-muted); line-height: 1.5; }
.dvr-addon__price { flex: 0 0 auto; font-family: var(--lx-serif); font-size: 18px; font-weight: 600; color: var(--lx-gold-2); white-space: nowrap; }

/* -- Sticky order summary ----------------------------------------------- */
.dvr-checkout__summary { min-width: 0; }
.dvr-checkout__card {
	position: sticky;
	top: 24px;
	padding: 18px;
	border: 1px solid var(--lx-line);
	border-radius: 20px;
	background: var(--lx-card);
	box-shadow: 0 30px 60px -34px rgba(28, 42, 36, 0.45);
}
.dvr-checkout__thumb { width: 100%; height: 168px; object-fit: cover; border-radius: 14px; margin-bottom: 14px; display: block; }
.dvr-checkout__pname { margin: 0 0 3px; font-family: var(--lx-serif); font-size: 22px; font-weight: 600; line-height: 1.2; color: var(--lx-ink); }
.dvr-checkout__muted { margin: 0 0 14px; font-size: 13px; color: var(--lx-muted); }
.dvr-checkout__facts {
	list-style: none;
	margin: 0 0 14px;
	padding: 14px 0;
	border-top: 1px solid var(--lx-line);
	border-bottom: 1px solid var(--lx-line);
	display: flex;
	flex-direction: column;
	gap: 8px;
}
.dvr-checkout__facts li { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; }
.dvr-checkout__facts span { font-size: 10.5px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); align-self: center; }
.dvr-checkout__facts strong { color: var(--lx-ink); font-weight: 600; }

/* The price table is re-rendered by public.js when add-ons change, so these
   class names are a contract with checkoutRenderSummary(). */
.dvr-checkout__price { width: 100%; border-collapse: collapse; }
.dvr-checkout__price td { padding: 7px 0; font-size: 14px; color: var(--lx-body); }
.dvr-checkout__num { text-align: right; white-space: nowrap; }
.dvr-checkout__price tfoot td {
	padding-top: 12px;
	border-top: 1px solid var(--lx-line);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--lx-muted);
}
.dvr-checkout__price tfoot td.dvr-checkout__num {
	font-family: var(--lx-serif);
	font-size: 25px;
	font-weight: 600;
	letter-spacing: 0;
	text-transform: none;
	color: var(--lx-ink);
}
.dvr-checkout__price tfoot .dvr-checkout__deposit td { border-top: 1px dashed var(--lx-line); color: var(--lx-gold-2); font-size: 11.5px; }
.dvr-checkout__price tfoot .dvr-checkout__deposit td.dvr-checkout__num { font-family: var(--lx-serif); font-size: 20px; letter-spacing: 0; text-transform: none; color: var(--lx-gold-2); }
.dvr-checkout__price tfoot .dvr-checkout__balance-row td { border-top: 0; padding-top: 2px; font-size: 10.5px; font-weight: 600; letter-spacing: 0.1em; color: var(--lx-muted); }
.dvr-checkout__price tfoot .dvr-checkout__balance-row td.dvr-checkout__num { font-family: inherit; font-size: 13px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--lx-muted); }

/* -- Booking success: shared sand band ---------------------------------- */
.dvr-successband { padding: clamp(28px, 5vw, 56px) clamp(16px, 4vw, 32px) clamp(36px, 5vw, 64px); }

/* -- Booking confirmation (request received) ---------------------------- */
.dvr-booking-confirmed {
	max-width: 640px;
	margin: 0 auto;
	padding: clamp(32px, 5vw, 52px) clamp(24px, 4vw, 44px);
	border: 1px solid var(--lx-line);
	border-top: 3px solid var(--lx-gold);
	border-radius: 20px;
	background: var(--lx-card);
	box-shadow: 0 30px 60px -34px rgba(28, 42, 36, 0.4);
	text-align: center;
}
.dvr-booking-confirmed__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 60px;
	height: 60px;
	margin: 0 auto 20px;
	border-radius: 50%;
	background: var(--lx-forest);
	color: #fff;
}
.dvr-booking-confirmed__icon svg { width: 28px; height: 28px; }
.dvr-booking-confirmed__title {
	margin: 0 0 16px;
	font-family: var(--lx-serif);
	font-size: clamp(26px, 3.4vw, 36px);
	font-weight: 600;
	line-height: 1.15;
	color: var(--lx-ink);
}
.dvr-booking-confirmed__code {
	display: inline-flex;
	align-items: baseline;
	gap: 9px;
	margin: 0 0 18px;
	padding: 9px 16px;
	border: 1px dashed var(--lx-line);
	border-radius: 999px;
	background: var(--lx-sand);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--lx-muted);
}
.dvr-booking-confirmed__code strong { font-family: var(--lx-serif); font-size: 19px; letter-spacing: 0.04em; text-transform: none; color: var(--lx-ink); }
.dvr-booking-confirmed__lead { margin: 0; font-size: 15px; line-height: 1.7; color: var(--lx-body); }

/* -- Booking receipt ---------------------------------------------------- */
.dvr-receipt {
	max-width: 1000px;
	margin: 0 auto;
	overflow: hidden;
	border: 1px solid var(--lx-line);
	border-radius: 20px;
	background: var(--lx-card);
	box-shadow: 0 30px 60px -34px rgba(28, 42, 36, 0.4);
}
.dvr-receipt__banner { padding: clamp(26px, 4vw, 40px) 24px; background: var(--lx-forest); color: #fff; text-align: center; }
.dvr-receipt__thanks { display: block; margin-bottom: 10px; font-size: 10.5px; font-weight: 700; letter-spacing: 0.22em; opacity: 0.78; }
.dvr-receipt__head {
	margin: 0;
	font-family: var(--lx-serif);
	font-size: clamp(24px, 3.2vw, 34px);
	font-weight: 600;
	line-height: 1.2;
	letter-spacing: 0.01em;
	text-transform: none;
	color: #fff;
}
/* Add-on actions (e.g. the Invoices "Download invoice" button) */
.dvr-receipt__banner .dvr-btn {
	margin-top: 20px;
	border: 1px solid rgba(255, 255, 255, 0.5);
	border-radius: 999px;
	background: transparent;
	color: #fff;
	padding: 12px 24px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-receipt__banner .dvr-btn:hover { background: #fff; border-color: #fff; color: var(--lx-forest); }

.dvr-receipt__body { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(24px, 4vw, 44px); padding: clamp(24px, 4vw, 40px); align-items: start; }
.dvr-receipt__col { min-width: 0; display: flex; flex-direction: column; gap: clamp(24px, 3vw, 34px); }
.dvr-receipt__title {
	position: relative;
	display: block;
	margin: 0 0 16px;
	padding-bottom: 12px;
	font-family: var(--lx-serif);
	font-size: 22px;
	font-weight: 600;
	color: var(--lx-ink);
}
.dvr-receipt__title::after { content: ""; position: absolute; left: 0; bottom: 0; width: 40px; height: 2px; background: var(--lx-gold); }
.dvr-receipt__list { margin: 0; }
.dvr-receipt__list > div { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 9px 0; border-bottom: 1px solid var(--lx-line); font-size: 14px; }
.dvr-receipt__list > div:last-child { border-bottom: 0; }
.dvr-receipt__list dt { margin: 0; font-size: 10.5px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-receipt__list dd { margin: 0; text-align: right; color: var(--lx-ink); font-weight: 600; }
.dvr-receipt__list dd code { padding: 3px 8px; border-radius: 6px; background: var(--lx-sand); font-size: 13px; letter-spacing: 0.04em; color: var(--lx-ink); }
.dvr-receipt__due dt { color: var(--lx-gold-2); }
.dvr-receipt__due dd { font-family: var(--lx-serif); font-size: 22px; font-weight: 600; color: var(--lx-gold-2); }

/* Status badge — the class comes from the admin markup, unstyled on the front
   end until now. */
.dvr-receipt .dvr-badge {
	display: inline-block;
	padding: 5px 12px;
	border-radius: 999px;
	background: var(--lx-sand-2);
	color: var(--lx-body);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.dvr-receipt .dvr-badge--confirmed { background: #e2ece5; color: #1f4034; }
.dvr-receipt .dvr-badge--pending,
.dvr-receipt .dvr-badge--draft { background: #f6ecda; color: #85622f; }
.dvr-receipt .dvr-badge--cancelled { background: #f7e2dd; color: #8a4536; }

.dvr-receipt__media { position: relative; margin-bottom: 14px; border-radius: 14px; overflow: hidden; aspect-ratio: 16 / 10; background: var(--lx-sand-2); }
.dvr-receipt__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dvr-receipt__details {
	position: absolute;
	right: 12px;
	bottom: 12px;
	padding: 9px 16px;
	border-radius: 999px;
	background: rgba(255, 253, 249, 0.95);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	color: var(--lx-ink);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	text-decoration: none;
}
.dvr-receipt__details:hover { background: #fff; }
.dvr-receipt__pname { margin: 0 0 8px; font-family: var(--lx-serif); font-size: 23px; font-weight: 600; line-height: 1.2; }
.dvr-receipt__pname a { color: var(--lx-ink); text-decoration: none; }
.dvr-receipt__pname a:hover { color: var(--lx-gold-2); }
.dvr-receipt__addr { display: flex; align-items: flex-start; gap: 7px; margin: 0; font-size: 13.5px; color: var(--lx-muted); }
.dvr-receipt__addr svg { width: 17px; height: 17px; flex: 0 0 auto; margin-top: 1px; color: var(--lx-gold); }

/* Cancellation block sits flush to the card edge — pad + divide it. */
.dvr-receipt__cancel { margin: 0 clamp(24px, 4vw, 40px) clamp(24px, 4vw, 40px); padding-top: clamp(20px, 3vw, 28px); border-top: 1px solid var(--lx-line); }
.dvr-receipt__cancel-policy { margin: 0 0 14px; font-size: 14.5px; line-height: 1.7; color: var(--lx-body); }
.dvr-receipt__cancel-policy strong { color: var(--lx-ink); }
.dvr-receipt__cancel-error { margin: 10px 0 0; font-size: 13.5px; color: #b4463c; }
.dvr-receipt__cancel-btn {
	display: inline-flex;
	align-items: center;
	margin-top: 14px;
	padding: 13px 24px;
	border: 1px solid #d8bdb5;
	border-radius: 12px;
	background: transparent;
	color: #8a4536;
	font-family: inherit;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.dvr-receipt__cancel-btn:hover { background: #8a4536; border-color: #8a4536; color: #fff; }
.dvr-receipt__cancel-btn:disabled { opacity: 0.5; cursor: default; }

/* -- Checkout / success responsive -------------------------------------- */
@media (max-width: 960px) {
	.dvr-checkout__grid { grid-template-columns: 1fr; }
	/* Summary first on narrow screens — the guest should see what they're
	   paying for before the form. */
	.dvr-checkout__summary { order: -1; }
	.dvr-checkout__card { position: static; max-width: 520px; }
	.dvr-receipt__body { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
	.dvr-checkout__row { flex-direction: column; }
	.dvr-checkout__step-actions { flex-direction: column-reverse; }
	.dvr-checkout__facts li { flex-direction: column; gap: 2px; }
	.dvr-checkout__facts span { align-self: flex-start; }
}

@media (max-width: 900px) {
	.dvr-public {
		--dvr-page-gutter: 18px;
	}
}

/* Reviews & ratings */
.dvr-star { color: #d1d5db; font-size: 16px; line-height: 1; }
.dvr-star.is-on { color: #f5a623; }

.dvr-reviews { margin-top: 40px; padding-top: 28px; border-top: 1px solid var(--dvr-border); }
.dvr-reviews__summary {
	display: flex;
	align-items: center;
	gap: 10px;
	margin-bottom: 20px;
}
.dvr-reviews__avg { font-size: 28px; font-weight: 700; color: var(--dvr-ink); }
.dvr-reviews__stars { display: inline-flex; gap: 1px; }
.dvr-reviews__count { color: var(--dvr-muted); font-size: 14px; }

.dvr-reviews__list { list-style: none; margin: 0 0 28px; padding: 0; display: flex; flex-direction: column; gap: 18px; }
.dvr-review { padding: 16px; border: 1px solid var(--dvr-border); border-radius: 12px; background: #fff; }
.dvr-review__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.dvr-review__author { color: var(--dvr-ink); }
.dvr-review__date { color: var(--dvr-muted); font-size: 13px; margin-left: auto; }
.dvr-review__body { margin: 0; color: #374151; line-height: 1.6; }

.dvr-review-form {
	border: 1px solid var(--dvr-border);
	border-radius: 12px;
	padding: 20px;
	background: #f9fafb;
	display: flex;
	flex-direction: column;
	gap: 14px;
}
.dvr-review-form__title { margin: 0; font-size: 18px; color: var(--dvr-ink); }
.dvr-review-form__rating { display: flex; align-items: center; gap: 10px; }
.dvr-rating-input { display: inline-flex; gap: 2px; }
.dvr-rating-input__star {
	background: none;
	border: 0;
	padding: 0;
	cursor: pointer;
	font-size: 26px;
	line-height: 1;
	color: #d1d5db;
	transition: color 0.15s;
}
.dvr-rating-input__star.is-on { color: #f5a623; }
.dvr-review-form__row { display: flex; gap: 12px; }
.dvr-review-form__row > * { flex: 1; }
.dvr-review-form input,
.dvr-review-form textarea {
	width: 100%;
	border: 1px solid var(--dvr-border);
	border-radius: 8px;
	padding: 10px 12px;
	font-size: 14px;
	font-family: inherit;
}
.dvr-review-form__msg { margin: 0; font-size: 14px; }
.dvr-review-form__msg.is-error { color: #b91c1c; }
.dvr-review-form__msg.is-ok { color: #15803d; }
.dvr-review-form .dvr-btn { align-self: flex-start; }
@media (max-width: 560px) {
	.dvr-review-form__row { flex-direction: column; }
}

/* Dynamic pricing — savings line in the booking box */
.dvr-villa-book__line--save span { color: #15803d; }

/* -- Property comparison ------------------------------------------------- */

/* Sticky compare tray */
.dvr-compare-bar {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 1000;
	background: #fff;
	border-top: 1px solid var(--dvr-border);
	box-shadow: 0 -8px 24px rgba(15, 23, 42, 0.12);
}
.dvr-compare-bar__inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: 12px 16px;
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
}
.dvr-compare-bar__items { display: flex; gap: 8px; flex: 1 1 auto; flex-wrap: wrap; min-width: 0; }
.dvr-compare-bar__chip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 5px 8px 5px 5px;
	border: 1px solid var(--dvr-border);
	border-radius: 999px;
	background: #f8fafc;
	font-size: 13px;
	max-width: 220px;
}
.dvr-compare-bar__chip img { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; flex: 0 0 auto; }
.dvr-compare-bar__chip-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dvr-compare-bar__chip-x {
	border: 0; background: none; cursor: pointer; font-size: 17px; line-height: 1;
	color: var(--dvr-muted); padding: 0 2px;
}
.dvr-compare-bar__chip-x:hover { color: #ef4444; }
.dvr-compare-bar__actions { display: flex; gap: 10px; flex: 0 0 auto; }
.dvr-compare-bar__actions .dvr-btn[disabled] { opacity: 0.5; cursor: not-allowed; }
.dvr-compare-bar__count {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 20px; height: 20px; padding: 0 6px; margin-left: 4px;
	border-radius: 999px; background: rgba(255, 255, 255, 0.25); font-size: 12px;
}

/* Compare modal */
body.dvr-compare-lock { overflow: hidden; }
.dvr-compare-modal { position: fixed; inset: 0; z-index: 1100; display: flex; align-items: center; justify-content: center; padding: 20px; }
/* The `hidden` attribute must win over the flex display above. */
.dvr-compare-modal[hidden],
.dvr-compare-bar[hidden] { display: none; }

/* -- Similar / Recently-viewed rails (single page) ---------------------- */
.dvr-villa-rail { margin-top: 36px; }
.dvr-villa-rail[hidden] { display: none; }
.dvr-villa-rail .dvr-villas__grid { margin-top: 16px; }

/* -- Wishlist ----------------------------------------------------------- */

/* Wishlist page */
.dvr-wishlist__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
.dvr-wishlist__title { margin: 0; font-size: 24px; font-weight: 700; color: var(--dvr-ink); display: flex; align-items: center; gap: 10px; }
.dvr-wishlist__count {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 26px; height: 26px; padding: 0 8px; border-radius: 999px;
	background: var(--dvr-blue); color: #fff; font-size: 14px; font-weight: 700;
}
.dvr-wishlist__empty { text-align: center; padding: 48px 20px; color: var(--dvr-muted); }
.dvr-wishlist__empty p { margin: 0 0 16px; font-size: 16px; }
.dvr-wishlist__empty[hidden] { display: none; }
.dvr-wishlist__loading { text-align: center; padding: 40px; color: var(--dvr-muted); }
.dvr-wishlist__loading[hidden] { display: none; }
.dvr-compare-modal__overlay { position: absolute; inset: 0; background: rgba(15, 23, 42, 0.55); }
.dvr-compare-modal__dialog {
	position: relative;
	background: #fff;
	border-radius: 14px;
	width: 100%;
	max-width: 1000px;
	max-height: 90vh;
	display: flex;
	flex-direction: column;
	overflow: hidden;
	box-shadow: 0 24px 60px rgba(15, 23, 42, 0.3);
}
.dvr-compare-modal__head {
	display: flex; align-items: center; justify-content: space-between;
	padding: 16px 20px; border-bottom: 1px solid var(--dvr-border);
}
.dvr-compare-modal__title { margin: 0; font-size: 18px; font-weight: 700; color: var(--dvr-ink); }
.dvr-compare-modal__close { border: 0; background: none; font-size: 26px; line-height: 1; cursor: pointer; color: var(--dvr-muted); }
.dvr-compare-modal__close:hover { color: var(--dvr-ink); }
.dvr-compare-modal__body { overflow: auto; padding: 0; }
.dvr-compare__loading, .dvr-compare__empty { padding: 40px; text-align: center; color: var(--dvr-muted); }

/* Compare table */
.dvr-compare__scroll { overflow-x: auto; }
.dvr-compare__table { width: 100%; border-collapse: collapse; font-size: 14px; }
.dvr-compare__table th, .dvr-compare__table td {
	padding: 12px 14px; text-align: left; border-bottom: 1px solid var(--dvr-border);
	vertical-align: middle;
}
.dvr-compare__table tbody th[scope="row"] { color: var(--dvr-muted); font-weight: 600; white-space: nowrap; width: 150px; }
.dvr-compare__table td { color: var(--dvr-ink); text-align: center; }
.dvr-compare__corner { background: #f8fafc; }
.dvr-compare__head { text-align: center; position: relative; min-width: 150px; vertical-align: top; }
.dvr-compare__remove {
	position: absolute; top: 4px; right: 6px; border: 0; background: none;
	font-size: 18px; line-height: 1; cursor: pointer; color: var(--dvr-muted);
}
.dvr-compare__remove:hover { color: #ef4444; }
.dvr-compare__thumb { display: block; }
.dvr-compare__thumb img { width: 100%; max-width: 160px; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 8px; margin: 0 auto 8px; }
.dvr-compare__noimg { display: block; width: 100%; max-width: 160px; aspect-ratio: 4 / 3; border-radius: 8px; margin: 0 auto 8px; background: repeating-linear-gradient(45deg,#eef2f7,#eef2f7 8px,#f8fafc 8px,#f8fafc 16px); }
.dvr-compare__name { font-weight: 700; color: var(--dvr-ink); text-decoration: none; display: inline-block; }
.dvr-compare__name:hover { color: var(--dvr-blue); }
.dvr-compare__group th { background: #f8fafc; color: var(--dvr-ink); font-weight: 700; text-transform: uppercase; font-size: 12px; letter-spacing: 0.03em; }
.dvr-compare__muted { color: var(--dvr-muted); }
.dvr-compare__rating { color: #f59e0b; font-weight: 600; white-space: nowrap; }
.dvr-compare__yes { color: #16a34a; font-weight: 700; }
.dvr-compare__no { color: #cbd5e1; }
.dvr-compare__view { padding: 7px 18px; font-size: 14px; }

@media (max-width: 640px) {
	.dvr-compare-bar__inner { padding: 10px 12px; gap: 10px; }
	.dvr-compare-bar__actions { width: 100%; }
	.dvr-compare-bar__actions .dvr-btn { flex: 1 1 auto; }
}

/* -- My Account: auth forms + booking dashboard ------------------------- */
/*
 * Two states share one root: signed out shows the sign-in / register card,
 * signed in shows the welcome header and the booking list. Same sand ground
 * and --lx-* palette as the rest of the flow.
 *
 * Two classes on the selector: .dvr-public sets max-width + auto margins, so
 * a single-class rule would lose to it.
 */
.dvr-public.dvr-dashboard {
	width: calc(100 * var(--dvr-vw, 1vw)) !important;
	max-width: none !important;
	margin-left: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	margin-right: calc(50% - 50 * var(--dvr-vw, 1vw)) !important;
	padding: clamp(28px, 5vw, 56px) clamp(16px, 4vw, 32px) clamp(40px, 6vw, 72px);
	background: var(--lx-sand);
	color: var(--lx-body);
}

/* -- Signed out: sign in / register ------------------------------------- */
.dvr-auth-container { max-width: 520px; margin: 0 auto; }

.dvr-auth-tabs {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 4px;
	margin-bottom: 18px;
	padding: 5px;
	border-radius: 999px;
	background: var(--lx-sand-2);
}
.dvr-auth-tab {
	padding: 12px 18px;
	border: 0;
	border-radius: 999px;
	background: transparent;
	color: var(--lx-muted);
	font-family: inherit;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.2s, color 0.2s;
}
.dvr-auth-tab:hover { color: var(--lx-ink); }
.dvr-auth-tab.is-active { background: var(--lx-forest); color: #fff; box-shadow: 0 8px 18px -10px rgba(28, 42, 36, 0.7); }

.dvr-auth-panel {
	padding: clamp(24px, 4vw, 38px);
	border: 1px solid var(--lx-line);
	border-top: 3px solid var(--lx-gold);
	border-radius: 20px;
	background: var(--lx-card);
	box-shadow: 0 30px 60px -34px rgba(28, 42, 36, 0.4);
}
.dvr-auth-panel[hidden] { display: none; }
.dvr-auth-form { display: flex; flex-direction: column; gap: 16px; }
.dvr-auth-title {
	margin: 0;
	font-family: var(--lx-serif);
	font-size: clamp(24px, 3vw, 30px);
	font-weight: 600;
	line-height: 1.15;
	color: var(--lx-ink);
}
.dvr-auth-desc { margin: -8px 0 4px; font-size: 14.5px; line-height: 1.6; color: var(--lx-body); }

/* -- Form fields (shared by all four auth forms) ------------------------ */
.dvr-form-group { display: flex; flex-direction: column; gap: 6px; }
.dvr-form-label { font-size: 10px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-form-label .required { color: var(--lx-gold); }
.dvr-form-input {
	width: 100%;
	padding: 12px 14px;
	border: 1px solid var(--lx-line);
	border-radius: 12px;
	background: var(--lx-sand);
	font-family: inherit;
	font-size: 14.5px;
	color: var(--lx-ink);
}
.dvr-form-input::placeholder { color: var(--lx-muted); }
.dvr-form-input:focus { outline: none; border-color: var(--lx-forest-2); background: #fff; }
.dvr-form-row { display: flex; gap: 14px; }
.dvr-form-row .dvr-form-group { flex: 1 1 0; min-width: 0; }

.dvr-form-feedback { padding: 11px 14px; border-radius: 12px; font-size: 13.5px; line-height: 1.5; }
.dvr-form-feedback[hidden] { display: none; }
.dvr-form-feedback.is-err { border: 1px solid #e6cfc4; background: #fdf4f0; color: #8a4536; }
.dvr-form-feedback.is-ok { border: 1px solid #cfdfd2; background: #eef3ee; color: #2f6a4a; }

.dvr-auth-submit-btn,
.dvr-auth-panel .dvr-btn--primary {
	width: 100%;
	margin-top: 2px;
	padding: 15px 22px;
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-auth-submit-btn:hover,
.dvr-auth-panel .dvr-btn--primary:hover { background: var(--lx-gold-2); color: #fff; }
.dvr-auth-submit-btn:disabled { opacity: 0.45; cursor: not-allowed; }

.dvr-lost-password { margin: 2px 0 0; font-size: 13px; text-align: center; }
.dvr-lost-password a { color: var(--lx-gold-2); font-weight: 600; text-decoration: none; }
.dvr-lost-password a:hover { color: var(--lx-forest); text-decoration: underline; text-underline-offset: 3px; }

/* -- Signed in: welcome header ------------------------------------------ */
.dvr-dashboard-user { max-width: 1120px; margin: 0 auto; }
.dvr-dashboard-header {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: 18px;
	margin-bottom: clamp(26px, 4vw, 40px);
	padding-bottom: clamp(20px, 3vw, 28px);
	border-bottom: 1px solid var(--lx-line);
}
.dvr-dashboard-welcome__title {
	margin: 0 0 6px;
	font-family: var(--lx-serif);
	font-size: clamp(30px, 4vw, 44px);
	font-weight: 600;
	line-height: 1.1;
	color: var(--lx-ink);
}
.dvr-dashboard-welcome__subtitle { margin: 0; font-size: 15px; line-height: 1.6; color: var(--lx-body); }
.dvr-dashboard-logout .dvr-btn {
	padding: 12px 22px;
	border: 1px solid var(--lx-line);
	border-radius: 999px;
	background: transparent;
	color: var(--lx-body);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
}
.dvr-dashboard-logout .dvr-btn:hover { border-color: var(--lx-forest); color: var(--lx-forest); background: transparent; }

.dvr-dashboard-bookings__title {
	position: relative;
	margin: 0 0 22px;
	padding-bottom: 12px;
	font-family: var(--lx-serif);
	font-size: clamp(24px, 3vw, 32px);
	font-weight: 600;
	color: var(--lx-ink);
}
.dvr-dashboard-bookings__title::after { content: ""; position: absolute; left: 0; bottom: 0; width: 44px; height: 2px; background: var(--lx-gold); }
.dvr-dashboard-bookings-list { display: flex; flex-direction: column; gap: 16px; }

.dvr-dashboard-empty {
	padding: clamp(40px, 6vw, 72px) 24px;
	border: 1px dashed var(--lx-line);
	border-radius: 20px;
	background: var(--lx-card);
	text-align: center;
}
.dvr-dashboard-empty__text { margin: 0 0 18px; font-family: var(--lx-serif); font-size: 21px; color: var(--lx-ink); }
.dvr-dashboard-empty .dvr-btn {
	border: 0;
	border-radius: 12px;
	background: var(--lx-gold);
	color: #fff;
	padding: 14px 26px;
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.dvr-dashboard-empty .dvr-btn:hover { background: var(--lx-gold-2); color: #fff; }

/* -- Booking card -------------------------------------------------------- */
.dvr-booking-card {
	display: flex;
	overflow: hidden;
	border: 1px solid var(--lx-line);
	border-radius: 18px;
	background: var(--lx-card);
	transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.dvr-booking-card:hover { transform: translateY(-2px); border-color: #d8cfbb; box-shadow: 0 24px 44px -28px rgba(28, 42, 36, 0.45); }

.dvr-booking-card__image { flex: 0 0 220px; min-width: 220px; background: var(--lx-sand-2); }
.dvr-booking-card__image img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dvr-booking-card__no-image {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 100%;
	min-height: 190px;
	background: repeating-linear-gradient(45deg, var(--lx-sand-2), var(--lx-sand-2) 9px, var(--lx-sand) 9px, var(--lx-sand) 18px);
	color: var(--lx-muted);
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.13em;
	text-transform: uppercase;
}

.dvr-booking-card__info { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 14px; padding: 20px 22px; }
.dvr-booking-card__property-title { margin: 0; font-family: var(--lx-serif); font-size: 23px; font-weight: 600; line-height: 1.2; color: var(--lx-ink); }
.dvr-booking-card__property-title a { color: var(--lx-ink); text-decoration: none; }
.dvr-booking-card__property-title a:hover { color: var(--lx-gold-2); }

.dvr-booking-card__dates {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 12px 30px;
	padding: 14px 0;
	border-top: 1px solid var(--lx-line);
	border-bottom: 1px solid var(--lx-line);
}
.dvr-booking-card__date-col,
.dvr-booking-card__nights-col { display: flex; flex-direction: column; gap: 3px; }
.dvr-booking-card__date-col .label { font-size: 10px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-booking-card__date-col .value { font-size: 15px; font-weight: 600; color: var(--lx-ink); }
.dvr-booking-card__nights-col { margin-left: auto; }
.dvr-booking-card__nights-col .value { font-family: var(--lx-serif); font-size: 19px; font-weight: 600; color: var(--lx-gold-2); }

.dvr-booking-card__meta { display: flex; flex-wrap: wrap; gap: 8px 26px; font-size: 13.5px; color: var(--lx-ink); }
.dvr-booking-card__meta-item strong {
	margin-right: 7px;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--lx-muted);
}
.dvr-booking-card__meta-item .code {
	padding: 3px 9px;
	border-radius: 6px;
	background: var(--lx-sand);
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: 12.5px;
	letter-spacing: 0.04em;
	color: var(--lx-ink);
}

.dvr-booking-card__actions {
	flex: 0 0 212px;
	display: flex;
	flex-direction: column;
	align-items: stretch;
	justify-content: center;
	gap: 14px;
	padding: 20px 22px;
	border-left: 1px solid var(--lx-line);
	background: var(--lx-sand);
}
.dvr-booking-card__status { text-align: right; }
.dvr-booking-card__price { display: flex; flex-direction: column; gap: 2px; text-align: right; }
.dvr-booking-card__price .label { font-size: 10px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--lx-muted); }
.dvr-booking-card__price .value { font-family: var(--lx-serif); font-size: 27px; font-weight: 600; line-height: 1.1; color: var(--lx-ink); }
/* Covers the receipt link and any button added via the dvr_booking_actions
   hook (e.g. the Invoices add-on's "Download invoice"). */
.dvr-booking-card__actions .dvr-btn {
	justify-content: center;
	padding: 11px 16px;
	border: 1px solid var(--lx-forest);
	border-radius: 11px;
	background: transparent;
	color: var(--lx-forest);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.dvr-booking-card__actions .dvr-btn:hover { background: var(--lx-forest); border-color: var(--lx-forest); color: #fff; }

.dvr-status-badge {
	display: inline-block;
	padding: 6px 13px;
	border-radius: 999px;
	background: var(--lx-sand-2);
	color: var(--lx-body);
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.dvr-status-badge.status-confirmed { background: #e2ece5; color: #1f4034; }
.dvr-status-badge.status-pending,
.dvr-status-badge.status-draft { background: #f6ecda; color: #85622f; }
.dvr-status-badge.status-cancelled { background: #f7e2dd; color: #8a4536; }
.dvr-status-badge.status-completed { background: #e7e8ea; color: #4a5152; }

/* -- My Account responsive ---------------------------------------------- */
@media (max-width: 900px) {
	.dvr-booking-card { flex-direction: column; }
	.dvr-booking-card__image { flex: none; width: 100%; min-width: 0; height: 200px; }
	.dvr-booking-card__actions {
		flex: none;
		width: 100%;
		flex-direction: row;
		flex-wrap: wrap;
		align-items: center;
		justify-content: space-between;
		border-left: 0;
		border-top: 1px solid var(--lx-line);
	}
	.dvr-booking-card__status,
	.dvr-booking-card__price { text-align: left; }
	.dvr-booking-card__nights-col { margin-left: 0; }
}
@media (max-width: 560px) {
	.dvr-form-row { flex-direction: column; gap: 16px; }
	.dvr-dashboard-header { align-items: flex-start; }
	.dvr-booking-card__actions { flex-direction: column; align-items: stretch; gap: 12px; }
	.dvr-booking-card__actions .dvr-btn { width: 100%; }
	.dvr-booking-card__dates { gap: 12px 20px; }
}

/* Review form eligibility note */
.dvr-review-form__note { margin: -4px 0 14px; font-size: 13px; color: var(--dvr-muted); }
