/**
 * Kevin Williams personal-authority page presentation.
 *
 * Art direction: alternating light and ink bands, Montserrat display caps for
 * headings, hairline rules instead of heavy card chrome, one blue closing
 * band. Derived from the approved design canvas ("Kevin Williams v2.dc.html",
 * in pages/kevin-williams/design/), rebuilt as scoped CSS over semantic
 * Gutenberg blocks - the canvas itself carries inline styles on essentially
 * every element, a proprietary `style-hover` attribute its own JS runtime
 * reads, and its own header/nav/footer. None of that 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.
 *
 * Same two house rules as page-hospitality.css, for the same reasons:
 *
 *  1. Every selector is anchored at `body.ascend-kw-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 or
 *     Hospitality even if all three stylesheets load together.
 *
 *  2. Any paragraph component is written `p.ascend-kw-*` so it outranks the
 *     generic `.ascend-landing-page p` rule at (0,2,2).
 *
 * 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.
 *
 * NO `auto-fit` / `auto-fill` ANYWHERE. The canvas uses
 * `repeat(auto-fit, minmax(...))` in five places; that construct already
 * failed once on this site (the `grid--five` incident) because it silently
 * re-resolves column counts at widths nobody measured. Every grid below
 * declares explicit tracks and degrades through explicit breakpoints.
 *
 * THREE DELIBERATE DEVIATIONS FROM THE CANVAS, each an AA contrast fix,
 * each measured rather than estimated:
 *
 *  a. Closing band ground is --ascend-kw-blue-deep (#1f6c9e), not the brand
 *     #3498dc the canvas specifies. White on #3498dc is 3.15:1 - fine for the
 *     34px display heading, but the band also carries a 17px paragraph, which
 *     needs 4.5:1 and would have shipped at roughly 2.9:1 once the canvas's
 *     0.90 alpha is applied. On #1f6c9e white measures 5.68:1 and the whole
 *     band passes. #1f6c9e is not a new colour - it is the same AA-safe blue
 *     page-hospitality.css already uses for exactly this problem.
 *
 *  b. Small blue text (eyebrows at 12px/800, inline and standalone links at
 *     15-16px) uses --ascend-kw-blue-text (#1f6c9e, 5.68:1 on white and
 *     5.32:1 on --soft), never the brand blue. #3498dc is 3.15:1 on white and
 *     fails AA at every size used here; 12px/800 is not "large text" under
 *     WCAG, which starts at 18.66px bold.
 *
 *  c. The brand blue survives where it legitimately passes: button fills
 *     (white on blue as a large/bold control), the ink-band eyebrow
 *     --ascend-kw-blue-light (#5aa0da, 5.99:1 on ink), and non-text accents.
 *
 * MOTION: the canvas runs two infinite animations - a 34s logo marquee and a
 * 2.6s underline that redraws forever under the hero phrase. Both are
 * disabled under `prefers-reduced-motion: reduce` at the foot of this file.
 * Continuous motion longer than five seconds is a WCAG 2.2.2 problem, and the
 * marquee is the one element here that cannot be paused by the user.
 */

body.ascend-kw-template-active .ascend-landing-page {
	/* Grounds */
	--ascend-kw-white: #fff;
	--ascend-kw-soft: #f7f9fc;
	--ascend-kw-rule: #e5e7eb;
	--ascend-kw-rule-ink: rgb(255 255 255 / 14%);

	/* Ink band */
	--ascend-kw-ink: #1d1d20;
	--ascend-kw-ink-body: rgb(255 255 255 / 72%);
	--ascend-kw-ink-card-body: rgb(255 255 255 / 70%);

	/* Type colours */
	--ascend-kw-heading: #111827;
	--ascend-kw-body: #1e293b;
	--ascend-kw-muted: #4b5563;

	/* Brand. --blue is the display/control fill; --blue-text is the AA-safe
	   value for small copy and links on light grounds (5.68:1 on white);
	   --blue-light is the ink-band accent (5.99:1 on --ink); --blue-deep is
	   the closing band ground (white on it measures 5.68:1). */
	--ascend-kw-blue: #3498dc;
	--ascend-kw-blue-hover: #185881;
	--ascend-kw-blue-text: #1f6c9e;
	--ascend-kw-blue-light: #5aa0da;
	--ascend-kw-blue-deep: #1f6c9e;

	/* Metrics */
	--ascend-kw-container: 75rem;
	--ascend-kw-gutter: 2rem;
	--ascend-kw-section-y: 5rem;
	--ascend-kw-radius: 1rem;
	--ascend-kw-pill: 9999px;
	--ascend-kw-head-col: 20rem;

	font-family: Inter, system-ui, sans-serif;
	background: var(--ascend-kw-white);
	color: var(--ascend-kw-body);
	overflow-x: clip;
}

/* ---------------------------------------------------------------- shells */

body.ascend-kw-template-active .ascend-kw-section {
	background: var(--ascend-kw-white);
	margin-block: 0;
}

body.ascend-kw-template-active .ascend-kw-section--soft {
	background: var(--ascend-kw-soft);
	border-block-start: 1px solid var(--ascend-kw-rule);
}

body.ascend-kw-template-active .ascend-kw-section--ink {
	background: var(--ascend-kw-ink);
	color: #fff;
}

body.ascend-kw-template-active .ascend-kw-section--blue {
	background: var(--ascend-kw-blue-deep);
	color: #fff;
}

body.ascend-kw-template-active .ascend-kw-section-inner > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-section-inner:not(:has(> .wp-block-group__inner-container)) {
	max-width: var(--ascend-kw-container);
	margin-inline: auto;
	padding-block: var(--ascend-kw-section-y);
	padding-inline: var(--ascend-kw-gutter);
}

/* ------------------------------------------------------------ typography */

body.ascend-kw-template-active .ascend-landing-page h1,
body.ascend-kw-template-active .ascend-landing-page h2 {
	font-family: Montserrat, sans-serif;
	font-weight: 900;
	text-transform: uppercase;
	letter-spacing: -0.5px;
	line-height: 1.1;
	color: var(--ascend-kw-heading);
	margin-block: 0;
}

body.ascend-kw-template-active .ascend-landing-page h1 {
	font-size: clamp(2.5rem, 5.2vw, 4.25rem);
	line-height: 1.04;
}

body.ascend-kw-template-active .ascend-landing-page h2 {
	font-size: 2rem;
}

body.ascend-kw-template-active .ascend-landing-page h3 {
	font-family: Inter, system-ui, sans-serif;
	font-size: 1.0625rem;
	font-weight: 700;
	line-height: 1.35;
	color: var(--ascend-kw-heading);
	margin-block: 0;
}

/* Headings on the two dark grounds.
 *
 * The `.ascend-landing-page` step in this chain is load-bearing, not
 * decoration. Without it the selector scores (0,2,2) - exactly the same as
 * the generic `.ascend-landing-page h3` rule above - and the tie falls to
 * source order. The first build of this file put the override earlier in the
 * file and shipped the four ink cards' H3s at #111827 on #1d1d20: measured
 * 1.05:1, i.e. invisible. Carrying the ancestor class takes this to (0,3,2)
 * so it wins on specificity and cannot be undone by moving rules around.
 */
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink h1,
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink h2,
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink h3,
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--blue h2,
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--blue h3 {
	color: #fff;
}

body.ascend-kw-template-active .ascend-landing-page p {
	font-family: inherit;
	font-size: 1rem;
	line-height: 1.7;
	color: var(--ascend-kw-muted);
	margin-block: 0;
}

body.ascend-kw-template-active p.ascend-kw-eyebrow {
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	line-height: 1.2;
	/* See deviation (b) in the file header: the canvas uses the brand blue
	   here at 12px, which is 3.15:1 on white. */
	color: var(--ascend-kw-blue-text);
}

/* (0,4,2). The dark-ground `p` override below is (0,3,2) and would otherwise
   tie-break past this on source order and paint the eyebrow plain white,
   losing the blue accent - which is exactly what happened when the heading
   fix above was first applied. Component rules on a dark ground have to sit
   one level above the ground's own text colour, not level with it. */
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink p.ascend-kw-eyebrow {
	color: var(--ascend-kw-blue-light);
}

body.ascend-kw-template-active .ascend-kw-featured p.ascend-kw-eyebrow {
	color: var(--ascend-kw-muted);
}

body.ascend-kw-template-active p.ascend-kw-lede {
	font-size: 1.125rem;
	line-height: 1.7;
	color: var(--ascend-kw-body);
}

/* Same (0,3,2) hardening as the dark-ground headings above. */
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink p,
body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--ink p.ascend-kw-lede {
	color: var(--ascend-kw-ink-body);
}

body.ascend-kw-template-active .ascend-landing-page .ascend-kw-section--blue p {
	color: rgb(255 255 255 / 92%);
}

/* Links. Brand blue is 3.15:1 on white - body-size links use the AA-safe
   value instead. See deviation (b). */
body.ascend-kw-template-active .ascend-landing-page a:not(.wp-block-button__link) {
	color: var(--ascend-kw-blue-text);
	text-decoration: none;
	font-weight: 600;
}

body.ascend-kw-template-active .ascend-landing-page a:not(.wp-block-button__link):hover,
body.ascend-kw-template-active .ascend-landing-page a:not(.wp-block-button__link):focus-visible {
	text-decoration: underline;
}

body.ascend-kw-template-active .ascend-kw-section--ink a:not(.wp-block-button__link),
body.ascend-kw-template-active .ascend-kw-section--blue a:not(.wp-block-button__link) {
	color: #fff;
}

/* --------------------------------------------------------------- buttons */

body.ascend-kw-template-active .ascend-kw-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.875rem;
	margin-block: 0.25rem 0;
}

body.ascend-kw-template-active .ascend-kw-actions .wp-block-button__link {
	display: inline-block;
	background: var(--ascend-kw-blue-deep);
	color: #fff;
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1.2;
	padding: 1rem 2rem;
	border: 1px solid var(--ascend-kw-blue-deep);
	border-radius: var(--ascend-kw-pill);
	box-shadow: 0 4px 15px rgb(52 152 220 / 40%);
	transition: background-color 0.3s ease, transform 0.3s ease, border-color 0.3s ease;
}

body.ascend-kw-template-active .ascend-kw-actions .wp-block-button__link:hover,
body.ascend-kw-template-active .ascend-kw-actions .wp-block-button__link:focus-visible {
	background: var(--ascend-kw-blue-hover);
	border-color: var(--ascend-kw-blue-hover);
	color: #fff;
	text-decoration: none;
	transform: translateY(-2px);
}

body.ascend-kw-template-active .ascend-kw-actions .is-style-outline .wp-block-button__link {
	background: transparent;
	border-color: rgb(255 255 255 / 45%);
	box-shadow: none;
	color: #fff;
}

body.ascend-kw-template-active .ascend-kw-actions .is-style-outline .wp-block-button__link:hover,
body.ascend-kw-template-active .ascend-kw-actions .is-style-outline .wp-block-button__link:focus-visible {
	background: rgb(255 255 255 / 12%);
	border-color: #fff;
	color: #fff;
}

/* Closing band inverts: the solid control becomes white-on-ink. */
body.ascend-kw-template-active .ascend-kw-section--blue .ascend-kw-actions .wp-block-button__link {
	background: #fff;
	border-color: #fff;
	box-shadow: none;
	color: var(--ascend-kw-ink);
}

body.ascend-kw-template-active .ascend-kw-section--blue .ascend-kw-actions .wp-block-button__link:hover,
body.ascend-kw-template-active .ascend-kw-section--blue .ascend-kw-actions .wp-block-button__link:focus-visible {
	background: #fff;
	color: var(--ascend-kw-ink);
	transform: translateY(-2px);
}

/* ------------------------------------------------------------------ hero */

body.ascend-kw-template-active .ascend-kw-hero-grid > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-hero-grid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
	gap: 4rem;
	align-items: center;
}

body.ascend-kw-template-active .ascend-kw-hero-content > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-hero-content:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 1.625rem;
	min-width: 0;
}

body.ascend-kw-template-active .ascend-landing-page .ascend-kw-hero p.ascend-kw-hero-lede {
	font-size: 1.3125rem;
	line-height: 1.45;
	font-weight: 500;
	color: #fff;
	max-width: 40rem;
}

body.ascend-kw-template-active .ascend-landing-page .ascend-kw-hero p.ascend-kw-hero-body {
	font-size: 1.0625rem;
	line-height: 1.7;
	color: var(--ascend-kw-ink-body);
	max-width: 38.75rem;
}

/* The underlined phrase in the hero paragraph. The canvas animates a 2px rule
   scaling in from the left, forever. Kept, but see the reduced-motion block. */
body.ascend-kw-template-active .ascend-kw-underline {
	position: relative;
	display: inline-block;
	color: var(--ascend-kw-blue-light);
}

body.ascend-kw-template-active .ascend-kw-underline::after {
	content: "";
	position: absolute;
	inset-inline: 0;
	inset-block-end: -3px;
	block-size: 2px;
	background: var(--ascend-kw-blue-light);
	transform-origin: left center;
	animation: ascend-kw-underline-draw 2.6s ease-out infinite;
}

@keyframes ascend-kw-underline-draw {
	0% { transform: scaleX(0); }
	35% { transform: scaleX(1); }
	100% { transform: scaleX(1); }
}

body.ascend-kw-template-active .ascend-kw-hero-media img {
	inline-size: 100%;
	block-size: auto;
	display: block;
	border-radius: var(--ascend-kw-radius);
}

body.ascend-kw-template-active .ascend-kw-hero-media figure {
	margin-block: 0;
	margin-inline: 0;
}

/* --------------------------------------------------------- featured-in bar */

body.ascend-kw-template-active .ascend-kw-featured {
	background: var(--ascend-kw-soft);
	border-block-end: 1px solid var(--ascend-kw-rule);
	overflow: hidden;
}

body.ascend-kw-template-active .ascend-kw-featured > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-featured:not(:has(> .wp-block-group__inner-container)) {
	max-width: var(--ascend-kw-container);
	margin-inline: auto;
	padding-block: 2.25rem 2.125rem;
	padding-inline: var(--ascend-kw-gutter);
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
}

/* The press bar.
 *
 * DELIBERATE DEVIATION FROM THE CANVAS: this is a static row, not a marquee.
 * The canvas scrolled seven outlet NAMES on a 34s loop, which works because a
 * duplicated track of seven text items is always wider than the viewport. The
 * approved bar is now five LOGOS. A `translateX(-50%)` loop assumes the track
 * holds exactly two copies and that one copy is wider than the visible area;
 * five logos at a 28px cap are very unlikely to clear 1200px, so the loop
 * would expose a gap of empty ground on every pass. Five logos also simply fit
 * on one row, and a static bar removes the WCAG 2.2.2 continuous-motion
 * problem rather than mitigating it under `prefers-reduced-motion`.
 *
 * The marquee rules are kept below, unused, as the documented motion variant:
 * restore it by swapping the two class names in the page record and adding
 * back the duplicated, `aria-hidden` half of the track. They are deliberately
 * retained, not orphaned by neglect.
 *
 * Logo treatment: `grayscale(1)` only. Height is capped and width is `auto`,
 * so each official wordmark keeps its own aspect ratio and they all sit on one
 * optical baseline. No opacity reduction - these are meaningful graphics under
 * WCAG 1.4.11 (3:1), and how much contrast a wordmark has left after tinting
 * cannot be measured until the real assets exist.
 */

body.ascend-kw-template-active .ascend-kw-logobar {
	inline-size: 100%;
}

body.ascend-kw-template-active .ascend-kw-logobar-row > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-logobar-row:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1.5rem 3rem;
}

/* Text wordmarks. Shipped in place of logo images so the page could launch
   without waiting on media-kit assets; the `-logo` rule below is ready for
   the image swap whenever those arrive. */
body.ascend-kw-template-active .ascend-kw-logobar-name {
	font-family: Montserrat, sans-serif;
	font-weight: 700;
	font-size: 1.0625rem;
	letter-spacing: -0.2px;
	line-height: 1.2;
	color: var(--ascend-kw-muted);
	white-space: nowrap;
}

body.ascend-kw-template-active .ascend-kw-logobar-item img {
	block-size: 1.75rem;
	inline-size: auto;
	/* No width cap. block-size + object-fit: contain means any max-inline-size
	   below a mark's natural width letterboxes it -- the WSJ wordmark is 11.8:1
	   and was painting at half the height of the others inside an 11rem box.
	   Height alone sets the optical baseline; crowding is handled by gap + wrap. */
	max-inline-size: none;
	display: block;
	object-fit: contain;
	filter: grayscale(1);
}

/* ---- motion variant, currently unused (see the note above) ---- */

body.ascend-kw-template-active .ascend-kw-marquee {
	position: relative;
	margin-inline: calc(var(--ascend-kw-gutter) * -1);
	mask-image: linear-gradient(90deg, transparent 0, #000 6rem, #000 calc(100% - 6rem), transparent 100%);
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 6rem, #000 calc(100% - 6rem), transparent 100%);
	overflow: hidden;
}

body.ascend-kw-template-active .ascend-kw-marquee-track {
	display: flex;
	inline-size: max-content;
	align-items: center;
	animation: ascend-kw-marquee 34s linear infinite;
}

body.ascend-kw-template-active .ascend-kw-marquee-item {
	font-family: Montserrat, sans-serif;
	font-weight: 700;
	font-size: 1.1875rem;
	letter-spacing: -0.2px;
	line-height: 1.2;
	color: var(--ascend-kw-muted);
	white-space: nowrap;
	padding-inline: 2.75rem;
	border-inline-end: 1px solid var(--ascend-kw-rule);
}

@keyframes ascend-kw-marquee {
	from { transform: translateX(0); }
	to { transform: translateX(-50%); }
}

body.ascend-kw-template-active p.ascend-kw-featured-note {
	font-size: 0.9375rem;
	line-height: 1.65;
	color: var(--ascend-kw-muted);
	max-width: 40rem;
}

/* ------------------------------------------------- two-column split layout */

body.ascend-kw-template-active .ascend-kw-split > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-split:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, var(--ascend-kw-head-col)) minmax(0, 1fr);
	gap: 3.5rem;
	align-items: start;
}

body.ascend-kw-template-active .ascend-kw-split-head > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-split-head:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.875rem;
}

body.ascend-kw-template-active .ascend-kw-split-body > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-split-body:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 1.5rem;
	min-width: 0;
	max-width: 50rem;
}

/* ----------------------------------------------------------------- stats */

body.ascend-kw-template-active .ascend-kw-stats > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-stats:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
	border-block-start: 1px solid var(--ascend-kw-rule);
	margin-block-start: 0.5rem;
}

body.ascend-kw-template-active .ascend-kw-stat > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-stat:not(:has(> .wp-block-group__inner-container)) {
	padding-block: 1.5rem 0;
	padding-inline: 1.25rem;
}

/* First cell flush left, every other cell carries the divider. Written
   :first-child / :not(:first-child) rather than :nth-child so the rule keeps
   working if a fourth stat is ever added. */
body.ascend-kw-template-active .ascend-kw-stat:first-child > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-stat:first-child:not(:has(> .wp-block-group__inner-container)) {
	padding-inline-start: 0;
}

body.ascend-kw-template-active .ascend-kw-stat:not(:first-child) {
	border-inline-start: 1px solid var(--ascend-kw-rule);
}

body.ascend-kw-template-active p.ascend-kw-stat-figure {
	font-family: Montserrat, sans-serif;
	font-weight: 900;
	font-size: 2rem;
	line-height: 1.1;
	letter-spacing: -0.5px;
	color: var(--ascend-kw-heading);
}

body.ascend-kw-template-active p.ascend-kw-stat-label {
	font-size: 0.875rem;
	font-weight: 500;
	line-height: 1.45;
	color: var(--ascend-kw-muted);
	margin-block-start: 0.375rem;
}

/* ------------------------------------------------------------- card grids */

body.ascend-kw-template-active .ascend-kw-cards > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-cards:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 1.5rem;
}

body.ascend-kw-template-active .ascend-kw-card > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-card:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.625rem;
	block-size: 100%;
}

body.ascend-kw-template-active .ascend-kw-card {
	border: 1px solid var(--ascend-kw-rule-ink);
	border-radius: var(--ascend-kw-radius);
	padding: 1.75rem;
	transition: border-color 0.3s ease, transform 0.3s ease;
}

body.ascend-kw-template-active .ascend-kw-card:hover {
	border-color: var(--ascend-kw-blue-light);
	transform: translateY(-5px);
}

body.ascend-kw-template-active .ascend-kw-card p {
	font-size: 0.9375rem;
	line-height: 1.65;
	color: var(--ascend-kw-ink-card-body);
}

/* -------------------------------------------------------------- press row */

body.ascend-kw-template-active .ascend-kw-press-head > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-press-head:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-wrap: wrap;
	gap: 1rem 2rem;
	align-items: baseline;
	justify-content: space-between;
}

body.ascend-kw-template-active .ascend-kw-press-title > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-press-title:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.875rem;
}

body.ascend-kw-template-active .ascend-kw-press-cards > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-press-cards:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 1.5rem;
	margin-block-start: 2.25rem;
}

body.ascend-kw-template-active .ascend-kw-press-card {
	border: 1px solid var(--ascend-kw-rule);
	border-radius: var(--ascend-kw-radius);
	background: var(--ascend-kw-white);
	padding: 1.75rem;
	transition: border-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
	box-shadow: 0 4px 6px -1px rgb(0 0 0 / 2%);
}

body.ascend-kw-template-active .ascend-kw-press-card > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-press-card:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	block-size: 100%;
}

body.ascend-kw-template-active .ascend-kw-press-card:hover,
body.ascend-kw-template-active .ascend-kw-press-card:focus-within {
	border-color: var(--ascend-kw-blue-text);
	transform: translateY(-5px);
	box-shadow: 0 12px 20px -5px rgb(0 0 0 / 8%);
}

body.ascend-kw-template-active p.ascend-kw-press-source {
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	line-height: 1.2;
	color: var(--ascend-kw-muted);
}

body.ascend-kw-template-active .ascend-kw-press-card h3 {
	font-size: 1.125rem;
}

/* The whole card is clickable via its heading link, which keeps one real
   anchor per card for keyboard and screen-reader users rather than wrapping
   a div in an <a> and burying the accessible name. */
body.ascend-kw-template-active .ascend-kw-press-card h3 a {
	color: var(--ascend-kw-heading);
	font-weight: 700;
}

body.ascend-kw-template-active .ascend-kw-press-card h3 a::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: var(--ascend-kw-radius);
}

body.ascend-kw-template-active .ascend-kw-press-card {
	position: relative;
}

body.ascend-kw-template-active .ascend-kw-press-card p:not(.ascend-kw-press-source) {
	font-size: 0.9375rem;
	line-height: 1.6;
	color: var(--ascend-kw-muted);
}

/* --------------------------------------------------------- ways-in list */

body.ascend-kw-template-active .ascend-kw-ways > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-ways:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	min-width: 0;
	border-block-start: 1px solid var(--ascend-kw-rule);
}

body.ascend-kw-template-active .ascend-kw-way > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-way:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 1.5rem;
	align-items: center;
}

body.ascend-kw-template-active .ascend-kw-way {
	padding-block: 1.625rem;
	border-block-end: 1px solid var(--ascend-kw-rule);
}

body.ascend-kw-template-active .ascend-kw-way:last-child {
	border-block-end: 0;
}

body.ascend-kw-template-active .ascend-kw-way-copy > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-way-copy:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.375rem;
}

body.ascend-kw-template-active .ascend-kw-way h3 {
	font-size: 1.125rem;
}

body.ascend-kw-template-active .ascend-kw-way p {
	font-size: 1rem;
	line-height: 1.65;
}

body.ascend-kw-template-active p.ascend-kw-way-link {
	font-size: 0.9375rem;
	white-space: nowrap;
}

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

body.ascend-kw-template-active .ascend-kw-faq-grid > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-faq-grid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 2rem 2.5rem;
	min-width: 0;
}

body.ascend-kw-template-active .ascend-kw-faq-item > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-faq-item:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.625rem;
}

body.ascend-kw-template-active .ascend-kw-faq-item p {
	font-size: 1rem;
	line-height: 1.7;
}

/* ---------------------------------------------------------- closing band */

body.ascend-kw-template-active .ascend-kw-closing-grid > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-closing-grid:not(:has(> .wp-block-group__inner-container)) {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 2.5rem;
	align-items: center;
}

body.ascend-kw-template-active .ascend-kw-closing-copy > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-closing-copy:not(:has(> .wp-block-group__inner-container)) {
	display: flex;
	flex-direction: column;
	gap: 0.875rem;
}

body.ascend-kw-template-active .ascend-kw-closing h2 {
	font-size: 2.125rem;
}

body.ascend-kw-template-active .ascend-kw-closing p {
	font-size: 1.0625rem;
	line-height: 1.6;
	max-width: 35rem;
}

body.ascend-kw-template-active .ascend-kw-closing .ascend-kw-actions {
	justify-content: flex-end;
}

/* --------------------------------------------------------- tablet tier */

@media (max-width: 61.25rem) {

	/* The five marks total ~689px at the 28px cap; a 3rem gap pushes that past the
	   content box here, so the column gap tightens rather than the row wrapping. */
	body.ascend-kw-template-active .ascend-kw-logobar-row > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-logobar-row:not(:has(> .wp-block-group__inner-container)) {
		gap: 1.25rem 2rem;
	}
	body.ascend-kw-template-active .ascend-landing-page {
		--ascend-kw-section-y: 4rem;
	}

	body.ascend-kw-template-active .ascend-kw-hero-grid > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-hero-grid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-split > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-split:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-closing-grid > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-closing-grid:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: minmax(0, 1fr);
		gap: 2.5rem;
	}

	/* Photo above copy reads as a portrait caption; copy first keeps the H1
	   the first thing on the page at every width. */
	body.ascend-kw-template-active .ascend-kw-hero-media {
		order: 2;
		max-width: 26rem;
	}

	body.ascend-kw-template-active .ascend-kw-cards > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-cards:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-press-cards > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-press-cards:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	body.ascend-kw-template-active .ascend-kw-closing .ascend-kw-actions {
		justify-content: flex-start;
	}
}

/* ---------------------------------------------------------- phone tier */

@media (max-width: 37.5rem) {
	body.ascend-kw-template-active .ascend-landing-page {
		--ascend-kw-section-y: 3rem;
		--ascend-kw-gutter: 1.25rem;
	}

	body.ascend-kw-template-active .ascend-landing-page h2 {
		font-size: 1.625rem;
	}

	body.ascend-kw-template-active .ascend-kw-closing h2 {
		font-size: 1.75rem;
	}

	body.ascend-kw-template-active .ascend-kw-cards > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-cards:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-press-cards > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-press-cards:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-faq-grid > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-faq-grid:not(:has(> .wp-block-group__inner-container)),
	body.ascend-kw-template-active .ascend-kw-stats > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-stats:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: minmax(0, 1fr);
	}

	/* Stats stack: the vertical dividers become horizontal ones, and the
	   left padding that separated columns has to come off or every figure
	   sits 20px in from the copy above it. This is the failure the
	   hospitality trio hit - the desktop divider rule outranked the stacking
	   reset and left a stray hairline. Both properties are reset here. */
	body.ascend-kw-template-active .ascend-kw-stat:not(:first-child) {
		border-inline-start: 0;
		border-block-start: 1px solid var(--ascend-kw-rule);
	}

	body.ascend-kw-template-active .ascend-kw-stat > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-stat:not(:has(> .wp-block-group__inner-container)) {
		padding-inline: 0;
	}

	body.ascend-kw-template-active .ascend-kw-way > .wp-block-group__inner-container,
	body.ascend-kw-template-active .ascend-kw-way:not(:has(> .wp-block-group__inner-container)) {
		grid-template-columns: minmax(0, 1fr);
		gap: 0.75rem;
	}

	/* Logos shrink rather than wrap to five rows on a phone. Still no width cap,
	   for the same letterboxing reason as the base rule. */
	body.ascend-kw-template-active .ascend-kw-logobar-item img {
		block-size: 1.25rem;
		max-inline-size: none;
	}

	body.ascend-kw-template-active .ascend-kw-logobar-row > .wp-block-group__inner-container,
body.ascend-kw-template-active .ascend-kw-logobar-row:not(:has(> .wp-block-group__inner-container)) {
		gap: 1rem 1.5rem;
	}
}

/* ------------------------------------------------------- reduced motion */

/* Both animations here are infinite and neither has a pause control, which
   is a WCAG 2.2.2 problem for anyone who needs motion stilled. Under reduce,
   the marquee freezes showing the first names in the track and the hero
   underline renders as a plain static rule. */
@media (prefers-reduced-motion: reduce) {
	body.ascend-kw-template-active .ascend-kw-marquee-track,
	body.ascend-kw-template-active .ascend-kw-underline::after {
		animation: none;
	}

	body.ascend-kw-template-active .ascend-kw-underline::after {
		transform: scaleX(1);
	}

	body.ascend-kw-template-active .ascend-kw-card,
	body.ascend-kw-template-active .ascend-kw-press-card,
	body.ascend-kw-template-active .ascend-kw-actions .wp-block-button__link {
		transition: none;
	}

	body.ascend-kw-template-active .ascend-kw-card:hover,
	body.ascend-kw-template-active .ascend-kw-press-card:hover,
	body.ascend-kw-template-active .ascend-kw-actions .wp-block-button__link:hover {
		transform: none;
	}
}

/* Native Image blocks keep the supplied marks independently editable. */
body.ascend-kw-template-active .ascend-kw-logobar-item {
 margin: 0;
 flex: 0 0 auto;
}
