/*
 * blocks.css
 *
 * BTV block style variations registered via register_block_style() in
 * functions.php. WordPress generates the .is-style-* class on the block
 * when admins pick a style from the editor's "Styles" panel.
 *
 * Style registrations:
 *   - core/button → btv-cta-primary       (.is-style-btv-cta-primary)
 *   - core/button → btv-cta-primary-arrow (.is-style-btv-cta-primary-arrow)
 *   - core/button → btv-cta-secondary     (.is-style-btv-cta-secondary)
 *
 * @package BTV
 * @since   1.0.0
 */

/* === Shared CTA pill shape, typography, padding ====================
 * Font scales fluidly 15px → 17px between viewports 320px → 1217px
 * (matches the theme.json fluid formula). Line-height (unitless) and
 * letter-spacing (em) scale with the font automatically. Padding stays
 * fixed so the touch target doesn't shrink below ~44px on mobile.
 */
.is-style-btv-cta-primary .wp-block-button__link,
.is-style-btv-cta-primary-arrow .wp-block-button__link,
.is-style-btv-cta-secondary .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	gap: 1.4em;
	padding: 18px 30px;
	border-radius: 196px;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: clamp(15px, calc(14.287px + 0.223vw), 17px);
	line-height: 1.647;
	letter-spacing: 0.0588em;
	text-decoration: none;
	transition: transform 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
}

/* === Primary (navy, with optional arrow) =========================== */
.is-style-btv-cta-primary .wp-block-button__link,
.is-style-btv-cta-primary-arrow .wp-block-button__link {
	background-color: var(--wp--preset--color--nav-link);
	color: var(--wp--preset--color--base);
}

.is-style-btv-cta-primary .wp-block-button__link:hover,
.is-style-btv-cta-primary .wp-block-button__link:focus-visible,
.is-style-btv-cta-primary-arrow .wp-block-button__link:hover,
.is-style-btv-cta-primary-arrow .wp-block-button__link:focus-visible {
	background-color: var(--wp--preset--color--primary-dark);
}

/* Arrow icon — right-arrow SVG appended after the label.
 * Sized in em so it scales proportionally with the (fluid) font-size. */
.is-style-btv-cta-primary-arrow .wp-block-button__link::after {
	content: "";
	display: inline-block;
	width: 1.3em;
	height: 1.3em;
	background-image: url('../img/icon-arrow-right.svg');
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	flex: 0 0 auto;
}

/* === Secondary (Champlain Blue / accent) =========================== */
.is-style-btv-cta-secondary .wp-block-button__link {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--base);
}

.is-style-btv-cta-secondary .wp-block-button__link:hover,
.is-style-btv-cta-secondary .wp-block-button__link:focus-visible {
	background-color: var(--wp--preset--color--sky-blue);
}

/* === Compact CTA with Arrow =========================================
 * Smaller pill used inside section header bars ("View All" etc.).
 * 12px uppercase label + trailing arrow, navy bg.
 */
.is-style-btv-cta-compact-arrow .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	padding: 10px 20px;
	background-color: var(--wp--preset--color--nav-link);
	color: var(--wp--preset--color--base);
	border-radius: 999px;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 12px;
	line-height: 1.667;
	letter-spacing: 0.083em;
	text-transform: uppercase;
	text-decoration: none;
	transition: background-color 0.15s ease;
}

.is-style-btv-cta-compact-arrow .wp-block-button__link::after {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	background-image: url('../img/icon-arrow-right.svg');
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	flex: 0 0 auto;
}

.is-style-btv-cta-compact-arrow .wp-block-button__link:hover,
.is-style-btv-cta-compact-arrow .wp-block-button__link:focus-visible {
	background-color: var(--wp--preset--color--primary-dark);
}

/* === Home hero card ===============================================
 * Built on core/group (replaces core/cover) so admins get familiar
 * controls in the Background / Border / Spacing panels.
 *
 * The dark navy overlay (formerly core/cover's dimRatio) is rendered
 * here as a ::before pseudo-element so it sits on top of the bg image
 * but below the inner content (which is z-indexed above).
 *
 * Mobile / tablet (< 1024px):
 *   Height is content-driven with a fat bottom padding for breathing
 *   room over the background image. No aspect-ratio cap.
 *
 * Laptop / desktop (>= 1024px):
 *   Aspect-ratio 1103 / 675 kicks in. Height = width * 0.612 up to
 *   max-height 675px (the Figma target at width 1103).
 */
.btv-hero-card {
	position: relative;
	overflow: hidden;
	padding: 48px 32px 96px;
	min-height: 0;
}

.btv-hero-card::before {
	content: "";
	position: absolute;
	inset: 0;
	background-color: rgba(33, 43, 82, 0.5);
	border-radius: inherit;
	pointer-events: none;
	z-index: 1;
}

.btv-hero-card > * {
	position: relative;
	z-index: 2;
}

@media (min-width: 1024px) {
	.btv-hero-card {
		padding: 60px;
		aspect-ratio: 1217 / 675;
		max-height: 675px;
	}
}

/* === Page hero (interior pages) ====================================
 * Shorter variation of the home hero. Background photo with a
 * left-to-right navy gradient (navy solid on the left fading to
 * transparent on the right, per Figma) instead of the home hero's
 * flat overlay. A single headline is anchored to the lower-left.
 */
.wp-block-btv-page-hero.btv-page-hero {
	box-sizing: border-box;
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	padding: 40px 32px 40px;
	min-height: 220px;
}

.btv-page-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(
		to right,
		#212b52 0%,
		rgba(41, 139, 203, 0.39) 50%,
		rgba(112, 196, 232, 0) 100%
	);
	border-radius: inherit;
	pointer-events: none;
	z-index: 1;
}

.btv-page-hero > * {
	position: relative;
	z-index: 2;
}

.wp-block-heading.btv-page-hero__title {
	margin: 0;
	font-size: clamp(2rem, 1.1rem + 3.6vw, 3.75rem);
}

@media (min-width: 1024px) {
	.wp-block-btv-page-hero.btv-page-hero {
		aspect-ratio: 1217 / 390;
		max-height: 390px;
		padding: 60px 40px 100px;
	}
}

/* === Breadcrumb ====================================================
 * Ancestry trail rendered by the btv/breadcrumb block. Sits below an
 * interior-page hero on the white page background.
 */
/* Compound selector (0,2,0) beats core's `.is-layout-constrained > *`
 * (0,1,1) which zeroes child margins for blockGap. */
.wp-block-btv-breadcrumb.btv-breadcrumb {
	margin-top: 48px;
	margin-bottom: 40px;
}

.btv-breadcrumb__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
	margin: 0;
	padding: 0 28px;
	list-style: none;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.btv-breadcrumb__item {
	display: inline-flex;
	align-items: center;
	gap: 10px;
}

.btv-breadcrumb__link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: #1c509f;
	text-decoration: none;
}

.btv-breadcrumb__home-icon {
	display: inline-flex;
}

.btv-breadcrumb__home-icon svg {
	width: 16px;
	height: 16px;
}

.btv-breadcrumb__link:hover,
.btv-breadcrumb__link:focus-visible {
	text-decoration: underline;
}

.btv-breadcrumb__current {
	color: #212b52;
}

.btv-breadcrumb__sep {
	display: inline-flex;
	color: #70c4e8;
}

.btv-breadcrumb__sep svg {
	width: 14px;
	height: 14px;
}

/* === Statuses section ==============================================
 * Two-card grid that sits directly below the home hero. Cards are
 * powered by the btv/track-flights and btv/parking-status dynamic
 * blocks, so this layout file only handles container chrome.
 *
 * Width is left to theme.json's 1217px contentSize so the section
 * lines up with the hero, whose aspect-ratio was bumped to 1217/675
 * to fill the same content width.
 *
 * The block-gap (32px desktop / 24px mobile) matches the Figma spec
 * and is set on the inner core/columns block by the pattern.
 */
.btv-statuses__columns {
	margin-block: 0;
}

.btv-statuses__column {
	display: flex;
	flex-direction: column;
}

/* Match Track Flights / Parking Status card chrome so wp-block-column
 * doesn't force a different height when the two cards differ slightly.
 *
 * Note: .btv-track-flights intentionally does NOT use overflow:hidden,
 * so the autocomplete dropdown can escape the card boundary. The
 * airplane background is clipped by its own inner wrapper instead.
 */
.btv-track-flights,
.btv-parking-status {
	position: relative;
	box-sizing: border-box;
	background-color: rgba(255, 255, 255, 0.6);
	border: 0.877px solid rgba(125, 139, 148, 0.2);
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	padding: 40px;
	flex: 1;
	min-height: 406px;
	color: var(--wp--preset--color--military-blue);
	font-family: 'Outfit', sans-serif;
}

.btv-parking-status {
	overflow: hidden;
}

@media (max-width: 600px) {
	.btv-track-flights,
	.btv-parking-status {
		padding: 28px;
		min-height: 0;
	}
}

/* === Track Flights card =========================================== */
.btv-track-flights__bg-clip {
	position: absolute;
	inset: 0;
	overflow: hidden;
	border-radius: inherit;
	pointer-events: none;
}

.btv-track-flights__bg {
	position: absolute;
	top: -21px;
	right: -10px;
	width: 430px;
	height: 163px;
	background: url('../img/icon-airplane-bg.svg') no-repeat center / contain;
	opacity: 0.05;
	color: var(--wp--preset--color--military-blue);
}

.btv-track-flights__inner {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 32px;
	height: 100%;
	justify-content: center;
}

.btv-track-flights__heading {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: clamp(24px, calc(20.5px + 1.09vw), 30px);
	line-height: 1.2;
	letter-spacing: -0.025em;
	color: var(--wp--preset--color--military-blue);
}

.btv-track-flights__description {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 14px;
	line-height: 1.625;
	color: rgba(32, 43, 82, 0.7);
	letter-spacing: 0.025em;
}

.btv-track-flights__tabs {
	display: flex;
	gap: 4px;
	background-color: #e9e9eb;
	border-radius: 16px;
	padding: 4px;
	height: 52px;
}

.btv-track-flights__tab {
	flex: 1 1 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	border: 0;
	border-radius: 14px;
	cursor: pointer;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: rgba(32, 43, 82, 0.38);
	transition: background-color 0.15s ease, color 0.15s ease;
}

.btv-track-flights__tab.is-active {
	background-color: var(--wp--preset--color--secondary);
	color: #ffffff;
}

.btv-track-flights__tab:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

.btv-track-flights__field {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.btv-track-flights__label {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 10px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--nav-link);
	opacity: 0.6;
}

.btv-track-flights__input-wrap {
	position: relative;
	display: flex;
	align-items: center;
	background-color: #ffffff;
	border: 1.754px solid rgba(41, 139, 203, 0.1);
	border-radius: 16px;
	height: 60px;
	padding: 0 26px;
}

.btv-track-flights__input {
	flex: 1;
	border: 0;
	background: transparent;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 16px;
	line-height: 1.3;
	color: var(--wp--preset--color--military-blue);
	outline: none;
	padding: 0;
}

.btv-track-flights__input::placeholder {
	color: rgba(32, 43, 82, 0.3);
}

.btv-track-flights__chevron {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 28px;
	height: 28px;
	margin-left: 12px;
	padding: 4px;
	background: transparent;
	border: 0;
	border-radius: 50%;
	color: var(--wp--preset--color--nav-link);
	cursor: pointer;
	transition: background-color 0.15s ease;
}

.btv-track-flights__chevron:hover,
.btv-track-flights__chevron:focus-visible {
	background-color: rgba(28, 80, 159, 0.08);
	outline: none;
}

.btv-track-flights__chevron svg {
	width: 20px;
	height: 20px;
}

/* Autocomplete suggestions dropdown ---------------------------------
 * The list is positioned absolutely beneath the input wrapper so it
 * floats over surrounding content. We rely on the parent .field being
 * `position: relative` (handled below) to anchor it.
 */
.btv-track-flights__field {
	position: relative;
}

.btv-track-flights__suggestions {
	list-style: none;
	margin: 8px 0 0;
	padding: 6px;
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	z-index: 10;
	background: #ffffff;
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: 16px;
	box-shadow: 0 12px 28px rgba(33, 43, 82, 0.12);
	max-height: 320px;
	overflow-y: auto;

	/* Slim scrollbar — Firefox + WebKit. */
	scrollbar-width: thin;
	scrollbar-color: rgba(32, 43, 82, 0.25) transparent;
}

.btv-track-flights__suggestions::-webkit-scrollbar {
	width: 6px;
}

.btv-track-flights__suggestions::-webkit-scrollbar-track {
	background: transparent;
	margin: 6px 0;
}

.btv-track-flights__suggestions::-webkit-scrollbar-thumb {
	background-color: rgba(32, 43, 82, 0.25);
	border-radius: 999px;
}

.btv-track-flights__suggestions::-webkit-scrollbar-thumb:hover {
	background-color: rgba(32, 43, 82, 0.45);
}

.btv-track-flights__suggestions[hidden] {
	display: none;
}

.btv-track-flights__suggestion {
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: 12px;
	padding: 10px 14px;
	border-radius: 10px;
	cursor: pointer;
	transition: background-color 0.12s ease;
	/* Reset the aggressive global letter-spacing from theme.json so the
	 * meta line reads cleanly at small sizes. */
	letter-spacing: 0;
}

.btv-track-flights__suggestion:hover,
.btv-track-flights__suggestion[aria-selected="true"] {
	background-color: rgba(28, 80, 159, 0.08);
}

.btv-track-flights__suggestion-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	flex: 0 0 32px;
	border-radius: 50%;
}

.btv-track-flights__suggestion-icon svg {
	width: 18px;
	height: 18px;
	display: block;
}

.btv-track-flights__suggestion-icon.is-arrival {
	color: var(--wp--preset--color--secondary);
	background-color: rgba(82, 158, 54, 0.12);
}

.btv-track-flights__suggestion-icon.is-departure {
	color: var(--wp--preset--color--nav-link);
	background-color: rgba(28, 80, 159, 0.10);
}

.btv-track-flights__suggestion-body {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.btv-track-flights__suggestion-headline {
	display: inline-flex;
	align-items: baseline;
	gap: 8px;
	flex-wrap: wrap;
}

.btv-track-flights__suggestion-flight {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 15px;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: 0.02em;
}

.btv-track-flights__suggestion-airline {
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 13px;
	color: rgba(32, 43, 82, 0.7);
	letter-spacing: 0.02em;
}

.btv-track-flights__suggestion-meta {
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 12px;
	color: rgba(32, 43, 82, 0.65);
	letter-spacing: 0.03em;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.btv-track-flights__suggestion-meta strong {
	font-weight: 700;
	color: var(--wp--preset--color--military-blue);
}

.btv-track-flights__suggestion-aside {
	display: inline-flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 4px;
	flex: 0 0 auto;
}

.btv-track-flights__suggestion-time {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 12px;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: 0.02em;
	white-space: nowrap;
}

/* Status pill — mirrors .btv-flight-board__status colors so the home
 * autocomplete and the Arrivals & Departures board read identically. */
.btv-track-flights__suggestion-status {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding: 2px 8px;
	border-radius: 999px;
	font-family: 'Outfit', sans-serif;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	white-space: nowrap;
}

.btv-track-flights__suggestion-status svg {
	width: 11px;
	height: 11px;
}

.btv-track-flights__suggestion-status--on-time   { background-color: #e2f3e0; color: #2f7d22; }
.btv-track-flights__suggestion-status--departed  { background-color: #d8e7f8; color: #0a5aa0; }
.btv-track-flights__suggestion-status--early     { background-color: #dceaf9; color: #1565a8; }
.btv-track-flights__suggestion-status--late      { background-color: #fcefcf; color: #9a6a05; }
.btv-track-flights__suggestion-status--cancelled { background-color: #fbdedf; color: #b3242c; }
.btv-track-flights__suggestion-status--neutral   { background-color: #e7eaef; color: rgba(32, 43, 82, 0.6); }

/* === Parking Garage Status card =================================== */
.btv-parking-status {
	display: flex;
	flex-direction: column;
	gap: 24px;
	justify-content: center;
}

.btv-parking-status__heading {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: clamp(24px, calc(20.5px + 1.09vw), 30px);
	line-height: 1.2;
	letter-spacing: -0.025em;
	color: var(--wp--preset--color--military-blue);
}

.btv-parking-status__gauge {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.btv-parking-status__readout {
	display: flex;
	align-items: baseline;
	gap: 16px;
}

.btv-parking-status__percentage {
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: clamp(44px, calc(34.59px + 2.94vw), 60px);
	line-height: 1;
	letter-spacing: -0.025em;
	color: var(--wp--preset--color--nav-link);
}

.btv-parking-status__status {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 20px;
	line-height: 1.4;
	color: var(--wp--preset--color--military-blue);
	opacity: 0.6;
}

.btv-parking-status__bar {
	position: relative;
	width: 100%;
	height: 12px;
	background-color: rgba(32, 43, 82, 0.1);
	border-radius: 999px;
	overflow: hidden;
}

.btv-parking-status__bar-fill {
	height: 100%;
	border-radius: 999px;
	background: linear-gradient(90deg, #70c4e8 0%, var(--wp--preset--color--military-blue) 100%);
	transition: width 0.4s ease;
}

.btv-parking-status__scale {
	display: flex;
	justify-content: space-between;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--wp--preset--color--military-blue);
	opacity: 0.4;
}

.btv-parking-status__description {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 14px;
	line-height: 1.625;
	color: rgba(32, 43, 82, 0.7);
	letter-spacing: 0.025em;
}

.btv-parking-status__link {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	align-self: flex-start;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	line-height: 1.42;
	color: var(--wp--preset--color--secondary);
	text-decoration: none;
	letter-spacing: 0.04em;
}

.btv-parking-status__link:hover,
.btv-parking-status__link:focus-visible {
	color: var(--wp--preset--color--secondary-dark);
	text-decoration: none;
}

.btv-parking-status__link-icon,
.btv-parking-status__link-arrow {
	display: inline-flex;
	width: 18px;
	height: 18px;
	flex: 0 0 auto;
}

.btv-parking-status__link-icon svg,
.btv-parking-status__link-arrow svg {
	width: 100%;
	height: 100%;
}

/* === Global tokens ==================================================
 * Centralized spacing/visual tokens used across BTV section components.
 * Adjust here once and the entire page rhythm updates.
 *
 *   --btv-section-gap   Top margin applied between full sections.
 *   --btv-text-halo     Multi-layer white halo applied to text that
 *                       sits over busy/decorative backgrounds, so the
 *                       copy stays legible without losing the artwork.
 */
:root {
	--btv-section-gap: clamp(40px, calc(25.73px + 4.46vw), 80px);
	--btv-text-halo:
		0 0 12px #ffffff,
		0 0 8px #ffffff,
		0 0 4px #ffffff;
}

/* Standard top-margin between major sections.
 *
 * `.btv-section` is the CLIENT-FACING class: when an editor adds a
 * core/group block and types `btv-section` in the Advanced ->
 * Additional CSS class field (or inserts the "BTV - Section"
 * pattern), the group gets the same rhythm as the built-in
 * project sections — no theme code edit needed for new pages.
 *
 * The legacy section classes (`.btv-statuses`, `.btv-split`,
 * `.btv-news`, `.btv-insta`) keep their own entry in the selector
 * list for backward compatibility with content already authored
 * against them — new sections should use `.btv-section`.
 *
 * Selectors combine `.wp-block-group` so they beat WP core's
 * `:where(.is-layout-constrained) > *` (0,1,1) zero-margin reset.
 */
.wp-block-group.btv-section,
.wp-block-group.btv-statuses,
.wp-block-group.btv-split,
.wp-block-group.btv-news,
.wp-block-group.btv-insta {
	margin-top: var(--btv-section-gap);
}

/* === Reusable utilities =============================================
 * .btv-eyebrow         — small green tag-line used above section headings
 * .btv-arrow-link      — inline underlined link with a trailing chevron
 * Both are also consumed by the Image+Content Split section below.
 */
.btv-eyebrow {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 16px;
	line-height: 1.5;
	color: var(--wp--preset--color--secondary);
	letter-spacing: 0.065em;
	opacity: 0.85;
}

/* === Image + Content Split section ==================================
 * Two-column white card with image left, content right. Built on
 * core/columns inside a .btv-split group wrapper. Decorative contrail
 * SVG sits behind the content via ::after so it doesn't disrupt layout.
 *
 * The wrapper enforces the 30px rounded outer card, the inner image
 * uses a 40px radius (per Figma). Content column is padded so the
 * decoration breathes against the card edge.
 */
.btv-split {
	position: relative;
	background: var(--wp--preset--color--base);
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: 30px;
	overflow: hidden;
}

.btv-split::after {
	content: "";
	position: absolute;
	inset: 0;
	background: url('../img/icon-split-bg.svg') no-repeat center / 100% 100%;
	pointer-events: none;
	z-index: 0;
}

.btv-split > * {
	position: relative;
	z-index: 1;
}

.btv-split__cols {
	margin-block: 0 !important;
	align-items: stretch;
	gap: 0 !important;
}

.btv-split__media-col,
.btv-split__content-col {
	padding: 0;
}

.btv-split__media-col {
	padding: 32px;
}

.btv-split__media {
	margin: 0;
	height: 100%;
}

.btv-split__media img {
	width: 100%;
	height: 100%;
	min-height: 460px;
	object-fit: cover;
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	display: block;
}

.btv-split__content-col {
	display: flex;
	align-items: center;
	padding: 56px 64px 56px 24px;
}

.btv-split__content {
	max-width: 502px;
}

/* Apply a white halo to every text element that sits over the
 * decorative SVG so the copy stays legible against the curves. */
.btv-split .btv-eyebrow,
.btv-split__heading,
.btv-split__copy,
.btv-split__inline-link a {
	text-shadow: var(--btv-text-halo);
}

.wp-block-heading.btv-split__heading {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-size: clamp(30px, calc(22.4px + 2.37vw), 44px);
	font-weight: 900;
	line-height: 1.09;
	letter-spacing: 1px;
	color: var(--wp--preset--color--nav-link);
}

.btv-split__copy {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-size: 16px;
	font-weight: 400;
	line-height: 1.5125;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--military-blue);
}

.btv-split__inline-link {
	margin: 0;
}

.btv-split__inline-link a {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	font-family: 'Outfit', sans-serif;
	font-size: 16px;
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-split__inline-link a:hover,
.btv-split__inline-link a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
}

.btv-split__inline-link a::after {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	background-image: url('../img/icon-chevron-right.svg');
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	flex: 0 0 auto;
}

@media (max-width: 900px) {
	.btv-split__cols {
		flex-wrap: wrap !important;
	}

	.btv-split__media-col,
	.btv-split__content-col {
		flex-basis: 100% !important;
		width: 100% !important;
	}

	.btv-split__media-col {
		padding: 16px;
	}

	.btv-split__media img {
		min-height: 0;
		aspect-ratio: 16 / 10;
	}

	.btv-split__content-col {
		padding: 32px 24px 40px;
	}
}

/* === News & Media section ===========================================
 * Outer .btv-news is a white card matching the page section chrome.
 * Inside: a gradient pill header (eyebrow + heading + compact CTA) and
 * a 3-column grid of news cards.
 *
 * Each card stacks an image with an "AIRPORT NEWS" badge overlay, a
 * title, an excerpt, and a footer row (Read More link + arrow button).
 * The badge is absolutely positioned over the media via the .__media
 * group acting as the positioning context.
 */
.btv-news {
	background: var(--wp--preset--color--base);
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: 30px;
	padding: 40px;
}

.wp-block-group.btv-news > * + * {
	margin-top: 34px;
}

/* Gradient pill header */
.btv-news__header {
	background: linear-gradient(90deg, #ffffff 0%, rgba(112, 196, 232, 0.7) 100%);
	border-radius: 50px;
	padding: 12px 24px 12px 32px;
	min-height: 84px;
	gap: 24px;
}

.btv-news__header-text {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.wp-block-heading.btv-news__heading {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 24px;
	line-height: 1.45;
	letter-spacing: 0.075em;
	color: var(--wp--preset--color--nav-link);
	text-transform: uppercase;
}

/* Card grid — supports both layouts:
 *   1. Static pattern using core/columns (.wp-block-column children)
 *   2. Dynamic query loop using core/post-template (li children)
 */
.btv-news__grid {
	margin-block: 0 !important;
}

.btv-news__grid > .wp-block-column {
	display: flex;
}

/* Query loop variant — the post-template renders as <ul> with grid layout. */
.btv-news__grid.wp-block-query .wp-block-post-template {
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 35px;
	list-style: none;
}

@media (max-width: 1080px) {
	.btv-news__grid.wp-block-query .wp-block-post-template {
		grid-template-columns: repeat(2, 1fr);
		gap: 28px;
	}
}

@media (max-width: 640px) {
	.btv-news__grid.wp-block-query .wp-block-post-template {
		grid-template-columns: 1fr;
		gap: 24px;
	}
}

.btv-news__grid.wp-block-query .wp-block-post-template > li {
	list-style: none;
	margin: 0;
	display: flex;
}

/* Post-template's featured image block renders as figure with its own class. */
.btv-news__media .wp-block-post-featured-image,
.btv-news__media .wp-block-image {
	margin: 0;
	width: 100%;
	height: 100%;
}

.btv-news__media .wp-block-post-featured-image img,
.btv-news__media .wp-block-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	border-radius: 0;
}

/* Post-title block honors the wrapping class; ensure same hover affordance. */
.btv-news__card-title a {
	color: inherit;
	text-decoration: none;
}

.btv-news__card-title a:hover,
.btv-news__card-title a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
}

/* core/read-more block — use the same look as the static .btv-news__readmore. */
.btv-news__footer .wp-block-read-more {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	line-height: 1.43;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-news__footer .wp-block-read-more:hover {
	color: var(--wp--preset--color--primary-dark);
}

.btv-news__card {
	display: flex;
	flex-direction: column;
	background: rgba(255, 255, 255, 0.7);
	border: 0.877px solid rgba(125, 139, 148, 0.2);
	border-radius: 12px;
	overflow: hidden;
	flex: 1;
}

.btv-news__media {
	position: relative;
	overflow: hidden;
	aspect-ratio: 376 / 288;
	margin: 0;
}

.btv-news__media .btv-news__image {
	margin: 0;
	width: 100%;
	height: 100%;
}

.btv-news__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	border-radius: 0;
}

.btv-news__badge {
	position: absolute;
	top: 24px;
	left: 24px;
	margin: 0;
	background: rgba(255, 255, 255, 0.9);
	border-radius: 14px;
	padding: 8px 16px;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 10px;
	line-height: 1.5;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--nav-link);
	box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.1);
}

.btv-news__body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: 24px 40px;
}

.wp-block-heading.btv-news__card-title {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 800;
	font-size: 18px;
	line-height: 1.375;
	letter-spacing: 0.01em;
	color: var(--wp--preset--color--nav-link);
	text-transform: capitalize;
}

.btv-news__excerpt {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 18px;
	line-height: 1.375;
	letter-spacing: 0.01em;
	color: var(--wp--preset--color--military-blue);
	opacity: 0.9;
}

.btv-news__footer {
	margin-top: auto;
	padding-top: 16px;
	gap: 16px;
}

.btv-news__readmore {
	margin: 0;
}

.btv-news__readmore a {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	line-height: 1.43;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-news__readmore a:hover {
	color: var(--wp--preset--color--primary-dark);
}

.btv-news__readmore-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: 0.877px solid rgba(32, 43, 82, 0.1);
	color: var(--wp--preset--color--military-blue);
	background: transparent;
	transition: background-color 0.15s ease, border-color 0.15s ease;
	flex: 0 0 auto;
}

.btv-news__readmore-icon:hover,
.btv-news__readmore-icon:focus-visible {
	background-color: var(--wp--preset--color--nav-link);
	color: var(--wp--preset--color--base);
	border-color: var(--wp--preset--color--nav-link);
}

.btv-news__readmore-icon svg {
	width: 18px;
	height: 18px;
}

@media (max-width: 900px) {
	.btv-news {
		padding: 24px;
	}

	.btv-news__header {
		flex-wrap: wrap !important;
		padding: 16px 20px;
		min-height: 0;
	}

	.btv-news__grid {
		flex-wrap: wrap !important;
	}

	.btv-news__grid > .wp-block-column {
		flex-basis: 100% !important;
	}

	.btv-news__body {
		padding: 20px 24px;
	}
}

/* === Instagram feed section =========================================
 * White card with rounded corners, sutil shadow + border, decorative
 * BTV-blue contrail curves at the top AND bottom of the card, centered
 * heading + handle, 3×2 image grid with 24px rounded tiles.
 *
 * Ships with 6 static placeholder images. To switch to a dynamic feed,
 * replace the .btv-insta__grid contents with a single
 *   <wp:shortcode>[instagram-feed]<!-- /wp:shortcode -->
 * after configuring Smash Balloon (Admin → Instagram Feed).
 */
/* Higher specificity (0,2,0) so the WP core rule that zeroes horizontal
 * padding on nested .has-global-padding groups doesn't override us. */
.wp-block-group.btv-insta {
	position: relative;
	background: var(--wp--preset--color--base);
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: 24px;
	box-shadow: 0 10px 42px rgba(32, 43, 82, 0.07);
	padding: 56px clamp(24px, 6vw, 84px) 64px;
	overflow: hidden;
}

/* Decorative curves — top + bottom mirrored, same SVG used in .btv-split. */
.btv-insta::before,
.btv-insta::after {
	content: "";
	position: absolute;
	left: -30%;
	right: -30%;
	height: 38%;
	background: url('../img/icon-split-bg.svg') no-repeat center / 100% 100%;
	pointer-events: none;
	z-index: 0;
}

.btv-insta::before {
	top: 6%;
}

.btv-insta::after {
	bottom: 1.5%;
	transform: scaleY(-1);
}

.btv-insta > * {
	position: relative;
	z-index: 1;
}

/* Chain `.wp-block-group` (0,2,0) to beat WP's
 * `:where(.is-layout-constrained) > * { margin-block: 0 }` (0,1,1)
 * which otherwise zeroes any margin we set on this child. */
.wp-block-group.btv-insta__header {
	margin-bottom: clamp(40px, 2rem + 1vw, 64px);
}

.wp-block-heading.btv-insta__heading {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: 30px;
	line-height: 1.07;
	letter-spacing: 0.01em;
	color: var(--wp--preset--color--nav-link);
}

.btv-insta__handle {
	margin: 4px 0 0;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: 20px;
	line-height: 1.6;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--nav-link);
}

.btv-insta__handle a {
	color: inherit;
	text-decoration: none;
}

.btv-insta__handle a:hover,
.btv-insta__handle a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* Grid */
.btv-insta__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 26px;
}

.btv-insta__tile {
	margin: 0;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: 24px;
}

.btv-insta__tile a,
.btv-insta__tile img {
	display: block;
	width: 100%;
	height: 100%;
	border-radius: 24px;
}

.btv-insta__tile img {
	object-fit: cover;
	transition: transform 0.35s ease;
}

.btv-insta__tile a:hover img,
.btv-insta__tile a:focus-visible img {
	transform: scale(1.04);
}

/* === Elfsight Instagram Feed embed ===================================
 * The live widget renders inside `.elfsight-app-{id}` after the
 * platform.js loader executes. Elfsight's own CSS uses the
 * `eapps-instagram-feed-*` prefix, but minor class names drift
 * between versions — we mix exact selectors with `[class*="…"]`
 * substring matches and use !important throughout to defeat the
 * inline styles the widget injects.
 *
 * Goal: restore the previous design's look — 24px-radius tiles
 * with a 26px gap between them, and a brand-styled "Load More"
 * button matching the .is-style-btv-cta-primary pill.
 */
.btv-insta__embed {
	width: 100%;
}

.btv-insta__embed > [class^="elfsight-app-"] {
	width: 100%;
}

/* --- Grid gap + tile width ----------------------------------------------
 * Elfsight lays out posts via display:flex; flex-wrap:wrap on
 * `.eapps-instagram-feed-posts-view`. Each tile gets an inline
 * `width: calc(33.3333% + 0px)` so the row fills exactly with no gap.
 *
 * Use EXACT class names (not substring `[class*="-posts-item"]`)
 * because that pattern also matches `.eapps-instagram-feed-posts-
 * item-image` (the img) and collapses it to the tile-width calc.
 * The wrapper stays square via Elfsight's own padding-top:100% trick
 * — we don't touch the internal chain.
 *
 * The `margin-bottom` on the view gives the last row room to breathe
 * before the card's bottom padding kicks in. Without it the bottom
 * row sits flush against the card edge. */
.btv-insta__embed .eapps-instagram-feed-posts-view {
	gap: 26px !important;
	margin-bottom: 16px;
}

.btv-insta__embed .eapps-instagram-feed-posts-item {
	width: calc((100% - 52px) / 3) !important;
	flex: 0 0 auto !important;
}

/* Mobile: drop to 2 columns with a tighter gap so each tile is
 * actually big enough to read. The single-column option would force
 * a 6-tile vertical scroll which is too long for a teaser feed. */
@media (max-width: 900px) {
	/* 2 columns on mobile with a tighter 16px gap. Set row-gap and
	 * column-gap individually too — some Elfsight builds inline
	 * `row-gap: 0` on the view which beats the `gap` shorthand.
	 * margin-bottom is inherited from the base rule above. */
	.btv-insta__embed .eapps-instagram-feed-posts-view {
		gap: 16px !important;
		row-gap: 16px !important;
		column-gap: 16px !important;
	}
	.btv-insta__embed .eapps-instagram-feed-posts-item {
		width: calc((100% - 16px) / 2) !important;
	}
}

/* Hide Elfsight's built-in "Follow us on Instagram" title — our
 * `.btv-insta__heading` already renders the heading + @handle above
 * the embed, so the widget's title is redundant. */
.btv-insta__embed [class*="-title-container"],
.btv-insta__embed [class*="-header-container"] {
	display: none !important;
}

/* --- Tile radius — apply to the tile and the image, NOT to the inner
 * -image class (it would match -image-icon spans as well).
 *
 * Fluid clamp so the radius shrinks proportionally on small phones
 * (where tiles are themselves smaller) — keeps the curvature in
 * scale with the tile. 12px @ 360 viewport → 24px @ 1600+. */
.btv-insta__embed .eapps-instagram-feed-posts-item,
.btv-insta__embed .eapps-instagram-feed-posts-item-image-wrapper {
	border-radius: clamp(12px, 0.5rem + 1vw, 24px) !important;
	overflow: hidden !important;
}

.btv-insta__embed .eapps-instagram-feed-posts-item-image {
	border-radius: clamp(12px, 0.5rem + 1vw, 24px) !important;
}

/* --- "Load More" hidden visually, NOT removed from DOM.
 *
 * Why not `display: none`? Elfsight caps initial post count by
 * viewport (e.g. only 2 tiles on iPhone-SE-sized screens) — the
 * remaining tiles only render when the user clicks Load More.
 * If we hide the button via `display: none`, the click handler
 * still works programmatically but the user can't see anything
 * past tile #2 because the inline JS in the embed auto-clicks the
 * button to reveal everything upfront.
 *
 * Position the container absolutely + opacity 0 so it disappears
 * visually and takes no layout space, but `.click()` from the
 * loader script still fires the handler. */
.btv-insta__embed [class*="load-more-container"],
.btv-insta__embed [class*="show-more-container"],
.btv-insta__embed [class*="load-more-wrapper"],
.btv-insta__embed [class*="show-more-wrapper"] {
	position: absolute !important;
	left: -9999px !important;
	top: 0 !important;
	width: 1px !important;
	height: 1px !important;
	margin: 0 !important;
	padding: 0 !important;
	opacity: 0 !important;
	pointer-events: none !important;
	overflow: hidden !important;
}

@media (max-width: 900px) {
	.btv-insta {
		padding: 32px 20px 40px;
	}
	.wp-block-heading.btv-insta__heading {
		font-size: 24px;
	}
}

/* === News article single template ===================================
 * Article page at /news/{slug}. The template renders a left-aligned
 * 760px column with the title + the post-content underneath. Imported
 * post_content starts with a green uppercase subtitle paragraph, then
 * the featured image (rounded), then body paragraphs.
 */
.wp-block-heading.btv-news-article__title {
	margin: 0 0 8px;
	font-family: 'Outfit', sans-serif;
	font-weight: 900;
	font-size: clamp(32px, calc(22.4px + 3vw), 44px);
	line-height: 1.09;
	letter-spacing: 0.01em;
	color: var(--wp--preset--color--nav-link);
	text-transform: capitalize;
}

/* Subtitle / lead — green uppercase tagline immediately under the title.
 * Author marks the paragraph with `btv-news-article__subtitle` in the
 * editor (the import script sets this automatically). Values pulled
 * 1:1 from the Figma "Subtitle" subhead spec.
 *
 * Selector scoped under `.btv-news-article` so it beats the more
 * specific `.btv-news-article p` body-paragraph rule below (which
 * would otherwise reset font/size/color).
 */
.btv-news-article p.btv-news-article__subtitle {
	margin: 0 0 32px;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 24px;
	line-height: 1.45;
	letter-spacing: 1.7088px;
	color: #4a8b2c;
	text-transform: uppercase;
}

/* Featured/inline images in the article body get the rounded Figma corner.
 * Scoped to news articles to not affect global image styles. */
.btv-news-article .wp-block-image {
	margin: 0 0 32px;
}

.btv-news-article .wp-block-image img {
	border-radius: 30px;
	width: 100%;
	height: auto;
	display: block;
}

/* Body typography */
.btv-news-article p {
	font-family: 'Outfit', sans-serif;
	font-weight: 400;
	font-size: 16px;
	line-height: 1.55;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--military-blue);
	margin: 0 0 20px;
}

.btv-news-article a {
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-news-article a:hover,
.btv-news-article a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
}

/* Subheaders inside the body (h3 by default for "Subheader 1", "Subheader 2"). */
.btv-news-article h2,
.btv-news-article h3,
.btv-news-article h4 {
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	color: var(--wp--preset--color--military-blue);
	margin: 32px 0 16px;
	letter-spacing: 0.01em;
}

.btv-news-article h2 { font-size: 24px; }
.btv-news-article h3 { font-size: 18px; }
.btv-news-article h4 { font-size: 16px; text-transform: uppercase; letter-spacing: 0.08em; }

/* Pullquote / blockquote with green left border (per Figma). */
.btv-news-article blockquote,
.btv-news-article .wp-block-quote {
	margin: 24px 0;
	padding: 4px 0 4px 20px;
	border-left: 3px solid var(--wp--preset--color--secondary);
	background: transparent;
}

.btv-news-article blockquote p,
.btv-news-article .wp-block-quote p {
	margin-bottom: 12px;
}

/* Lists inherit body typography but indented. */
.btv-news-article ul,
.btv-news-article ol {
	padding-left: 24px;
	margin: 0 0 20px;
}

.btv-news-article li {
	font-family: 'Outfit', sans-serif;
	font-weight: 400;
	font-size: 16px;
	line-height: 1.7;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: 0.04em;
}

/* === Reading section (narrow editorial column) =====================
 * Comfortable reading column (e.g. the Amenities intro), mirroring the
 * news-article typography. The 760px max-width comes from the block's
 * constrained layout; this file handles type + image styling.
 */
.btv-reading {
	margin-top: 8px;
}

.btv-reading p {
	font-family: 'Outfit', sans-serif;
	font-weight: 400;
	font-size: 16px;
	line-height: 1.7;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--military-blue);
	margin: 0 0 24px;
}

.btv-reading .wp-block-image {
	margin: 8px 0 28px;
}

.btv-reading .wp-block-image img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: 30px;
}

.btv-reading a {
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-reading a:hover,
.btv-reading a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
}

/* === Amenities grid ===============================================
 * Centered section heading over a 3-column card grid. Each card is a
 * white panel with a rounded top image and padded copy. Mirrors the
 * Figma "Amenities" section.
 */
.wp-block-heading.btv-amenities-title {
	margin: 56px 0 36px;
	text-align: center;
	font-size: clamp(26px, 1.3rem + 1.1vw, 32px);
	font-weight: 800;
	line-height: 1.2;
	letter-spacing: normal;
	color: var(--wp--preset--color--military-blue);
}

.wp-block-group.btv-amenities-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 40px;
	margin-top: 0;
}

.wp-block-group.btv-amenity-card {
	display: flex;
	flex-direction: column;
	background-color: #ffffff;
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: 12px;
	overflow: hidden;
}

.btv-amenity-card__image {
	margin: 0;
}

.btv-amenity-card__image img {
	display: block;
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
}

.wp-block-group.btv-amenity-card__body {
	padding: 28px 32px 32px;
}

.wp-block-heading.btv-amenity-card__title {
	margin: 0 0 14px;
	font-size: 20px;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: normal;
	color: var(--wp--preset--color--military-blue);
}

.btv-amenity-card__text {
	margin: 0;
	font-family: 'Outfit', sans-serif;
	font-size: 16px;
	line-height: 1.55;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--military-blue);
}

.btv-amenity-card__text a {
	color: #298bcb;
	font-weight: 700;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.btv-amenity-card__text a:hover,
.btv-amenity-card__text a:focus-visible {
	color: var(--wp--preset--color--primary);
}

@media (max-width: 1080px) {
	.wp-block-group.btv-amenities-grid {
		grid-template-columns: repeat(2, 1fr);
		gap: 32px;
	}
}

@media (max-width: 640px) {
	.wp-block-group.btv-amenities-grid {
		grid-template-columns: 1fr;
		gap: 28px;
	}
}

/* === Flight board (Arrivals & Departures) ==========================
 * Live arrivals/departures list rendered by the btv/flight-board block.
 * Light panel containing the header, controls and a column of white
 * flight-row cards. Mirrors the Figma "Flight track" section.
 */
.btv-flight-board {
	box-sizing: border-box;
	background-color: #f2f5f8;
	border-radius: 24px;
	padding: clamp(20px, 1.2rem + 1.6vw, 36px);
	font-family: 'Outfit', sans-serif;
	color: var(--wp--preset--color--military-blue);
	/* Reset theme.json's global negative tracking, which crushes UI text.
	 * Intentional tracking is re-applied on the uppercase labels below. */
	letter-spacing: normal;
}

.btv-flight-board *,
.btv-flight-board *::before,
.btv-flight-board *::after {
	box-sizing: border-box;
}

.btv-flight-board :where(p, span, h2, h3, a, button, input, select, label, li, div) {
	letter-spacing: normal;
}

/* Header ---------------------------------------------------------- */
.btv-flight-board__header {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 16px;
	padding-bottom: 20px;
	border-bottom: 1px solid rgba(32, 43, 82, 0.1);
}

.btv-flight-board__eyebrow {
	display: block;
	margin-bottom: 6px;
}

.btv-flight-board__heading {
	margin: 0;
	font-size: clamp(28px, 1.4rem + 1.4vw, 40px);
	font-weight: 800;
	line-height: 1.05;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--military-blue);
}

.btv-flight-board__live {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	white-space: nowrap;
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--secondary);
}

.btv-flight-board__live-dot {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background-color: var(--wp--preset--color--secondary);
	box-shadow: 0 0 0 0 rgba(82, 158, 54, 0.5);
	animation: btv-flight-live-pulse 2s ease-out infinite;
}

.btv-flight-board__live.is-stale {
	color: rgba(32, 43, 82, 0.4);
}

.btv-flight-board__live.is-stale .btv-flight-board__live-dot {
	background-color: rgba(32, 43, 82, 0.3);
	animation: none;
}

@keyframes btv-flight-live-pulse {
	0% { box-shadow: 0 0 0 0 rgba(82, 158, 54, 0.45); }
	70% { box-shadow: 0 0 0 7px rgba(82, 158, 54, 0); }
	100% { box-shadow: 0 0 0 0 rgba(82, 158, 54, 0); }
}

@media (prefers-reduced-motion: reduce) {
	.btv-flight-board__live-dot { animation: none; }
}

/* Controls -------------------------------------------------------- */
.btv-flight-board__controls {
	display: flex;
	flex-direction: column;
	gap: 22px;
	padding: 24px 0;
	border-bottom: 1px solid rgba(32, 43, 82, 0.1);
}

.btv-flight-board__label {
	display: block;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: rgba(32, 43, 82, 0.45);
}

.btv-flight-board__tabs {
	display: inline-flex;
	gap: 4px;
	background-color: #e3e8ef;
	border-radius: 16px;
	padding: 5px;
	max-width: 380px;
}

.btv-flight-board__tab {
	flex: 1 1 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 46px;
	padding: 0 22px;
	background: transparent;
	border: 0;
	border-radius: 12px;
	cursor: pointer;
	font-family: inherit;
	font-weight: 700;
	font-size: 14px;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: rgba(32, 43, 82, 0.5);
	transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.btv-flight-board__tab-icon {
	display: inline-flex;
}

.btv-flight-board__tab-icon svg {
	width: 18px;
	height: 18px;
}

.btv-flight-board__tab[data-btv-tab="departures"] .btv-flight-board__tab-icon svg {
	transform: rotate(45deg);
	margin-right: 6px;
}

.btv-flight-board__tab.is-active {
	background-color: var(--wp--preset--color--primary);
	color: #ffffff;
	box-shadow: 0 6px 16px rgba(0, 90, 170, 0.25);
}

.btv-flight-board__tab:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

.btv-flight-board__search-row {
	display: flex;
	gap: 16px;
	align-items: flex-end;
}

.btv-flight-board__field {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.btv-flight-board__field--search {
	flex: 1 1 auto;
	min-width: 0;
}

.btv-flight-board__input-wrap {
	position: relative;
	display: flex;
	align-items: center;
	gap: 12px;
	background-color: #ffffff;
	border: 1px solid rgba(41, 139, 203, 0.18);
	border-radius: 14px;
	height: 54px;
	padding: 0 20px;
}

.btv-flight-board__search-icon {
	width: 20px;
	height: 20px;
	flex: 0 0 auto;
	color: rgba(32, 43, 82, 0.35);
}

.btv-flight-board__search-clear {
	display: none;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	flex: 0 0 auto;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background-color: rgba(32, 43, 82, 0.08);
	color: rgba(32, 43, 82, 0.6);
	cursor: pointer;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.btv-flight-board__search-clear svg {
	width: 16px;
	height: 16px;
}

.btv-flight-board__search-clear:hover {
	background-color: rgba(32, 43, 82, 0.16);
	color: var(--wp--preset--color--military-blue);
}

.btv-flight-board__search-clear:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

.btv-flight-board__input-wrap.is-filled .btv-flight-board__search-icon {
	display: none;
}

.btv-flight-board__input-wrap.is-filled .btv-flight-board__search-clear {
	display: inline-flex;
}

.btv-flight-board__input {
	flex: 1;
	min-width: 0;
	border: 0;
	background: transparent;
	font-family: inherit;
	font-weight: 500;
	font-size: 16px;
	color: var(--wp--preset--color--military-blue);
	outline: none;
	letter-spacing: 0.01em;
}

.btv-flight-board__input::placeholder {
	color: rgba(32, 43, 82, 0.3);
}

.btv-flight-board__field--date {
	flex: 0 0 auto;
}

.btv-flight-board__select-wrap {
	position: relative;
	display: flex;
	align-items: center;
	background-color: #ffffff;
	border: 1px solid rgba(41, 139, 203, 0.18);
	border-radius: 14px;
	height: 54px;
	padding: 0 16px;
}

.btv-flight-board__select-icon {
	width: 18px;
	height: 18px;
	color: var(--wp--preset--color--primary);
	margin-right: 10px;
}

.btv-flight-board__select {
	appearance: none;
	-webkit-appearance: none;
	border: 0;
	background: transparent;
	font-family: inherit;
	font-weight: 700;
	font-size: 14px;
	color: var(--wp--preset--color--military-blue);
	padding-right: 22px;
	cursor: pointer;
	outline: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 5l3 3 3-3' stroke='%23202b52' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right center;
}

.btv-flight-board__filters {
	display: flex;
	gap: 32px;
	align-items: flex-start;
}

.btv-flight-board__field--range {
	flex: 1 1 auto;
	min-width: 0;
}

.btv-flight-board__range-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 12px;
}

.btv-flight-board__range-value {
	font-size: 13px;
	font-weight: 700;
	color: var(--wp--preset--color--primary);
	letter-spacing: 0.01em;
}

.btv-flight-board__range {
	position: relative;
	height: 22px;
}

.btv-flight-board__range-track {
	position: absolute;
	top: 50%;
	left: 0;
	right: 0;
	height: 6px;
	transform: translateY(-50%);
	background-color: #d4dbe5;
	border-radius: 999px;
}

.btv-flight-board__range-fill {
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	background-color: var(--wp--preset--color--primary);
	border-radius: 999px;
}

.btv-flight-board__range-input {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 22px;
	margin: 0;
	background: transparent;
	pointer-events: none;
	-webkit-appearance: none;
	appearance: none;
}

.btv-flight-board__range-input::-webkit-slider-thumb {
	-webkit-appearance: none;
	appearance: none;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: #ffffff;
	border: 3px solid var(--wp--preset--color--primary);
	box-shadow: 0 2px 6px rgba(0, 90, 170, 0.3);
	cursor: pointer;
	pointer-events: auto;
}

.btv-flight-board__range-input::-moz-range-thumb {
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: #ffffff;
	border: 3px solid var(--wp--preset--color--primary);
	box-shadow: 0 2px 6px rgba(0, 90, 170, 0.3);
	cursor: pointer;
	pointer-events: auto;
}

.btv-flight-board__range-scale {
	display: flex;
	justify-content: space-between;
	margin-top: 8px;
	font-size: 10px;
	letter-spacing: 0.04em;
	color: rgba(32, 43, 82, 0.4);
}

.btv-flight-board__field--quick {
	flex: 0 0 auto;
	gap: 12px;
}

.btv-flight-board__check {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	min-height: 54px;
	padding: 0 18px;
	background-color: #ffffff;
	border: 1px solid rgba(41, 139, 203, 0.18);
	border-radius: 14px;
	cursor: pointer;
	font-size: 14px;
	font-weight: 600;
	color: var(--wp--preset--color--military-blue);
}

.btv-flight-board__check input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.btv-flight-board__check-box {
	width: 20px;
	height: 20px;
	border-radius: 6px;
	border: 1.5px solid rgba(32, 43, 82, 0.3);
	flex: 0 0 auto;
	position: relative;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}

.btv-flight-board__check input:checked + .btv-flight-board__check-box {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
}

.btv-flight-board__check input:checked + .btv-flight-board__check-box::after {
	content: "";
	position: absolute;
	left: 6px;
	top: 2px;
	width: 6px;
	height: 11px;
	border: solid #ffffff;
	border-width: 0 2px 2px 0;
	transform: rotate(45deg);
}

.btv-flight-board__check input:focus-visible + .btv-flight-board__check-box {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

/* Rows ------------------------------------------------------------ */
.btv-flight-board__list {
	list-style: none;
	margin: 22px 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.btv-flight-board__row {
	display: grid;
	grid-template-columns: minmax(220px, 1.4fr) minmax(160px, 1.2fr) minmax(120px, 0.9fr) minmax(70px, 0.5fr) auto;
	align-items: center;
	gap: 20px;
	background-color: #ffffff;
	border-radius: 16px;
	padding: 18px 24px;
	box-shadow: 0 4px 14px rgba(32, 43, 82, 0.05);
}

.btv-flight-board__airline {
	display: flex;
	align-items: center;
	gap: 16px;
	min-width: 0;
}

.btv-flight-board__logo {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 40px;
	flex: 0 0 auto;
}

.btv-flight-board__logo img {
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
}

.btv-flight-board__logo-fallback {
	font-size: 13px;
	font-weight: 800;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--primary);
}

.btv-flight-board__airline-text {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.btv-flight-board__airline-name {
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(32, 43, 82, 0.5);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.btv-flight-board__flight-no {
	font-size: 18px;
	font-weight: 800;
	color: var(--wp--preset--color--military-blue);
}

.btv-flight-board__cell {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.btv-flight-board__cell-label {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: rgba(32, 43, 82, 0.4);
}

.btv-flight-board__cell-icon {
	width: 13px;
	height: 13px;
	color: rgba(32, 43, 82, 0.4);
}

.btv-flight-board__cell-value {
	font-size: 16px;
	font-weight: 700;
	color: var(--wp--preset--color--military-blue);
}

.btv-flight-board__time-actual {
	font-size: 12px;
	font-weight: 600;
	color: rgba(32, 43, 82, 0.45);
}

/* When the cell-value above is the live `actual` time (late/early flights),
 * the secondary line shows the original scheduled time struck through. */
.btv-flight-board__time-actual.is-original {
	text-decoration: line-through;
	text-decoration-thickness: 1px;
}

.btv-flight-board__status {
	justify-self: end;
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 8px 16px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	white-space: nowrap;
}

.btv-flight-board__status svg {
	width: 15px;
	height: 15px;
}

.btv-flight-board__status--on-time { background-color: #e2f3e0; color: #2f7d22; }
.btv-flight-board__status--departed { background-color: #d8e7f8; color: #0a5aa0; }
.btv-flight-board__status--early    { background-color: #dceaf9; color: #1565a8; }
.btv-flight-board__status--late     { background-color: #fcefcf; color: #9a6a05; }
.btv-flight-board__status--cancelled { background-color: #fbdedf; color: #b3242c; }
.btv-flight-board__status--neutral  { background-color: #e7eaef; color: rgba(32, 43, 82, 0.6); }

.btv-flight-board__empty {
	padding: 40px 24px;
	text-align: center;
	font-size: 15px;
	font-weight: 500;
	color: rgba(32, 43, 82, 0.55);
	background-color: #ffffff;
	border-radius: 16px;
}

.btv-flight-board__row.is-hidden { display: none; }

/* Pagination ------------------------------------------------------ */
.btv-flight-board__pagination {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 24px;
}

.btv-flight-board__pagination[hidden] { display: none; }

.btv-flight-board__page-btn {
	min-width: 40px;
	height: 40px;
	padding: 0 12px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background-color: #ffffff;
	border: 1px solid rgba(41, 139, 203, 0.18);
	border-radius: 10px;
	cursor: pointer;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	letter-spacing: normal;
	color: var(--wp--preset--color--military-blue);
	transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.btv-flight-board__page-btn:hover:not(:disabled):not(.is-active) {
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--primary);
}

.btv-flight-board__page-btn.is-active {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	color: #ffffff;
}

.btv-flight-board__page-btn:disabled {
	opacity: 0.4;
	cursor: default;
}

.btv-flight-board__page-btn:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

.btv-flight-board__page-btn--nav {
	font-size: 20px;
	line-height: 1;
}

.btv-flight-board__page-gap {
	min-width: 24px;
	text-align: center;
	color: rgba(32, 43, 82, 0.45);
	font-weight: 700;
}

/* Tablet / mobile ------------------------------------------------- */
@media (max-width: 900px) {
	.btv-flight-board__search-row,
	.btv-flight-board__filters {
		flex-direction: column;
		align-items: stretch;
	}

	.btv-flight-board__tabs { max-width: none; display: flex; }

	.btv-flight-board__row {
		grid-template-columns: 1fr 1fr;
		gap: 16px 20px;
	}

	.btv-flight-board__airline { grid-column: 1 / -1; }

	.btv-flight-board__status {
		grid-column: 1 / -1;
		justify-self: start;
	}
}

/* === Newsletter (Join Our Mailing List) ============================
 * Reusable CTA card (btv/newsletter pattern): centered envelope badge,
 * heading, lede, email + Subscribe form, privacy note, over faint
 * decorative lines. Mirrors the Figma mailing-list section.
 */
.wp-block-group.btv-newsletter {
	box-sizing: border-box;
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	margin-top: clamp(56px, 5vw, 88px);
	padding: clamp(48px, 2.4rem + 2vw, 72px) clamp(20px, 1rem + 3vw, 56px);
	background-color: #fdfeff;
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
	letter-spacing: normal;
}

.btv-newsletter::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image: url('/wp-content/themes/btv/assets/img/newsletter-lines.svg');
	background-position: center;
	background-repeat: no-repeat;
	background-size: 112% 100%;
	pointer-events: none;
	z-index: 0;
}

.btv-newsletter > * {
	position: relative;
	z-index: 1;
}

.btv-newsletter .btv-newsletter__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	border-radius: 16px;
	background-color: #1d2c4d;
	color: #ffffff;
	margin-bottom: 36px;
}

.btv-newsletter__icon svg {
	width: 32px;
	height: 32px;
}

.wp-block-heading.btv-newsletter__title {
	margin: 0 0 24px;
	font-size: clamp(24px, 1.3rem + 0.8vw, 30px);
	font-weight: 800;
	line-height: 1.16;
	letter-spacing: 0.02em;
	text-transform: capitalize;
	color: #1d2c4d;
}

.btv-newsletter .btv-newsletter__subtitle {
	margin: 0 0 44px;
	max-width: 620px;
	font-family: 'Outfit', sans-serif;
	font-size: clamp(17px, 1rem + 0.4vw, 20px);
	font-weight: 500;
	line-height: 1.6;
	letter-spacing: normal;
	color: #1d2c4d;
}

/* Contact Form 7 output inside the card */
.btv-newsletter .wpcf7 {
	width: 100%;
	max-width: 672px;
}

.btv-newsletter .wpcf7-form {
	margin: 0;
}

.btv-newsletter .wpcf7-form > p {
	display: flex;
	gap: 16px;
	align-items: stretch;
	margin: 0;
}

.btv-newsletter .wpcf7-form-control-wrap {
	flex: 1 1 auto;
	min-width: 0;
	display: block;
}

.btv-newsletter__input {
	box-sizing: border-box;
	width: 100%;
	height: 68px;
	padding: 0 28px;
	background-color: #f2f4f5;
	border: 1.75px solid rgba(125, 139, 148, 0.2);
	border-radius: 16px;
	font-family: 'Outfit', sans-serif;
	font-weight: 500;
	font-size: 18px;
	letter-spacing: normal;
	color: #1d2c4d;
	outline: none;
}

.btv-newsletter__input::placeholder {
	color: rgba(29, 44, 77, 0.4);
}

.btv-newsletter__input:focus-visible {
	border-color: var(--wp--preset--color--accent);
}

.btv-newsletter__submit {
	flex: 0 0 auto;
	min-width: 200px;
	height: 68px;
	padding: 0 52px 0 30px;
	border: 0;
	border-radius: 16px;
	background-color: var(--wp--preset--color--secondary);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 22 22' fill='none'%3E%3Cpath d='M4.583 11h12.832' stroke='white' stroke-width='1.8332' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M10.999 4.583 17.415 11l-6.416 6.416' stroke='white' stroke-width='1.8332' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 24px center;
	color: #ffffff;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 18px;
	letter-spacing: normal;
	cursor: pointer;
	transition: background-color 0.15s ease;
}

.btv-newsletter__submit:hover,
.btv-newsletter__submit:focus-visible {
	background-color: #47882d;
}

.btv-newsletter__submit:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

/* CF7's spinner is `visibility: hidden` by default, so the row's
 * flex layout still reserves 24px + the 8px margin on the right —
 * which visually shifts the input + Subscribe pair ~32px to the
 * left of true center. Hide it from layout while idle and restore
 * it during submission. */
.btv-newsletter .wpcf7-spinner {
	display: none;
	align-self: center;
	margin: 0 0 0 8px;
}

.btv-newsletter form.submitting .wpcf7-spinner {
	display: inline-block;
}

.btv-newsletter .wpcf7-not-valid-tip {
	margin-top: 8px;
	font-size: 13px;
	font-weight: 500;
	color: #b3242c;
	text-align: left;
}

.btv-newsletter .wpcf7-response-output {
	margin: 16px 0 0;
	padding: 10px 18px;
	border-radius: 12px;
	font-size: 14px;
	font-weight: 500;
	text-align: center;
}

.btv-newsletter .btv-newsletter__note {
	margin: 24px 0 0;
	font-family: 'Outfit', sans-serif;
	font-size: 14px;
	font-weight: 500;
	letter-spacing: normal;
	color: rgba(29, 44, 77, 0.5);
}

@media (max-width: 600px) {
	.btv-newsletter .wpcf7-form > p {
		flex-direction: column;
	}

	.btv-newsletter__submit {
		width: 100%;
	}
}

/* ============================================================
 * Events
 * ============================================================ */

.wp-block-query.btv-events {
	margin-top: var(--btv-section-gap);
}

.btv-events .wp-block-post-template {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 48px;
}

.btv-events .wp-block-post {
	margin: 0;
}

.btv-events .wp-block-post .wp-block-group.btv-event {
	display: grid;
	grid-template-columns: 1fr 1fr;
	background: rgba(112, 196, 232, 0.09);
	border: 1px solid #eff1f2;
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	overflow: hidden;
	gap: 0;
	align-items: stretch;
	box-sizing: border-box;
}

/* Alternate image side on even posts. `direction: rtl` on the grid
   swaps cell positions; restoring `ltr` on each child keeps the inner
   text rendering normal. */
.btv-events .wp-block-post:nth-child(even) .wp-block-group.btv-event {
	direction: rtl;
}

.btv-events .wp-block-post:nth-child(even) .wp-block-group.btv-event > * {
	direction: ltr;
}

/* Media column */
.btv-event__media {
	position: relative;
	min-height: 380px;
}

.btv-event__media .wp-block-post-featured-image,
.btv-event__media .wp-block-post-featured-image a,
.btv-event__media .wp-block-post-featured-image img {
	width: 100%;
	height: 100%;
	display: block;
}

.btv-event__media .wp-block-post-featured-image img {
	object-fit: cover;
}

/* Badge */
.btv-event__badge {
	position: absolute;
	top: 32px;
	left: 32px;
	background: #fff;
	border-radius: 12px;
	padding: 16px 24px;
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	gap: 4px;
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
	min-width: 96px;
}

.btv-event__badge-top {
	font-family: var(--wp--preset--font-family--outfit);
	font-size: 2.5rem;
	font-weight: 900;
	line-height: 1;
	color: var(--wp--preset--color--nav-link);
	letter-spacing: 0;
}

.btv-event__badge-bottom {
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.05em;
	color: var(--wp--preset--color--nav-link);
	text-transform: uppercase;
}

/* Body column */
.btv-event__body {
	padding: 48px;
	display: flex;
	flex-direction: column;
	gap: 24px;
	justify-content: center;
}

/* Use `.btv-event .btv-event__title` (specificity 0,2,0) instead of
 * chaining the tag + post-title class so the rule matches in both the
 * editor (where core/post-title can render slightly different markup)
 * and the front end. */
.btv-event .btv-event__title {
	font-family: var(--wp--preset--font-family--outfit);
	font-size: 2rem;
	font-weight: 900;
	line-height: 1.1;
	color: var(--wp--preset--color--military-blue);
	margin: 0;
}

.btv-event .btv-event__description {
	font-size: 1rem;
	line-height: 1.5;
	color: #4b5563;
	letter-spacing: 0;
	margin: 0;
}

/* Meta rows */
.btv-event__meta-wrap {
	width: 100%;
}

.btv-event__meta {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.btv-event__meta-item {
	display: flex;
	gap: 16px;
	align-items: center;
}

.btv-event__meta-icon {
	flex: 0 0 auto;
	display: inline-flex;
	width: 40px;
	height: 40px;
	border-radius: 14px;
	background: rgba(112, 196, 232, 0.2);
	align-items: center;
	justify-content: center;
	color: var(--wp--preset--color--nav-link);
}

.btv-event__meta-icon--location {
	background: rgba(82, 159, 53, 0.13);
	color: var(--wp--preset--color--secondary);
}

.btv-event__meta-icon svg {
	width: 20px;
	height: 20px;
}

.btv-event__meta-text {
	display: flex;
	flex-direction: column;
}

.btv-event__meta-label {
	font-size: 0.875rem;
	font-weight: 600;
	/* Military blue (#212b52) at 40% alpha — matches the Figma `opacity: 0.4`
	 * on the label wrapper without creating a stacking context. */
	color: rgba(33, 43, 82, 0.4);
	letter-spacing: 1px;
	text-transform: uppercase;
}

.btv-event__meta-value {
	font-weight: 700;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: 0;
}

/* CTA */
.btv-event__cta-wrap {
	margin-top: 8px;
}

/* Override the global pill CTA shape inside event cards: per the design
 * these are rounded-rectangle buttons with a fixed 16px label, not the
 * site-wide pill. Higher specificity beats `.is-style-btv-cta-primary-arrow
 * .wp-block-button__link` (0,2,0). Explicit color + bg so the styling
 * works in the block editor preview too — the global `.is-style-…
 * .wp-block-button__link` rule chains on a parent class that isn't
 * present in our custom block markup. */
.btv-event__cta-wrap .wp-block-button__link.btv-event__cta {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	padding: 18px 32px;
	border-radius: 16px;
	background-color: var(--wp--preset--color--nav-link);
	color: var(--wp--preset--color--base, #fff);
	font-size: 16px;
	font-weight: 700;
	letter-spacing: 0;
}

.btv-event__cta-wrap .wp-block-button__link.btv-event__cta:hover,
.btv-event__cta-wrap .wp-block-button__link.btv-event__cta:focus-visible {
	background-color: var(--wp--preset--color--primary-dark);
	color: var(--wp--preset--color--base, #fff);
}

.btv-event__cta-icon {
	display: inline-flex;
	width: 20px;
	height: 20px;
	align-items: center;
	justify-content: center;
}

.btv-event__cta-icon svg {
	width: 20px;
	height: 20px;
}

/* Empty state */
.btv-events__empty {
	padding: 48px 24px;
	color: #6b7280;
	font-size: 1.125rem;
}

/* Responsive — stack at < 900px */
@media (max-width: 900px) {
	.btv-events .wp-block-post .wp-block-group.btv-event {
		grid-template-columns: 1fr;
	}
	.btv-events .wp-block-post:nth-child(even) .wp-block-group.btv-event {
		direction: ltr;
	}
	.btv-event__media {
		min-height: 260px;
	}
	.btv-event__body {
		padding: 32px 24px;
	}
	.btv-event__body h3.wp-block-post-title.btv-event__title {
		font-size: 1.5rem;
	}
	.btv-event__badge {
		top: 16px;
		left: 16px;
		padding: 12px 18px;
		min-width: 80px;
	}
	.btv-event__badge-top {
		font-size: 2rem;
	}
}

/* ============================================================
 * Content section heading
 * Reusable eyebrow-style heading for long-form content pages
 * (parking, tsa, lost & found, etc). Apply via the `className`
 * field on a core/heading.
 * ============================================================ */

.wp-block-heading.btv-content-section-heading {
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 900;
	font-size: 1.5rem;
	line-height: 1.2;
	color: var(--wp--preset--color--military-blue);
	text-transform: uppercase;
	letter-spacing: 0.04em;
	margin: 0;
}

/* ============================================================
 * Parking calculator card
 * Sibling visual to the home-page Parking Garage Status card —
 * subtle translucent background, soft border, generous padding.
 * ============================================================ */

.wp-block-btv-parking-calculator.btv-parking-calc {
	position: relative;
	box-sizing: border-box;
	background-color: rgba(255, 255, 255, 0.6);
	border: 0.877px solid rgba(125, 139, 148, 0.2);
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	padding: clamp(28px, 1.5rem + 1.2vw, 40px);
	color: var(--wp--preset--color--military-blue);
	font-family: var(--wp--preset--font-family--outfit);
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.btv-parking-calc__header {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-start;
	gap: 16px;
}

.btv-parking-calc__title {
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 900;
	font-size: clamp(1.5rem, 1.1rem + 1vw, 2.25rem);
	line-height: 1.1;
	margin: 0;
	color: var(--wp--preset--color--military-blue);
}

.btv-parking-calc__subtitle {
	margin: 8px 0 0;
	font-size: 1rem;
	color: rgba(33, 43, 82, 0.7);
}

.btv-parking-calc__result {
	margin: 0;
	display: inline-flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 2px;
}

/* Restore [hidden] semantics — our display:inline-flex above overrides
 * the UA `[hidden] { display: none }` rule and would leak the
 * placeholder before the user submits. */
.btv-parking-calc__result[hidden] {
	display: none;
}

.btv-parking-calc__error[hidden] {
	display: none;
}

.btv-parking-calc__result-label {
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(33, 43, 82, 0.55);
}

.btv-parking-calc__result-value {
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 900;
	font-size: clamp(1.5rem, 1.1rem + 1vw, 2.25rem);
	line-height: 1;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: -0.02em;
}

.btv-parking-calc__form {
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.btv-parking-calc__row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}

@media (max-width: 600px) {
	.btv-parking-calc__row {
		grid-template-columns: 1fr;
	}
}

.btv-parking-calc__field {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.btv-parking-calc__label {
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: rgba(33, 43, 82, 0.7);
}

.btv-parking-calc__input {
	width: 100%;
	box-sizing: border-box;
	padding: 14px 16px;
	font-family: var(--wp--preset--font-family--outfit);
	font-size: 1rem;
	color: var(--wp--preset--color--military-blue);
	background: #fff;
	border: 1px solid rgba(125, 139, 148, 0.3);
	border-radius: 12px;
	min-height: 50px;
	letter-spacing: normal;
}

.btv-parking-calc__input:focus {
	outline: 2px solid var(--wp--preset--color--nav-link);
	outline-offset: 1px;
	border-color: transparent;
}

.btv-parking-calc__error {
	margin: 0;
	color: #b91c1c;
	font-size: 0.875rem;
}

.btv-parking-calc__submit {
	align-self: flex-start;
	padding: 14px 28px;
	border-radius: 12px;
	background-color: var(--wp--preset--color--nav-link);
	color: #fff;
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 700;
	font-size: 1rem;
	border: 0;
	cursor: pointer;
	transition: background-color 0.15s ease;
	letter-spacing: 0;
}

.btv-parking-calc__submit:hover,
.btv-parking-calc__submit:focus-visible {
	background-color: var(--wp--preset--color--primary-dark, #003a78);
}

/* ============================================================
 * Parking page layout helpers
 * Reading-column typography (mirrors .btv-news-article so both
 * 760px content pages have the same rhythm) + spacing rules that
 * keep headings tight to their content and add breathing room
 * before new section headings.
 * ============================================================ */

/* Body type — overrides the global -0.0875rem letter-spacing and the
 * 20px/1.21 Outfit default that make long-form copy feel cramped.
 * `:where()` zeroes the specificity so the spacing-rhythm rules below
 * (which only have 0,1,0 specificity via `> * + *`) actually win.
 *
 * Margin handled by the rhythm rules below using the logical
 * `margin-block-start` so we don't introduce a physical/logical
 * conflict with WP's editor-injected `:where(.is-layout-constrained)
 * > * { margin-block: 0 }` reset (logical and physical compete by
 * source order, not specificity). */
.btv-parking-page > :where(p, ul, ol) {
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 400;
	font-size: 16px;
	line-height: 1.55;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--military-blue);
}

.btv-parking-page > :where(ul, ol) {
	padding-left: 1.4em;
}

.btv-parking-page > ul li,
.btv-parking-page > ol li {
	margin-top: 8px;
	letter-spacing: 0.02em;
}

.btv-parking-page > ul li:first-child,
.btv-parking-page > ol li:first-child {
	margin-top: 0;
}

/* Disclaimer-style italic paragraphs feel like footnotes. */
.btv-parking-page > p em:only-child {
	display: inline-block;
	color: rgba(33, 43, 82, 0.72);
	font-style: italic;
	font-size: 0.9375rem;
	line-height: 1.5;
}

/* In-line links inside body copy. */
.btv-parking-page a {
	color: var(--wp--preset--color--nav-link);
	text-decoration: underline;
	text-underline-offset: 3px;
	letter-spacing: inherit;
}

.btv-parking-page a:hover,
.btv-parking-page a:focus-visible {
	color: var(--wp--preset--color--primary-dark);
}

/* Spacing rhythm
 * 1) baseline gap between any two siblings
 * 2) tight gap when a heading is immediately followed by content
 * 3) wider gap before any new heading (creates the section break)
 *
 * Heading-specific selectors chain `.wp-block-heading` so their
 * specificity (0,3,2) beats `.wp-block-heading.btv-content-section-
 * heading { margin: 0 }` (0,2,0). Order matters — (3) wins over (2)
 * when both match (heading-after-heading), giving subsections room
 * to breathe under their parent.
 *
 * Two cascade pitfalls these selectors work around:
 *
 * - WP injects `:root :where(.is-layout-constrained) > * { margin-
 *   block: 0 }` in the editor. `:root` is a pseudo-class (0,1,0),
 *   not 0,0,1, so that rule's TOTAL specificity is 0,1,0 — same as
 *   a single class. We chain `.wp-block-group` (the wrapper carries
 *   that class) so the baseline goes to 0,2,0 and wins.
 *
 * - We use `margin-block-start` (logical) instead of `margin-top`
 *   because WP's reset uses `margin-block`. Logical/physical pairs
 *   cascade by source order regardless of specificity, so mixing
 *   them would lose to WP's later-loaded rule. Staying logical puts
 *   us back into the normal specificity cascade. */
.btv-parking-page.wp-block-group > * + * {
	margin-block-start: 28px;
}

.btv-parking-page.wp-block-group > h2.wp-block-heading + *,
.btv-parking-page.wp-block-group > h3.wp-block-heading + * {
	margin-block-start: 12px;
}

.btv-parking-page.wp-block-group > * + h2.wp-block-heading,
.btv-parking-page.wp-block-group > * + h3.wp-block-heading {
	margin-block-start: clamp(40px, 1.75rem + 1vw, 56px);
}

.btv-parking-page__cards {
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
	align-items: center;
}

.btv-parking-page__cards img {
	display: block;
	height: 27px;
	width: auto;
}

/* ============================================================
 * FAQ accordion (.btv-faq)
 * Structural styling only — chevron, summary layout, answer
 * typography. The configurable visual chrome (background color,
 * border radius, item gap) lives on the block attributes so the
 * editor's Color/Border/Spacing panels can adjust them per
 * instance.
 * ============================================================ */

.btv-faq {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.btv-faq .wp-block-details {
	overflow: hidden;
}

.btv-faq .wp-block-details > summary {
	list-style: none;
	cursor: pointer;
	padding: 22px 24px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 700;
	font-size: 1rem;
	line-height: 1.4;
	color: var(--wp--preset--color--military-blue);
	letter-spacing: 0.01em;
	user-select: none;
}

/* Remove the default UA disclosure triangle (Chrome/Safari). */
.btv-faq .wp-block-details > summary::-webkit-details-marker {
	display: none;
}

/* Chevron icon after the question — inline SVG via data URI so the
 * stroke color tracks the heading color and no extra asset is needed.
 * Rotates 180° when the details element is open. */
.btv-faq .wp-block-details > summary::after {
	content: "";
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
	background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path d="M5 7.5L10 12.5L15 7.5" stroke="%23212b52" stroke-width="1.667" stroke-linecap="round" stroke-linejoin="round"/></svg>') center/contain no-repeat;
	transition: transform 0.2s ease;
}

.btv-faq .wp-block-details[open] > summary::after {
	transform: rotate(180deg);
}

.btv-faq .wp-block-details > summary:focus-visible {
	outline: 2px solid var(--wp--preset--color--nav-link);
	outline-offset: -2px;
}

/* Answer area — paragraphs inside the open details element. The
 * `> *` selector covers paragraphs / lists / any block the admin
 * may drop in. */
.btv-faq .wp-block-details > :not(summary) {
	margin: 0;
	padding: 0 24px 22px;
	font-family: var(--wp--preset--font-family--outfit);
	font-weight: 400;
	font-size: 0.9375rem;
	line-height: 1.55;
	letter-spacing: 0.02em;
	color: rgba(33, 43, 82, 0.85);
}

.btv-faq .wp-block-details > :not(summary) + :not(summary) {
	padding-top: 8px;
}

/* ============================================================
 * Site alert
 * Dark pill bar injected after the header template part via the
 * render_block filter (inc/alert.php). Sticky so it stays visible
 * during scroll; the header (z-index 100) always sits above it.
 * One global instance. Per-level tint
 * lives on a CSS custom property so the icon circle stays in sync
 * without selector duplication.
 * ============================================================ */

.btv-alert {
	/* Per-level fill drives the whole pill. The icon-circle tint is a
	 * fixed white-translucent overlay so it reads cleanly on every
	 * background color. */
	--btv-alert-bg: #1f5a31; /* green default — dark forest */
	position: sticky;
	/* `--btv-alert-top` is published by header.js as the sticky header's
	 * bottom edge. Add 16px so the pill always keeps a gap below the
	 * header — both at page-top (initial render) and when the user
	 * scrolls and the alert sticks. */
	top: calc(var(--btv-alert-top, 0px) + 16px);
	z-index: 90;
	margin: 24px auto 0;
	max-width: var(--wp--style--global--content-size, 1217px);
	width: calc(100% - 32px);
	box-sizing: border-box;
	display: flex;
	align-items: center;
	gap: 20px;
	padding: 14px 24px;
	background: var(--btv-alert-bg);
	color: #fff;
	border-radius: 57px;
	box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.29);
	font-family: var(--wp--preset--font-family--outfit);
	font-size: 15px;
	line-height: 1.45;
	letter-spacing: 0;
	transition: opacity 0.2s ease, height 0.2s ease, margin 0.2s ease, padding 0.2s ease;
}

.btv-alert--yellow {
	--btv-alert-bg: #a17c0e; /* dark amber — readable with white text */
}

.btv-alert--red {
	--btv-alert-bg: #a82424; /* deep emergency red */
}

.btv-alert.is-dismissing {
	opacity: 0;
	padding-block: 0;
	margin-block: 0;
	height: 0;
	overflow: hidden;
}

.btv-alert__icon {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.18);
	font-size: 22px;
	line-height: 1;
}

.btv-alert__content {
	flex: 1 1 auto;
	font-weight: 600;
	color: #fff;
}

.btv-alert__content > :first-child { margin-top: 0; }
.btv-alert__content > :last-child  { margin-bottom: 0; }

.btv-alert__content p {
	margin: 0 0 4px;
}

.btv-alert__content p:last-child {
	margin-bottom: 0;
}

.btv-alert__content ul,
.btv-alert__content ol {
	margin: 4px 0 0;
	padding-left: 20px;
}

.btv-alert__content a {
	color: #fff;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-alert__content a:hover,
.btv-alert__content a:focus-visible {
	color: var(--wp--preset--color--accent, #70c4e8);
}

.btv-alert__close {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 8px 4px;
	background: transparent;
	border: 0;
	color: #fff;
	font-family: inherit;
	font-size: 14px;
	font-weight: 500;
	cursor: pointer;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.btv-alert__close-icon {
	width: 20px;
	height: 20px;
}

.btv-alert__close:hover,
.btv-alert__close:focus-visible {
	color: var(--wp--preset--color--accent, #70c4e8);
}

@media (max-width: 600px) {
	.btv-alert {
		border-radius: 16px;
		padding: 12px 16px;
		gap: 12px;
		flex-wrap: wrap;
	}
	.btv-alert__close-label { display: none; }
}

/* ==========================================================================
 * Shared post-feed layout — search results AND archive pages
 * (templates/search.html, templates/archive.html).
 *
 * Hero is the surface-dark band (query-title + optional refine search on
 * /?s=). Below it, a single-column list of `.btv-feed-card` items capped
 * at 760px and a centered pagination that mirrors the flight-board pill
 * pagination on /flights/flight-status/.
 * ========================================================================== */

.btv-feed__hero .wp-block-query-title {
	color: var(--wp--preset--color--military-blue);
}

.btv-feed__hero .wp-block-search__inside-wrapper {
	max-width: 560px;
	margin-left: auto;
	margin-right: auto;
}

/* --- Result cards ------------------------------------------------------- */

.btv-feed__list { /* post-template wrapper — keep stack tidy on all viewports */
	display: flex;
	flex-direction: column;
}

.btv-feed-card.wp-block-group {
	background: #ffffff;
	/* Match the neutral 1px outline used across event/parking/amenity
	 * cards site-wide. */
	border: 1px solid rgba(125, 139, 148, 0.2);
	border-radius: clamp(1.375rem, 0.9063rem + 1.25vw, 2rem);
	padding: clamp(20px, 1rem + 1vw, 32px);
	box-shadow: 0 2px 12px -8px rgba(28, 80, 159, 0.18);
	transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

.btv-feed-card.wp-block-group:hover,
.btv-feed-card.wp-block-group:focus-within {
	border-color: var(--wp--preset--color--primary);
	box-shadow: 0 6px 24px -12px rgba(28, 80, 159, 0.35);
	transform: translateY(-2px);
}

.btv-feed-card__media img {
	border-radius: clamp(0.75rem, 0.5rem + 0.6vw, 1.125rem);
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* `core/post-title` outputs an h2 with `.wp-block-post-title` (NOT
 * `.wp-block-heading`), so chain on that class to reach (0,2,0)
 * specificity and beat WP's global `:root :where(h2)` size. */
.wp-block-post-title.btv-feed-card__title {
	font-size: clamp(1.5rem, 1.3125rem + 0.5vw, 1.75rem);
	line-height: 1.3;
	font-weight: 700;
}

.btv-feed-card__title a {
	color: var(--wp--preset--color--military-blue);
	text-decoration: none;
}

.btv-feed-card__title a:hover,
.btv-feed-card__title a:focus-visible {
	color: var(--wp--preset--color--primary);
	text-decoration: underline;
}

.btv-feed-card__excerpt {
	color: rgba(32, 43, 82, 0.78);
}

.btv-feed-card__excerpt .wp-block-post-excerpt__more-link {
	display: inline-block;
	margin-top: 8px;
	font-weight: 700;
	color: var(--wp--preset--color--primary);
	text-decoration: none;
}

.btv-feed-card__excerpt .wp-block-post-excerpt__more-link:hover,
.btv-feed-card__excerpt .wp-block-post-excerpt__more-link:focus-visible {
	text-decoration: underline;
}

/* --- Empty state -------------------------------------------------------- */

.btv-feed__empty {
	text-align: center;
	font-size: 1rem;
	color: rgba(32, 43, 82, 0.7);
	padding: 32px 0;
}

/* --- Pagination — mirror .btv-flight-board__page-btn -------------------- */

/* `.wp-block-query-pagination` is dynamically rendered without honoring
 * block-level `style.spacing.margin`, so we set the top gap from the last
 * card here. Chained `.wp-block-query-pagination` to beat WP's layout CSS
 * (0,1,0) on margin-block resets. */
.btv-feed__pagination.wp-block-query-pagination {
	gap: 8px;
	flex-wrap: wrap;
	margin-top: clamp(32px, 1.5rem + 1.5vw, 56px);
}

/* Default block markup emits a literal "»" / "«" arrow span next to the
 * chevron label. Hide it so the chip shows just our `‹` / `›` glyph,
 * matching the flight-board nav buttons. */
.btv-feed__pagination .wp-block-query-pagination-previous-arrow,
.btv-feed__pagination .wp-block-query-pagination-next-arrow {
	display: none !important;
}

.btv-feed__pagination .wp-block-query-pagination-previous,
.btv-feed__pagination .wp-block-query-pagination-next,
.btv-feed__pagination .wp-block-query-pagination-numbers .page-numbers {
	min-width: 40px;
	height: 40px;
	padding: 0 12px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background-color: #ffffff;
	border: 1px solid rgba(41, 139, 203, 0.28);
	border-radius: 10px;
	font-family: 'Outfit', sans-serif;
	font-weight: 700;
	font-size: 14px;
	line-height: 1;
	letter-spacing: normal;
	color: var(--wp--preset--color--military-blue);
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.btv-feed__pagination .wp-block-query-pagination-numbers {
	display: inline-flex;
	gap: 8px;
	flex-wrap: wrap;
	align-items: center;
}

.btv-feed__pagination .wp-block-query-pagination-previous,
.btv-feed__pagination .wp-block-query-pagination-next {
	font-size: 20px;
}

.btv-feed__pagination .page-numbers:hover,
.btv-feed__pagination .wp-block-query-pagination-previous:hover,
.btv-feed__pagination .wp-block-query-pagination-next:hover {
	border-color: var(--wp--preset--color--primary);
	color: var(--wp--preset--color--primary);
}

.btv-feed__pagination .page-numbers.current {
	background-color: var(--wp--preset--color--primary);
	border-color: var(--wp--preset--color--primary);
	color: #ffffff;
}

.btv-feed__pagination .wp-block-query-pagination-previous[aria-disabled="true"],
.btv-feed__pagination .wp-block-query-pagination-next[aria-disabled="true"] {
	opacity: 0.4;
	pointer-events: none;
}

.btv-feed__pagination .page-numbers.dots {
	min-width: 24px;
	padding: 0;
	border: 0;
	background: transparent;
	color: rgba(32, 43, 82, 0.45);
}

.btv-feed__pagination a:focus-visible,
.btv-feed__pagination .page-numbers:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

@media (max-width: 600px) {
	.btv-feed__pagination .wp-block-query-pagination-previous,
	.btv-feed__pagination .wp-block-query-pagination-next,
	.btv-feed__pagination .wp-block-query-pagination-numbers .page-numbers {
		min-width: 36px;
		height: 36px;
		font-size: 13px;
	}
}

