/*
 * Loxwood Booking Wizard — structural styling only.
 * Typeface and text colour are inherited from the theme so the wizard sits in
 * the site's own (Elementor) design; the custom properties below let the
 * child theme retune the accent without editing this file.
 */
/*
 * Tunables — override on .lbw-wizard in your CSS:
 *   --lbw-bar-bg   static section colour (or style .lbw-static-bg directly)
 *   --lbw-list-bg  open booking list colour
 *   --lbw-gutter   left/right padding on desktop (default 2em)
 *   --lbw-dock-bg / --lbw-dock-shadow / --lbw-dock-back-bg / --lbw-dock-btn-width  the Back / Next capsule
 *   --lbw-disabled-bg / --lbw-disabled-color  solid colours for a disabled Next / Add to basket
 *   --lbw-overlay  colour of the darkened layer behind the open Review & edit list
 *   --lbw-max      maximum content width (default 100%: full width; e.g. 760px to centre a column)
 *   --lbw-height   wizard height (defaults to the visible screen height)
 *   --lbw-bleed    side padding of the off-canvas, if any (lets the colour run edge to edge)
 */
.lbw-wizard {
	--lbw-accent: #6c4dec;      /* action colour; override in the child theme */
	--lbw-line: rgba(0, 0, 0, .15);
	--lbw-error: #a4282d;
	--lbw-radius: 6px;
	--lbw-max: 100%;
	--lbw-bleed: 0px;

	/* Fill the off-canvas: full width, exactly the visible screen height (dvh follows
	   phone toolbars). Stretch/grow cover Elementor's column and row flex containers. */
	display: flex; flex-direction: column;
	width: 100%; min-width: 0; align-self: stretch; flex: 1 1 auto;
	height: var(--lbw-height, 100vh);
	height: var(--lbw-height, 100dvh);
	overflow: hidden; position: relative; overflow-anchor: none; box-sizing: border-box;
}
.lbw-wizard *, .lbw-wizard *::before, .lbw-wizard *::after { box-sizing: border-box; }

.lbw-cart-prompt { border: 1px solid var(--lbw-accent); border-radius: var(--lbw-radius); padding: .8em 1em; margin: 0 0 1em; }
.lbw-cart-prompt a.lbw-choice { text-decoration: none; }

/* Chevron beside "Review & edit" / "Close" */
.lbw-tray-toggle { display: inline-flex; align-items: center; gap: .5em; }
.lbw-chevron {
	display: inline-block; width: .45em; height: .45em;
	border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
	transform: translateY(-25%) rotate(45deg);
}
.lbw-chevron.is-up { transform: translateY(25%) rotate(-135deg); }

/* Stepper with Remove beneath: one block, so Remove is exactly the stepper's width */
.lbw-qty { display: inline-flex; flex-direction: column; align-items: stretch; gap: .25em; }
.lbw-qty .lbw-under { display: flex; }
.lbw-qty .lbw-clear { flex: 1 1 auto; text-align: center; }

/* Tabs (inside the static section's strip) */
.lbw-tab {
	font: inherit; font-size: .85em; color: inherit; background: transparent;
	border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius); padding: .35em .7em; cursor: pointer;
}
.lbw-tab.is-current { border-color: var(--lbw-accent); box-shadow: inset 0 0 0 1px var(--lbw-accent); }
.lbw-tab:disabled { opacity: .4; cursor: default; }

.lbw-progress { font-size: .85em; opacity: .75; margin-bottom: .75em; }

.lbw-panel { border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius); padding: 1.25em; }
.lbw-title { margin-top: 0; }
.lbw-title:focus { outline: none; } /* programmatic focus target; visible focus stays on controls */

.lbw-hint, .lbw-yourdate { font-size: .9em; opacity: .8; }
.lbw-tray-bar {
	display: flex; justify-content: space-between; align-items: center; width: 100%;
	background: transparent; border: 0; color: inherit; font: inherit; padding: .6em .8em; cursor: pointer; text-align: left;
}
.lbw-tray-toggle { text-decoration: underline; }

/* Row controls: stepper on top, small Remove (and date change) beneath — the stepper never shifts */
.lbw-row-ctrls, .lbw-summary-ctrls { display: flex; flex-direction: column; align-items: center; gap: .25em; flex: none; }
.lbw-under { display: flex; align-items: center; gap: .6em; }
.lbw-clear {
	font: inherit; font-size: .75em; background: transparent; color: var(--lbw-error);
	border: 0; padding: 0; text-decoration: underline; cursor: pointer;
}
.lbw-date-select { font: inherit; font-size: .8em; color: inherit; background: transparent; border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius); padding: .2em .4em; }
.lbw-summary-text { display: flex; gap: 1em; align-items: flex-start; min-width: 0; }
.lbw-summary-text > span:first-child { flex: 1 1 auto; min-width: 0; }
.lbw-summary-text > .lbw-price { flex: none; white-space: nowrap; }
.lbw-remove-all { margin: 1em 0; }
.lbw-payment-help { border: 1px solid rgba(0,0,0,.15); border-radius: 6px; padding: 1.25em; margin: 1.5em 0; }
.lbw-payment-help input, .lbw-payment-help textarea { width: 100%; max-width: 100%; }
.lbw-notice { border: 1px solid var(--lbw-line); border-left: 4px solid var(--lbw-accent); padding: .6em .9em; border-radius: var(--lbw-radius); }
.lbw-required { font-size: .85em; font-style: italic; }
/* Section title row: title left, "Selection required" right — wrapped word-per-line so it takes no height of its own */
.lbw-step-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1em; }
.lbw-step-head .lbw-title { flex: 1 1 auto; min-width: 0; }
.lbw-step-head .lbw-required {
	flex: none; width: min-content; margin: .25em 0 0; text-align: right;
	line-height: 1.15; color: var(--lbw-error);
}

/* Choice buttons (visit type, dates, weekends) */
.lbw-visit-types { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: .75em 1em; margin: .75em 0; align-items: start; }
.lbw-visit-btn { width: 100%; }
/* Wide screens: the dates sit on the row beneath, under their own pass */
.lbw-visit-dates--day { grid-column: 1; }
.lbw-visit-dates--weekend { grid-column: 2; }
.lbw-dates-heading { margin: .5em 0 0; }
.lbw-dates { display: flex; flex-wrap: wrap; gap: .5em; margin: .25em 0; }
.lbw-choice {
	border: 1px solid var(--lbw-line);
	background: transparent;
	color: inherit;
	font: inherit;
	padding: .55em 1em;
	border-radius: var(--lbw-radius);
	cursor: pointer;
}
.lbw-choice.is-active { border-color: var(--lbw-accent); box-shadow: inset 0 0 0 1px var(--lbw-accent); }
/* Long labels (e.g. weekend dates on a phone) wrap inside the panel instead of overflowing it */
.lbw-choice { max-width: 100%; min-width: 0; white-space: normal; overflow-wrap: anywhere; }

/* "Already booked?" (extras route): a labelled divider, one full-width button, then the combined
   day + weekend picker. Hooks: .lbw-extras, .lbw-extras-divider, .lbw-extras-heading,
   .lbw-visit-btn--extras, .lbw-visit-dates--extras; the wizard carries .lbw-mode-extras. */
.lbw-extras { margin-top: 1.75em; }
.lbw-extras-divider { display: flex; align-items: center; gap: .75em; margin-bottom: .75em; }
.lbw-extras-divider::before, .lbw-extras-divider::after { content: ''; flex: 1; border-top: 1px solid var(--lbw-line); }
.lbw-extras-heading { flex: none; margin: 0; }
.lbw-extras-text { margin: 0 0 .75em; text-align: center; }
.lbw-extras-types { margin-top: 0; }
/* Add extras: centred under the two main buttons, at one button's width. The extra class weight
   outranks a site-wide min-width on .lbw-choice. Phones: full width like the others. */
@media (min-width: 768px) {
	.lbw-wizard .lbw-extras-types .lbw-visit-btn--extras { grid-column: 1 / -1; justify-self: center; width: calc(50% - .5em); min-width: 0; }
}
/* First page: heading, introduction and every date heading centred */
.lbw-panel--visit > .lbw-title,
.lbw-panel--visit > .lbw-step-content,
.lbw-panel--visit .lbw-dates-heading { text-align: center; }
.lbw-visit-dates--extras { margin-top: .75em; }
/* Days on the left, weekends on the right (stacked on phones), each under its own heading */
.lbw-extras-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: .75em 1em; align-items: start; }
@media (max-width: 767px) { .lbw-extras-cols { grid-template-columns: minmax(0, 1fr); } }

/* Product cards and option rows */
.lbw-product { border-top: 1px solid var(--lbw-line); padding: 1em 0; }
.lbw-product-head { display: flex; gap: .9em; align-items: flex-start; }
.lbw-product-image { width: 88px; height: 88px; object-fit: cover; border-radius: var(--lbw-radius); flex: none; max-width: 100%; }
.lbw-step-image { max-width: 100%; height: auto; border-radius: var(--lbw-radius); margin-bottom: .75em; }
.lbw-product-name { margin: 0 0 .25em; font-size: 1.05em; }
.lbw-product-desc { font-size: .9em; }
.lbw-day-heading { margin: .9em 0 .25em; font-size: .95em; }

.lbw-row {
	display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 1em;
	padding: .45em 0;
}
.lbw-row-label { display: flex; gap: .6em; align-items: baseline; min-width: 0; }
.lbw-row-label > span:first-child { flex: 1 1 auto; min-width: 0; }
.lbw-price { font-variant-numeric: tabular-nums; white-space: nowrap; }
.lbw-stock { font-size: .8em; opacity: .75; }
.lbw-soldout { color: var(--lbw-error); opacity: 1; }

/* Dropdown display mode: one price line, then select + stepper per day */
.lbw-price-line { margin: .3em 0 .5em; font-weight: 600; }
.lbw-dd-row { display: flex; align-items: center; gap: .6em; margin: .4em 0; }
.lbw-dd-row select {
	flex: 1 1 auto; min-width: 0; font: inherit; color: inherit;
	padding: .5em .7em; border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius); background: transparent;
}

/* Quantity stepper */
.lbw-stepper { display: flex; align-items: center; gap: .4em; flex: none; }
.lbw-step-btn {
	width: 2.1em; height: 2.1em;
	border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius);
	background: transparent; color: inherit; font: inherit; line-height: 1;
	cursor: pointer;
}
.lbw-step-btn:disabled { opacity: .35; cursor: default; }
.lbw-count { min-width: 1.6em; text-align: center; font-variant-numeric: tabular-nums; }

/* Bar buttons, commit */
.lbw-nav-btn, .lbw-commit {
	font: inherit; padding: .6em 1.3em; border-radius: var(--lbw-radius); cursor: pointer;
	border: 1px solid var(--lbw-line); background: transparent; color: inherit;
}
.lbw-next, .lbw-commit { background: var(--lbw-accent); border-color: var(--lbw-accent); color: #fff; }
.lbw-nav-btn:disabled, .lbw-commit:disabled { opacity: .4; cursor: default; }

.lbw-total {
	display: flex; justify-content: space-between; align-items: baseline;
	border-top: 1px solid var(--lbw-line); margin: .5em 0 1em; padding-top: .6em;
}
.lbw-summary { list-style: none; margin: 0 0 1em; padding: 0; }
.lbw-summary li { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 1em; padding: .35em 0; border-bottom: 1px dotted var(--lbw-line); }
.lbw-error { color: var(--lbw-error); }


/* Soft fade for panel changes and newly revealed choice groups */
@keyframes lbw-fade {
	from { opacity: 0; transform: translateY(4px); }
	to   { opacity: 1; transform: none; }
}
.lbw-fade { animation: lbw-fade .6s ease-out; }
/* Separate hooks so each can be tuned on its own */
.lbw-fade-remove { animation: lbw-fade .6s ease-out; }
.lbw-fade-tab { animation: lbw-fade .6s ease-out; }
@media (prefers-reduced-motion: reduce) {
	.lbw-fade, .lbw-fade-remove, .lbw-fade-tab { animation: none; }
}

/* ---- Styled pop-ups (replace the browser's alert/confirm) ----
 * Tunables on .lbw-modal: --lbw-modal-overlay, --lbw-modal-bg, --lbw-modal-radius.
 * Buttons: .lbw-modal-ok (main action) and .lbw-modal-cancel (secondary). */
@keyframes lbw-modal-in { from { opacity: 0; transform: translateY(8px) scale(.98); } to { opacity: 1; transform: none; } }
.lbw-modal {
	position: fixed; inset: 0; z-index: 2147483000;
	pointer-events: auto; /* accept taps even inside a layer that ignores them (Elementor off-canvas) */
	display: flex; align-items: center; justify-content: center;
	padding: 1.25em calc(1.25em + env(safe-area-inset-right, 0px)) calc(1.25em + env(safe-area-inset-bottom, 0px)) calc(1.25em + env(safe-area-inset-left, 0px));
	background: var(--lbw-modal-overlay, rgba(0, 0, 0, .5));
	animation: lbw-fade .25s ease-out;
}
.lbw-modal-box {
	width: 100%; max-width: 30em; box-sizing: border-box;
	background: var(--lbw-modal-bg, #fff); color: #000;
	border: 2px solid #000; border-radius: var(--lbw-modal-radius, 14px);
	padding: 1.5em; box-shadow: 0 18px 50px rgba(0, 0, 0, .3);
	animation: lbw-modal-in .25s ease-out;
}
.lbw-modal-message { margin: 0 0 1.25em; white-space: pre-line; } /* keeps the listed knock-on items on their own lines */
.lbw-modal-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .6em; }
.lbw-modal-btn { font: inherit; cursor: pointer; }
.lbw-modal-cancel { background: transparent; color: inherit; }
.lbw-modal-btn:focus-visible { outline: 2px solid #000; outline-offset: 2px; }
@media (max-width: 767px) {
	.lbw-modal-actions { flex-direction: column-reverse; } /* main action on top, full width */
	.lbw-modal-btn { width: 100%; }
}
@media (prefers-reduced-motion: reduce) { .lbw-modal, .lbw-modal-box { animation: none; } }

/* Busy indicator (2.6.6): shown while the booking is added and the checkout loads.
 * .lbw-busy (overlay, uses the pop-up styling) > .lbw-busy-box > .lbw-spinner + .lbw-busy-text
 * Tunables on .lbw-busy: --lbw-spinner-color (default: text colour), --lbw-spinner-size (default 2.75em). */
@keyframes lbw-spin { to { transform: rotate(360deg); } }
.lbw-busy { cursor: progress; }
.lbw-busy-box { max-width: 22em; display: flex; flex-direction: column; align-items: center; gap: 1em; text-align: center; }
.lbw-spinner {
	display: block; box-sizing: border-box;
	width: var(--lbw-spinner-size, 2.75em); height: var(--lbw-spinner-size, 2.75em);
	border: .3em solid rgba(0, 0, 0, .15);
	border-top-color: var(--lbw-spinner-color, currentColor);
	border-radius: 50%;
	animation: lbw-spin .9s linear infinite;
}
.lbw-busy-text { margin: 0; font-weight: 600; }
@media (prefers-reduced-motion: reduce) {
	.lbw-spinner { animation-duration: 2.4s; } /* still moving, so it reads as "working", but gently */
}

/* Keyboard focus stays visible on every control (theme resets often remove it) */
.lbw-wizard button:focus-visible, .lbw-wizard a:focus-visible {
	outline: 2px solid var(--lbw-accent); outline-offset: 2px;
}

/* ---- Static section (all widths): tab strip, Back · Next · X, booking list ---- */
.lbw-static-bg { background: var(--lbw-bar-bg, #e6e0d4); }
.lbw-mbar {
	flex: none; position: relative; z-index: 20;
	margin-inline: calc(-1 * var(--lbw-bleed));
	/* contents centred at the column width on wide screens; .75em gutters on phones */
	padding: .6em max(calc(.75em + var(--lbw-bleed)), calc((100% - var(--lbw-max)) / 2));
}
/* Top row (every screen size): the tab strip beside the X */
.lbw-mbar-top { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "tabs close"; align-items: center; column-gap: .5em; }
.lbw-mbar-top .lbw-mtabs { grid-area: tabs; }
.lbw-mbar-top .lbw-mbar-close { grid-area: close; }

/* Second row: the Review & edit bar, with "Step N of M" to its right (in the same place before the bar appears) */
.lbw-mbar-sub { display: flex; align-items: center; gap: 1em; margin-top: .6em; }
.lbw-mbar-sub .lbw-mlist-slot { flex: 1 1 auto; min-width: 0; }
.lbw-mbar-sub .lbw-progress { flex: none; margin: 0 0 0 auto; }

/* Tab strip: one row from the left screen edge up to the X, scrolls by swipe, wheel or drag;
   hard cut on the left, fading out softly towards the X when there are more tabs to the right */
.lbw-mtabs {
	display: flex; gap: .35em; overflow-x: auto; overscroll-behavior-x: contain;
	scrollbar-width: none; -webkit-overflow-scrolling: touch;
	margin: 0 0 0 calc(-.75em - var(--lbw-bleed)); padding: 0 .25em 0 calc(.75em + var(--lbw-bleed));
	cursor: grab;
}
.lbw-mtabs.has-more-right { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 2.5em), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 2.5em), transparent); }
.lbw-mtabs.is-dragging { cursor: grabbing; user-select: none; }
.lbw-mtabs::-webkit-scrollbar { display: none; }
.lbw-mtabs .lbw-tab { flex: none; white-space: nowrap; }

.lbw-mbar-row { display: flex; align-items: center; gap: .5em; }
.lbw-mbar-back, .lbw-mbar-next, .lbw-mbar-commit { flex: 1 1 0; min-width: 0; }
.lbw-mbar-close {
	flex: none; margin-left: auto; width: 2.2em; height: 2.2em; line-height: 1;
	font: inherit; font-size: 1.4em; background: transparent; color: inherit;
	border: 1px solid var(--lbw-line); border-radius: 50%; cursor: pointer;
}
.lbw-next--waiting { display: none; } /* first page: no Next until a date is chosen */

/* Booking list: one bordered box — the bar when closed, bar + sections when open */
.lbw-mlist-slot { transition: height .3s ease, opacity .3s ease; }
.lbw-mlist-slot.is-entering { opacity: 0; } /* first appearance starts here */
.lbw-mlist {
	position: relative; margin-top: 0; background: var(--lbw-list-bg, #fff);
	border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius);
}
.lbw-mlist.is-open { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.lbw-wizard .lbw-mlist .lbw-mlist-bar,
.lbw-wizard .lbw-mlist .lbw-mlist-bar:hover,
.lbw-wizard .lbw-mlist .lbw-mlist-bar:focus { border: 0; box-shadow: none; } /* only the outer box has a border — no doubling */
/* Open list drops down OVER the panel, continuing the same border below the bar */
.lbw-mlist-body {
	position: absolute; top: 100%; left: -1px; right: -1px; z-index: 2;
	background: var(--lbw-list-bg, #fff);
	border: 1px solid var(--lbw-line); border-top: 0;
	border-radius: 0 0 var(--lbw-radius) var(--lbw-radius);
	box-shadow: 0 14px 30px rgba(0, 0, 0, .2);
	max-height: calc(100vh - 15em); max-height: calc(100dvh - 15em);
	overflow-y: auto; overscroll-behavior: contain; padding: 0 .8em .8em;
}
/* Darkened layer over the panel and buttons; the top section stays above it */
.lbw-overlay { position: absolute; inset: 0; z-index: 30; background: var(--lbw-overlay, rgba(0, 0, 0, .45)); cursor: pointer; }
.lbw-list-open .lbw-mbar { z-index: 40; }
.lbw-mlist-head {
	display: flex; justify-content: space-between; align-items: center; width: 100%;
	font: inherit; color: inherit; background: transparent; text-align: left; cursor: pointer;
	border: 1px solid var(--lbw-line); border-radius: var(--lbw-radius); padding: .5em .7em; margin-top: .5em;
}
.lbw-mlist-head.is-current { border-color: var(--lbw-accent); box-shadow: inset 0 0 0 1px var(--lbw-accent); }
.lbw-mlist-head:disabled { opacity: .4; cursor: default; }
.lbw-mlist-action { text-decoration: underline; font-size: .85em; }
.lbw-mlist .lbw-summary, .lbw-sections .lbw-summary { margin: .2em 0 0; padding: 0; }
.lbw-sections { margin-bottom: 1em; } /* review page: the same section headers as the list */
/* Review page section cards (.lbw-review-section): no rule under the last item, so the card border isn't doubled */
.lbw-review-section > .lbw-mlist-head:first-child { margin-top: 0; }
.lbw-review-section .lbw-summary li:last-child { border-bottom: 0; }

/* ---- Scroll area: the content scrolls naturally the full height below the top section,
        and Back / Next float at the bottom with the content passing underneath them ---- */
.lbw-body {
	flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
	-webkit-overflow-scrolling: touch;
	display: flex; flex-direction: column; /* keeps Back / Next at the bottom when the content is short */
}
.lbw-content {
	flex: 1 0 auto; box-sizing: border-box;
	width: min(var(--lbw-max), 100%); margin: 0 auto;
	padding: 1em max(calc(.75em + var(--lbw-bleed)), 0px) 1.25em;
}
.lbw-content > .lbw-panel { border: 0; padding: 0; }

/* Floating Back / Next: a black capsule that sticks to the bottom of the scroll area; the content
   scrolls straight underneath it (no blur). It sits at the end of the content, so the last product
   always scrolls fully clear above it. Tunables on .lbw-wizard:
     --lbw-dock-bg        capsule colour (default rgba(0, 0, 0, .66) — flat 66% black)
     --lbw-dock-shadow    its drop shadow
     --lbw-dock-back-bg   Back button fill inside the capsule (default #fff)
     --lbw-dock-btn-width button width on wide screens (default 350px; grows to fit its label)
     --lbw-disabled-bg / --lbw-disabled-color  solid colours for a disabled Next / Add to basket */
.lbw-foot {
	flex: none; position: sticky; bottom: 0; z-index: 5; box-sizing: border-box;
	width: min(var(--lbw-max), 100%); margin: 0 auto;
	padding: .75em max(calc(.75em + var(--lbw-bleed)), 0px) calc(.9em + env(safe-area-inset-bottom, 0px));
	pointer-events: none; /* only the capsule takes taps; content beside it stays usable */
}
.lbw-foot .lbw-mbar-row {
	pointer-events: auto;
	display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: .6em;
	padding: .6em;                                  /* space between the capsule edge and the buttons */
	background: var(--lbw-dock-bg, rgba(0, 0, 0, .66)); /* flat, 66% black */
	border-radius: 999px;
	box-shadow: var(--lbw-dock-shadow, 0 12px 30px rgba(0, 0, 0, .35), 0 3px 8px rgba(0, 0, 0, .25));
}
.lbw-foot .lbw-mbar-row > button {
	border-radius: 999px;                           /* full pills inside the capsule */
	padding-top: .25em; padding-bottom: .25em;      /* slimmer buttons, so the extra space keeps the capsule's size… */
	min-height: 44px;                               /* …never below a comfortable tap size */
}
.lbw-foot .lbw-mbar-back { background: var(--lbw-dock-back-bg, #fff); color: #000; }
/* Disabled Next / Add to basket / Back to review: a solid lighter colour instead of transparency */
.lbw-foot .lbw-nav-btn:disabled,
.lbw-foot .lbw-commit:disabled {
	opacity: 1;
	background: var(--lbw-disabled-bg, #EEB6B2);
	border-color: rgba(0, 0, 0, .35);
	color: var(--lbw-disabled-color, rgba(0, 0, 0, .45));
	cursor: default;
}
.lbw-foot.is-empty { display: none; } /* first page before a date: nothing to show */
/* Editing from the review page: a small outlined "↩ Return to booking review" pill on its own line at the
   top of the capsule, above Back / Next. Hooks: .lbw-return-line, .lbw-return-pill (.lbw-mbar-return). */
.lbw-foot .lbw-mbar-row--return {
	display: grid; grid-template-columns: auto auto; justify-content: center; /* Back | Next — sized to the buttons */
	border-radius: 28px;                                  /* two lines: a rounded panel rather than a pill */
}
.lbw-foot .lbw-return-line { grid-column: 1 / -1; display: flex; justify-content: center; } /* the pill spans the top */
@media (max-width: 767px) {
	.lbw-foot .lbw-mbar-row--return { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } /* phones: buttons share the width */
}
.lbw-wizard .lbw-foot .lbw-return-pill {
	display: inline-flex; align-items: center; gap: .45em;
	min-height: 36px; padding: .3em 1.1em;
	font: inherit; font-size: .8em; line-height: 1.2; cursor: pointer;
	background: transparent; color: #fff;
	border: 1px solid rgba(255, 255, 255, .75); border-radius: 999px;
	box-shadow: none;
}
.lbw-wizard .lbw-foot .lbw-return-pill:disabled { opacity: .45; cursor: default; } /* a required section must be chosen first */
@media (hover: hover) {
	.lbw-wizard .lbw-foot .lbw-return-pill:not(:disabled):hover { background: rgba(255, 255, 255, .12); color: #fff; border-color: #fff; }
}
/* Tablet landscape and wider (1024px+): left/right padding from one setting, --lbw-gutter (default 2em), applied to the
   top section, content and Back / Next bar together; the tab strip offsets itself to keep to the edge */
@media (min-width: 1024px) {
	.lbw-wizard .lbw-mbar, .lbw-wizard .lbw-content, .lbw-wizard .lbw-foot {
		padding-left: var(--lbw-gutter, 2em); padding-right: var(--lbw-gutter, 2em);
	}
	.lbw-wizard .lbw-mtabs { margin-left: calc(-1 * var(--lbw-gutter, 2em)); padding-left: var(--lbw-gutter, 2em); }
}
/* ---- Sizing inside an Elementor off-canvas (device-independent) ----
   Elementor sizes its window (.e-off-canvas__content, e.g. 92vw × 92vh). Every layer inside it that
   contains the wizard stretches to fill the layer above, and the wizard fills the last one: no fixed
   heights, no screen units, no measuring. The window itself keeps Elementor's size (it never grows).
   The wizard rule carries extra weight so a site rule (e.g. width: 3000px) can't outrank it. */
.e-off-canvas__content:has(.lbw-wizard) { display: flex; flex-direction: column; }
.e-off-canvas__content :has(.lbw-wizard) { display: flex; flex-direction: column; flex: 1 1 0%; min-height: 0; min-width: 0; }
.e-off-canvas__content .lbw-wizard.lbw-wizard {
	flex: 1 1 0%; min-height: 0; min-width: 0;
	width: 100%; height: auto;
	max-height: 100vh; max-height: 100dvh; /* safety net: never taller than the visible screen */
}

/* Tablet and wider (768px+): a compact capsule, centred — only phones go full width */
@media (min-width: 768px) {
	.lbw-foot .lbw-mbar-row { width: fit-content; max-width: 100%; margin: 0 auto; }
	.lbw-foot .lbw-mbar-row > button {
		flex: 0 0 auto;                               /* size to the label… */
		min-width: var(--lbw-dock-btn-width, 350px);  /* …never narrower than this */
		padding-left: 2em; padding-right: 2em;
		white-space: nowrap;                          /* long labels widen the button, never overflow it */
	}
}
/* Tablet portrait (768–1023px): buttons scale down with the screen so both always fit */
@media (min-width: 768px) and (max-width: 1023px) {
	.lbw-foot .lbw-mbar-row > button { min-width: min(var(--lbw-dock-btn-width, 350px), 38vw); }
}
/* Tablet landscape and wider (1024px+): a taller capsule — 60px buttons, a touch more space around them */
@media (min-width: 1024px) {
	.lbw-foot .lbw-mbar-row { padding: .7em; }
	.lbw-foot .lbw-mbar-row > button { min-height: 60px; padding-top: .5em; padding-bottom: .5em; }
}
.lbw-list-open .lbw-body { overflow: hidden; }   /* booking list open: the content stays still */

@media (max-width: 767px) {
	/* Step count hidden on phones — the highlighted tab shows where you are */
	.lbw-mbar-sub .lbw-progress { display: none; }
	.lbw-mtabs { cursor: auto; } /* touch: no grab cursor */

	/* Slimmer: top section, booking bar and content padding. On phones the bar's gap sits on the slot,
	   so it animates away with the tuck-away. */
	.lbw-mbar { padding-top: .5em; padding-bottom: .5em; }
	.lbw-mbar-sub { margin-top: 0; }
	.lbw-mlist-slot { margin-top: .5em; transition: height .3s ease, opacity .3s ease, margin-top .3s ease; }
	.lbw-mlist-slot.is-entering { margin-top: 0; }
	.lbw-mlist-bar { padding: .25em .7em; min-height: 44px; } /* slimmer, but never below a 44px tap target */
	.lbw-mlist-head { padding-top: .3em; padding-bottom: .3em; min-height: 44px; margin-top: .35em; }
	.lbw-mlist-body { padding: 0 .6em .6em; }
	.lbw-content { padding-top: .75em; }

	/* Phones: capsule spans the width (with the content's side margin); 48px buttons; home-bar spacing kept */
	.lbw-foot { padding-top: .5em; padding-bottom: calc(.6em + env(safe-area-inset-bottom, 0px)); }
	.lbw-foot .lbw-mbar-row { margin-left: 1.25em; margin-right: 1.25em; } /* tucked in: a little content shows either side */
	.lbw-foot .lbw-mbar-row > button { flex: 1 1 0; min-width: 0; }      /* phones: the two buttons share the width */

	/* Scrolling down the panel tucks the Review & edit bar away (tabs and X stay); scrolling up brings it back.
	   The script animates the slot's exact height; CSS adds the fade and holds the collapsed state. */
	.lbw-top-collapsed .lbw-mlist-slot { height: 0; opacity: 0; margin-top: 0; overflow: hidden; pointer-events: none; }
}
@media (prefers-reduced-motion: reduce) {
	.lbw-mlist-slot { transition: none; }
}

@media (max-width: 767px) {
	.lbw-panel { padding: .9em; }
	.lbw-product-head { gap: .75em; } /* image stays beside the text on phones */
	.lbw-product-image { width: 72px; height: 72px; }
	.lbw-visit-types { grid-template-columns: minmax(0, 1fr); }
	.lbw-visit-dates--day, .lbw-visit-dates--weekend { grid-column: 1; } /* phones: dates follow both buttons */
}


/* ---- "Already booked?" review page: the chosen date and a please-check reminder, above the total ---- */
.lbw-extras-check { margin: 1em 0 .5em; font-weight: 600; }

/* ---- Collapsible descriptions (per-section "Descriptions" setting) ----
   .lbw-desc--all: a two-line preview everywhere; .lbw-desc--phone: only on phones (in full, no link, on wider
   screens). The preview fades out at the bottom; "More info ⌄" opens it smoothly and it stays open while booking. */
.lbw-desc-box { overflow: hidden; transition: max-height .35s ease; }
.lbw-desc--all .lbw-desc-box:not(.is-open) {
	max-height: 3.1em; /* about two lines */
	-webkit-mask-image: linear-gradient(to bottom, #000 40%, transparent); mask-image: linear-gradient(to bottom, #000 40%, transparent);
}
/* Plain-text toggle: no button styling, but a comfortable invisible tap area */
.lbw-wizard .lbw-product .lbw-more-toggle {
	position: relative;
	display: inline-flex; align-items: center; gap: .5em;
	margin: .35em 0 1em; padding: 0; min-height: 0;       /* small gap above, 1em below (2.6.13) */
	background: none; border: 0; box-shadow: none; border-radius: 0;
	font: inherit; color: inherit; text-decoration: none; line-height: 1.2;
	cursor: pointer;
}
/* invisible tap area around the text: easy to tap, without adding space */
.lbw-wizard .lbw-product .lbw-more-toggle::after { content: ''; position: absolute; inset: -.6em -.4em; }
/* drawn chevron (SVG), text height; points up when open */
.lbw-wizard .lbw-product .lbw-more-chevron { width: 9px; height: 9px; flex: none; transition: transform .25s ease; }
.lbw-wizard .lbw-product .lbw-more-toggle[aria-expanded="true"] .lbw-more-chevron { transform: rotate(180deg); }
/* spacing: the description block adds none of its own; 10px above the price
   (phones: none, for cards with "More info") */
.lbw-wizard .lbw-product .lbw-desc { margin: 0; }
.lbw-wizard .lbw-product-head { margin-bottom: 10px; }
@media (max-width: 767px) {
	.lbw-wizard .lbw-product-head:has(.lbw-more-toggle) { margin-bottom: 0; }
}
@media (min-width: 768px) {
	.lbw-desc--phone .lbw-more-toggle { display: none !important; } /* wider screens: always in full */
}
@media (max-width: 767px) {
	.lbw-desc--phone .lbw-desc-box:not(.is-open) {
		max-height: 3.1em;
		-webkit-mask-image: linear-gradient(to bottom, #000 40%, transparent); mask-image: linear-gradient(to bottom, #000 40%, transparent);
	}
}
@media (prefers-reduced-motion: reduce) { .lbw-desc-box, .lbw-wizard .lbw-product .lbw-more-chevron { transition: none; } }

/* ---- (2.6.13) Text below the products (e.g. the banquet menu) ----
   Collapsed: a plain-text label with a chevron, like "More info"; opens smoothly. Always open: shown as it is. */
.lbw-wizard .lbw-step-after { margin: 1.25em 0 0; }
.lbw-wizard .lbw-step-after-body > :first-child { margin-top: 0; }
.lbw-wizard .lbw-step-after-body > :last-child { margin-bottom: 0; }
.lbw-wizard .lbw-step-after-body img { max-width: 100%; height: auto; }
.lbw-wizard .lbw-after-box { overflow: hidden; transition: max-height .35s ease; }
.lbw-wizard .lbw-after-box:not(.is-open) { max-height: 0; visibility: hidden; }
.lbw-wizard .lbw-after-box.is-open { padding-top: .75em; }
/* Plain text whatever the theme does to buttons (the class is doubled to outrank rules like
   button:not(:hover):not(:active) that some themes use) */
.lbw-wizard .lbw-step-after .lbw-after-toggle.lbw-after-toggle,
.lbw-wizard .lbw-step-after .lbw-after-toggle.lbw-after-toggle:hover,
.lbw-wizard .lbw-step-after .lbw-after-toggle.lbw-after-toggle:focus,
.lbw-wizard .lbw-step-after .lbw-after-toggle.lbw-after-toggle:active {
	position: relative;
	display: inline-flex; align-items: center; gap: .5em;
	margin: 0; padding: 0; min-height: 0; width: auto;
	background: none; border: 0; box-shadow: none; border-radius: 0;
	font: inherit; font-weight: 600; color: inherit; text-decoration: none; line-height: 1.2;
	cursor: pointer;
}
.lbw-wizard .lbw-step-after .lbw-after-toggle::after { content: ''; position: absolute; inset: -.6em -.4em; } /* comfortable tap area */
.lbw-wizard .lbw-step-after .lbw-after-toggle .lbw-more-chevron { width: 9px; height: 9px; flex: none; transition: transform .25s ease; }
.lbw-wizard .lbw-step-after .lbw-after-toggle[aria-expanded="true"] .lbw-more-chevron { transform: rotate(180deg); }
.lbw-wizard .lbw-step-after .lbw-after-toggle:focus { outline: none; }
.lbw-wizard .lbw-step-after .lbw-after-toggle:focus-visible { outline: 2px solid var(--lbw-accent); outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { .lbw-wizard .lbw-after-box, .lbw-wizard .lbw-step-after .lbw-after-toggle .lbw-more-chevron { transition: none; } }

/* ---- Compact dates on phones: two columns and short labels ("Sat 7 Aug"); full labels on wider screens ---- */
.lbw-date-short { display: none; }
@media (max-width: 767px) {
	.lbw-wizard .lbw-dates { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5em; }
	.lbw-wizard .lbw-dates .lbw-choice { width: 100%; min-width: 0; margin: 0; }
	.lbw-date-full { display: none; }
	.lbw-date-short { display: inline; }
	.lbw-wizard .lbw-visit-dates--weekend .lbw-dates,
	.lbw-wizard .lbw-extras-col--weekend .lbw-dates { grid-template-columns: minmax(0, 1fr); } /* weekends: full width */
}

/* ---- Touch screens: a tapped button keeps its normal colours (no theme hover colour sticking after a tap).
   The script notes each button's normal colours as it's drawn (--lbw-rest-*). ---- */
@media (hover: none) {
	.lbw-wizard button[data-lbw-rest]:hover,
	.lbw-modal button[data-lbw-rest]:hover {
		background-color: var(--lbw-rest-bg) !important;
		color: var(--lbw-rest-fg) !important;
		border-color: var(--lbw-rest-bd) !important;
	}
}

/* ---- 2.5.0: restricted tickets, issuing, parking pass, start again ---- */
/* "Staff only" / "Approved carers only" beside an option (shown to staff only) */
.lbw-access-tag {
	display: inline-block; font-size: .7em; line-height: 1.4; padding: .1em .55em;
	border: 1px solid currentColor; border-radius: 999px; opacity: .8; white-space: nowrap;
}
/* "Includes 2 × Weekend Camping Parking Pass, free with your pitches." */
.lbw-included { font-size: .9em; margin: .75em 0; }
/* Review page note when staff are issuing Complimentary / Participant tickets */
.lbw-issue-note { border: 1px solid var(--lbw-line); border-left: 4px solid var(--lbw-accent); padding: .6em .9em; border-radius: var(--lbw-radius); font-size: .9em; }
/* Review page "Remove all and start again": no styles of its own. It is the .lbw-return-pill (same markup and rules as
   "Return to booking review") on the top line of the capsule; .lbw-restart is only a hook. */
