/**
 * FirePrograms presentation layer.
 *
 * CSS architecture
 * ----------------
 * 1. WordPress/theme.json owns tokens: color, type, spacing, widths, shadows.
 * 2. Reusable `.fp-*` primitives compose layouts without page-specific CSS.
 * 3. Components own only their unique presentation.
 * 4. WordPress block-style variations (`is-style-fp-*`) expose common choices
 *    in the editor and intentionally share the same primitives.
 *
 * Keep selector specificity low. Avoid IDs, page IDs, nth-child selectors,
 * and selectors that depend on incidental Gutenberg nesting.
 */

/* ==========================================================================
   1. BASE / ACCESSIBILITY
   ========================================================================== */

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
}

@supports (overflow-x: clip) {
	html,
	body {
		overflow-x: clip;
	}
}

body {
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}

/* The theme shell owns adjacency between the global header and page main.
 * WordPress' root flow gap is useful inside normal content, but should not add
 * a 1rem spacer between these two semantic landmarks. */
.wp-site-blocks > main {
	margin-block-start: 0;
}

/* Landing pages are composed from full-width section components. Their own
 * padding/borders define section rhythm, so Core's Post Content flow gap must
 * not insert an extra 1rem margin between adjacent components. */
.wp-block-post-content > .fp-section,
.wp-block-post-content > .fp-cta-inline,
.wp-block-post-content > .fp-cta-band,
.wp-block-post-content > .fp-page-hero,
.wp-block-post-content > .fp-subnav {
	margin-block-start: 0;
}

/* Gutenberg can give the Heading block a block-level default that wins over
 * semantic h1-h6 element styles, especially inside the editor. Keep “Default”
 * semantic while allowing any explicit preset or custom font-size choice to
 * win. Components may intentionally give a semantic heading a different visual
 * scale by setting the corresponding --fp-hN-size custom property. */
h1.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h1.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h1-size, var(--wp--preset--font-size--heading-1));
}

h2.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h2.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h2-size, var(--wp--preset--font-size--heading-2));
}

h3.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h3.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h3-size, var(--wp--preset--font-size--heading-3));
}

h4.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h4.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h4-size, var(--wp--preset--font-size--heading-4));
}

h5.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h5.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h5-size, var(--wp--preset--font-size--body));
}

h6.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]),
.editor-styles-wrapper h6.wp-block-heading:not([class*="-font-size"]):not([style*="font-size"]) {
	font-size: var(--fp-h6-size, var(--wp--preset--font-size--small));
}

img,
svg,
video {
	max-width: 100%;
	height: auto;
}

:where(h1, h2, h3, h4, h5, h6) {
	text-wrap: balance;
}

p {
	text-wrap: pretty;
}

:where(a, button, input, select, textarea, summary):focus-visible {
	outline: 3px solid var(--wp--preset--color--blue-600);
	outline-offset: 3px;
}

/* ==========================================================================
   2. REUSABLE LAYOUT PRIMITIVES
   ========================================================================== */

.fp-container {
	box-sizing: border-box;
	width: 100%;
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
	padding-inline: var(--wp--preset--spacing--gutter);
}

.fp-container--narrow {
	max-width: var(--wp--style--global--content-size);
}

.fp-section,
.wp-block-group.is-style-fp-section,
.wp-block-group.is-style-fp-section-alt,
.wp-block-group.is-style-fp-section-tint,
.wp-block-group.is-style-fp-section-dark {
	padding-block: var(--wp--preset--spacing--section);
}

.fp-section--tight,
.wp-block-group.is-style-fp-section-tight {
	padding-block: clamp(2.5rem, 1.8rem + 3vw, 4.5rem);
}

.fp-section--alt,
.wp-block-group.is-style-fp-section-alt {
	background: var(--wp--preset--color--surface-alt);
}

.fp-section--tint,
.wp-block-group.is-style-fp-section-tint {
	background: var(--wp--preset--color--blue-050);
}

.fp-section--dark,
.fp-on-dark,
.wp-block-group.is-style-fp-section-dark {
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--on-dark-soft);
}

:where(.fp-section--dark, .fp-on-dark, .wp-block-group.is-style-fp-section-dark) :where(h1, h2, h3, h4, h5, h6) {
	color: var(--wp--preset--color--surface);
}

:where(.fp-section--dark, .fp-on-dark, .wp-block-group.is-style-fp-section-dark) a:not(.wp-element-button) {
	color: var(--wp--preset--color--surface);
}

.fp-grid {
	display: grid;
	gap: var(--wp--preset--spacing--60);
}

.fp-grid--2 {
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
}

.fp-grid--3 {
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
}

.fp-grid--4 {
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
}

/*
 * Custom layout primitives own their child spacing. Core flow-layout block
 * gaps can otherwise add margins to every child after the first, which makes
 * grid/flex siblings appear vertically misaligned.
 */
.fp-grid > *,
.fp-cluster > *,
.fp-split > *,
.fp-stack > * {
	margin-block: 0;
}

.fp-stack > * + * {
	margin-block-start: var(--fp-stack-gap, var(--wp--preset--spacing--40));
}

.fp-cluster {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--40);
}

.fp-split {
	display: grid;
	grid-template-columns: 1fr;
	align-items: center;
	gap: clamp(var(--wp--preset--spacing--60), 5vw, var(--wp--preset--spacing--90));
}

@media (min-width: 900px) {
	.fp-split {
		grid-template-columns: 1.05fr 0.95fr;
	}

	/* Match the designer primitive: only an explicitly marked media column
	 * moves left. Do not reverse arbitrary first children, because diagrams
	 * and other semantic content may intentionally appear first in source. */
	.fp-split--reverse > .fp-split__media {
		order: -1;
	}
}

.fp-measure {
	max-width: 68ch;
}

.fp-center {
	margin-inline: auto;
}

.fp-text-center {
	text-align: center;
}

/* ==========================================================================
   3. REUSABLE CONTENT / SURFACE PRIMITIVES
   ========================================================================== */

.fp-eyebrow,
.wp-block-paragraph.is-style-fp-eyebrow {
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	line-height: 1.35;
	text-transform: uppercase;
	color: var(--wp--preset--color--ember-700);
}

.fp-lede,
.wp-block-paragraph.is-style-fp-lede {
	max-width: 62ch;
	font-size: var(--wp--preset--font-size--lead);
	line-height: 1.55;
	color: var(--wp--preset--color--slate);
}

:where(.fp-section--dark, .fp-on-dark, .wp-block-group.is-style-fp-section-dark) :where(.fp-eyebrow, .wp-block-paragraph.is-style-fp-eyebrow) {
	color: var(--wp--preset--color--ember-500);
}

/* The homepage hero is a dark surface but intentionally uses its own component
 * class rather than the generic dark-section helper. Keep small eyebrow text
 * on the brighter ember token so it clears WCAG AA against navy. */
.fp-home-hero :where(.fp-eyebrow, .wp-block-paragraph.is-style-fp-eyebrow) {
	color: var(--wp--preset--color--ember-500);
}

:where(.fp-section--dark, .fp-on-dark, .wp-block-group.is-style-fp-section-dark) :where(.fp-lede, .wp-block-paragraph.is-style-fp-lede) {
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-surface,
.wp-block-group.is-style-fp-surface,
.wp-block-column.is-style-fp-surface {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	padding: var(--wp--preset--spacing--60);
}

.fp-surface--raised,
.wp-block-group.is-style-fp-surface-raised,
.wp-block-column.is-style-fp-surface-raised {
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	padding: var(--wp--preset--spacing--60);
	box-shadow: var(--wp--preset--shadow--medium);
}

/* ==========================================================================
   4. BUTTON VARIANTS
   ========================================================================== */

/* Core Button wrappers remain layout-only. The clickable link owns the
 * designer's actual button dimensions so Gutenberg does not compound wrapper
 * padding with link padding. */
.wp-block-button .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	min-height: 48px;
	padding: 0.95rem 1.6rem;
	border: 1.5px solid var(--wp--preset--color--blue-600);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 650;
	line-height: 1;
	transition:
		background-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.wp-block-button.fp-button--compact .wp-block-button__link {
	padding: 0.6rem 1.05rem;
	min-height: 38px;
	font-size: 0.8125rem;
	line-height: 1;
}

.wp-block-button.is-style-fp-light .wp-block-button__link {
	background: var(--wp--preset--color--surface);
	border-color: var(--wp--preset--color--surface);
	color: var(--wp--preset--color--navy-900);
}

.wp-block-button.is-style-fp-light .wp-block-button__link:hover {
	background: var(--wp--preset--color--blue-050);
	color: var(--wp--preset--color--navy-900);
}

.wp-block-button.is-style-fp-outline-light .wp-block-button__link {
	background: transparent;
	border: 1.5px solid rgba(255, 255, 255, 0.55);
	color: var(--wp--preset--color--surface);
}

.wp-block-button.is-style-fp-outline-light .wp-block-button__link:hover {
	background: rgba(255, 255, 255, 0.14);
	border-color: var(--wp--preset--color--surface);
	color: var(--wp--preset--color--surface);
}

/* Reusable unboxed Core Button link. Used for dynamic bound contact data. */
.wp-block-button.fp-text-link .wp-block-button__link {
	min-height: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	color: inherit;
	font: inherit;
	text-decoration: none;
}

.wp-block-button.fp-text-link .wp-block-button__link:hover {
	background: transparent;
	color: inherit;
	text-decoration: underline;
}

.fp-contact-links {
	display: flex;
	align-items: flex-start;
	flex-direction: column;
	gap: var(--wp--preset--spacing--30);
}

.fp-footer-location {
	display: grid;
	gap: 0;
	margin-top: var(--wp--preset--spacing--30);
}

/* The stored footer template part may still carry WordPress's has-small-font-size
 * preset, whose Core rule is !important. Force the approved 17px Body preset here
 * so both file-based and database-saved footer markup render identically. */
.fp-footer-location > *,
.fp-footer-location > .has-small-font-size {
	margin-block: 0;
	font-size: var(--wp--preset--font-size--body) !important;
}


/* ==========================================================================
   5. REUSABLE PAGE COMPONENTS
   ========================================================================== */

.fp-section-head {
	max-width: 46rem;
	margin-bottom: var(--wp--preset--spacing--70);
}

.fp-section-head > :last-child {
	margin-bottom: 0;
}

.fp-section-head :where(h1, h2) + .fp-lede,
.fp-section-head :where(h1, h2) + .wp-block-paragraph.is-style-fp-lede {
	margin-top: var(--wp--preset--spacing--40);
}

/* Designer section-heading pair: when an H3 directly follows an H2 it is a
 * descriptive subheading, not a second bold title. Preserve the semantic H3
 * while matching the prototype's lighter/slate presentation. */
.fp-section-head > h2.wp-block-heading + h3.wp-block-heading,
.editor-styles-wrapper .fp-section-head > h2.wp-block-heading + h3.wp-block-heading {
	font-size: var(--wp--preset--font-size--heading-3);
	font-weight: 400;
	color: var(--wp--preset--color--slate);
	margin-block-start: var(--wp--preset--spacing--30);
	max-width: 46ch;
}

.fp-page-hero {
	position: relative;
	isolation: isolate;
	padding-block: clamp(3rem, 6vw, 5.5rem);
	background:
		radial-gradient(90% 120% at 92% 10%, rgba(140, 27, 18, 0.45) 0%, rgba(140, 27, 18, 0) 60%),
		linear-gradient(160deg, var(--wp--preset--color--navy-800), var(--wp--preset--color--navy-900));
	color: var(--wp--preset--color--on-dark-soft);
}

/* WordPress 7.1 can attach a background image directly to a Group block.
 * The shared pseudo-element keeps the readable designer scrim independent of
 * whichever page-specific image an editor chooses. */
.fp-page-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background:
		linear-gradient(100deg,
			rgba(6, 16, 36, 0.93) 0%,
			rgba(6, 16, 36, 0.86) 30%,
			rgba(7, 22, 48, 0.52) 58%,
			rgba(9, 28, 58, 0.16) 88%,
			rgba(9, 28, 58, 0.10) 100%),
		linear-gradient(to top, rgba(5, 13, 30, 0.6) 0%, rgba(5, 13, 30, 0) 48%);
}

/* Gradient-only inner-page heroes should remain the designer's native
 * radial/linear gradient. The readability scrim is only for heroes that
 * actually contain a background media layer. */
.fp-page-hero:not(:has(> .fp-page-hero__media))::before {
	content: none;
}

.fp-page-hero > * {
	position: relative;
	z-index: 1;
	margin-block: 0;
}

.fp-page-hero__inner {
	max-width: 46rem;
}

.fp-page-hero h1 {
	max-width: 18ch;
	margin-bottom: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--surface);
	font-weight: 300;
}

.fp-page-hero .fp-lede,
.fp-page-hero .wp-block-paragraph.is-style-fp-lede {
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-card,
.wp-block-group.is-style-fp-card {
	height: 100%;
	padding: clamp(var(--wp--preset--spacing--50), 2.2vw, var(--wp--preset--spacing--60));
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0.75rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
	transition:
		box-shadow var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

/* Generic cards are informational by default. Interactive card motion is
 * opt-in on components that expose a real destination. */

.fp-card--dark,
.wp-block-group.is-style-fp-card-dark {
	height: 100%;
	padding: clamp(var(--wp--preset--spacing--50), 2.2vw, var(--wp--preset--spacing--60));
	border: 1px solid rgba(255, 255, 255, 0.14);
	border-radius: 0.75rem;
	background: rgba(255, 255, 255, 0.05);
	color: var(--wp--preset--color--on-dark-soft);
	box-shadow: none;
}

.fp-card__title {
	margin-bottom: var(--wp--preset--spacing--30);
	color: var(--wp--preset--color--navy-800);
}

.fp-card__body {
	color: var(--wp--preset--color--slate);
	font-size: var(--wp--preset--font-size--small);
}

.fp-stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 8.5rem), 1fr));
	gap: var(--wp--preset--spacing--50) var(--wp--preset--spacing--60);
}

/* Core's flow layout can add a block-gap margin to every stat after the
 * first even though the wrapper is visually a grid. Let grid gap own the
 * spacing so all values share the same top row. */
.fp-stats > * {
	margin-block: 0;
}

.fp-stat {
	min-width: 0;
}

.fp-stat__value {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.4rem, 1.1rem + 1.1vw, 2rem);
	font-weight: 600;
	line-height: 1.05;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--navy-800);
	align-self: end;
}

.fp-stat__label {
	margin-top: var(--wp--preset--spacing--20);
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.4;
	color: var(--wp--preset--color--slate);
}

.fp-cta-inline {
	border-block: 1px solid var(--wp--preset--color--line);
}

.fp-cta-inline__inner {
	display: grid;
	align-items: center;
	gap: var(--wp--preset--spacing--50);
}

.fp-cta-band {
	color: var(--wp--preset--color--on-dark-soft);
	background: linear-gradient(120deg, var(--wp--preset--color--navy-800) 0%, var(--wp--preset--color--navy-900) 55%, #2a0f14 130%);
}

.fp-cta-band--ember {
	position: relative;
	isolation: isolate;
	border-top: 3px solid var(--wp--preset--color--ember-500);
	background:
		radial-gradient(120% 100% at 88% -10%, rgba(232, 145, 58, 0.38) 0%, rgba(232, 145, 58, 0) 58%),
		linear-gradient(118deg, #38100c 0%, #6d1a11 44%, #97300f 78%, #b8541c 112%);
}

.fp-cta-band--ember::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image: repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 9px);
}

/* The designer's white CTA reads brick inside the ember band rather than the
 * generic light-button navy. */
.fp-cta-band--ember .wp-block-button.is-style-fp-light .wp-block-button__link {
	color: #7a1b12;
}

.fp-cta-band--ember .wp-block-button.is-style-fp-light .wp-block-button__link:hover {
	background: #ffeee4;
	border-color: #ffeee4;
	color: #7a1b12;
}

.fp-cta-band :where(h2, h3) {
	color: var(--wp--preset--color--surface);
}

.fp-cta-band .fp-lede {
	color: rgba(255, 255, 255, 0.86);
}

.fp-cta-band__inner {
	display: grid;
	align-items: end;
	gap: var(--wp--preset--spacing--60);
}

@media (min-width: 820px) {
	.fp-cta-inline__inner {
		grid-template-columns: minmax(0, 1fr) auto;
		gap: var(--wp--preset--spacing--80);
	}
}

@media (min-width: 900px) {
	.fp-cta-band__inner {
		grid-template-columns: minmax(0, 1fr) auto;
		gap: var(--wp--preset--spacing--80);
	}
}

@media (max-width: 760px) {
	.fp-page-hero::before {
		background: linear-gradient(180deg, rgba(6, 16, 36, 0.86) 0%, rgba(6, 16, 36, 0.9) 55%, rgba(5, 13, 30, 0.95) 100%);
	}
}


/* --------------------------------------------------------------------------
   Inner-page supporting components
   -------------------------------------------------------------------------- */

.fp-page-hero {
	overflow: hidden;
}

.fp-page-hero > .fp-page-hero__media {
	position: absolute;
	inset: 0;
	z-index: -1;
	width: 100%;
	height: 100%;
	margin: 0;
}

.fp-page-hero__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 50%;
}

.fp-page-hero--focal-right .fp-page-hero__media img {
	object-position: 62% 46%;
}

/* Integrations uses an editor-owned Media Library image with the same shared
 * inner-page hero treatment. Keep the skyline centered while the common scrim
 * protects the left-aligned copy. */
.fp-page-hero--integrations .fp-page-hero__media img {
	object-position: 50% 50%;
}

.fp-page-hero__actions {
	margin-block-start: var(--wp--preset--spacing--60);
}

.fp-breadcrumbs {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-breadcrumbs ol {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	padding: 0;
	margin: 0;
	list-style: none;
}

.fp-breadcrumbs li {
	margin: 0;
}

.fp-breadcrumbs li + li::before {
	content: "/";
	margin-right: 0.5rem;
	opacity: 0.5;
}

.fp-breadcrumbs a {
	color: var(--wp--preset--color--on-dark-soft);
	text-decoration: none;
}

.fp-breadcrumbs a:hover {
	color: var(--wp--preset--color--surface);
	text-decoration: underline;
}

.fp-breadcrumbs [aria-current="page"] {
	color: var(--wp--preset--color--surface);
}

.fp-page-hero__inner .fp-breadcrumbs + * {
	margin-block-start: var(--wp--preset--spacing--50);
}

.fp-prose-lead {
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	line-height: 1.4;
	letter-spacing: -0.005em;
	color: var(--wp--preset--color--ink);
}

.fp-section-subhead {
	max-width: 46ch;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--heading-3);
	font-weight: 400;
	line-height: 1.25;
	color: var(--wp--preset--color--slate);
}

.fp-anchor-target {
	scroll-margin-top: calc(var(--wp--custom--fireprograms--header-h) + 4.5rem);
}

@media (min-width: 900px) {
	.fp-split--media-wide {
		grid-template-columns: 0.88fr 1.12fr;
	}
}

/* Sticky in-page section navigation. The tiny optional subnav script owns
 * only the active marker; the navigation and jump links work without JS.
 *
 * WordPress root padding is intentionally retained around Post Content. A raw
 * Custom HTML <nav> therefore begins inside that padded layout. The 0.14.5
 * alignment correction expands only the outer nav across that root gutter; the
 * nested `.fp-container` then supplies the same single gutter used by adjacent
 * page sections. The translucent band/border is still painted independently by
 * a viewport-wide pseudo-element. */
.fp-subnav {
	position: sticky;
	top: var(--fp-subnav-sticky-top, var(--wp--custom--fireprograms--header-h));
	z-index: 40;
	isolation: isolate;
	box-sizing: border-box;
	width: 100%;
	max-width: none;
	margin-inline: 0;
	background: transparent;
}

.fp-subnav::before {
	content: "";
	position: absolute;
	z-index: -1;
	inset-block: 0;
	left: 50%;
	width: 100vw;
	transform: translateX(-50%);
	border-bottom: 1px solid var(--wp--preset--color--line);
	background: rgba(255, 255, 255, 0.92);
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
}

/* Only the link row uses the site's normal container and gutter. */
.fp-subnav > .fp-container {
	box-sizing: border-box;
	width: 100%;
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
	padding-inline: var(--wp--preset--spacing--gutter);
}

.admin-bar .fp-subnav {
	top: var(--fp-subnav-sticky-top, calc(var(--wp--custom--fireprograms--header-h) + 32px));
}

.fp-subnav ul {
	position: relative;
	display: flex;
	justify-content: flex-start;
	gap: var(--wp--preset--spacing--50);
	overflow-x: auto;
	padding: 0;
	margin: 0;
	list-style: none;
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
	scroll-behavior: smooth;
}

.fp-subnav ul::-webkit-scrollbar {
	display: none;
}

.fp-subnav li {
	margin: 0;
}

.fp-subnav a {
	display: inline-block;
	padding-block: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--slate);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
	transition: color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-subnav a:hover,
.fp-subnav a[aria-current="true"] {
	color: var(--wp--preset--color--navy-800);
}

.fp-subnav__marker {
	position: absolute;
	left: 0;
	bottom: 0;
	height: 2px;
	width: var(--fp-subnav-marker-w, 0);
	transform: translateX(var(--fp-subnav-marker-x, 0));
	background: var(--wp--preset--color--ember-500);
	opacity: 0;
	pointer-events: none;
	transition:
		transform 380ms cubic-bezier(.4, .8, .3, 1),
		width 380ms cubic-bezier(.4, .8, .3, 1),
		opacity 200ms var(--wp--custom--fireprograms--ease);
}

.fp-subnav__marker.is-on {
	opacity: 1;
}

/* Icon beside heading/body. Shared by product capabilities and trust reasons. */
.fp-icon-item {
	--fp-h3-size: var(--wp--preset--font-size--heading-4);
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	align-items: start;
	gap: var(--wp--preset--spacing--40);
}

.fp-icon-item > * {
	margin-block: 0;
}

.fp-icon-item .fp-stack {
	--fp-stack-gap: var(--wp--preset--spacing--20);
}

.fp-icon-item h3 {
	color: var(--wp--preset--color--navy-800);
}

.fp-icon-item p {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-icon-item--boxed {
	padding: clamp(var(--wp--preset--spacing--50), 2.2vw, var(--wp--preset--spacing--60));
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-icon-chip {
	display: grid;
	place-items: center;
	width: 46px;
	height: 46px;
	margin: 0;
	background: var(--wp--preset--color--blue-050);
}

.fp-icon-chip img {
	display: block;
	width: 22px;
	height: 22px;
}

/* Capability-group bento: content remains native headings and lists. */
.fp-bento {
	display: grid;
	grid-template-columns: 1fr;
	gap: 1px;
	border: 1px solid #c3cee2;
	background: #c3cee2;
}

.fp-bento > * {
	margin-block: 0;
}

.fp-bento__caption,
.fp-bento__cell {
	background: var(--wp--preset--color--surface);
}

.fp-bento__caption {
	padding: clamp(var(--wp--preset--spacing--40), 2vw, var(--wp--preset--spacing--50));
	background: var(--wp--preset--color--navy-900);
	color: var(--wp--preset--color--surface);
}

.fp-bento__caption > * {
	margin-block: 0;
}

.fp-bento__caption-text {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: var(--wp--preset--spacing--20) var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-bento__caption-text strong {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.0625rem, 0.95rem + 0.5vw, 1.375rem);
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--wp--preset--color--surface);
}

.fp-bento__cell {
	--fp-h3-size: clamp(0.9375rem, 0.86rem + 0.35vw, 1.0625rem);
	padding: clamp(var(--wp--preset--spacing--40), 2.2vw, var(--wp--preset--spacing--50));
}

.fp-bento__cell > * {
	margin-block: 0;
}

.fp-bento__cell h3 {
	padding-bottom: var(--wp--preset--spacing--30);
	margin-bottom: var(--wp--preset--spacing--30);
	border-bottom: 2px solid var(--wp--preset--color--ember-500);
	color: var(--wp--preset--color--navy-800);
}

.fp-bento__cell ul {
	padding: 0;
	margin: 0;
	list-style: none;
}

.fp-bento__cell li {
	position: relative;
	padding-left: 1.05rem;
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 550;
	line-height: 1.35;
	color: var(--wp--preset--color--slate);
}

.fp-bento__cell li + li {
	margin-top: var(--wp--preset--spacing--20);
}

.fp-bento__cell li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.55em;
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--wp--preset--color--ember-500);
}

.fp-bento__cell--feature {
	--fp-h3-size: clamp(1.125rem, 0.98rem + 0.6vw, 1.5rem);
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-bento__cell--feature h3 {
	padding-bottom: var(--wp--preset--spacing--40);
	margin-bottom: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--surface);
}

.fp-bento__cell--feature li {
	padding-left: 1.25rem;
	font-size: clamp(1rem, 0.94rem + 0.28vw, 1.125rem);
	font-weight: 600;
	line-height: 1.3;
	color: var(--wp--preset--color--surface);
}

.fp-bento__cell--feature li + li {
	margin-top: var(--wp--preset--spacing--40);
}

.fp-bento__cell--feature li::before {
	top: 0.5em;
	width: 6px;
	height: 6px;
}

@media (min-width: 560px) {
	.fp-bento {
		grid-template-columns: repeat(6, 1fr);
	}

	.fp-bento__caption {
		grid-column: 1 / -1;
	}

	.fp-bento__cell {
		grid-column: span 3;
	}

	.fp-bento .fp-bento__cell--feature,
	.fp-bento .fp-bento__cell--last {
		grid-column: 1 / -1;
	}
}

@media (min-width: 900px) {
	.fp-bento__cell,
	.fp-bento .fp-bento__cell--last {
		grid-column: 4 / -1;
	}

	.fp-bento .fp-bento__cell--feature {
		grid-column: 1 / span 3;
		grid-row: span 3;
		display: flex;
		flex-direction: column;
		justify-content: center;
	}
}

/* Improvement cycle. Kept as an accessible inline SVG because the diagram's
 * radial relationship is the information; surrounding narrative stays blocks. */
.fp-cycle {
	display: block;
	width: 100%;
	max-width: 34rem;
	height: auto;
	margin-inline: auto;
}

.fp-cycle__arcs path {
	fill: none;
	stroke: var(--wp--preset--color--navy-800);
	stroke-width: 7;
	stroke-linecap: round;
}

.fp-cycle__head {
	fill: var(--wp--preset--color--navy-800);
}

.fp-cycle__nodes circle {
	fill: var(--wp--preset--color--ember-500);
}

.fp-cycle__labels text {
	fill: var(--wp--preset--color--navy-800);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 26px;
	font-weight: 600;
}

.fp-cycle__center {
	fill: var(--wp--preset--color--navy-800);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 40px;
	font-weight: 600;
	letter-spacing: -0.01em;
}

/* Before / pivot / after progression. Native List/List Item blocks provide
 * the editable content; CSS provides the horizontal/vertical visual track. */
.fp-track {
	position: relative;
	display: grid;
	gap: var(--wp--preset--spacing--50);
	padding: 0;
	margin: 0;
	list-style: none;
}

.fp-track__step {
	position: relative;
	padding-top: var(--wp--preset--spacing--50);
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(0.8125rem, 0.74rem + 0.32vw, 0.9375rem);
	font-weight: 600;
	line-height: 1.25;
	letter-spacing: -0.005em;
	color: var(--wp--preset--color--navy-800);
	text-wrap: balance;
}

.fp-track__step::before {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: calc(var(--wp--preset--spacing--50) * -1);
	height: 2px;
	background: var(--fp-track-line, var(--wp--preset--color--line));
}

.fp-track__step:last-child::before {
	right: 0;
}

.fp-track__step::after {
	content: "";
	position: absolute;
	top: -4px;
	left: 0;
	width: 10px;
	height: 10px;
	background: var(--fp-track-dot, #b3bfd4);
}

.fp-track__step--before {
	--fp-track-dot: #b7c2d6;
	color: var(--wp--preset--color--slate);
}

.fp-track__step--pivot {
	--fp-track-dot: var(--wp--preset--color--ember-500);
	font-size: clamp(0.9375rem, 0.84rem + 0.42vw, 1.125rem);
	color: var(--wp--preset--color--ember-700);
}

.fp-track__step--pivot::after {
	top: -7px;
	width: 16px;
	height: 16px;
}

.fp-track__step--after {
	--fp-track-dot: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--navy-800);
}

.fp-closing-note {
	max-width: 60ch;
	margin-top: clamp(var(--wp--preset--spacing--60), 4vw, var(--wp--preset--spacing--80));
	padding-left: var(--wp--preset--spacing--50);
	border-left: 3px solid var(--wp--preset--color--ember-500);
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	line-height: 1.45;
	color: var(--wp--preset--color--navy-800);
}

.wp-block-button.fp-button--large .wp-block-button__link {
	padding: 1.1rem 2rem;
	font-size: 1.0625rem;
}

@media (min-width: 900px) {
	.fp-track {
		grid-auto-flow: column;
		grid-auto-columns: 1fr;
		column-gap: var(--wp--preset--spacing--40);
	}

	.fp-track::before {
		content: "";
		position: absolute;
		top: 0;
		left: 0;
		right: 0;
		height: 2px;
		background: linear-gradient(90deg,
			#ccd4e3 0%, #ccd4e3 36%,
			var(--wp--preset--color--ember-500) 46%, var(--wp--preset--color--ember-500) 53%,
			var(--wp--preset--color--navy-800) 63%, var(--wp--preset--color--navy-800) 100%);
	}

	.fp-track::after {
		content: "";
		position: absolute;
		top: -4px;
		right: -1px;
		width: 0;
		height: 0;
		border-top: 5px solid transparent;
		border-bottom: 5px solid transparent;
		border-left: 9px solid var(--wp--preset--color--navy-800);
	}

	.fp-track__step {
		padding-right: var(--wp--preset--spacing--40);
	}

	.fp-track__step::before {
		background: transparent;
	}
}

@media (max-width: 899px) {
	.fp-track {
		gap: 0;
		padding-left: var(--wp--preset--spacing--60);
	}

	.fp-track::before {
		content: "";
		position: absolute;
		top: 6px;
		bottom: 1.6rem;
		left: 4px;
		width: 2px;
		background: linear-gradient(180deg,
			#ccd4e3 0%, #ccd4e3 36%,
			var(--wp--preset--color--ember-500) 46%, var(--wp--preset--color--ember-500) 53%,
			var(--wp--preset--color--navy-800) 63%, var(--wp--preset--color--navy-800) 100%);
	}

	.fp-track__step {
		padding-top: 0;
		padding-bottom: var(--wp--preset--spacing--50);
	}

	.fp-track__step::before {
		display: none;
	}

	.fp-track__step::after {
		top: 0.35em;
		left: calc(var(--wp--preset--spacing--60) * -1);
	}

	.fp-track__step--pivot::after {
		top: 0.3em;
		left: calc(var(--wp--preset--spacing--60) * -1 - 3px);
	}
}

@media (max-width: 782px) {
	.admin-bar .fp-subnav {
		top: var(--fp-subnav-sticky-top, calc(var(--wp--custom--fireprograms--header-h) + 46px));
	}
}

@media (max-width: 760px) {
	.fp-page-hero--focal-right .fp-page-hero__media img {
		object-position: 58% 46%;
	}
}

@media (prefers-reduced-motion: reduce) {
	.fp-subnav ul {
		scroll-behavior: auto;
	}

	.fp-subnav__marker {
		transition: opacity 200ms linear;
	}
}

/* ==========================================================================
   6. SITE HEADER
   ========================================================================== */

/* The Template Part block itself owns the semantic <header> and this class.
 * Do not wrap a second <header> inside parts/header.html: a sticky child is
 * constrained by that wrapper and cannot remain fixed through page scroll. */
.fp-site-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: var(--wp--preset--color--surface);
}

/* Core flow layouts apply the global block gap between sibling Groups.
 * The utility bar and primary header are two rows of one component, so they
 * must meet directly with no content-flow gap between them. */
.fp-site-header > * + * {
	margin-block-start: 0;
}

.admin-bar .fp-site-header {
	top: 32px;
}

.fp-utility-bar {
	min-height: var(--wp--custom--fireprograms--utility-h);
	background: var(--wp--preset--color--navy-900);
	color: var(--wp--preset--color--on-dark-soft);
	font-size: 0.8125rem;
}

.fp-utility-bar__inner {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	align-items: center;
	min-height: var(--wp--custom--fireprograms--utility-h);
	gap: var(--wp--preset--spacing--50);
}

.fp-utility-bar__inner > * {
	margin: 0;
}

.fp-utility-bar :where(a, .wp-block-navigation-item__content) {
	color: var(--wp--preset--color--on-dark-soft);
	font-weight: 500;
	text-decoration: none;
}

.fp-utility-bar :where(a, .wp-block-navigation-item__content):hover {
	color: var(--wp--preset--color--surface);
	text-decoration: underline;
}

.fp-utility-contact {
	justify-self: start;
	justify-content: flex-start;
	margin: 0;
}

/* Contact Us is the persistent mobile utility action. Desktop already has the
 * primary Contact Us CTA in the white header, so do not duplicate it there. */
.fp-utility-bar__contact {
	display: none !important;
}

/* The primary-header Contact Us CTA is hidden below 1180px, so keep the
 * utility-row Contact Us action visible through tablet widths as well as
 * phone widths. This prevents the 1024–1179px gap where neither CTA showed. */
@media (max-width: 1179px) {
	.fp-utility-bar__contact {
		display: block !important;
	}
}

.fp-utility-nav {
	justify-self: end;
	margin: 0;
	font-size: 0.8125rem;
	font-weight: 500;
}

/* theme.json intentionally gives normal site navigation a larger default.
 * Utility navigation is a separate, compact text treatment. */
.fp-utility-nav .wp-block-navigation-item__content {
	font-size: inherit;
	font-weight: inherit;
	line-height: 1.35;
}

/* SceneConnect and Screen Connect are utility actions rather than ordinary
 * navigation destinations. Give them a compact outline-button treatment while
 * keeping the row lighter than the primary site CTA. */
.fp-utility-nav .wp-block-navigation-item__content {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	min-height: 26px;
	padding: 0.18rem 0.66rem;
	border: 1px solid rgba(255, 255, 255, 0.42);
	border-radius: var(--wp--custom--fireprograms--radius-pill);
	background: rgba(255, 255, 255, 0.04);
	line-height: 1;
	text-decoration: none;
	transition:
		background-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

/* Compact utility buttons use a tighter gap than the previous text links. */
.fp-utility-nav.wp-block-navigation__container {
	column-gap: 12px;
}

/* Core/global link hover styles can otherwise leak the site's default blue
 * into the dark utility bar. Keep these links on the approved soft-to-white
 * treatment, including the dynamically bound phone link. */
.fp-utility-bar .fp-utility-nav .wp-block-navigation-item__content:hover,
.fp-utility-bar .fp-utility-nav .wp-block-navigation-item__content:focus-visible {
	background: rgba(255, 255, 255, 0.14);
	border-color: rgba(255, 255, 255, 0.85);
	color: var(--wp--preset--color--surface);
	text-decoration: none;
}

.fp-utility-bar .fp-utility-bar__phone .wp-block-button__link:hover,
.fp-utility-bar .fp-utility-bar__phone .wp-block-button__link:focus-visible {
	color: var(--wp--preset--color--surface);
	text-decoration: underline;
}

.fp-utility-bar__phone {
	white-space: nowrap;
}

/* Contact Us remains visible in the utility row only while the primary
 * Navigation is in its mobile/drawer mode. Desktop already has the full
 * primary-header CTA, so duplicating it there adds visual and analytics noise. */
.fp-utility-bar__contact {
	display: none;
	white-space: nowrap;
}

.fp-utility-bar__phone .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	gap: 0.4em;
}

.fp-utility-bar__phone .wp-block-button__link::before {
	/* Match the approved prototype's classic telephone glyph exactly rather
	 * than substituting a modern handset icon. Generated content is
	 * decorative; the linked phone number remains the accessible label. */
	content: "☎";
	flex: 0 0 auto;
	font-family: sans-serif;
	font-size: 0.95em;
	font-weight: 400;
	line-height: 1;
}

/* The header bands use default block layout and their `.fp-container` children
 * own the 1200px + fluid-gutter geometry. This mirrors the designer's
 * `.container` directly and avoids WordPress constrained-layout root padding
 * being applied in addition to the component gutter around ~1200–1300px. */
.fp-utility-bar__inner,
.fp-primary-header__inner {
	width: 100%;
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
}

.fp-primary-header {
	border-bottom: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface);
}

.fp-primary-header__inner {
	display: grid;
	grid-template-columns: auto minmax(max-content, 1fr) auto;
	align-items: center;
	min-height: var(--wp--custom--fireprograms--nav-h);
	gap: var(--wp--preset--spacing--50);
}

.fp-primary-header__inner > * {
	margin: 0;
}

.fp-brand {
	justify-self: start;
	line-height: 0;
}

.fp-brand a {
	display: inline-flex;
	align-items: center;
}

.fp-brand-wordmark {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 0;
}

.fp-brand-wordmark > * {
	margin: 0 !important;
}

.fp-brand img {
	display: block;
	width: clamp(220px, 22vw, 290px);
	height: auto;
}

.fp-brand-tagline {
	position: absolute;
	left: 0;
	bottom: 8%;
	width: 72%;
	margin: 0 !important;
	color: var(--wp--preset--color--ink);
	font-size: 0.54rem;
	font-weight: 600;
	line-height: 1;
	letter-spacing: 0.01em;
	text-align: left;
	white-space: nowrap;
}

@media (max-width: 1199px) {
	.fp-brand-tagline {
		font-size: clamp(0.42rem, 0.72vw, 0.54rem);
	}
}

.fp-primary-nav {
	justify-self: end;
	margin: 0;
}

/* These live in the real Primary Navigation entity so the mobile drawer remains
 * editor-managed, but they are intentionally absent from the desktop nav row. */
.fp-primary-nav .fp-mobile-nav-action {
	display: none;
}

.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container {
	display: flex;
	align-items: center;
	gap: clamp(var(--wp--preset--spacing--40), 1.8vw, var(--wp--preset--spacing--60));
}

.fp-primary-nav .wp-block-navigation-item__content {
	position: relative;
	padding-block: 0.5rem;
	color: var(--wp--preset--color--ink);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 550;
	text-decoration: none;
	white-space: nowrap;
}

/* The approved header communicates hover with the ember underline, not a blue
 * text-color shift. Current-page states remain navy via the rules below. */
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item:not(.current-menu-item):not(.current-menu-parent):not(.current-menu-ancestor):not(:has(.current-menu-item)):not(:has(.wp-block-navigation__submenu-container [aria-current="page"])) > .wp-block-navigation-item__content:not([aria-current="page"]):hover {
	color: var(--wp--preset--color--ink);
}

/* Core wraps the desktop list inside its responsive-container markup.
 * Target the documented responsive content wrapper rather than assuming the
 * top-level <ul> is a direct child of <nav>. */
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item:not(.wp-block-navigation-submenu) > .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 2px;
	background: var(--wp--preset--color--ember-500);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item:not(.wp-block-navigation-submenu) > .wp-block-navigation-item__content:hover::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .current-menu-item:not(.wp-block-navigation-submenu) > .wp-block-navigation-item__content::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item:not(.wp-block-navigation-submenu) > .wp-block-navigation-item__content[aria-current="page"]::after {
	transform: scaleX(1);
}

/* Core renders a submenu parent's caret as a sibling button rather than
 * inside the anchor. Put the underline on the top-level submenu item itself so
 * it spans both the text and the caret, like the approved designer markup. */
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu {
	position: relative;
}

.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 2px;
	background: var(--wp--preset--color--ember-500);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
	pointer-events: none;
}

.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu:hover::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu:focus-within::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu.current-menu-item::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu.current-menu-parent::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu.current-menu-ancestor::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu:has(> .wp-block-navigation-item__content[aria-current="page"])::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu:has(.current-menu-item)::after,
.fp-primary-nav .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu:has(.wp-block-navigation__submenu-container [aria-current="page"])::after {
	transform: scaleX(1);
}

.fp-primary-nav :where(
	.current-menu-item,
	.current-menu-parent,
	.current-menu-ancestor,
	.wp-block-navigation-submenu:has(> .wp-block-navigation-item__content[aria-current="page"]),
	.wp-block-navigation-submenu:has(.current-menu-item),
	.wp-block-navigation-submenu:has(.wp-block-navigation__submenu-container [aria-current="page"])
) > .wp-block-navigation-item__content,
.fp-primary-nav .wp-block-navigation-item__content[aria-current="page"] {
	color: var(--wp--preset--color--navy-800);
}

.fp-primary-nav .wp-block-navigation__submenu-container {
	padding-block: var(--wp--preset--spacing--20);
	border: 0;
	border-top: 2px solid var(--wp--preset--color--ember-500);
	box-shadow: var(--wp--preset--shadow--large);
}

/* Core applies its own width/min-width when a submenu becomes visible. Match
 * the designer's 17rem panel and win that state-specific Core rule explicitly. */
@media (min-width: 1024px) {
	.fp-primary-nav .wp-block-navigation-submenu > .wp-block-navigation__submenu-container {
		width: auto !important;
		min-width: 17rem !important;
	}
}

/* Core's submenu selector is more specific than the basic component selector
 * in some Navigation block states. Match that specificity so Platform and
 * Support retain the approved navy dropdown surface. */
.fp-primary-nav .wp-block-navigation__container .wp-block-navigation__submenu-container {
	background-color: var(--wp--preset--color--navy-900);
}

.fp-primary-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	padding: 0.65rem var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--on-dark-soft);
	white-space: normal;
}

.fp-primary-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
.fp-primary-nav .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content {
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--surface);
}

/* Mark the active child inside Platform/Support as well as the parent underline.
 * URL-based Navigation Links may receive aria-current without Core adding a
 * current-menu-item class, so support both semantic states. */
.fp-primary-nav .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content,
.fp-primary-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content[aria-current="page"] {
	box-shadow: inset 3px 0 0 var(--wp--preset--color--ember-500);
}

.fp-header-cta {
	flex: 0 0 auto;
}

.fp-header-cta .wp-block-button__link {
	white-space: nowrap;
}

/* --------------------------------------------------------------------------
 * Responsive primary navigation
 * --------------------------------------------------------------------------
 * The approved prototype becomes a drawer below 1024px. WordPress Core's
 * Navigation block uses a smaller built-in breakpoint and a viewport-covering
 * overlay. These rules keep Core's accessible open/close behavior while making
 * the rendered drawer match the FirePrograms header: it begins below the full
 * sticky header, leaves the logo visible, left-aligns the menu, and uses one
 * divider between menu rows. */
@media (max-width: 1023px) {
	.fp-utility-bar__contact {
		display: block;
	}

	/* Core makes the Navigation block itself a positioning context. That causes
	 * its overlay to begin at the hamburger instead of the viewport edge. On
	 * mobile, remove that local containing block so the absolute drawer anchors
	 * to the full-width sticky site header, matching the prototype. */
	.fp-primary-nav {
		position: static !important;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container-open {
		display: inline-flex !important;
		position: relative;
		align-items: center;
		justify-content: center;
		width: 48px;
		height: 48px;
		margin: 0;
		padding: 0;
		border: 1px solid var(--wp--preset--color--line);
		border-radius: 8px;
		background: transparent;
		color: var(--wp--preset--color--ink);
	}

	/* Core's stock icon is two strokes. Draw the approved three-line control
	 * without changing the accessible button or its label. */
	.fp-primary-nav .wp-block-navigation__responsive-container-open svg {
		display: none;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container-open::before {
		content: "";
		display: block;
		width: 20px;
		height: 2px;
		background: currentColor;
		box-shadow: 0 -6px 0 currentColor, 0 6px 0 currentColor;
	}

	/* Force the prototype's 1024px drawer breakpoint instead of Core's much
	 * narrower default Navigation breakpoint. */
	.fp-primary-nav .wp-block-navigation__responsive-container:not(.is-menu-open) {
		display: none !important;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open {
		display: flex !important;
		position: absolute !important;
		inset: auto 0 auto 0 !important;
		top: 100% !important;
		width: 100%;
		height: auto;
		min-height: 0;
		max-height: none;
		overflow-y: auto;
		padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--gutter) var(--wp--preset--spacing--60);
		border-bottom: 1px solid var(--wp--preset--color--line);
		box-shadow: var(--wp--preset--shadow--large);
		background: var(--wp--preset--color--surface);
		color: var(--wp--preset--color--ink);
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		align-items: stretch;
		width: 100%;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content > .wp-block-navigation__container {
		display: grid !important;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		align-items: stretch;
		width: 100%;
		gap: 0 var(--wp--preset--spacing--30);
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item {
		grid-column: 1 / -1;
		align-items: stretch;
		justify-content: flex-start;
		width: 100%;
		margin: 0;
		border-bottom: 1px solid var(--wp--preset--color--line);
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
		display: flex;
		justify-content: flex-start;
		width: 100%;
		padding-block: var(--wp--preset--spacing--40);
		color: var(--wp--preset--color--ink);
		font-size: var(--wp--preset--font-size--body);
		text-align: left;
		white-space: normal;
	}

	/* Mobile submenus are always expanded and indented. Hide Core's disclosure
	 * caret so the hierarchy reads like the approved static drawer. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-icon {
		display: none;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
		display: flex !important;
		position: static !important;
		flex-direction: column;
		width: 100% !important;
		min-width: 0 !important;
		height: auto !important;
		margin: 0;
		padding: 0 0 0 var(--wp--preset--spacing--40);
		border: 0;
		box-shadow: none;
		background: transparent !important;
		opacity: 1 !important;
		visibility: visible !important;
		transform: none !important;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item {
		width: 100%;
		margin: 0;
		border-bottom: 1px solid var(--wp--preset--color--line);
	}

	/* The top-level submenu parent already provides the divider after its child
	 * list, so suppress the final child's divider and avoid a double rule. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container > .wp-block-navigation-item:last-child {
		border-bottom: 0;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		color: var(--wp--preset--color--slate);
		font-size: 1rem;
	}

	/* Current mobile page marker. Only the most specific active destination
	 * receives the ember bar: an exact top-level page OR an active child page.
	 * The bar is absolutely positioned a little to the left of the label, into
	 * the drawer/submenu padding, so it never consumes space or overlaps text. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-item.current-menu-item > .wp-block-navigation-item__content,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-item > .wp-block-navigation-item__content[aria-current="page"] {
		position: relative;
		box-shadow: none;
		color: var(--wp--preset--color--navy-800);
		font-weight: 700;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-item.current-menu-item > .wp-block-navigation-item__content::before,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-item > .wp-block-navigation-item__content[aria-current="page"]::before {
		content: "";
		position: absolute;
		left: -0.625rem;
		top: 50%;
		width: 3px;
		height: 1.75rem;
		border-radius: 999px;
		background: var(--wp--preset--color--ember-500);
		transform: translateY(-50%);
	}

	/* Keep the owning Platform/Support parent visually emphasized while a child
	 * is active, but do not give it a second current-page indicator. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-submenu.current-menu-ancestor > .wp-block-navigation-item__content,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open
		.wp-block-navigation__responsive-container-content > .wp-block-navigation__container >
		.wp-block-navigation-submenu[data-fp-current-section="true"] > .wp-block-navigation-item__content {
		box-shadow: none;
		color: var(--wp--preset--color--navy-800);
		font-weight: 700;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-submenu::after,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content > .wp-block-navigation__container > .wp-block-navigation-item:not(.wp-block-navigation-submenu) > .wp-block-navigation-item__content::after {
		display: none;
	}

	/* The primary row stays intentionally simple on mobile: full-size brand plus
	 * the menu control. Contact Us remains visible above in the compact utility
	 * row instead of competing with the logo for primary-row width. */
}

@media (min-width: 1024px) {
	.fp-primary-nav .wp-block-navigation__responsive-container-open {
		display: none !important;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container {
		display: block !important;
	}
}

@media (max-width: 1179px) {
	.fp-primary-header__inner {
		grid-template-columns: auto minmax(0, 1fr);
	}

	.fp-primary-header .fp-header-cta {
		display: none !important;
	}

	.fp-utility-contact {
		column-gap: 24px;
	}

}

/* The prototype accidentally hides the phone below 640px. Keep all three
 * utility actions available by giving the phone its own first row on narrow
 * screens and the two service links a second centered row. */
@media (max-width: 639px) {
	.fp-utility-bar {
		min-height: 0;
		padding-block: var(--wp--preset--spacing--20);
	}

	.fp-utility-bar__inner {
		grid-template-columns: 1fr;
		justify-items: center;
		min-height: 0;
		gap: var(--wp--preset--spacing--10);
	}

	.fp-utility-contact {
		display: flex;
		justify-self: center;
	}

	.fp-utility-nav {
		justify-self: center;
	}

	.fp-utility-nav.wp-block-navigation__container {
		justify-content: center;
		column-gap: 12px;
		row-gap: 8px;
	}
}

@media (max-width: 782px) {
	.admin-bar .fp-site-header {
		top: 46px;
	}
}

/* ==========================================================================
   7. SITE FOOTER
   ========================================================================== */

.fp-site-footer {
	padding-block: var(--wp--preset--spacing--80) var(--wp--preset--spacing--60);
	background: var(--wp--preset--color--navy-900);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-footer-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
	gap: var(--wp--preset--spacing--70) var(--wp--preset--spacing--60);
}

/* This Group block still carries Core's flow-layout class even though the
 * FirePrograms primitive turns it into a CSS grid. Core's flow rule adds a
 * block-start margin to every child after the first; reset that hidden margin
 * so all four desktop footer columns begin on the same grid row. */
.fp-footer-grid > * {
	margin-block: 0;
}

.fp-footer-brand {
	max-width: 30rem;
}

.fp-footer-logo {
	margin: 0 0 var(--wp--preset--spacing--40);
}

.fp-footer-logo img {
	display: block;
	width: auto;
	height: clamp(56px, 4.4vw, 68px);
	margin: 0;
}

.fp-footer__heading {
	margin: 0 0 var(--wp--preset--spacing--40);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	line-height: 1.3;
	text-transform: uppercase;
	color: var(--wp--preset--color--surface);
}

.fp-footer-list.wp-block-navigation {
	align-items: flex-start;
}

.fp-footer-list .wp-block-navigation__container {
	gap: 0;
}

/* Mirror the designer literally: its plain UL has no flex/grid gap and gives
 * each list item after the first a 12px top margin. This avoids Core
 * Navigation layout spacing changing the apparent rhythm. */
/* The designer list item itself still inherits the 17px body strut even though
 * the anchor is 15px. That produces a 28.05px rendered LI box (17 * 1.65),
 * while the link text remains 15px / 24.75px. WordPress Navigation otherwise
 * collapses the LI strut down to the link size and makes the same 12px margin
 * look visually tighter. */
.fp-footer-list .wp-block-navigation-item {
	margin-block: 0;
	font-size: var(--wp--preset--font-size--body);
	line-height: 1.65;
	/* Core Navigation makes each LI a flex item, so unlike the designer's
	 * plain inline LI, the inherited 17px line strut does not contribute to
	 * its box height. Force the measured designer item box: 17px × 1.65. */
	min-block-size: 1.753125rem;
	align-items: center;
}

.fp-footer-list .wp-block-navigation-item + .wp-block-navigation-item {
	margin-block-start: var(--wp--preset--spacing--30);
}

.fp-footer-list .wp-block-navigation-item__content,
.fp-site-footer a:not(.wp-element-button) {
	color: var(--wp--preset--color--on-dark-soft);
	font-size: var(--wp--preset--font-size--small);
	text-decoration: none;
}

/* Keep the current-page state legible inside the dark footer. WordPress can
 * apply global Navigation current-item colors that are appropriate for the
 * light primary header but fail contrast here. */
footer.fp-site-footer .fp-footer-list .current-menu-item > .wp-block-navigation-item__content,
footer.fp-site-footer .fp-footer-list .wp-block-navigation-item__content[aria-current="page"] {
	color: var(--wp--preset--color--on-dark-soft);
}

/* Footer navigation follows the designer's normal body weight rather than the
 * global Navigation block's 600 weight. */
/* The designer's footer links inherit the site's 1.65 body line-height. */
.fp-footer-list .wp-block-navigation-item__content {
	font-weight: 400;
	line-height: 1.65;
}

.fp-footer-tagline {
	letter-spacing: 0.3px;
}

.fp-footer-list .wp-block-navigation-item__content:hover,
.fp-site-footer a:not(.wp-element-button):hover {
	color: var(--wp--preset--color--surface);
	text-decoration: underline;
}

.fp-site-footer .wp-block-button.fp-text-link .wp-block-button__link {
	color: var(--wp--preset--color--on-dark-soft);
	font-size: var(--wp--preset--font-size--small);
}

.fp-site-footer .wp-block-button.fp-text-link .wp-block-button__link:hover {
	color: var(--wp--preset--color--surface);
}

.fp-footer-bottom {
	margin-top: var(--wp--preset--spacing--80);
	padding-top: var(--wp--preset--spacing--50);
	border-top: 1px solid rgba(255, 255, 255, 0.14);
	font-size: var(--wp--preset--font-size--small);
	gap: var(--wp--preset--spacing--40) var(--wp--preset--spacing--60);
}

.fp-footer-bottom__copyright {
	max-width: 52ch;
	margin: 0;
}

.fp-footer-legal.wp-block-navigation {
	margin: 0;
}

.fp-footer-legal .wp-block-navigation__container {
	gap: var(--wp--preset--spacing--50);
}

/*
 * Legal links are intentionally always underlined so they read as links even
 * without hover. Keep this selector more specific than the footer's general
 * link reset above.
 */
.fp-site-footer .fp-footer-legal .wp-block-navigation-item__content {
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.14em;
}

@media (min-width: 900px) {
	.fp-footer-grid {
		grid-template-columns: 1.6fr 1fr 1fr 1fr;
	}
}

/* ==========================================================================
   7. MOTION PREFERENCES
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		scroll-behavior: auto !important;
		animation-duration: 0.001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.001ms !important;
	}
}

/* Scroll-in reveal used by the designer on selected content components.
 * JavaScript adds `.fp-reveal` only after it is running, so content remains
 * fully visible if scripting is unavailable. */
.fp-reveal {
	opacity: 0;
	transform: translateY(14px);
	transition:
		opacity 600ms var(--wp--custom--fireprograms--ease),
		transform 600ms var(--wp--custom--fireprograms--ease);
}

.fp-reveal.is-visible {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: reduce) {
	.fp-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* ==========================================================================
   8. SOFTWARE PACKAGES PAGE COMPONENTS
   ========================================================================== */

.fp-page-hero--focal-training .fp-page-hero__media img {
	object-position: 60% 52%;
}

/* Shared benefits that apply to every package. */
.fp-included {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
	gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60);
	padding: var(--wp--preset--spacing--50) 0 0;
	margin: 0 0 clamp(var(--wp--preset--spacing--60), 4vw, var(--wp--preset--spacing--70));
	border-top: 2px solid var(--wp--preset--color--line);
	list-style: none;
}

.fp-included li,
.fp-plan__features li {
	position: relative;
	margin: 0;
	color: var(--wp--preset--color--navy-800);
}

.fp-included li {
	padding-left: 1.6rem;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
}

.fp-included li::before,
.fp-plan__features li::before {
	content: "";
	position: absolute;
	border-left: 2px solid var(--wp--preset--color--ember-500);
	border-bottom: 2px solid var(--wp--preset--color--ember-500);
	transform: rotate(-45deg);
}

.fp-included li::before {
	left: 0;
	top: 0.35em;
	width: 0.55rem;
	height: 0.3rem;
}

.fp-pricing {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 17.5rem), 1fr));
	align-items: stretch;
	gap: var(--wp--preset--spacing--50);
}

/* Core's flow layout can add a top margin to later Group children. Grid gap is
 * the single source of spacing here so all three package cards share a top edge. */
.fp-pricing > * {
	margin-block: 0;
}

.fp-plan {
	display: flex;
	flex-direction: column;
	min-width: 0;
	padding: clamp(var(--wp--preset--spacing--50), 2.4vw, var(--wp--preset--spacing--60));
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-plan > * {
	margin-block: 0;
}

.fp-plan--featured {
	border-color: var(--wp--preset--color--navy-800);
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--on-dark-soft);
	box-shadow: var(--wp--preset--shadow--large);
}

.fp-plan__eyebrow {
	margin-bottom: var(--wp--preset--spacing--20);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ember-700);
}

.fp-plan--featured .fp-plan__eyebrow {
	color: var(--wp--preset--color--ember-500);
}

.fp-plan__name {
	--fp-h3-size: clamp(1.125rem, 1rem + 0.5vw, 1.375rem);
	margin-bottom: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--navy-800);
}

.fp-plan--featured .fp-plan__name {
	color: var(--wp--preset--color--surface);
}

.fp-plan__from {
	margin-bottom: var(--wp--preset--spacing--10);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-plan__price {
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	gap: 0.35rem;
}

.fp-plan__amount {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.75rem, 1.4rem + 1.4vw, 2.5rem);
	font-weight: 600;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--navy-800);
}

.fp-plan__unit,
.fp-plan__desc {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-plan__quote {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.125rem, 1rem + 0.5vw, 1.375rem);
	font-weight: 600;
	line-height: 1.15;
	color: var(--wp--preset--color--navy-800);
}

.fp-plan__note {
	margin-top: var(--wp--preset--spacing--40);
	padding-top: var(--wp--preset--spacing--40);
	border-top: 1px solid var(--wp--preset--color--line);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 650;
	color: var(--wp--preset--color--navy-800);
}

.fp-plan__desc {
	margin-top: var(--wp--preset--spacing--40);
}

.fp-plan__features-title {
	margin-top: var(--wp--preset--spacing--50);
	margin-bottom: var(--wp--preset--spacing--30);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--navy-800);
}

.fp-plan__features {
	padding: 0;
	margin: 0;
	list-style: none;
}

.fp-plan__features li {
	padding-left: 1.5rem;
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.35;
	color: var(--wp--preset--color--slate);
}

.fp-plan__features li + li {
	margin-top: var(--wp--preset--spacing--20);
}

.fp-plan__features li::before {
	left: 1px;
	top: 0.38em;
	width: 0.5rem;
	height: 0.27rem;
}

/* Client-review package feature treatment: use plus signs for package
 * inclusions while leaving generic included/check lists unchanged. */
.fp-plan__features li::before {
	content: "+";
	left: 1px;
	top: 0;
	width: auto;
	height: auto;
	border: 0;
	color: var(--wp--preset--color--ember-500);
	font-weight: 700;
	line-height: 1.35;
	transform: none;
}

.fp-plan__cta {
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--60);
}

.fp-plan__cta .wp-block-button,
.fp-plan__cta .wp-block-button__link {
	width: 100%;
}

.fp-plan--featured :where(.fp-plan__from, .fp-plan__unit, .fp-plan__desc) {
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-plan--featured :where(.fp-plan__amount, .fp-plan__quote, .fp-plan__note, .fp-plan__features-title, .fp-plan__features li) {
	color: var(--wp--preset--color--surface);
}

/* Keep the featured package checklist true white, matching the designer. This
 * explicit component selector wins over Core list-item color rules. */
.fp-plan--featured .fp-plan__features li {
	color: var(--wp--preset--color--surface);
}

.fp-plan--featured .fp-plan__note {
	border-top-color: rgba(255, 255, 255, 0.2);
}

.fp-prose-pair {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(var(--wp--preset--spacing--60), 4vw, var(--wp--preset--spacing--80));
	margin-top: clamp(var(--wp--preset--spacing--60), 4vw, var(--wp--preset--spacing--70));
}

.fp-prose-pair > * {
	margin-block: 0;
}

.fp-prose-pair p {
	color: var(--wp--preset--color--slate);
}

.fp-prose-pair .fp-prose-pair__lead {
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	line-height: 1.4;
	letter-spacing: -0.005em;
	color: var(--wp--preset--color--ink);
}

@media (min-width: 860px) {
	.fp-prose-pair {
		grid-template-columns: 1fr 1fr;
	}
}

/* Outcome track: neutral progression that resolves in the ember end state. */
.fp-track--outcome {
	--fp-track-line: var(--wp--preset--color--line);
}

.fp-track--outcome .fp-track__step {
	font-size: clamp(0.9375rem, 0.85rem + 0.35vw, 1.0625rem);
}

.fp-track--outcome .fp-track__step--end {
	--fp-track-dot: var(--wp--preset--color--ember-500);
	font-size: clamp(1.0625rem, 0.92rem + 0.55vw, 1.375rem);
	color: var(--wp--preset--color--ember-700);
}

.fp-track--outcome .fp-track__step--end::after {
	top: -7px;
	width: 16px;
	height: 16px;
}

@media (min-width: 900px) {
	.fp-track--outcome::before {
		background: linear-gradient(90deg, #ccd4e3 0%, #d6ccd0 45%, #e8b985 78%, var(--wp--preset--color--ember-500) 100%);
	}

	.fp-track--outcome::after {
		border-left-color: var(--wp--preset--color--ember-500);
	}
}

.wp-block-button.fp-button--ghost .wp-block-button__link {
	background: transparent;
	color: var(--wp--preset--color--blue-600);
}

.wp-block-button.fp-button--ghost .wp-block-button__link:hover {
	background: var(--wp--preset--color--blue-600);
	color: var(--wp--preset--color--surface);
}

@media (max-width: 899px) {
	.fp-track--outcome::before {
		background: linear-gradient(180deg, #ccd4e3 0%, #d6ccd0 45%, #e8b985 78%, var(--wp--preset--color--ember-500) 100%);
	}
}

/* ==========================================================================
   11. AI / DATA ANALYTICS COMPONENTS
   ========================================================================== */

/* Blue-outline button on light surfaces. This is intentionally a color-only
 * variant of the shared FirePrograms button base. `fp-ghost` remains as a
 * compatibility alias for older saved content. */
.wp-block-button.is-style-fp-outline-blue .wp-block-button__link,
.wp-block-button.is-style-fp-ghost .wp-block-button__link {
	background: transparent;
	border-color: var(--wp--preset--color--blue-600);
	color: var(--wp--preset--color--blue-600);
}

.wp-block-button.is-style-fp-outline-blue .wp-block-button__link:hover,
.wp-block-button.is-style-fp-ghost .wp-block-button__link:hover {
	background: var(--wp--preset--color--blue-600);
	border-color: var(--wp--preset--color--blue-600);
	color: var(--wp--preset--color--surface);
}

/* Keep interaction motion in the base button contract, after color variants.
 * Every real CTA gets the same subtle lift. */
.wp-block-button:not(.fp-text-link) .wp-block-button__link:hover {
	transform: translateY(-1px);
}

.wp-block-button:not(.fp-text-link) .wp-block-button__link:active {
	transform: translateY(0);
}

.fp-section-actions {
	margin-top: var(--wp--preset--spacing--70);
}

/* Core flow spacing can push the second CTA down by 16px. The button row owns
 * its own flex gap, so keep each button on the same baseline. */
.fp-section-actions > * {
	margin-block: 0;
}

/* Four operational data sources converging on one analytics core. Kept as an
 * accessible inline SVG because the relationships are the information, while
 * all adjacent explanatory copy remains ordinary Gutenberg content. */
.fp-converge {
	display: block;
	width: 100%;
	max-width: 30rem;
	height: auto;
	margin-inline: auto;
}

.fp-converge__nodes rect {
	fill: var(--wp--preset--color--surface);
	stroke: #c3cee2;
	stroke-width: 2;
}

.fp-converge__labels text {
	fill: var(--wp--preset--color--navy-800);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 30px;
	font-weight: 600;
}

.fp-converge__flow line {
	stroke: var(--wp--preset--color--ember-500);
	stroke-width: 5;
	stroke-linecap: round;
}

.fp-converge__head {
	fill: var(--wp--preset--color--ember-500);
}

.fp-converge__core {
	fill: var(--wp--preset--color--navy-800);
}

.fp-converge__core-label {
	fill: var(--wp--preset--color--surface);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 36px;
	font-weight: 600;
	letter-spacing: -0.01em;
}

/* Reusable rich-prose treatment for split layouts. The established
 * `.fp-prose-lead` utility remains responsible for the emphasized lead. */
.fp-prose-copy p:not(.fp-prose-lead) {
	color: var(--wp--preset--color--slate);
}

/* ==========================================================================
   12. PLATFORM / DEPLOYMENT COMPONENTS
   ========================================================================== */

/* Accessible branch diagram: one FirePrograms platform feeding two deployment
 * environments. The adjacent explanatory copy remains ordinary Gutenberg. */
.fp-branch {
	display: block;
	width: 100%;
	max-width: 30rem;
	height: auto;
	margin-inline: auto;
}

.fp-branch__box rect {
	fill: var(--wp--preset--color--surface);
	stroke: #c3cee2;
	stroke-width: 2;
}

.fp-branch__box--core rect {
	fill: var(--wp--preset--color--navy-800);
	stroke: var(--wp--preset--color--navy-800);
}

.fp-branch__line {
	fill: none;
	stroke: var(--wp--preset--color--ember-500);
	stroke-width: 5;
	stroke-linecap: round;
}

.fp-branch__head {
	fill: var(--wp--preset--color--ember-500);
}

.fp-branch text {
	fill: var(--wp--preset--color--navy-800);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 26px;
	font-weight: 600;
}

.fp-branch .fp-branch__core-label {
	fill: var(--wp--preset--color--surface);
	font-size: 30px;
}

.fp-branch .fp-branch__sub {
	fill: var(--wp--preset--color--slate);
	font-family: var(--wp--preset--font-family--body);
	font-size: 21px;
	font-weight: 400;
}

/* Capability parity is a real table rather than the prototype's div grid.
 * The semantics are better for assistive technology while the visual treatment
 * stays faithful to the approved design. */
.fp-parity {
	width: 100%;
	margin: 0;
}

.fp-parity table {
	width: 100%;
	border-collapse: collapse;
	border-spacing: 0;
	border-top: 1px solid var(--wp--preset--color--line);
}

.fp-parity th,
.fp-parity td {
	padding: var(--wp--preset--spacing--30) 0;
	border: 0;
	border-bottom: 1px solid var(--wp--preset--color--line);
	background: transparent;
}

.fp-parity th {
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--wp--preset--color--navy-800);
}

.fp-parity th:first-child,
.fp-parity td:first-child {
	width: auto;
	padding-right: var(--wp--preset--spacing--30);
	text-align: left;
}

.fp-parity th:not(:first-child),
.fp-parity td:not(:first-child) {
	width: 5.5rem;
	text-align: center;
}

.fp-parity td:first-child {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--ink);
}

.fp-parity__tick {
	font-weight: 700;
	color: var(--wp--preset--color--ember-700);
}

/* Deployment cards reuse the pricing-card shell but have nested semantic
 * sub-sections instead of prices and feature lists. */
.fp-plan__group {
	margin-top: var(--wp--preset--spacing--50);
}

.fp-plan__group > * {
	margin-block: 0;
}

.fp-plan__group h4 {
	margin-bottom: var(--wp--preset--spacing--20);
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ember-700);
}

.fp-plan__group h5 {
	margin-top: var(--wp--preset--spacing--40);
	font-size: 1rem;
	color: var(--wp--preset--color--navy-800);
}

.fp-plan__group p {
	margin-top: var(--wp--preset--spacing--10);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-plan--featured .fp-plan__group h4 {
	color: var(--wp--preset--color--ember-500);
}

.fp-plan--featured .fp-plan__group h5 {
	color: var(--wp--preset--color--surface);
}

.fp-plan--featured .fp-plan__group p {
	color: var(--wp--preset--color--on-dark-soft);
}

@media (max-width: 560px) {
	.fp-parity th:not(:first-child),
	.fp-parity td:not(:first-child) {
		width: 3.25rem;
	}

	.fp-parity th {
		font-size: 0.75rem;
	}
}

/* Reusable checked list for capability summaries. */
.fp-checklist {
	padding: 0;
	margin: 0;
	list-style: none;
}

.fp-checklist li {
	position: relative;
	margin: 0;
	padding-left: 1.6rem;
	color: var(--wp--preset--color--slate);
}

.fp-checklist li + li {
	margin-top: var(--wp--preset--spacing--20);
}

.fp-checklist li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.42em;
	width: 0.55rem;
	height: 0.3rem;
	border-left: 2px solid var(--wp--preset--color--ember-500);
	border-bottom: 2px solid var(--wp--preset--color--ember-500);
	transform: rotate(-45deg);
}

/* ==========================================================================
   12.1 PLATFORM / DEPLOYMENT FIDELITY CORRECTIONS
   ========================================================================== */

/* The designer's generic capability checklist uses a pale-blue circular
 * marker with a blue check. Pricing/package lists use their own component
 * treatment and are intentionally unaffected. */
.fp-checklist li {
	padding-left: 1.9rem;
	font-size: var(--wp--preset--font-size--small);
}

.fp-checklist li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.35em;
	width: 1.15rem;
	height: 1.15rem;
	border: 0;
	border-radius: 50%;
	background: var(--wp--preset--color--blue-050);
	box-shadow: inset 0 0 0 1px #cfdcfb;
	transform: none;
}

.fp-checklist li::after {
	content: "";
	position: absolute;
	left: 0.34rem;
	top: 0.62em;
	width: 0.48rem;
	height: 0.26rem;
	border-left: 2px solid var(--wp--preset--color--blue-600);
	border-bottom: 2px solid var(--wp--preset--color--blue-600);
	transform: rotate(-45deg);
}

/* Core's Table block gives <thead> a 3px divider. The approved parity design
 * uses only the table's 1px top rule and the 1px row separators. */
.fp-parity thead {
	border: 0;
}

/* Semantic H4/H5 levels are correct inside each deployment-card H3. Give
 * their Default Gutenberg sizes the component's approved visual scale. */
.fp-plan__group {
	--fp-h4-size: var(--wp--preset--font-size--small);
	--fp-h5-size: 1rem;
}

/* ==========================================================================
   13. PLATFORM / INTEGRATIONS COMPONENTS
   ========================================================================== */

/* Data-flow diagram from disconnected source systems through FirePrograms to
 * unified operational outputs. Inline SVG keeps every label as real text. */
.fp-flow {
	display: block;
	width: 100%;
	max-width: 46rem;
	height: auto;
	margin-inline: auto;
}

.fp-flow__box rect {
	fill: var(--wp--preset--color--surface);
	stroke: #c3cee2;
	stroke-width: 2;
}

.fp-flow__box--out rect {
	fill: var(--wp--preset--color--navy-800);
	stroke: var(--wp--preset--color--navy-800);
}

.fp-flow__line {
	fill: none;
	stroke: #b7c2d6;
	stroke-width: 4;
	stroke-linecap: round;
}

.fp-flow__line--live {
	stroke: var(--wp--preset--color--ember-500);
}

.fp-flow__head {
	fill: var(--wp--preset--color--ember-500);
}

.fp-flow text {
	fill: var(--wp--preset--color--navy-800);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 22px;
	font-weight: 600;
}

.fp-flow .fp-flow__out-label {
	fill: var(--wp--preset--color--surface);
}

.fp-flow .fp-flow__stage {
	fill: var(--wp--preset--color--slate);
	font-family: var(--wp--preset--font-family--body);
	font-size: 19px;
	font-weight: 600;
	letter-spacing: 0.08em;
}

/* Integration-partner tiles preserve the prototype's squared cards while
 * remaining ordinary editable Group/Heading/Paragraph blocks. */
.fp-partner-grid {
	margin-top: var(--wp--preset--spacing--80);
}

.fp-tile {
	--fp-stack-gap: var(--wp--preset--spacing--20);
	height: 100%;
	padding: var(--wp--preset--spacing--50);
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface);
	transition:
		box-shadow var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

/* Tiles are informational by default. Only tiles with one explicit
 * destination receive the linked-card interaction contract. */
.fp-tile:has(.fp-tile__link a) {
	position: relative;
}

.fp-tile:has(.fp-tile__link a):hover,
.fp-tile:has(.fp-tile__link a):focus-within {
	transform: translateY(-3px);
	border-color: #cfd8ea;
	box-shadow: var(--wp--preset--shadow--medium);
}

.fp-tile:has(.fp-tile__link a):focus-within {
	outline: 3px solid var(--wp--preset--color--blue-600);
	outline-offset: 3px;
}

.fp-tile h4 {
	color: var(--wp--preset--color--navy-800);
}

.fp-tile p {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-tile .fp-tile__link {
	margin-top: var(--wp--preset--spacing--40);
}

.fp-tile__link a {
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	color: var(--wp--preset--color--blue-600);
	text-decoration: underline;
	text-underline-offset: 0.14em;
}

.fp-tile:has(.fp-tile__link a) .fp-tile__link a::before {
	content: "";
	position: absolute;
	inset: 0;
}

.fp-tile:has(.fp-tile__link a) .fp-tile__link a::after {
	content: " →";
	display: inline-block;
	transition: transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-tile__link a:hover,
.fp-tile:has(.fp-tile__link a):focus-within .fp-tile__link a {
	color: var(--wp--preset--color--blue-700);
}

.fp-tile:has(.fp-tile__link a):hover .fp-tile__link a::after,
.fp-tile:has(.fp-tile__link a):focus-within .fp-tile__link a::after {
	transform: translateX(0.2rem);
}

.fp-tile:has(.fp-tile__link a) .fp-tile__link a:focus-visible {
	outline: none;
}

.fp-integrations-action {
	align-self: center;
}

.fp-integrations-closing-copy {
	max-width: 60ch;
	color: var(--wp--preset--color--slate);
}

/* ==========================================================================
   Support / Company page additions
   ========================================================================== */

/* The approved heritage-engine hero focal point keeps the cab/department
 * lettering visible through the responsive cover crop while preserving the
 * dark left copy area. */
.fp-page-hero--focal-heritage .fp-page-hero__media img {
	object-position: 66% 62%;
}

/* The shared five-stat layout follows the source behavior at tablet widths:
 * 3 + 2 rather than an orphaned fifth item after four columns. */
@media (min-width: 620px) and (max-width: 979px) {
	.fp-stats {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/* Subgrid keeps values and labels aligned when one value/label wraps. */
@supports (grid-template-rows: subgrid) {
	.fp-stats {
		grid-template-rows: auto auto;
	}

	.fp-stat {
		grid-row: span 2;
		display: grid;
		grid-template-rows: subgrid;
		row-gap: var(--wp--preset--spacing--20);
		align-content: start;
	}

	.fp-stat__label {
		margin-top: 0;
	}
}

.fp-company-closing-copy {
	max-width: 60ch;
	color: var(--wp--preset--color--slate);
}

/* ==========================================================================\n   Support / Contact page additions\n   ========================================================================== */
.fp-with-aside {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(var(--wp--preset--spacing--60), 5vw, var(--wp--preset--spacing--80));
	align-items: start;
}

.fp-with-aside > * { margin-block: 0; }

@media (min-width: 980px) {
	.fp-with-aside { grid-template-columns: minmax(0, 1fr) 20rem; }
}

.fp-aside-card {
	padding: var(--wp--preset--spacing--60);
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface-alt);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-aside-card > * { margin-block: 0; }
.fp-aside-card > * + * { margin-top: var(--wp--preset--spacing--30); }
.fp-aside-card h3 { color: var(--wp--preset--color--navy-800); }

.fp-contact-list { margin: 0; }
.fp-contact-list > div + div {
	margin-top: var(--wp--preset--spacing--40);
	padding-top: var(--wp--preset--spacing--40);
	border-top: 1px solid var(--wp--preset--color--line);
}
.fp-contact-list dt {
	margin-bottom: var(--wp--preset--spacing--10);
	text-transform: uppercase;
}
.fp-contact-list dd {
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}
.fp-contact-list a { font-weight: 600; }

.fp-contact-form-shell {
	padding: clamp(var(--wp--preset--spacing--50), 3vw, var(--wp--preset--spacing--70));
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}
.fp-contact-form-shell > * { margin-block: 0; }
.fp-contact-form-shell > * + * { margin-top: var(--wp--preset--spacing--40); }
.fp-inline-form { scroll-margin-top: calc(var(--wp--custom--fireprograms--header-height) + var(--wp--preset--spacing--50)); }
.fp-contact-form-note {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}
.fp-contact-form-note a { font-weight: 600; }

/* WPForms is functionality owned by FirePrograms Core; these rules only make
 * its inline Contact instance visually belong to the approved page design. */
.fp-contact-form-shell .wpforms-container { margin: 0; }
.fp-contact-form-shell .wpforms-field { padding-block: var(--wp--preset--spacing--20); }
.fp-contact-form-shell .wpforms-field-label {
	font-family: var(--wp--preset--font-family--inter);
	font-size: .875rem;
	font-weight: 600;
	color: var(--wp--preset--color--ink);
}
.fp-contact-form-shell input:not([type="checkbox"]):not([type="radio"]),
.fp-contact-form-shell select,
.fp-contact-form-shell textarea {
	border: 1px solid #cfd5df;
	border-radius: 0;
	background: var(--wp--preset--color--surface);
	color: var(--wp--preset--color--ink);
}
.fp-contact-form-shell input:focus,
.fp-contact-form-shell select:focus,
.fp-contact-form-shell textarea:focus {
	border-color: var(--wp--preset--color--blue-600);
	box-shadow: 0 0 0 2px rgba(26, 86, 232, .12);
	outline: 0;
}

.fp-outcomes { gap: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50); }
.fp-outcome {
	--fp-h3-size: var(--wp--preset--font-size--heading-4);
	position: relative;
	padding-top: var(--wp--preset--spacing--40);
	border-top: 2px solid var(--wp--preset--color--line);
}
.fp-outcome::before {
	content: "";
	position: absolute;
	top: -2px;
	left: 0;
	width: 3rem;
	height: 2px;
	background: var(--wp--preset--color--ember-500);
}
.fp-outcome > * { margin-block: 0; }
.fp-outcome > * + * { margin-top: var(--wp--preset--spacing--20); }
.fp-outcome h3 { color: var(--wp--preset--color--navy-800); }
.fp-outcome p {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

/* ==========================================================================
   0.10.1 — Contact fidelity corrections
   ========================================================================== */

/* The approved Contact Options cards give their action link a full spacing-4
 * step after the descriptive copy rather than the compact icon-card stack gap. */
.fp-icon-item .fp-tile__link {
	margin-top: var(--wp--preset--spacing--40);
}

/* Match the prototype's direct-contact eyebrow labels. The theme font-family
 * preset is named `heading`; `poppins` is not a registered preset slug. */
.fp-contact-list dt {
	font-family: var(--wp--preset--font-family--heading);
	font-size: .8125rem;
	font-weight: 700;
	letter-spacing: .08em;
	color: var(--wp--preset--color--ember-700);
}

/* Keep the approved 12px breathing room directly under the aside heading.
 * WordPress flow-layout margins can otherwise win at this block boundary. */
.fp-aside-card > h3 {
	margin-bottom: var(--wp--preset--spacing--30) !important;
}
.fp-aside-card > h3 + .fp-contact-list {
	margin-top: 0 !important;
}

/* WPForms owns the form markup; the theme traverses that markup only inside
 * the Contact presentation shell so its submit control matches Core Buttons. */
.fp-contact-form-shell .wpforms-container .wpforms-submit-container button.wpforms-submit,
.fp-contact-form-shell .wpforms-container .wpforms-submit-container input.wpforms-submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	min-height: 48px;
	padding: .95rem 1.6rem;
	border: 1.5px solid var(--wp--preset--color--blue-600) !important;
	border-radius: var(--wp--custom--fireprograms--radius-pill);
	background: var(--wp--preset--color--blue-600) !important;
	background-color: var(--wp--preset--color--blue-600) !important;
	box-shadow: none;
	color: var(--wp--preset--color--surface);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 650;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	transition:
		background-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-contact-form-shell .wpforms-container .wpforms-submit-container button.wpforms-submit:hover,
.fp-contact-form-shell .wpforms-container .wpforms-submit-container input.wpforms-submit:hover {
	border-color: var(--wp--preset--color--blue-700) !important;
	background: var(--wp--preset--color--blue-700) !important;
	background-color: var(--wp--preset--color--blue-700) !important;
	color: var(--wp--preset--color--surface);
	transform: translateY(-1px);
}

.fp-contact-form-shell .wpforms-container .wpforms-submit-container button.wpforms-submit:active,
.fp-contact-form-shell .wpforms-container .wpforms-submit-container input.wpforms-submit:active {
	transform: translateY(0);
}

.fp-contact-form-shell .wpforms-container .wpforms-submit-container button.wpforms-submit:focus-visible,
.fp-contact-form-shell .wpforms-container .wpforms-submit-container input.wpforms-submit:focus-visible {
	outline: 3px solid var(--wp--preset--color--ember-500);
	outline-offset: 3px;
}

/* The designer's outcome component uses a 15rem minimum, which yields four
 * columns at the wide container even though the markup originated as grid--3. */
.fp-outcomes {
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
}

/* The global footer is a shell landmark, so it should meet the final page
 * section directly rather than inheriting Core's root flow-layout block gap. */
.wp-site-blocks > .fp-site-footer {
	margin-block-start: 0;
}

/* ==========================================================================
   15. HOMEPAGE COMPONENTS
   ========================================================================== */

/* The homepage hero uses the editor-owned fireprograms/hero-media block to
 * retain responsive art direction while keeping both desktop and mobile photos
 * replaceable from the Media Library. The block renders the same <picture>
 * primitive on the public site, so only one appropriate source is requested. */
.wp-block-post-content > .fp-home-hero {
	margin-block-start: 0;
}

/* Pull the entire stats wrapper upward rather than relying on a negative
 * margin on its first child. Core flow-layout rules can zero a first-child
 * margin, which prevented the approved stat card from straddling the hero. */
.wp-block-post-content > .fp-home-stat-wrap {
	margin-block-start: calc(clamp(3rem, 7vw, 4.5rem) * -1);
}

.fp-home-hero {
	--fp-h1-size: var(--wp--preset--font-size--display);
	--fp-home-focal-x: 58%;
	--fp-home-focal-y: 35%;
	--fp-home-fade-l: 10%;
	--fp-home-fade-r: 14%;
	position: relative;
	isolation: isolate;
	display: grid;
	align-content: center;
	min-height: max(clamp(560px, 76vh, 800px), min(40vw, 900px));
	padding-block: clamp(3.5rem, 8vw, 6.5rem) clamp(5.5rem, 11vw, 8.5rem);
	background: var(--wp--preset--color--navy-900);
	color: var(--wp--preset--color--on-dark-soft);
	overflow: hidden;
}

.fp-home-hero > * {
	margin-block: 0;
}

.fp-home-hero__picture,
.fp-home-hero__scrim {
	position: absolute;
	inset: 0;
}

.fp-home-hero__picture {
	z-index: -2;
}

.fp-home-hero__media {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: var(--fp-home-focal-x) var(--fp-home-focal-y);
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 var(--fp-home-fade-l), #000 calc(100% - var(--fp-home-fade-r)), transparent 100%);
	mask-image: linear-gradient(90deg, transparent 0, #000 var(--fp-home-fade-l), #000 calc(100% - var(--fp-home-fade-r)), transparent 100%);
}

.fp-home-hero__scrim {
	z-index: -1;
	background:
		linear-gradient(96deg, rgba(6, 14, 30, 0.95) 0%, rgba(9, 20, 40, 0.9) 34%, rgba(60, 22, 26, 0.62) 66%, rgba(120, 30, 20, 0.42) 100%),
		linear-gradient(to top, rgba(6, 14, 30, 0.8) 0%, rgba(6, 14, 30, 0) 42%);
}

.fp-home-hero__inner {
	--fp-stack-gap: var(--wp--preset--spacing--50);
	max-width: 44rem;
}

.fp-home-hero h1 {
	max-width: 15ch;
	font-weight: 300;
	line-height: 1.02;
	letter-spacing: -0.025em;
	color: var(--wp--preset--color--surface);
}

.fp-home-hero h1 em {
	font-style: normal;
	background: linear-gradient(92deg, var(--wp--preset--color--ember-500), #ff6a3d);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.fp-home-hero__lead {
	max-width: 46ch;
	font-size: var(--wp--preset--font-size--lead);
	color: rgba(255, 255, 255, 0.9);
}

.fp-home-hero__actions {
	gap: var(--wp--preset--spacing--40);
}

/* The approved homepage uses the standard blue primary action beside the
 * light-outline pricing action. Keep this scoped to the hero so older saved
 * v0.11.0 content that still carries the light-style class also renders
 * correctly without a database rewrite. */
.fp-home-hero .wp-block-button.demo-button .wp-block-button__link {
	background: var(--wp--preset--color--blue-600);
	border-color: var(--wp--preset--color--blue-600);
	color: var(--wp--preset--color--surface);
}

.fp-home-hero .wp-block-button.demo-button .wp-block-button__link:hover {
	background: var(--wp--preset--color--blue-700);
	border-color: var(--wp--preset--color--blue-700);
	color: var(--wp--preset--color--surface);
}

.fp-home-hero__note {
	max-width: 46rem;
	padding-left: var(--wp--preset--spacing--40);
	border-left: 2px solid var(--wp--preset--color--ember-500);
	font-size: var(--wp--preset--font-size--small);
	color: rgba(255, 255, 255, 0.82);
}

.fp-home-stat-wrap {
	position: relative;
	z-index: 5;
}

.fp-home-stat-card {
	margin-top: 0;
	padding: clamp(var(--wp--preset--spacing--50), 3vw, var(--wp--preset--spacing--70));
	border-top: 3px solid var(--wp--preset--color--ember-500);
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--large);
}

.fp-home-stat-card.fp-stats {
	gap: var(--wp--preset--spacing--50) var(--wp--preset--spacing--60);
}

.fp-home-stat-card .fp-stat {
	padding-inline: var(--wp--preset--spacing--20);
}

.fp-home-pillars-section {
	padding-top: calc(var(--wp--preset--spacing--section) + var(--wp--preset--spacing--20));
}

.fp-home-pillar {
	--fp-stack-gap: var(--wp--preset--spacing--30);
	position: relative;
	padding-top: var(--wp--preset--spacing--50);
	border-top: 2px solid var(--wp--preset--color--line);
}

.fp-home-pillar::before {
	content: "";
	position: absolute;
	top: -2px;
	left: 0;
	width: 3.5rem;
	height: 2px;
	background: var(--wp--preset--color--ember-500);
}

.fp-home-pillar__num {
	font-family: var(--wp--preset--font-family--heading);
	font-size: 0.875rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	color: var(--wp--preset--color--ember-700);
}

.fp-home-pillar h3 {
	--fp-h3-size: var(--wp--preset--font-size--heading-3);
	color: var(--wp--preset--color--navy-800);
}

.fp-home-pillar p:last-child {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-home-standfirst {
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	line-height: 1.45;
	color: var(--wp--preset--color--ink);
}

.fp-home-difference p:not(.fp-prose-lead),
.fp-home-difference li {
	color: var(--wp--preset--color--slate);
}

/* Client-feedback media: the homepage Difference and AI analytics diagrams are
 * now ordinary Media Library SVG images. The homepage graphic is intentionally
 * larger than the previous inline-SVG treatment. */
.fp-home-difference-graphic {
	width: 100%;
	max-width: 43rem;
	margin-inline: auto;
}

.fp-home-difference-graphic img,
.fp-ai-analytics-graphic img {
	display: block;
	width: 100%;
	height: auto;
}

.fp-ai-analytics-graphic {
	width: 100%;
	max-width: 32rem;
	margin-inline: auto;
}

@media (min-width: 900px) {
	.fp-home-difference {
		grid-template-columns: 0.84fr 1.16fr;
		gap: clamp(var(--wp--preset--spacing--50), 4vw, var(--wp--preset--spacing--80));
	}
}

.fp-home-orbit-wrap {
	--fp-orbit-core: var(--wp--preset--color--navy-800);
	--fp-orbit-node: var(--wp--preset--color--navy-800);
	--fp-orbit-flow: var(--wp--preset--color--ember-500);
	--fp-orbit-link: rgba(11, 42, 91, 0.28);
	width: 100%;
	max-width: 34rem;
	margin-inline: auto;
}

.fp-home-orbit {
	display: block;
	width: 100%;
	height: auto;
}

.fp-home-orbit__core,
.fp-home-orbit__nodes circle {
	fill: var(--fp-orbit-core);
}

.fp-home-orbit__core-label {
	fill: var(--wp--preset--color--surface);
	font-family: var(--wp--preset--font-family--heading);
	font-size: 34px;
	font-weight: 600;
	letter-spacing: -0.01em;
}

.fp-home-orbit__labels text {
	fill: var(--wp--preset--color--surface);
	font-family: var(--wp--preset--font-family--body);
	font-size: 14.5px;
	font-weight: 600;
	letter-spacing: 0.004em;
}

.fp-home-orbit__links path {
	fill: none;
	stroke: var(--fp-orbit-link);
	stroke-width: 1.5;
}

.fp-home-orbit__flow path {
	fill: none;
	stroke: var(--fp-orbit-flow);
	stroke-width: 3;
	stroke-linecap: round;
}

.fp-home-orbit__arrowhead {
	fill: var(--fp-orbit-flow);
}

.fp-track__label {
	display: block;
}

.fp-track__eyebrow {
	display: block;
	margin-bottom: var(--wp--preset--spacing--20);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ember-700);
}

.fp-prose-pair__tag {
	font-weight: 600;
	color: var(--wp--preset--color--navy-800) !important;
}

.fp-home-module-grid {
	align-items: stretch;
	row-gap: var(--wp--preset--spacing--60);
	margin-top: 0;
}

.fp-home-module-tile {
	display: block;
	padding: var(--wp--preset--spacing--50);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0;
	background: var(--wp--preset--color--surface);
	color: inherit;
	text-decoration: none;
	transition:
		box-shadow var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-home-module-tile:hover,
.fp-home-module-tile:focus-within {
	transform: translateY(-3px);
	border-color: #cfd8ea;
	box-shadow: var(--wp--preset--shadow--medium);
	color: inherit;
}

.fp-home-module-tile :is(h3, h4) {
	margin: 0 0 var(--wp--preset--spacing--20);
	font-size: 20px;
	line-height: 1.25;
	color: var(--wp--preset--color--navy-800);
}

.fp-home-module-tile p {
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-home-module-tile::after {
	content: "Learn more →";
	display: block;
	position: relative;
	z-index: 1;
	margin-top: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	color: var(--wp--preset--color--blue-600);
	transition:
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
	pointer-events: none;
}

.fp-home-module-tile:hover::after,
.fp-home-module-tile:focus-within::after {
	color: var(--wp--preset--color--blue-700);
	transform: translateX(0.2rem);
}

.fp-home-module-tile:focus-visible {
	outline: 3px solid var(--wp--preset--color--blue-600);
	outline-offset: 3px;
}

.fp-home-closing-lead {
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	color: var(--wp--preset--color--surface);
}

@media (max-width: 720px) {
	.fp-home-hero {
		--fp-home-focal-x: 52%;
		--fp-home-focal-y: 29%;
		--fp-home-photo-h: clamp(300px, 52vh, 400px);
		display: block;
		min-height: 0;
		padding-block: 0 clamp(3rem, 10vw, 4rem);
	}

	.fp-home-hero__picture {
		position: relative;
		display: block;
		height: var(--fp-home-photo-h);
	}

	.fp-home-hero__media {
		height: var(--fp-home-photo-h);
		-webkit-mask-image: none;
		mask-image: none;
	}

	.fp-home-hero__scrim {
		bottom: auto;
		height: var(--fp-home-photo-h);
		background: linear-gradient(180deg, rgba(6, 14, 30, 0.18) 0%, rgba(6, 14, 30, 0.34) 52%, rgba(7, 20, 42, 0.86) 86%, var(--wp--preset--color--navy-900) 100%);
	}

	.fp-home-hero__inner {
		padding-top: var(--wp--preset--spacing--60);
	}

	.wp-block-post-content > .fp-home-stat-wrap {
		margin-block-start: calc(var(--wp--preset--spacing--50) * -1);
	}
}

@media (min-width: 1100px) and (max-height: 720px) {
	.fp-home-hero {
		--fp-home-focal-y: 30%;
	}
}

@media (min-width: 1700px) {
	.fp-home-hero {
		--fp-home-focal-y: 31%;
	}
}

/* ==========================================================================
   14.2 MOBILE NAVIGATION INTERACTION
   ========================================================================== */
@media (max-width: 1023px) {
	/* The Core Navigation block uses a separate close control inside its overlay.
	 * Because our drawer begins below the sticky header, keep the visible header
	 * toggle as the user's single control and show an X while the drawer is open. */
	.fp-primary-nav .wp-block-navigation__responsive-container-open::after {
		content: "";
		display: none;
		position: absolute;
		width: 20px;
		height: 2px;
		background: currentColor;
	}

	.fp-primary-nav:has(.wp-block-navigation__responsive-container.is-menu-open) .wp-block-navigation__responsive-container-open::before {
		box-shadow: none;
		transform: rotate(45deg);
	}

	.fp-primary-nav:has(.wp-block-navigation__responsive-container.is-menu-open) .wp-block-navigation__responsive-container-open::after {
		display: block;
		transform: rotate(-45deg);
	}

}

/* ==========================================================================
   14.3 MOBILE DRAWER VIEWPORT + BUTTON BOX MODEL
   ========================================================================== */
@media (max-width: 1023px) {
	/* Core reserves vertical room inside its default overlay for the internal
	 * close button. FirePrograms intentionally keeps the header toggle visible
	 * and uses that as the close control, so the reserved row is unnecessary. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		padding-top: 0;
	}

	/* Anchor the drawer to the actual rendered bottom of the sticky header.
	 * mobile-nav.js supplies this value at open/resize time, so this remains
	 * correct when the utility bar wraps or the WordPress admin bar is present. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open {
		position: fixed !important;
		inset: var(--fp-mobile-nav-top, var(--wp--custom--fireprograms--header-h)) 0 0 0 !important;
		width: 100%;
		height: auto;
		max-height: none;
		overflow-y: auto;
		overscroll-behavior: contain;
	}

}

/* ==========================================================================
   14.4–14.6 MOBILE QA + SUBNAV ALIGNMENT + FORM CONSISTENCY
   ========================================================================== */

/* The subnav can originate from a raw Custom HTML block with or without an
 * `alignfull` class. Break the outer band to the viewport by geometry rather
 * than assuming a particular WordPress root-gutter value. WordPress's
 * constrained layout assigns non-aligned children auto inline margins with
 * !important, so this component must explicitly win that one layout rule.
 * The nested `.fp-container` then supplies the same single site gutter as
 * adjacent full-width FirePrograms sections. */
.wp-block-post-content > .fp-subnav {
	box-sizing: border-box;
	width: 100vw;
	max-width: none;
	margin-inline: calc(50% - 50vw) !important;
}

/* Make the entire 56px link row the centering box. This avoids baseline and
 * inherited-line-height differences between Custom HTML and block content. */
.fp-subnav ul {
	align-items: stretch;
	min-height: 3.5rem;
}

.fp-subnav li {
	display: flex;
	align-items: stretch;
}

.fp-subnav a {
	display: inline-flex;
	align-items: center;
	min-height: 3.5rem;
	padding-block: 0;
	line-height: 1.25;
}

@media (max-width: 1023px) {
	/* Desktop dropdown hover/current rules otherwise leak into the permanently
	 * expanded mobile submenu and create a navy flash when a child is tapped.
	 * Keep the semantic current-page marker, but never paint the mobile row. */
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content:active,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content[aria-current="page"] {
		background: transparent;
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content[aria-current="page"] {
		position: relative;
		box-shadow: none;
		color: var(--wp--preset--color--navy-800);
	}

	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content::before,
	.fp-primary-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content[aria-current="page"]::before {
		content: "";
		position: absolute;
		left: -0.625rem;
		top: 50%;
		width: 3px;
		height: 1.5rem;
		border-radius: 999px;
		background: var(--wp--preset--color--ember-500);
		transform: translateY(-50%);
	}
}

/* Dialog forms use the same WPForms markup as the inline Contact form. Apply
 * the established primary-button treatment there too so submit controls do
 * not change visual language simply because a form opened in a dialog. */
.fp-form-dialog .wpforms-container .wpforms-submit-container button.wpforms-submit,
.fp-form-dialog .wpforms-container .wpforms-submit-container input.wpforms-submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--20);
	min-height: 48px;
	padding: 0.95rem 1.6rem;
	border: 1.5px solid var(--wp--preset--color--blue-600) !important;
	border-radius: var(--wp--custom--fireprograms--radius-pill);
	background: var(--wp--preset--color--blue-600) !important;
	background-color: var(--wp--preset--color--blue-600) !important;
	box-shadow: none;
	color: var(--wp--preset--color--surface);
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 650;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	transition:
		background-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-form-dialog .wpforms-container .wpforms-submit-container button.wpforms-submit:hover,
.fp-form-dialog .wpforms-container .wpforms-submit-container input.wpforms-submit:hover {
	border-color: var(--wp--preset--color--blue-700) !important;
	background: var(--wp--preset--color--blue-700) !important;
	background-color: var(--wp--preset--color--blue-700) !important;
	color: var(--wp--preset--color--surface);
	transform: translateY(-1px);
}

.fp-form-dialog .wpforms-container .wpforms-submit-container button.wpforms-submit:active,
.fp-form-dialog .wpforms-container .wpforms-submit-container input.wpforms-submit:active {
	transform: translateY(0);
}

.fp-form-dialog .wpforms-container .wpforms-submit-container button.wpforms-submit:focus-visible,
.fp-form-dialog .wpforms-container .wpforms-submit-container input.wpforms-submit:focus-visible {
	outline: 3px solid var(--wp--preset--color--ember-500);
	outline-offset: 3px;
}



/* ==========================================================================
   14.8 LIGHTHOUSE ACCESSIBILITY CLEANUP
   ========================================================================== */

/* Small orange labels on light surfaces need a darker text-specific ember than
 * decorative borders, fills, and large display accents. Ember 700 is reserved
 * for readable small text while the brighter palette remains available for
 * non-text brand accents. The affected component rules above intentionally use
 * ember-700; featured/dark-surface variants continue to override with ember-500. */

/* ==========================================================================
   0.14.18 — brand lockup, editorability and feedback icon refinements
   ========================================================================== */

/* Keep the FirePrograms Site Logo and the replaceable NERIS compatibility
 * seal as independent assets. The seal is intentionally absent from footer. */
.fp-brand-lockup {
	display: inline-flex !important;
	align-items: center;
	gap: clamp(.45rem, .8vw, .7rem);
	justify-self: start;
	flex-wrap: nowrap !important;
	min-width: 0;
}

.fp-brand-lockup > * {
	margin: 0 !important;
}

.fp-brand-lockup .wp-block-shortcode {
	display: inline-flex;
	align-items: center;
	line-height: 0;
}

.fp-neris-badge {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	line-height: 0;
}

.fp-neris-badge__image {
	display: block;
	width: clamp(58px, 5.3vw, 71px);
	height: clamp(58px, 5.3vw, 71px);
	object-fit: contain;
}

@media (max-width: 639px) {
	.fp-brand-lockup {
		gap: .4rem;
	}

	.fp-brand img {
		width: clamp(180px, 55vw, 220px);
		height: auto;
	}

	.fp-brand-tagline {
		font-size: clamp(0.46rem, 2.2vw, 0.56rem);
	}

	.fp-neris-badge__image {
		width: 40px;
		height: 40px;
	}
}

/* Client-requested checks live inside the existing homepage outcome squares;
 * they do not replace or move the track itself. */
.home .fp-track--outcome .fp-track__step::after {
	box-sizing: border-box;
	top: -7px;
	width: 16px;
	height: 16px;
	border: 2px solid #8190a9;
	background-color: var(--wp--preset--color--surface);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.2 6.3 4.8 8.7 9.9 3.4' fill='none' stroke='%231a56e8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-position: center;
	background-repeat: no-repeat;
	background-size: 10px 10px;
}

.home .fp-track--outcome .fp-track__step--end::after {
	top: -8px;
	width: 18px;
	height: 18px;
	border-color: var(--wp--preset--color--ember-500);
	background-color: var(--wp--preset--color--ember-500);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.2 6.3 4.8 8.7 9.9 3.4' fill='none' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

@media (max-width: 899px) {
	.home .fp-track--outcome .fp-track__step::after {
		top: .18em;
	}

	.home .fp-track--outcome .fp-track__step--end::after {
		top: .12em;
	}
}

/* Native Gutenberg Groups replace the old raw-anchor homepage tiles. The H3
 * link remains the semantic link while its pseudo-element stretches the hit
 * target across the visual tile. */
.fp-home-module-tile {
	position: relative;
}

.fp-home-module-tile__link {
	color: inherit;
	text-decoration: none;
}

.fp-home-module-tile__link::after {
	content: "";
	position: absolute;
	inset: 0;
}

.fp-home-module-tile:focus-within {
	outline: 3px solid var(--wp--preset--color--blue-600);
	outline-offset: 3px;
}

.fp-home-module-tile__link:focus-visible {
	outline: none;
}

/* The comparison hub reuses the stretched homepage link inside an ordinary
 * pillar. When a pillar has that link it becomes a true navigation tile;
 * informational pillars elsewhere remain still. */
.fp-home-pillar:has(.fp-home-module-tile__link) {
	padding: var(--wp--preset--spacing--50);
	border: 1px solid var(--wp--preset--color--line);
	border-top-width: 2px;
	background: var(--wp--preset--color--surface);
	transition:
		box-shadow var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		border-color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
}

.fp-home-pillar:has(.fp-home-module-tile__link):hover,
.fp-home-pillar:has(.fp-home-module-tile__link):focus-within {
	transform: translateY(-3px);
	border-color: #cfd8ea;
	box-shadow: var(--wp--preset--shadow--medium);
}

.fp-home-pillar:has(.fp-home-module-tile__link):focus-within {
	outline: 3px solid var(--wp--preset--color--blue-600);
	outline-offset: 3px;
}

.fp-home-pillar:has(.fp-home-module-tile__link)::after {
	content: "View comparison →";
	display: block;
	position: relative;
	z-index: 1;
	margin-top: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 600;
	color: var(--wp--preset--color--blue-600);
	transition:
		color var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease),
		transform var(--wp--custom--fireprograms--duration) var(--wp--custom--fireprograms--ease);
	pointer-events: none;
}

.fp-home-pillar:has(.fp-home-module-tile__link):hover::after,
.fp-home-pillar:has(.fp-home-module-tile__link):focus-within::after {
	color: var(--wp--preset--color--blue-700);
	transform: translateX(0.2rem);
}

@media (prefers-reduced-motion: reduce) {
	.fp-home-module-tile:hover,
	.fp-home-module-tile:focus-within,
	.fp-home-pillar:has(.fp-home-module-tile__link):hover,
	.fp-home-pillar:has(.fp-home-module-tile__link):focus-within,
	.fp-tile:has(.fp-tile__link a):hover,
	.fp-tile:has(.fp-tile__link a):focus-within {
		transform: none;
	}

	.fp-home-module-tile:hover::after,
	.fp-home-module-tile:focus-within::after,
	.fp-home-pillar:has(.fp-home-module-tile__link):hover::after,
	.fp-home-pillar:has(.fp-home-module-tile__link):focus-within::after,
	.fp-tile:has(.fp-tile__link a):hover .fp-tile__link a::after,
	.fp-tile:has(.fp-tile__link a):focus-within .fp-tile__link a::after {
		transform: none;
	}
}

/* Native Group/Paragraph blocks replace the direct-contact definition list so
 * every label/value remains editable in Gutenberg without Custom HTML. */
.fp-contact-list__item > * {
	margin-block: 0;
}

.fp-contact-list__item + .fp-contact-list__item {
	margin-top: var(--wp--preset--spacing--40);
	padding-top: var(--wp--preset--spacing--40);
	border-top: 1px solid var(--wp--preset--color--line);
}

.fp-contact-list__label {
	margin-bottom: var(--wp--preset--spacing--10) !important;
	font-family: var(--wp--preset--font-family--heading);
	font-size: .8125rem;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ember-700);
}

.fp-contact-list__value {
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-contact-list__value a {
	font-weight: 600;
}

/* September 2026 client-feedback refinement: the two editor-friendly
 * replacements for former Custom HTML blocks use a 20px heading size rather
 * than the larger global H4 preset from the base type scale. */
.fp-contact-list__item :is(h3, h4) {
	margin: 0 0 var(--wp--preset--spacing--10);
	font-size: 20px;
	line-height: 1.25;
	color: var(--wp--preset--color--navy-800);
}

/* ==========================================================================
   15. NERIS REPORTING PAGE
   ========================================================================== */

.fp-neris-prose-columns {
	column-gap: clamp(2rem, 5vw, 4rem);
}

.fp-neris-prose-columns > * {
	margin-block: 0 1rem;
	break-inside: avoid;
}

@media (min-width: 760px) {
	.fp-neris-prose-columns {
		columns: 2;
	}
}

.fp-neris-facts {
	display: grid;
	gap: 0.875rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

/* NERIS grid primitives own their spacing. Core's flow layout otherwise adds
 * a 16px block-start margin to every child after the first, making the first
 * tile appear offset from the rest of the row. */
.fp-neris-facts > *,
.fp-neris-system__grid > *,
.fp-neris-system__outcomes > *,
.fp-neris-process > *,
.fp-neris-change-grid > *,
.fp-neris-support-grid > *,
.fp-neris-path-grid > *,
.fp-neris-why-grid > * {
	margin-block: 0;
}

.fp-neris-fact {
	padding: clamp(1.15rem, 2vw, 1.5rem);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0.75rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-neris-fact h3 {
	margin-bottom: 0.45rem;
	font-size: var(--wp--preset--font-size--heading-4);
	color: var(--wp--preset--color--navy-800);
}

.fp-neris-fact p {
	margin: 0;
	color: var(--wp--preset--color--slate);
}

@media (min-width: 640px) {
	.fp-neris-facts {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1040px) {
	.fp-neris-facts {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.fp-neris-system {
	padding: clamp(1.25rem, 2.8vw, 1.75rem);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 1rem;
	background: linear-gradient(180deg, var(--wp--preset--color--surface), #f7f9fc);
	box-shadow: var(--wp--preset--shadow--medium);
}

.fp-neris-diagram-label {
	margin: 0 0 1rem;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 800;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--slate);
}

.fp-neris-system__grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0.625rem;
}

.fp-neris-node,
.fp-neris-outcome {
	display: grid;
	place-items: center;
	min-height: 4rem;
	margin: 0;
	padding: 0.75rem;
	border: 1px solid #cfd8e6;
	border-radius: 0.625rem;
	background: var(--wp--preset--color--surface);
	text-align: center;
	font-size: 0.875rem;
	font-weight: 700;
	line-height: 1.25;
	color: var(--wp--preset--color--ink);
}

.fp-neris-node--focus {
	border-color: #d39a66;
	background: #fff3e8;
	color: var(--wp--preset--color--ember-700);
}

.fp-neris-system__outcomes {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0.625rem;
	margin-top: 0.875rem;
}

.fp-neris-outcome--neris {
	border-color: var(--wp--preset--color--navy-800);
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--surface);
}

.fp-neris-outcome--local {
	border-color: #b8d8c7;
	background: #edf6f1;
	color: #195f3f;
}

.fp-neris-track-wrap {
	margin-top: clamp(2.25rem, 5vw, 4rem);
}

/* Reuse the established outcome track, adding the client-requested checkbox
 * treatment on pages other than the homepage. */
.fp-track--checks .fp-track__step::after {
	box-sizing: border-box;
	top: -7px;
	width: 16px;
	height: 16px;
	border: 2px solid #8190a9;
	background-color: var(--wp--preset--color--surface);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.2 6.3 4.8 8.7 9.9 3.4' fill='none' stroke='%231a56e8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-position: center;
	background-repeat: no-repeat;
	background-size: 10px 10px;
}

.fp-track--checks .fp-track__step--end::after {
	top: -8px;
	width: 18px;
	height: 18px;
	border-color: var(--wp--preset--color--ember-500);
	background-color: var(--wp--preset--color--ember-500);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.2 6.3 4.8 8.7 9.9 3.4' fill='none' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

.fp-neris-process {
	display: grid;
	gap: 1rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-neris-process__step {
	padding: clamp(1.25rem, 2.4vw, 1.65rem);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0.75rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-neris-process__step h3 {
	margin-bottom: 0.65rem;
	font-size: var(--wp--preset--font-size--heading-4);
}

.fp-neris-process__step p {
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-neris-process-track {
	margin-top: clamp(2.25rem, 5vw, 4rem);
}

@media (min-width: 680px) {
	.fp-neris-process {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1040px) {
	.fp-neris-process {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.fp-neris-change-grid {
	display: grid;
	gap: 1rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-neris-change-grid .fp-icon-item--boxed {
	display: block;
	height: 100%;
}

.fp-neris-change-grid .fp-icon-chip {
	margin-bottom: 1rem;
}

@media (min-width: 640px) {
	.fp-neris-change-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 920px) {
	.fp-neris-change-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.fp-neris-value-band {
	display: grid;
	gap: clamp(1.75rem, 4vw, 3rem);
	align-items: center;
	padding: clamp(2rem, 5vw, 3.5rem);
	border-radius: 1rem;
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-neris-value-band h2 {
	color: var(--wp--preset--color--surface);
}

.fp-neris-value-band .fp-eyebrow {
	color: #efb582;
}

.fp-neris-value-band__callout {
	margin: 0;
	padding-top: 1.5rem;
	border-top: 1px solid rgba(255, 255, 255, 0.25);
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 700;
	line-height: 1.35;
	color: var(--wp--preset--color--surface);
}

@media (min-width: 860px) {
	.fp-neris-value-band {
		grid-template-columns: minmax(0, 1.2fr) minmax(18rem, 0.8fr);
	}

	.fp-neris-value-band__callout {
		padding-top: 0;
		padding-left: 2rem;
		border-top: 0;
		border-left: 1px solid rgba(255, 255, 255, 0.25);
	}
}

.fp-neris-support-grid {
	display: grid;
	gap: 0.875rem;
}

.fp-neris-support-grid .fp-card h3 {
	font-size: var(--wp--preset--font-size--heading-4);
}

.fp-neris-support-grid .fp-card p {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

.fp-neris-buyer-path {
	background: linear-gradient(180deg, #fff7f1 0%, var(--wp--preset--color--surface) 100%);
}

.fp-neris-path-grid {
	display: grid;
	gap: 1rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-neris-path {
	display: flex;
	flex-direction: column;
	height: 100%;
	padding: clamp(1.5rem, 3vw, 2rem);
	border: 1px solid #ead7c8;
	border-radius: 0.875rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-neris-path__tag {
	width: max-content;
	margin: 0;
	padding: 0.35rem 0.65rem;
	border-radius: 999px;
	background: #fff0e3;
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--ember-700);
}

.fp-neris-path .wp-block-buttons {
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--40);
}

@media (min-width: 900px) {
	.fp-neris-path-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.fp-neris-why-grid {
	display: grid;
	gap: 0 2.5rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-neris-why {
	padding-block: 1.35rem;
	border-top: 2px solid #e6ebf2;
}

.fp-neris-why h3 {
	font-size: var(--wp--preset--font-size--heading-4);
}

.fp-neris-why p {
	margin-bottom: 0;
	color: var(--wp--preset--color--slate);
}

@media (min-width: 760px) {
	.fp-neris-why-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.fp-neris-faq {
	margin-top: clamp(2rem, 4vw, 3rem);
	border-top: 1px solid var(--wp--preset--color--line);
}

.fp-neris-faq .wp-block-details {
	margin: 0;
	padding: 0;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.fp-neris-faq summary {
	position: relative;
	padding: 1.25rem 2.75rem 1.25rem 0;
	font-size: var(--wp--preset--font-size--heading-4);
	font-weight: 700;
	cursor: pointer;
}

.fp-neris-faq summary::after {
	content: "+";
	position: absolute;
	top: 50%;
	right: 0.25rem;
	transform: translateY(-50%);
	font-size: 1.6rem;
	font-weight: 400;
	color: var(--wp--preset--color--ember-700);
}

.fp-neris-faq details[open] > summary::after {
	content: "−";
}

.fp-neris-faq details > p {
	max-width: 52rem;
	margin: 0;
	padding: 0 2.75rem 1.35rem 0;
	color: var(--wp--preset--color--slate);
}

.fp-neris-closing {
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-neris-closing h2 {
	color: var(--wp--preset--color--surface);
}

.fp-neris-closing .fp-eyebrow {
	color: #efb582;
}

@media (max-width: 899px) {
	.fp-track--checks .fp-track__step::after {
		top: 0.18em;
	}

	.fp-track--checks .fp-track__step--end::after {
		top: 0.12em;
	}
}

@media (max-width: 639px) {
	.fp-neris-hero__media {
		min-height: 17rem;
	}

	.fp-neris-system__grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.fp-neris-system__outcomes {
		grid-template-columns: 1fr;
	}
}

/* ==========================================================================
   16. FIRE DEPARTMENT RMS PAGE
   ========================================================================== */

.fp-rms-prose-columns {
	column-gap: clamp(2rem, 5vw, 4rem);
}

.fp-rms-prose-columns > * {
	margin-block: 0 1rem;
	break-inside: avoid;
}

@media (min-width: 760px) {
	.fp-rms-prose-columns {
		columns: 2;
	}
}

.fp-rms-facts {
	display: grid;
	gap: 0.875rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-facts > *,
.fp-rms-hub__grid > *,
.fp-rms-capability-grid > *,
.fp-rms-process > *,
.fp-rms-training-grid > *,
.fp-rms-path-grid > *,
.fp-rms-why-grid > * {
	margin-block: 0;
}

.fp-rms-fact {
	padding: clamp(1.15rem, 2vw, 1.5rem);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0.75rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-rms-fact h3 {
	margin-bottom: 0.45rem;
	font-size: var(--wp--preset--font-size--heading-4);
	color: var(--wp--preset--color--navy-800);
}

.fp-rms-fact p {
	margin: 0;
	color: var(--wp--preset--color--slate);
}

@media (min-width: 640px) {
	.fp-rms-facts {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1040px) {
	.fp-rms-facts {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.fp-rms-connected-layout {
	display: grid;
	gap: clamp(2rem, 5vw, 4rem);
	align-items: center;
}

.fp-rms-connected-callout {
	margin-top: 0.5rem;
	padding-left: 1rem;
	border-left: 3px solid var(--wp--preset--color--ember-500);
	font-weight: 700;
	color: var(--wp--preset--color--navy-800);
}

.fp-rms-connected-graphic {
	width: 100%;
	max-width: 43rem;
	margin-inline: auto;
}

.fp-rms-connected-graphic img {
	display: block;
	width: 100%;
	height: auto;
}

@media (min-width: 900px) {
	.fp-rms-connected-layout {
		grid-template-columns: minmax(0, 0.84fr) minmax(0, 1.16fr);
		gap: clamp(var(--wp--preset--spacing--50), 4vw, var(--wp--preset--spacing--80));
	}
}

.fp-rms-capability-grid {
	display: grid;
	gap: 1rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-capability-grid .fp-icon-item--boxed {
	display: block;
	height: 100%;
}

.fp-rms-capability-grid .fp-icon-chip {
	margin-bottom: 1rem;
}

@media (min-width: 640px) {
	.fp-rms-capability-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 980px) {
	.fp-rms-capability-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.fp-rms-track-wrap {
	margin-top: clamp(2.25rem, 5vw, 4rem);
}

.fp-rms-value-band {
	display: grid;
	gap: clamp(1.75rem, 4vw, 3rem);
	align-items: center;
	padding: clamp(2rem, 5vw, 3.5rem);
	border-radius: 1rem;
	background: var(--wp--preset--color--navy-800);
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-rms-value-band h2 {
	color: var(--wp--preset--color--surface);
}

.fp-rms-value-band .fp-eyebrow {
	color: #efb582;
}

.fp-rms-value-band__callout {
	margin: 0;
	padding-top: 1.5rem;
	border-top: 1px solid rgba(255, 255, 255, 0.25);
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 700;
	line-height: 1.35;
	color: var(--wp--preset--color--surface);
}

@media (min-width: 860px) {
	.fp-rms-value-band {
		grid-template-columns: minmax(0, 1.2fr) minmax(18rem, 0.8fr);
	}

	.fp-rms-value-band__callout {
		padding-top: 0;
		padding-left: 2rem;
		border-top: 0;
		border-left: 1px solid rgba(255, 255, 255, 0.25);
	}
}

.fp-rms-neris-band {
	display: grid;
	gap: clamp(2rem, 5vw, 4rem);
	align-items: center;
}

.fp-rms-neris-note {
	padding-left: clamp(1.25rem, 3vw, 2rem);
	border-left: 3px solid var(--wp--preset--color--ember-500);
}

.fp-rms-neris-note h3 {
	margin-bottom: 0.75rem;
	font-size: var(--wp--preset--font-size--heading-3);
	color: var(--wp--preset--color--navy-800);
}

.fp-rms-neris-note p {
	margin-bottom: 0;
	color: var(--wp--preset--color--slate);
}

@media (min-width: 860px) {
	.fp-rms-neris-band {
		grid-template-columns: minmax(0, 1.25fr) minmax(18rem, 0.75fr);
	}
}

.fp-rms-implementation-track {
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-implementation-track .fp-track__step {
	min-width: 0;
}

.fp-rms-track-detail {
	display: block;
	margin-top: 0.65rem;
	font-family: var(--wp--preset--font-family--body);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;
	line-height: 1.5;
	color: var(--wp--preset--color--slate);
}

.fp-rms-process-outcome {
	max-width: 58rem;
	margin: clamp(2rem, 4vw, 3rem) auto 0;
	padding: 1.25rem 1.5rem;
	border-left: 4px solid var(--wp--preset--color--ember-500);
	background: var(--wp--preset--color--surface-alt);
	font-weight: 700;
	color: var(--wp--preset--color--navy-800);
}

.fp-rms-training-layout > .fp-stack {
	max-width: 58rem;
}

.fp-rms-training-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0.875rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-training-grid .fp-card h3 {
	font-size: var(--wp--preset--font-size--heading-4);
}

.fp-rms-training-grid .fp-card p {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--slate);
}

@media (min-width: 640px) {
	.fp-rms-training-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1040px) {
	.fp-rms-training-grid {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.fp-rms-support-band {
	padding: clamp(1.75rem, 4vw, 3rem);
	border: 1px solid #d5dfeb;
	border-radius: 1rem;
	background: linear-gradient(135deg, #f7f9fc 0%, #eef3ff 100%);
}

.fp-rms-support-band > .fp-stack {
	max-width: 62rem;
}

.fp-rms-buyer-path {
	background: linear-gradient(180deg, #fff7f1 0%, var(--wp--preset--color--surface) 100%);
}

.fp-rms-path-grid {
	display: grid;
	gap: 1rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-path {
	display: flex;
	flex-direction: column;
	height: 100%;
	padding: clamp(1.5rem, 3vw, 2rem);
	border: 1px solid #ead7c8;
	border-radius: 0.875rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}

.fp-rms-path__tag {
	width: max-content;
	margin: 0;
	padding: 0.35rem 0.65rem;
	border-radius: 999px;
	background: #fff0e3;
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--ember-700);
}

.fp-rms-path .wp-block-buttons {
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--40);
}

@media (min-width: 900px) {
	.fp-rms-path-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.fp-rms-why-grid {
	display: grid;
	gap: 0 2.5rem;
	margin-top: clamp(2rem, 4vw, 3rem);
}

.fp-rms-why {
	padding-block: 1.35rem;
	border-top: 2px solid #e6ebf2;
}

.fp-rms-why h3 {
	font-size: var(--wp--preset--font-size--heading-4);
}

.fp-rms-why p {
	margin-bottom: 0;
	color: var(--wp--preset--color--slate);
}

@media (min-width: 760px) {
	.fp-rms-why-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.fp-rms-faq {
	margin-top: clamp(2rem, 4vw, 3rem);
	border-top: 1px solid var(--wp--preset--color--line);
}

.fp-rms-faq .wp-block-details {
	margin: 0;
	padding: 0;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.fp-rms-faq summary {
	position: relative;
	padding: 1.25rem 2.75rem 1.25rem 0;
	font-size: var(--wp--preset--font-size--heading-4);
	font-weight: 700;
	cursor: pointer;
}

.fp-rms-faq summary::after {
	content: "+";
	position: absolute;
	top: 50%;
	right: 0.25rem;
	transform: translateY(-50%);
	font-size: 1.6rem;
	font-weight: 400;
	color: var(--wp--preset--color--ember-700);
}

.fp-rms-faq details[open] > summary::after {
	content: "−";
}

.fp-rms-faq details > p {
	max-width: 52rem;
	margin: 0;
	padding: 0 2.75rem 1.35rem 0;
	color: var(--wp--preset--color--slate);
}

.fp-rms-closing {
	color: var(--wp--preset--color--on-dark-soft);
}

.fp-rms-closing h2 {
	color: var(--wp--preset--color--surface);
}

.fp-rms-closing .fp-eyebrow {
	color: #efb582;
}

@media (max-width: 639px) {
	.fp-rms-hub__grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.fp-rms-hub__node--focus {
		grid-column: 1 / -1;
		grid-row: 1;
	}
}

/* Training page ----------------------------------------------------------- */
.fp-training-options-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(1rem, 2vw, 1.4rem);
	margin-top: clamp(2rem, 4vw, 3rem);
}

/* Gutenberg flow layout can add a top margin to grid children after the
 * first one. The training options grid owns its spacing via `gap`, so reset
 * child margins to keep all three cards aligned. */
.fp-training-options-grid > * {
	margin-block: 0;
}

.fp-training-option {
	position: relative;
	align-self: stretch;
	min-height: 100%;
	padding: clamp(1.35rem, 2.5vw, 1.8rem);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 0.8rem;
	background: var(--wp--preset--color--surface);
	box-shadow: var(--wp--preset--shadow--small);
}


.fp-training-option h3 {
	margin-top: 0;
}

.fp-training-role-grid .fp-tile {
	min-height: 100%;
}

.fp-training-list-title {
	margin-bottom: 0.35rem;
}

.fp-training-implementation-track {
	margin-top: clamp(2rem, 4vw, 3rem);
}



.fp-training-faq {
	margin-top: clamp(2rem, 4vw, 3rem);
	border-top: 1px solid var(--wp--preset--color--line);
}

.fp-training-faq .wp-block-details {
	margin: 0;
	padding: 0;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.fp-training-faq summary {
	position: relative;
	padding: 1.25rem 2.75rem 1.25rem 0;
	font-size: var(--wp--preset--font-size--heading-4);
	font-weight: 700;
	cursor: pointer;
}

.fp-training-faq summary::after {
	content: "+";
	position: absolute;
	top: 50%;
	right: 0.25rem;
	transform: translateY(-50%);
	font-size: 1.6rem;
	font-weight: 400;
	color: var(--wp--preset--color--ember-700);
}

.fp-training-faq details[open] > summary::after {
	content: "−";
}

.fp-training-faq details > p {
	max-width: 52rem;
	margin: 0;
	padding: 0 2.75rem 1.35rem 0;
	color: var(--wp--preset--color--slate);
}

@media (max-width: 900px) {
	.fp-training-options-grid {
		grid-template-columns: 1fr;
	}
}


/* Homepage FirePrograms Platform graphic caption. Match the emphasized
 * prose-lead treatment while retaining caption positioning beneath the image. */
.fp-home-difference-graphic .wp-element-caption {
	margin-block-start: 0.7rem;
	font-size: var(--wp--preset--font-size--lead);
	font-weight: 600;
	line-height: 1.4;
	letter-spacing: -0.005em;
	color: var(--wp--preset--color--ink);
	text-align: center;
}

/* FP_EDITORIAL_LINK_SYSTEM_V1
 *
 * Reusable contextual links for editorial content.
 *
 * Roles:
 *   .fp-link          Normal editorial link.
 *   .fp-link--quiet   Lead / standfirst / heading-like copy.
 *   .fp-link--heading Links placed inside true headings.
 *
 * Normal Gutenberg prose receives the same roles automatically.
 * Colors come exclusively from theme.json palette tokens.
 */

:root {
	--fp-link-color: currentColor;
	--fp-link-hover-color: var(--wp--preset--color--blue-700);

	--fp-link-underline-color: var(--wp--preset--color--blue-700);
	--fp-link-hover-underline-color: var(--fp-link-hover-color);
	--fp-link-quiet-underline-color: color-mix(
		in srgb,
		var(--wp--preset--color--blue-700) 58%,
		transparent
	);

	--fp-link-underline-size: 1px;
	--fp-link-underline-offset: 0.17em;
	--fp-link-hover-underline-offset: 0.23em;
	--fp-link-transition: 160ms ease;
}

/*
 * Dark contexts reuse the same component and only redefine its
 * contextual color variables.
 */
:where(
	.fp-page-hero,
	.fp-section--dark,
	.fp-on-dark,
	.wp-block-group.is-style-fp-section-dark
) {
	--fp-link-color: currentColor;
	--fp-link-hover-color: var(--wp--preset--color--ember-600);

	--fp-link-underline-color: currentColor;
	--fp-link-hover-underline-color: var(--fp-link-hover-color);
	--fp-link-quiet-underline-color: currentColor;
}

/* FP_EMBER_LINK_CONTEXT_V1
 *
 * Ember CTA bands:
 * text and underline match at rest;
 * both transition to On Dark Soft on hover.
 */
:where(
	.fp-cta-band--ember,
	.wp-block-group.fp-cta-band--ember
) {
	--fp-link-color: currentColor;
	--fp-link-hover-color: var(--wp--preset--color--on-dark-soft);

	--fp-link-underline-color: currentColor;
	--fp-link-hover-underline-color: var(--fp-link-hover-color);
	--fp-link-quiet-underline-color: currentColor;
}

/*
 * Base editorial link.
 *
 * Automatic selectors are intentionally limited to content sections so
 * breadcrumbs, subnavigation, buttons and other navigation components
 * keep their existing component-specific treatments.
 */
.fp-link,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(p:not(.fp-tile__link), li)
	> a:not(.wp-element-button),
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button),
.wp-block-post-content
	.fp-page-hero
	:where(p:not(.fp-tile__link), h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button) {
	color: var(--fp-link-color);
	font-weight: inherit;

	text-decoration-line: underline;
	text-decoration-thickness: var(--fp-link-underline-size);
	text-decoration-color: var(--fp-link-underline-color);
	text-underline-offset: var(--fp-link-underline-offset);

	transition:
		color var(--fp-link-transition),
		text-decoration-color var(--fp-link-transition),
		text-underline-offset var(--fp-link-transition);
}

/*
 * Hover:
 * light backgrounds -> Blue 700 text + matching underline
 * dark backgrounds  -> Ember 600 text + matching underline
 *
 * Font weight never changes, preventing layout/reflow on hover.
 */
.fp-link:hover,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(p:not(.fp-tile__link), li)
	> a:not(.wp-element-button):hover,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button):hover,
.wp-block-post-content
	.fp-page-hero
	:where(p:not(.fp-tile__link), h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button):hover {
	color: var(--fp-link-hover-color);
	text-decoration-color: var(--fp-link-hover-underline-color);
	text-underline-offset: var(--fp-link-hover-underline-offset);
}

/*
 * Lead / standfirst / heading-like paragraphs.
 *
 * On light backgrounds the resting blue underline is quieter.
 * Dark contexts override the variable to currentColor so the resting
 * underline is more visually distinct there.
 */
.fp-link--quiet,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(
		.fp-prose-lead,
		.fp-prose-pair__lead,
		.fp-lede,
		.fp-home-standfirst,
		.fp-section-subhead
	)
	> a:not(.wp-element-button),
.wp-block-post-content
	.fp-page-hero
	:where(
		.fp-prose-lead,
		.fp-prose-pair__lead,
		.fp-lede,
		.fp-home-standfirst,
		.fp-section-subhead
	)
	> a:not(.wp-element-button) {
	text-decoration-color: var(--fp-link-quiet-underline-color);
}

/*
 * True heading links retain heading authority:
 * text and underline use the heading's own color at rest.
 * On hover both change together through the contextual hover variable.
 */
.fp-link--heading,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button),
.wp-block-post-content
	.fp-page-hero
	:where(h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button) {
	color: inherit;
	text-decoration-color: currentColor;
}

/* Clear keyboard focus without changing typography or layout. */
.fp-link:focus-visible,
.wp-block-post-content
	:where(.fp-section, .fp-section--tight)
	:where(p:not(.fp-tile__link), li, h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button):focus-visible,
.wp-block-post-content
	.fp-page-hero
	:where(p:not(.fp-tile__link), h1, h2, h3, h4, h5, h6)
	> a:not(.wp-element-button):focus-visible {
	outline: 2px solid var(--fp-link-hover-color);
	outline-offset: 3px;
	border-radius: 2px;
}

/* Respect reduced-motion preferences. */
@media (prefers-reduced-motion: reduce) {
	.fp-link,
	.wp-block-post-content
		:where(.fp-section, .fp-section--tight)
		:where(p:not(.fp-tile__link), li, h1, h2, h3, h4, h5, h6)
		> a:not(.wp-element-button),
	.wp-block-post-content
		.fp-page-hero
		:where(p:not(.fp-tile__link), h1, h2, h3, h4, h5, h6)
		> a:not(.wp-element-button) {
		transition: none;
	}
}

/* FP_PLATFORM_TWO_THIRDS_V1 */
.fp-platform-two-thirds {
	width: 66.666%;
	max-width: 100%;
}

@media (max-width: 781px) {
	.fp-platform-two-thirds {
		width: 100%;
	}
}

/* FP_CONNECTED_DEPARTMENT_SPACING_V1 */
#connected-department .fp-section-head {
	margin-bottom: var(--wp--preset--spacing--50);
}

#connected-department .fp-prose-copy {
	margin-top: 0;
	margin-bottom: var(--wp--preset--spacing--60);
}

#connected-department .fp-track {
	margin-top: 0;
}

/* FP_CONTACT_ANCHOR_OFFSET_V1 */
#send-us-a-message {
    scroll-margin-top: 13rem;
}
