/**
 * AI for Hospitality landing-page presentation.
 *
 * Art direction: warm editorial. Stone and cream grounds, full-bleed
 * photography, hairline rules instead of card borders, dark bands for the
 * two statement moments. Derived from the approved design canvas
 * ("Hospitality landing page design"), rebuilt as scoped CSS over semantic
 * Gutenberg blocks - the canvas itself carries 328 inline styles and its own
 * header/nav/footer, none of which may enter a Page record.
 *
 * The page is a FRAGMENT. The plugin template supplies the real site header,
 * nav and footer; nothing here may recreate them.
 *
 * Two rules hold everywhere below, both learned the hard way on this page:
 *
 *  1. Every selector is anchored at `body.ascend-hospitality-template-active`.
 *     That anchor, set by the plugin only when this template is active, is the
 *     entire isolation mechanism - these rules cannot reach Base Camp even if
 *     both stylesheets load together.
 *
 *  2. Any paragraph component is written `p.ascend-hospitality-*` so it
 *     outranks the generic `.ascend-landing-page p` rule at (0,2,2). Where a
 *     component paragraph sits inside a container that also styles `p`, it
 *     carries the ancestor class too. Dropping the element qualifier is what
 *     collapsed the step numbers in an earlier build.
 *
 * WordPress injects `.wp-block-group__inner-container` into every Group at
 * render time on this site, so every layout container is written against both
 * shapes: `X > .wp-block-group__inner-container` and
 * `X:not(:has(> .wp-block-group__inner-container))`. Layout resets use margin
 * longhands, never the `margin` shorthand - a shorthand there outranks the
 * rhythm rules and silently eats the gaps in the fallback shape.
 *
 * Colour: small blue text uses --ascend-hosp-blue-text, not the brand blue,
 * which is 2.8-3.2:1 on these warm grounds and fails AA below 18.66px.
 */

body.ascend-hospitality-template-active .ascend-landing-page {
	/* Grounds */
	--ascend-hosp-white: #fff;
	--ascend-hosp-soft: #fbfaf8;
	--ascend-hosp-cream: #f5f1ec;
	--ascend-hosp-rule: #e4ded5;
	--ascend-hosp-rule-ink: rgb(255 255 255 / 14%);

	/* Ink band */
	--ascend-hosp-ink: #1d1d20;
	--ascend-hosp-ink-body: #d1d5db;

	/* Type colours */
	--ascend-hosp-heading: #111827;
	--ascend-hosp-body: #334155;
	--ascend-hosp-muted: #5f6672;

	/* Brand. --blue is the display/accent value and the button fill; --blue-text
	   is the AA-safe value for small copy (>=4.77:1 on every ground here). */
	--ascend-hosp-blue: #3498dc;
	--ascend-hosp-blue-hover: #4a8bc2;
	--ascend-hosp-blue-text: #1f6c9e;
	/* Display accent on light grounds, and the primary control's boundary. The
	   brand blue is 2.80:1 on cream, missing both the 3:1 large-text bar and
	   WCAG 1.4.11. Keep this above 3:1 on every ground - the button's edge
	   depends on it, not just the stat figure. */
	--ascend-hosp-blue-accent: #2b83c4;
	/* Boundary for the quiet control. #c9c0b4 was 1.60:1 against these warm
	   grounds - no perceivable edge; this clears 1.4.11's 3:1 everywhere. */
	--ascend-hosp-rule-control: #8a8172;

	/* Metrics */
	--ascend-hosp-container: 77.5rem;
	--ascend-hosp-gutter: 3rem;
	--ascend-hosp-section-y: 8.125rem;
	--ascend-hosp-copy-measure: 38rem;
	--ascend-hosp-radius: 0.75rem;
	--ascend-hosp-pill: 9999px;
	/* Fixed site header. Shared by the sticky media column and the anchor
	   scroll offset so the two cannot drift apart. */
	--ascend-hosp-header-h: 6.25rem;

	background: var(--ascend-hosp-white);
	color: var(--ascend-hosp-body);
	font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	font-size: 1rem;
	line-height: 1.7;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}

body.ascend-hospitality-template-active .ascend-landing-page *,
body.ascend-hospitality-template-active .ascend-landing-page *::before,
body.ascend-hospitality-template-active .ascend-landing-page *::after {
	box-sizing: border-box;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-content > * {
	margin-block: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page h1,
body.ascend-hospitality-template-active .ascend-landing-page h2,
body.ascend-hospitality-template-active .ascend-landing-page h3 {
	margin: 0;
	color: var(--ascend-hosp-heading);
	font-family: Montserrat, Inter, system-ui, sans-serif;
	font-weight: 900;
	text-transform: uppercase;
	text-wrap: balance;
}

body.ascend-hospitality-template-active .ascend-landing-page h1 {
	font-size: clamp(2.5rem, 4.4vw, 3.75rem);
	letter-spacing: -0.0625rem;
	line-height: 1.05;
}

body.ascend-hospitality-template-active .ascend-landing-page h2 {
	font-size: clamp(1.875rem, 2.9vw, 2.5rem);
	letter-spacing: -0.03125rem;
	line-height: 1.12;
}

body.ascend-hospitality-template-active .ascend-landing-page h3 {
	font-size: 1.25rem;
	letter-spacing: -0.0125rem;
	line-height: 1.25;
}

body.ascend-hospitality-template-active .ascend-landing-page p {
	margin: 0;
	font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	text-wrap: pretty;
}

body.ascend-hospitality-template-active .ascend-landing-page ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

body.ascend-hospitality-template-active .ascend-landing-page a {
	color: var(--ascend-hosp-blue-text);
	text-underline-offset: 0.18em;
}

/* ---------- Sections ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section {
	padding: var(--ascend-hosp-section-y) var(--ascend-hosp-gutter);
	background: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--cream {
	background: var(--ascend-hosp-cream);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink {
	background: var(--ascend-hosp-ink);
}

/* Split-media sections bleed to the viewport edge, so they carry no padding. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--flush {
	padding: 0;
	background: var(--ascend-hosp-soft);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section-inner {
	width: min(100%, var(--ascend-hosp-container));
	margin-inline: auto;
}

/*
 * ---------- Shared layout reset ----------
 * Every layout container below is a Gutenberg Group, and WordPress injects
 * `.wp-block-group__inner-container` into each one at render time, so each is
 * written against both DOM shapes. These four declarations were identical in
 * all thirteen; hoisting them leaves each component rule carrying only its own
 * layout.
 *
 * `:is()` takes the specificity of its most specific argument - every argument
 * here is a bare class - so both branches stay at (0,4,1), exactly what the
 * written-out selectors scored. The cascade is unchanged.
 *
 * `margin-top`/`margin-inline` longhands, never the `margin` shorthand: a
 * shorthand here outranks the rhythm rules and silently swallows the gaps in
 * the no-inner-container shape.
 *
 * INVARIANT: this list must stay in sync with the layout components below, and
 * every argument must remain a bare class.
 *
 * A renamed or misspelled class here is still valid CSS - it simply matches
 * nothing, and the rule keeps applying to the other twelve. So a rename costs
 * one component its reset silently rather than failing loudly. (Forgiving
 * parsing is a separate `:is()` property and only discards syntactically
 * invalid arguments; it is not what bites here.)
 *
 * A compound argument (`.a.b`, `[data-x]`) would raise the whole rule's
 * specificity for all thirteen at once.
 */
body.ascend-hospitality-template-active .ascend-landing-page :is(
	.ascend-hospitality-statement-grid,
	.ascend-hospitality-colset,
	.ascend-hospitality-callout-grid,
	.ascend-hospitality-rulelist,
	.ascend-hospitality-split,
	.ascend-hospitality-compare,
	.ascend-hospitality-defgrid,
	.ascend-hospitality-stages,
	.ascend-hospitality-stepgrid,
	.ascend-hospitality-pillrow,
	.ascend-hospitality-trio,
	.ascend-hospitality-statband,
	.ascend-hospitality-duo
) > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page :is(
	.ascend-hospitality-statement-grid,
	.ascend-hospitality-colset,
	.ascend-hospitality-callout-grid,
	.ascend-hospitality-rulelist,
	.ascend-hospitality-split,
	.ascend-hospitality-compare,
	.ascend-hospitality-defgrid,
	.ascend-hospitality-stages,
	.ascend-hospitality-stepgrid,
	.ascend-hospitality-pillrow,
	.ascend-hospitality-trio,
	.ascend-hospitality-statband,
	.ascend-hospitality-duo
):not(:has(> .wp-block-group__inner-container)) {
	width: 100%;
	max-width: none;
	margin-top: 0;
	margin-inline: 0;
}

/* ---------- Section head: eyebrow, heading, lede ---------- */

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-eyebrow {
	margin-bottom: 1.125rem;
	color: var(--ascend-hosp-blue-text);
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.15rem;
	line-height: 1.4;
	text-transform: uppercase;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section h2 {
	max-width: 44rem;
	margin-bottom: 1.75rem;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-lede {
	max-width: var(--ascend-hosp-copy-measure);
	margin-bottom: 4rem;
	color: var(--ascend-hosp-body);
	font-size: 1.1875rem;
	line-height: 1.7;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-note {
	max-width: var(--ascend-hosp-copy-measure);
	margin-top: 2.5rem;
	color: var(--ascend-hosp-muted);
	font-size: 0.9375rem;
	line-height: 1.7;
}

/* ---------- Buttons ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .wp-block-buttons.ascend-hospitality-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1.125rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .wp-block-buttons.ascend-hospitality-actions .wp-block-button {
	margin: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	padding: 1.125rem 2.25rem;
	/* Boundary, not fill. The approved brand blue stays as the background; the
	   border darkens so the control has a 3:1 edge against cream (the fill
	   alone is 2.80:1 there, failing WCAG 1.4.11). */
	border: 1px solid var(--ascend-hosp-blue-accent);
	border-radius: var(--ascend-hosp-pill);
	background: var(--ascend-hosp-blue);
	box-shadow: 0 0.25rem 0.9375rem rgb(52 152 220 / 40%);
	color: var(--ascend-hosp-white);
	font-family: Inter, system-ui, sans-serif;
	font-size: 0.8125rem;
	font-weight: 800;
	letter-spacing: 0.1rem;
	line-height: 1.2;
	text-decoration: none;
	text-transform: uppercase;
	transition: background-color 150ms ease, transform 150ms ease;
}

body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link:hover {
	background: var(--ascend-hosp-blue-hover);
	border-color: var(--ascend-hosp-blue-hover);
	color: var(--ascend-hosp-white);
	transform: translateY(-2px);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-button--ghost .wp-block-button__link {
	border-color: var(--ascend-hosp-rule-control);
	background: rgb(255 255 255 / 70%);
	box-shadow: none;
	color: #1e293b;
	font-weight: 700;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-button--ghost .wp-block-button__link:hover {
	border-color: var(--ascend-hosp-heading);
	background: var(--ascend-hosp-white);
	color: var(--ascend-hosp-heading);
}

/* ---------- Hero: photo bleeds right, copy sits on a scrim ---------- */

/*
 * Grid, not flex, for the vertical centring. With `display: flex` the group's
 * injected inner container becomes a shrink-to-fit flex item, so the 77.5rem
 * container inside it resolves against ~756px and the copy loses its left
 * margin. A single-column grid stretches the item in both Group shapes.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero {
	position: relative;
	overflow: hidden;
	min-height: 88vh;
	display: grid;
	align-content: center;
	background: var(--ascend-hosp-cream);
}

/* Hero and closing are the same mechanism: a photograph under a scrim. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media {
	position: absolute;
	inset: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 72% 62%;
}

/*
 * The scrim is what makes the copy legible over the photograph. It is opaque
 * on the left and clears by 90%, so the image reads full-bleed while the text
 * column sits on near-solid ground - measured, not eyeballed: the darkest
 * pixel under the lede is #f2eeea, keeping body copy above 9:1.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media::after {
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg,
		rgb(255 255 255 / 96%) 0%,
		rgb(255 255 255 / 94%) 46%,
		rgb(255 255 255 / 88%) 62%,
		rgb(255 255 255 / 45%) 76%,
		rgb(255 255 255 / 0%) 90%);
	content: "";
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-inner {
	position: relative;
	z-index: 1;
	width: min(100%, var(--ascend-hosp-container));
	margin-inline: auto;
	padding: 7.5rem var(--ascend-hosp-gutter);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-content {
	max-width: 41.25rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero p.ascend-hospitality-eyebrow {
	margin-bottom: 1.75rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero h1 {
	margin-bottom: 1.75rem;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-hero-lede {
	max-width: 37.5rem;
	margin-bottom: 2.25rem;
	color: var(--ascend-hosp-body);
	font-size: 1.1875rem;
	line-height: 1.7;
}

/*
 * Core's Image block wraps every image in a <figure>, so the media wrappers
 * have to pass their box down. The injected inner container counts as another
 * level: without it in this list the percentage-height chain breaks there and
 * the photograph falls back to its intrinsic height, overflowing the band.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media .wp-block-image,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media figure,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media .wp-block-image,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media figure,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media > .wp-block-group__inner-container {
	margin: 0;
	width: 100%;
	height: 100%;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media .wp-block-image,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media figure {
	margin: 0;
	width: 100%;
}

/* ---------- Statement band: heading left, argument right ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement {
	padding: 7.5rem var(--ascend-hosp-gutter);
	background: var(--ascend-hosp-ink);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement-grid > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement-grid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: 4.5rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement h2 {
	max-width: 20ch;
	color: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p {
	color: var(--ascend-hosp-ink-body);
	font-size: 1.0625rem;
	line-height: 1.75;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p:not([class*="ascend-hospitality-"]) + p:not([class*="ascend-hospitality-"]) {
	margin-top: 1.25rem;
}

/*
 * The blue pull line closes the argument column. It sits above a hairline in
 * the ink band, where the brand blue measures 5.34:1 and is safe for copy.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p.ascend-hospitality-pullline {
	margin-top: 2.5rem;
	padding-top: 2.25rem;
	border-top: 1px solid var(--ascend-hosp-rule-ink);
	color: var(--ascend-hosp-blue);
	font-size: 1.0625rem;
	font-weight: 800;
	letter-spacing: 0.03125rem;
	line-height: 1.5;
	text-transform: uppercase;
}

/* ---------- Column set: three beats divided by hairlines ---------- */

/* The trio shares this container exactly; only the item padding differs. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset:not(:has(> .wp-block-group__inner-container)),
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
	border-top: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item {
	padding: 2.25rem 2.25rem 0;
	border-left: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item:first-child,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item:first-child {
	padding-left: 0;
	border-left: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-index {
	margin-bottom: 1rem;
	color: var(--ascend-hosp-muted);
	font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
	font-size: 0.75rem;
	letter-spacing: 0.0625rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item h3,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item h3 {
	margin-bottom: 0.875rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item p:not([class*="ascend-hospitality-"]),
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-body);
	font-size: 0.9375rem;
	line-height: 1.7;
}

/* The third beat is the turn in the argument, so its index takes the accent. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item:last-child p.ascend-hospitality-index {
	color: var(--ascend-hosp-blue-text);
	font-weight: 700;
}

/* ---------- Callout: stone panel, label left, ruled list right ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout {
	margin-top: 5rem;
	padding: 3.5rem;
	border-radius: var(--ascend-hosp-radius);
	background: var(--ascend-hosp-cream);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout-grid > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout-grid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 18rem) minmax(0, 1fr);
	gap: 3rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout h3 {
	font-size: 1.375rem;
	line-height: 1.25;
}

/* ---------- Ruled list: hairline-separated rows ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	gap: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item {
	padding-block: 1.125rem;
	border-bottom: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item:first-child {
	padding-top: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item:last-child {
	border-bottom: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-body);
	font-size: 1rem;
	line-height: 1.7;
}

/* A small blue label above the row's body copy. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item p.ascend-hospitality-rulelabel {
	margin-bottom: 0.5rem;
	color: var(--ascend-hosp-blue-text);
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.09375rem;
	line-height: 1.4;
	text-transform: uppercase;
}

/* The consequence clause carries the weight in the friction list. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist-item strong {
	color: var(--ascend-hosp-heading);
	font-weight: 700;
}

/* ---------- Split media: photograph one side, argument the other ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: 0;
	align-items: start;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media {
	position: sticky;
	top: var(--ascend-hosp-header-h);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media img {
	display: block;
	width: 100%;
	height: clamp(35rem, 86vh, 56.25rem);
	object-fit: cover;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body {
	min-width: 0;
	padding: var(--ascend-hosp-section-y) 4.5rem;
}

/*
 * Photograph on the right. Auto-placement would land this correctly for the
 * current DOM order, but the placement is declared anyway so the modifier -
 * not the block order - decides the layout. The stacked breakpoint already
 * places explicitly; without this, desktop would follow DOM order while mobile
 * followed the class, and reordering the two Groups in wp-admin would silently
 * desynchronise them while the class still read `--media-right`.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split--media-right .ascend-hospitality-split-media {
	grid-column: 2;
	grid-row: 1;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split--media-right .ascend-hospitality-split-body {
	grid-column: 1;
	grid-row: 1;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body h2 {
	max-width: 22ch;
	margin-bottom: 1.5rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body p.ascend-hospitality-lede {
	max-width: none;
	margin-bottom: 2.75rem;
	font-size: 1.0625rem;
}

/* ---------- Compare: the scattered panel against the operating panel ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-compare > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-compare:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 0.86fr) minmax(0, 1.14fr);
	gap: 1.25rem;
	align-items: start;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel {
	padding: 2.75rem;
	border-radius: var(--ascend-hosp-radius);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted {
	background: var(--ascend-hosp-cream);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--outlined {
	border: 1px solid var(--ascend-hosp-rule);
	background: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-panel-label {
	margin-bottom: 1.5rem;
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.09375rem;
	line-height: 1.4;
	text-transform: uppercase;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted p.ascend-hospitality-panel-label {
	color: var(--ascend-hosp-muted);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--outlined p.ascend-hospitality-panel-label {
	color: var(--ascend-hosp-blue-text);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted .ascend-hospitality-rulelist-item {
	border-bottom-color: #e2dbd1;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted .ascend-hospitality-rulelist-item p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-muted);
	font-size: 0.9375rem;
}

/* The operating panel is a two-column definition grid, not a ruled list. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 1.75rem 2.25rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid h3 {
	margin-bottom: 0.5rem;
	font-size: 0.9375rem;
	letter-spacing: 0.03125rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-body);
	font-size: 0.9375rem;
	line-height: 1.65;
}

/* ---------- Pull lines ---------- */

/* Centred, large, uppercase: closes a section on its own line. */
body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-pullquote-center {
	max-width: 46rem;
	margin: 4.5rem auto 0;
	color: var(--ascend-hosp-heading);
	font-family: Montserrat, Inter, system-ui, sans-serif;
	font-size: clamp(1.125rem, 1.7vw, 1.375rem);
	font-weight: 900;
	letter-spacing: -0.0125rem;
	line-height: 1.4;
	text-align: center;
	text-transform: uppercase;
	text-wrap: balance;
}

/* Left rule: a quieter aside inside a column. */
body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-pullquote {
	max-width: 40rem;
	margin: 3.5rem 0 0;
	padding-left: 1.5rem;
	border-left: 3px solid var(--ascend-hosp-blue);
	color: var(--ascend-hosp-heading);
	font-size: 1.125rem;
	font-weight: 500;
	line-height: 1.55;
}

/* Blue uppercase, no rule: the one-line claim under the three stages. */
body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-claim {
	max-width: 52rem;
	margin-top: 3rem;
	color: var(--ascend-hosp-blue-text);
	font-size: 1.0625rem;
	font-weight: 800;
	letter-spacing: 0.03125rem;
	line-height: 1.5;
	text-transform: uppercase;
}

/* ---------- Stage cards ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 1.25rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stage {
	padding: 2rem;
	border: 1px solid var(--ascend-hosp-rule);
	border-radius: var(--ascend-hosp-radius);
	background: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-stage-pill {
	display: inline-flex;
	margin-bottom: 1.25rem;
	padding: 0.4375rem 0.9375rem;
	border-radius: var(--ascend-hosp-pill);
	background: var(--ascend-hosp-cream);
	color: var(--ascend-hosp-muted);
	font-size: 0.6875rem;
	font-weight: 800;
	letter-spacing: 0.09375rem;
	line-height: 1.2;
	text-transform: uppercase;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stage h3 {
	margin-bottom: 0.875rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stage p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-body);
	font-size: 0.9375rem;
	line-height: 1.7;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stage p.ascend-hospitality-stage-meta {
	margin-top: 1.25rem;
	color: var(--ascend-hosp-blue-text);
	font-size: 0.6875rem;
	font-weight: 800;
	letter-spacing: 0.09375rem;
	line-height: 1.4;
	text-transform: uppercase;
}

/* Stage three is not an entry point, so its meta reads as continuation. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stage p.ascend-hospitality-stage-meta--quiet {
	color: var(--ascend-hosp-muted);
}

/* ---------- Numbered grid: the six gated steps, on ink ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
	border-top: 1px solid var(--ascend-hosp-rule-ink);
	border-left: 1px solid var(--ascend-hosp-rule-ink);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepcell {
	padding: 2.25rem;
	border-right: 1px solid var(--ascend-hosp-rule-ink);
	border-bottom: 1px solid var(--ascend-hosp-rule-ink);
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-stepnum {
	margin-bottom: 1rem;
	color: rgb(255 255 255 / 34%);
	font-family: Montserrat, Inter, system-ui, sans-serif;
	font-size: 2rem;
	font-weight: 900;
	line-height: 1;
}

/* The sixth step is the one that ships, so it takes the accent. */
body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-stepnum--final {
	color: var(--ascend-hosp-blue);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepcell h3 {
	margin-bottom: 0.625rem;
	color: var(--ascend-hosp-white);
	font-size: 1rem;
	letter-spacing: 0.03125rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepcell p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-ink-body);
	font-size: 0.9375rem;
	line-height: 1.65;
}

/* ---------- Ink-band section internals ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink h2,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink h3 {
	color: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-lede {
	color: var(--ascend-hosp-ink-body);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-eyebrow {
	color: var(--ascend-hosp-blue);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink .ascend-hospitality-rulelist-item {
	border-bottom-color: var(--ascend-hosp-rule-ink);
}

/*
 * Redundant against the broader `--ink p:not(...)` rule below, and kept anyway.
 * Without it those paragraphs are decided by a (0,4,2) tie against the generic
 * rulelist rule, resolved only by block order - and losing that tie renders
 * #334155 on #1d1d20, about 1.6:1. Weight, not position.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink .ascend-hospitality-rulelist-item p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-ink-body);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink .ascend-hospitality-rulelist-item p.ascend-hospitality-rulelabel,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-panel-label {
	color: var(--ascend-hosp-blue);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p:not([class*="ascend-hospitality-"]) {
	color: var(--ascend-hosp-ink-body);
}

/*
 * The `:not()` above fails OPEN: a paragraph that gains a component class
 * drops out of the match and falls back to the light-ground colour, which on
 * ink is ~2.85:1 and effectively invisible. Closing that for the components
 * that could move onto a dark ground. Verified prophylactic: no component
 * paragraph sits on any of the three dark grounds today (checked by byte range
 * for ink, statement and closing). If one ever does, the fallback is #111827
 * or #5f6672 on #1d1d20 - between 1.06:1 and 2.91:1, effectively invisible -
 * which is what these overrides prevent.
 *
 * The `:not()` pattern itself is still debt. A ground-scoped bare `p` rule
 * only fails closed if it is declared AFTER every component paragraph rule,
 * which is a source-order contract rather than a specificity one. Worth doing
 * deliberately, not as a drive-by.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-note,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-index,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p.ascend-hospitality-note,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p.ascend-hospitality-index,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing p.ascend-hospitality-note,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing p.ascend-hospitality-index {
	color: var(--ascend-hosp-ink-body);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-pullquote,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink p.ascend-hospitality-pullquote-center,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p.ascend-hospitality-pullquote,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement p.ascend-hospitality-pullquote-center,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing p.ascend-hospitality-pullquote,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing p.ascend-hospitality-pullquote-center {
	color: var(--ascend-hosp-white);
}

/* ---------- Practice pills ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-pillrow > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-pillrow:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-pill {
	display: inline-flex;
	padding: 0.6875rem 1.125rem;
	border: 1px solid var(--ascend-hosp-rule);
	border-radius: var(--ascend-hosp-pill);
	background: var(--ascend-hosp-cream);
	color: var(--ascend-hosp-heading);
	font-size: 0.8125rem;
	font-weight: 700;
	line-height: 1.2;
}

/* ---------- Trio: three steps divided by hairlines ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item {
	padding: 2rem 2.25rem 0;
	border-left: 1px solid var(--ascend-hosp-rule);
}

/* ---------- Stat band ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 0;
	border-radius: var(--ascend-hosp-radius);
	background: var(--ascend-hosp-cream);
	overflow: hidden;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat {
	padding: 2rem 1.75rem;
	border-left: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat:first-child {
	border-left: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-stat-figure {
	color: var(--ascend-hosp-heading);
	font-family: Montserrat, Inter, system-ui, sans-serif;
	font-size: 2rem;
	font-weight: 900;
	letter-spacing: -0.03125rem;
	line-height: 1;
}

/* The board-ready count is the one that matters commercially. */
body.ascend-hospitality-template-active .ascend-landing-page p.ascend-hospitality-stat-figure--accent {
	color: var(--ascend-hosp-blue-accent);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat p.ascend-hospitality-stat-figure + p {
	margin-top: 0.625rem;
	color: var(--ascend-hosp-muted);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.0625rem;
	line-height: 1.4;
	text-transform: uppercase;
}

/* ---------- Two ruled lists side by side ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-duo > .wp-block-group__inner-container,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-duo:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 3rem;
	align-items: start;
}

/* ---------- Fit panels ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--outlined h3,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted h3 {
	margin-bottom: 1.25rem;
	font-size: 1rem;
	letter-spacing: 0.03125rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel--muted h3 {
	color: var(--ascend-hosp-muted);
}

/* ---------- FAQ ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq-list {
	max-width: 52.5rem;
	border-top: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq {
	margin: 0;
	border-bottom: 1px solid var(--ascend-hosp-rule);
}

/*
 * The row's vertical padding lives on the summary, not the details: on the
 * details it inflated the row to 74px while leaving only the 26px text box
 * clickable. The open state re-adds the bottom half the details used to
 * supply - without it an expanded answer ends flush against the hairline.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq[open] {
	padding-bottom: 1.5rem;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq summary {
	padding: 1.5rem 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.25rem;
	cursor: pointer;
	list-style: none;
	color: var(--ascend-hosp-heading);
	font-size: 1.0625rem;
	font-weight: 700;
	line-height: 1.5;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq summary::-webkit-details-marker {
	display: none;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq summary::after {
	flex: 0 0 auto;
	color: var(--ascend-hosp-blue-text);
	content: "+";
	font-size: 1.5rem;
	font-weight: 300;
	line-height: 1;
	transition: transform 300ms cubic-bezier(0.22, 1, 0.36, 1);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq[open] summary::after {
	transform: rotate(45deg);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq p {
	max-width: 40rem;
	margin-top: 1rem;
	color: var(--ascend-hosp-body);
	font-size: 1rem;
	line-height: 1.75;
}

/* ---------- Closing CTA: photograph under an ink wash ---------- */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing {
	position: relative;
	overflow: hidden;
	background: var(--ascend-hosp-ink);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 55%;
	opacity: 0.42;
	transform: scaleX(-1);
}

/*
 * The wash guarantees the copy's ground regardless of what the photograph is
 * doing behind it: at 42% image opacity over ink plus this overlay, the
 * lightest pixel under the heading stays below #4a4a4e, keeping white type
 * above 7:1.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-media::after {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgb(29 29 32 / 55%) 0%, rgb(29 29 32 / 72%) 100%);
	content: "";
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-inner {
	position: relative;
	z-index: 1;
	width: min(100%, 48rem);
	margin-inline: auto;
	padding: 8.75rem var(--ascend-hosp-gutter);
	text-align: center;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing h2 {
	margin-bottom: 1.5rem;
	color: var(--ascend-hosp-white);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing p:not([class*="ascend-hospitality-"]) {
	margin-bottom: 2.5rem;
	color: var(--ascend-hosp-ink-body);
	font-size: 1.0625rem;
	line-height: 1.75;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing .wp-block-buttons {
	justify-content: center;
}

/*
 * ---------- Vertical rhythm ----------
 * Gutenberg's flow layout zeroes margins on block children, so every gap on
 * this page is declared explicitly.
 *
 * The `margin-top: 0` list below is the OUTER half of the two-shape pair. The
 * shared layout reset lands on the inner container in the production shape and
 * leaves the Group itself uncovered, where WordPress's layout margin applies.
 * It is load-bearing, not boilerplate.
 *
 * The `margin-bottom` rules that follow do a different job - the gap under a
 * container - and live here because the layout reset deliberately leaves
 * `margin-bottom` free.
 *
 * All thirteen layout components appear in the list below, matching the
 * `:is()` reset exactly. A local harness cannot show the WordPress layout
 * margin these rules cancel, but the change is safe without rendering: on a
 * container that already declares its own `margin-bottom`, `margin-top: 0` is
 * a no-op if WordPress applies no margin and a fix if it does. There is no
 * third outcome, so the list stays complete rather than documenting a gap.
 */

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-compare,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-duo,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-rulelist,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement-grid,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout-grid,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-pillrow,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband {
	margin-top: 0;
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-pillrow,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband {
	margin-bottom: 3.5rem;
}

/* A rule list that follows body copy inside a split needs its own separation. */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body .ascend-hospitality-rulelist {
	border-top: 1px solid var(--ascend-hosp-rule);
}

body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body .ascend-hospitality-rulelist-item:first-child {
	padding-top: 1.125rem;
}

/* ---------- Focus and scroll ---------- */

body.ascend-hospitality-template-active .ascend-landing-page a:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page summary:focus-visible {
	outline: 2px solid var(--ascend-hosp-blue-text);
	outline-offset: 3px;
}

/*
 * On ink the AA-safe blue is too dark to read as a ring; the brand blue is
 * 4.9:1 against #1d1d20 and reads correctly there.
 *
 * The `summary` half is a forward contract, not a present fix: all seven FAQ
 * accordions currently sit on white, where the base ring is already correct.
 * It is here so a <details> moved onto any dark ground keeps a visible ring
 * instead of dropping to 1.55:1.
 */
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink a:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-section--ink summary:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing a:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing summary:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement a:focus-visible,
body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement summary:focus-visible {
	outline-color: var(--ascend-hosp-blue);
}

body.ascend-hospitality-template-active .ascend-landing-page div[id] {
	scroll-margin-top: var(--ascend-hosp-header-h);
}

/* ---------- Responsive ---------- */

@media (max-width: 61.25rem) {
	body.ascend-hospitality-template-active .ascend-landing-page {
		--ascend-hosp-section-y: 5rem;
		--ascend-hosp-gutter: 1.5rem;
	}

	/* Split sections stack, so the photograph stops being sticky and takes a
	   fixed band height instead of a viewport-height column. */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: 1fr;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media,
	/*
	 * Stacked, both children must return to auto-placement so the visual order
	 * follows the DOM (WCAG 1.3.2) - the desktop rules pin BOTH to row 1 and
	 * live outside this query, so dropping the row assignments here without
	 * resetting them collapses the two into a single overlapping cell.
	 */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split--media-right .ascend-hospitality-split-media {
		position: static;
		grid-column: 1;
		grid-row: auto;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split--media-right .ascend-hospitality-split-body {
		grid-column: 1;
		grid-row: auto;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media img {
		height: clamp(18rem, 42vh, 26rem);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-body {
		padding: var(--ascend-hosp-section-y) var(--ascend-hosp-gutter);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement-grid > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statement-grid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout-grid > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout-grid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-compare > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-compare:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-duo > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-duo:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: 1fr;
		gap: 2.5rem;
	}

	/* Column sets and trios drop their vertical rules and stack as ruled rows. */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item {
		padding-right: 1.5rem;
	}

	/*
	 * Two-up: `:first-child` no longer identifies the start of a row, so the
	 * item that wraps kept its left rule and left padding and sat 36px out of
	 * alignment. Reset by column position, and give the second row its own
	 * rule so the grid still reads as a grid.
	 */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item:nth-child(2n+1),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item:nth-child(2n+1) {
		padding-left: 0;
		border-left: 0;
	}

	/* The stat keeps its padding: that 1.75rem is the cream panel's inner
	   inset, not a column gutter, which is why its own :first-child rule
	   zeroes the border alone. */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat:nth-child(2n+1) {
		border-left: 0;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item:nth-child(n+3),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item:nth-child(n+3),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat:nth-child(n+3) {
		border-top: 1px solid var(--ascend-hosp-rule);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-callout {
		padding: 2.25rem;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-inner {
		padding: 5.5rem var(--ascend-hosp-gutter);
	}

	/* Stacked, the scrim has to cover the whole frame or the copy loses ground. */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-hero-media::after {
		background: linear-gradient(180deg,
			rgb(255 255 255 / 94%) 0%,
			rgb(255 255 255 / 90%) 55%,
			rgb(255 255 255 / 72%) 100%);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-closing-inner {
		padding: 5.5rem var(--ascend-hosp-gutter);
	}
}

@media (max-width: 37.5rem) {
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stages:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stepgrid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-statband:not(:has(> .wp-block-group__inner-container)),
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid > .wp-block-group__inner-container,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-defgrid:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: 1fr;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item {
		padding: 1.75rem 0 0;
		border-left: 0;
		border-top: 1px solid var(--ascend-hosp-rule);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-colset-item:first-child,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-trio-item:first-child {
		border-top: 0;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat {
		border-left: 0;
		border-top: 1px solid var(--ascend-hosp-rule);
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-stat:first-child {
		border-top: 0;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-panel {
		padding: 1.75rem;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button,
	body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link {
		width: 100%;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link {
		justify-content: center;
	}
}

@media (prefers-reduced-motion: reduce) {
	body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link,
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-faq summary::after {
		transition: none;
	}

	body.ascend-hospitality-template-active .ascend-landing-page .wp-block-button__link:hover {
		transform: none;
	}

	/* A sticky media column is motion the reader did not ask for. */
	body.ascend-hospitality-template-active .ascend-landing-page .ascend-hospitality-split-media {
		position: static;
	}
}
