/* ==================================================================
	   PARENT THEME OVERRIDES (Hello Elementor)
	   ================================================================== */
	/* Kill the 1140px content constraint so sections go edge-to-edge */
	html body .site-main,
	html body main#content,
	html body main.site-main {
		max-width: none !important;
		width: 100% !important;
		margin: 0 !important;
		padding: 0 !important;
	}
	.page-wrapper { padding: 0 !important; }
	html, body { margin: 0; padding: 0; overflow-x: clip; }
	body.home { background: #fff !important; }
/* Flex-template pages also need the white backdrop so transparent-bg
   sections (e.g. .hp-cta when reused in the CTA Block "image" style)
   don't show the navy body bg through the "empty" top-left area. */
body.page-template-page-flexible { background: #fff !important; }
	/* Footer full-width */
	.site-footer {
		width: 100vw !important;
		margin-left: calc(50% - 50vw) !important;
		background: var(--color-navy) !important;
		color: var(--color-white);
	}
	.site-footer > .container,
	.site-footer .site-footer__inner {
		max-width: var(--container-max);
		margin: 0 auto;
		padding: 60px var(--container-pad) 32px;
	}
	.site-footer__legal {
		max-width: var(--container-max);
		margin: 0 auto;
		padding: 16px var(--container-pad);
	}

	/* Social icons: transparent bg, 2x size */
	.site-footer__socials {
		gap: 20px !important;
	}
	.site-footer__socials a {
		background: transparent !important;
		width: auto !important;
		height: auto !important;
		padding: 0 !important;
		border-radius: 0 !important;
	}
	.site-footer__socials a svg,
	.site-footer__socials a img {
		width: 28px !important;
		height: 28px !important;
		display: block;
	}


	/* ==================================================================
	   GLOBAL VARIABLES
	   ================================================================== */
	:root {
		--color-navy: #060143;
		--color-accent: #2E2A9E;
		--color-text-muted: #B0B3C7;
		--color-gray-50: #F5F6F8;
		--font-display: "commuters-sans", "Satoshi", -apple-system, "Segoe UI", Roboto, sans-serif;
		--font-body: "Satoshi", -apple-system, "Segoe UI", Roboto, sans-serif;
		--color-navy-mid: #0D0A4F;
		--color-navy-light: #1E1B6B;
		--color-blue-mid: #060143;
		--color-white: #FFFFFF;
		--color-gray-100: #E8E8EE;
		--color-gray-700: #4A4D66;
		--container-max: 1280px;
		--container-pad: 32px;
	}

	html, body { font-family: var(--font-body) !important; color: var(--color-navy); }
	body.home { font-feature-settings: "ss01", "ss02"; }

	/* Hide default page title */
	body.home .entry-title, body.home .page-title, body.home .elementor-page-title { display: none !important; }

	/* Inner container to box content while section stays full-width */
	.container {
		max-width: var(--container-max);
		margin: 0 auto;
		padding: 0 var(--container-pad);
		width: 100%;
		box-sizing: border-box;
	}

	/* ==================================================================
	   HEADER — floating pill OVER hero
	   ================================================================== */
	.site-header {
		position: absolute;
		top: 0; left: 0; right: 0;
		z-index: 100;
		padding: 16px 32px;
		background: transparent;
	}
	.site-header__pill {
		background: var(--color-white);
		border-radius: 8px;
		padding: 12px 24px;
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 32px;
		max-width: var(--container-max);
		margin: 0 auto;
		box-shadow: 0 2px 12px rgba(0,0,0,0.06);
	}
	.site-header a, .site-header button { color: var(--color-navy); }
	.site-header__login,
	.site-header__login a {
		border: 1px solid var(--color-navy);
		border-radius: 4px !important;
		padding: 8px 20px;
		color: var(--color-navy);
		text-decoration: none;
		font-family: var(--font-body);
		font-weight: 500;
	}

	/* ==================================================================
	   EYEBROW + BUTTONS
	   ================================================================== */
	.hp-eyebrow {
		font-family: var(--font-body);
		font-size: 13px;
		font-weight: 500;
		color: var(--color-navy);
		margin: 0 0 14px 0;
		line-height: 1;
	}
	.hp-eyebrow--light { color: rgba(255,255,255,0.7); }

	.hp-btn {
		display: inline-flex !important;
		align-items: center;
		justify-content: center;
		padding: 12px 28px;
		border-radius: 4px;
		font-family: var(--font-body);
		font-size: 16px;
		font-weight: 700;
		text-decoration: none !important;
		line-height: 1;
		min-height: 44px;
		border: 1px solid transparent;
		transition: all 0.18s ease;
		cursor: pointer;
	}
	/* PRIMARY: WHITE button on navy section (the Contact Our Team in hero) */
	.hp-btn--primary {
		background: var(--color-white) !important;
		color: var(--color-navy) !important;
		border-color: var(--color-white) !important;
	}
	.hp-btn--primary:hover {
		background: transparent !important;
		color: var(--color-white) !important;
		border-color: var(--color-white) !important;
	}
	.hp-btn--outline-dark {
		background: transparent;
		color: var(--color-navy);
		border-color: var(--color-navy);
	}
	.hp-btn--outline-dark:hover { background: var(--color-navy); color: var(--color-white); }
	.hp-btn--light {
		background: var(--color-white);
		color: var(--color-navy);
		border-color: var(--color-white);
	}
	.hp-btn--light:hover { background: transparent; color: var(--color-white); }

	/* ==================================================================
	   HERO — full-width navy, extends under header
	   ================================================================== */
	.hp-hero {
		position: relative;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-navy);
		color: var(--color-white);
		padding: 210px 0 100px;
		overflow: hidden;
	}
	.hp-hero__grid-bg {
		position: absolute;
		inset: 0;
		pointer-events: none;
		background-image:
			linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px),
			linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px);
		background-size: 40px 40px;
		opacity: 0;
		transition: opacity 0.3s;
	}
	/* Grid appears on hover of hero */
	.hp-hero:hover .hp-hero__grid-bg { opacity: 1; }
	.hp-hero__inner {
		position: relative;
		z-index: 1;
		display: grid;
		grid-template-columns: 1.05fr 1fr;
		gap: 40px;
		align-items: center;
	}
	.hp-hero__content { max-width: 540px; }
	.hp-hero__headline {
		font-family: var(--font-display);
		font-size: 33px;
		font-weight: 600;
		line-height: 1.14;
		text-transform: uppercase;
		color: var(--color-white);
		margin: 0 0 22px 0;
	}
	.hp-hero__body {
		font-family: var(--font-body);
		font-size: 16px;
		font-weight: 500;
		line-height: 1.45;
		color: rgba(255,255,255,0.78);
		margin: 0 0 28px 0;
		max-width: 440px;
	}
	.hp-hero__visual {
		position: relative;
		display: flex;
		flex-direction: column;
		align-items: var(--hero-img-align, flex-end);
		justify-content: center;
	}
	.hp-hero__image {
		max-width: var(--hero-img-max-w, 100%);
		max-height: var(--hero-img-max-h, 520px);
		height: auto; width: auto;
		display: block;
		opacity: 1; /* image sits under the grid overlay (grid renders on top) */
	}
	.hp-hero__callouts {
		list-style: none;
		padding: 0;
		margin: 18px 0 0 0;
		text-align: right;
		color: rgba(255,255,255,0.8);
		font-family: var(--font-body);
		font-size: 13px;
		line-height: 1.45;
	}

	/* ==================================================================
	   ABOUT — full-width white
	   ================================================================== */
	.hp-about {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-white);
		color: var(--color-navy);
		padding: 110px 0 120px;
	}
	.hp-about__statement {
		font-family: var(--font-display);
		font-size: clamp(28px, 3.2vw, 45px);
		font-weight: 600;
		line-height: 1.08;
		color: var(--color-navy);
		margin: 0 0 80px 0;
		max-width: 1100px;
	}
	.hp-about__statement-muted { color: var(--color-text-muted); }
	.hp-about__columns {
		display: grid;
		grid-template-columns: 1fr 1fr;
		gap: 80px;
		align-items: start;
	}
	.hp-about__heading {
		font-family: var(--font-display);
		font-size: 30px;
		font-weight: 700;
		line-height: 1.08;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 0 0 24px 0;
		max-width: 340px;
	}
	.hp-about__body {
		font-family: var(--font-body);
		font-size: 14px;
		line-height: 1.65;
		color: var(--color-gray-700);
		margin: 0 0 16px 0;
		max-width: 440px;
	}
	/* FIX: CTA button needs to sit naturally, not absolute */
	.hp-about__right {
		display: grid;
		grid-template-columns: 1fr;
		grid-template-rows: auto 1fr;
		gap: 0;
	}
	.hp-about__right .hp-about__cta-wrap {
		display: flex;
		justify-content: flex-end;
		margin-bottom: 24px;
		height: 54px; /* matches heading height so body aligns with left body */
	}
	.hp-about__right .hp-about__body {
		margin-top: 54px;
	}
	.hp-about__cta {
		align-self: flex-end;
		margin-bottom: 16px;
	}
	/* Gap between the logo strip and the columns that follow it. Applies only
	   when the strip is present, and matches the statement's 80px margin above
	   the strip. */
	.hp-about > .flex-logos + .container {
		padding-top: 80px;
	}
	/* About columns: each column carries its own heading and paragraphs. The
	   eyebrow sits above the grid, the CTA below it. min-width keeps a long
	   word from widening a grid track. */
	.hp-about__col {
		min-width: 0;
	}
	/* Video slot between the eyebrow and the columns: container width, 16:9.
	   Present in the markup only when a video is set. */
	.hp-about__video {
		width: 100%;
		aspect-ratio: 16 / 9;
		overflow: hidden;
		margin: 0 0 48px 0;
	}
	.hp-about__video iframe,
	.hp-about__video video {
		display: block;
		width: 100%;
		height: 100%;
		border: 0;
	}
	/* CTA row after the columns. */
	.hp-about__actions {
		margin-top: 48px;
	}
	.hp-about__actions .hp-about__cta {
		margin: 0;
	}
	/* About column headings take their column's width, like their paragraphs.
	   Overrides the 340px cap for these two headings only. */
	.hp-about__col > .hp-about__heading {
		max-width: none;
	}
	/* About columns side by side: the column wrappers flatten into the grid so
	   the heading row and the two paragraph rows are shared across both
	   columns, and each column's first paragraph starts on the same line
	   whatever the headings' line counts. Same pattern as .flex-split. Below
	   769px the wrappers are ordinary blocks and the columns stack in source
	   order with no reserved rows. */
	@media (min-width: 769px) {
		.hp-about__columns {
			row-gap: 0;
		}
		.hp-about__col {
			display: contents;
		}
		.hp-about__col > * {
			min-width: 0;
		}
		.hp-about__col:nth-child(1) > * { grid-column: 1; }
		.hp-about__col:nth-child(2) > * { grid-column: 2; }
		.hp-about__col > .hp-about__heading { grid-row: 1; }
		.hp-about__col > .hp-about__body:nth-of-type(1) { grid-row: 2; }
		.hp-about__col > .hp-about__body:nth-of-type(2) { grid-row: 3; }
	}

	/* ==================================================================
	   CAPABILITIES — 3-column grid, heading in top-left, row 2 spans full
	   ================================================================== */
	.hp-cap {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-gray-50);
		padding: 100px 0 110px;
	}
	.hp-cap__inner {
		display: block;
	}
	.hp-cap__head { display: none; }  /* Heading now part of grid cell */
	.hp-cap__heading-cell {
		display: flex;
		flex-direction: column;
		justify-content: flex-start;
		padding-right: 40px;
	}
	.hp-cap__heading {
		font-family: var(--font-display);
		font-size: 30px;
		font-weight: 700;
		line-height: 1.08;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 14px 0 0 0;
	}
	.hp-cap__cards {
		display: grid;
		grid-template-columns: repeat(3, 1fr);
		gap: 36px 32px;
	}
	/* Top row: heading cell | card 1 | card 2(featured) */
	.hp-cap__heading-cell { grid-column: 1; grid-row: 1; }
	.hp-cap__cards .hp-cap-card:nth-child(1) { grid-column: 2; grid-row: 1; }
	.hp-cap__cards .hp-cap-card:nth-child(2) { grid-column: 3; grid-row: 1; }
	/* Bottom row: cards 3,4,5 spanning cols 1,2,3 (under heading AND cards) */
	.hp-cap__cards .hp-cap-card:nth-child(3) { grid-column: 1; grid-row: 2; }
	.hp-cap__cards .hp-cap-card:nth-child(4) { grid-column: 2; grid-row: 2; }
	.hp-cap__cards .hp-cap-card:nth-child(5) { grid-column: 3; grid-row: 2; }

	.hp-cap-card {
		position: relative;
		padding: 24px 20px 20px;
		background: transparent;
		border-radius: 8px;
		transition: background 0.25s, color 0.25s;
		cursor: default;
	}
	.hp-cap-card__icon {
		display: inline-flex;
		align-items: center;
		height: 60px;
		margin-bottom: 20px;
		transition: filter 0.25s;
	}
	.hp-cap-card__icon img,
	.hp-cap-card__icon-img {
		height: 52px;
		width: auto;
		display: block;
	}
	.hp-cap-card__title {
		font-family: var(--font-body);
		font-size: 22px;
		font-weight: 700;
		line-height: 1.19;
		color: var(--color-navy);
		margin: 0 0 12px 0;
		transition: color 0.25s;
	}
	.hp-cap-card__desc {
		font-family: var(--font-body);
		font-size: 14px;
		line-height: 1.55;
		color: var(--color-gray-700);
		margin: 0;
		transition: color 0.25s;
	}
	.hp-cap-card__arrow {
		position: absolute;
		top: 22px; right: 20px;
		opacity: 0;
		transition: opacity 0.25s;
	}
	.hp-cap-card__arrow img { width: 16px; height: 16px; display: block; }

	/* HOVER STATE + permanently-featured card: navy bg, white content, arrow visible */
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover {
		background: var(--color-navy);
	}
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__title { color: var(--color-white); }
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__desc { color: rgba(255,255,255,0.88); }
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__icon img {
		filter: brightness(0) invert(1);
	}
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__arrow { opacity: 1; }

	/* ==================================================================
	   MARKETS — full-width navy with slider
	   ================================================================== */
	.hp-markets {
		position: relative;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-navy);
		color: var(--color-white);
		padding: 100px 0 140px;
		overflow: visible;
	}
	.hp-markets > .container { position: relative; z-index: 1; }
	.hp-markets__head {
		display: flex;
		justify-content: space-between;
		align-items: flex-end;
		gap: 24px;
		margin-bottom: 56px;
	}
	.hp-markets__heading {
		font-family: var(--font-display);
		font-size: 33px;
		font-weight: 600;
		line-height: 1.14;
		text-transform: uppercase;
		color: var(--color-white);
		margin: 0;
		max-width: 620px;
	}
	.hp-markets__body {
		display: grid;
		grid-template-columns: 380px 1fr;
		gap: 40px;
		align-items: end;
	}
	.hp-markets__controls {
		display: flex;
		flex-direction: column;
		gap: 28px;
	}
	.hp-markets__pagination {
		display: inline-flex;
		gap: 8px;
		position: static;
		width: auto;
	}
	.hp-dot {
		width: 10px; height: 10px;
		border: 1px solid rgba(255,255,255,0.5);
		border-radius: 50%;
		background: transparent;
		color: var(--color-white);
		padding: 0;
		cursor: pointer;
	}
	.hp-dot--active { background: var(--color-white); border-color: var(--color-white); }
	.hp-markets__text-wrap { position: relative; min-height: 180px; }
	.hp-markets__slider-text { overflow: hidden; }
	.hp-markets__slider-text .hp-market-card__title {
		font-family: var(--font-display);
		font-size: 35px;
		font-weight: 600;
		line-height: 1.0;
		color: var(--color-white);
		margin: 0 0 16px 0;
	}
	.hp-markets__slider-text .hp-market-card__desc {
		font-family: var(--font-body);
		font-size: 13px;
		line-height: 1.55;
		color: rgba(255,255,255,0.75);
		margin: 0;
		max-width: 340px;
	}
	.hp-markets__nav { display: inline-flex; gap: 8px; }
	.hp-markets__btn {
		width: 44px; height: 44px;
		border: 1px solid rgba(255,255,255,0.5);
		background: transparent;
		color: var(--color-white);
		border-radius: 4px;
		cursor: pointer;
		display: inline-flex;
		align-items: center;
		justify-content: center;
	}
	.hp-markets__btn:hover { background: var(--color-white); color: var(--color-navy); }

	/* IMAGE SWIPER — must render! */
	.hp-markets__slider-images {
		position: relative;
		overflow: hidden;
		border-radius: 4px;
		z-index: 2;
		width: 100%;
		margin-bottom: -140px;
	}
	.hp-markets__slider-images .swiper-wrapper,
	.hp-markets__slider-images .swiper-slide { width: 100%; }
	.hp-market-card__image {
		width: 100%;
		height: 580px;
		aspect-ratio: 4 / 5;
		background-size: cover;
		background-position: center;
		background-color: var(--color-navy-light);
	}
	.hp-market-card__image--placeholder {
		background: linear-gradient(135deg, #3a4a7a 0%, #1a2450 100%);
	}

	/* ==================================================================
	   PROOF — full-width white with airplane bg
	   ================================================================== */
	.hp-proof {
		position: relative;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background-color: var(--color-white);
		background-repeat: no-repeat;
		background-position: center center;
		background-size: cover;
		color: var(--color-navy);
		padding: 180px 0 130px;
		overflow: hidden;
	}
	.hp-proof > .container { position: relative; z-index: 1; }
	.hp-proof__head { margin-bottom: 64px; }
	.hp-proof__heading {
		font-family: var(--font-display);
		font-size: 30px;
		font-weight: 700;
		line-height: 1.08;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 0;
		max-width: 420px;
	}
	.hp-proof__timeline {
		position: relative;
		display: grid;
		grid-template-columns: 1fr 1fr;
		grid-template-rows: auto auto;
		gap: 80px 80px;
		max-width: none;
		width: 100%;
		margin: 0 auto;
	}
	.hp-proof__line {
		position: absolute;
		left: 20px; right: 20px;
		top: calc(50% - 40px);
		height: 1px;
		background: rgba(6,1,67,0.25);
		z-index: 0;
	}
	.hp-proof-card {
		position: relative;
		background: var(--color-navy);
		color: var(--color-white);
		padding: 24px 26px 20px;
		border-radius: 4px;
		z-index: 1;
	}
	.hp-proof-card--1, .hp-proof-card--2 { transform: translateY(-20px); }
	.hp-proof-card--3, .hp-proof-card--4 { transform: translateY(20px); }
	.hp-proof-card__badge {
		position: absolute;
		top: -16px; left: 20px;
		width: 32px; height: 32px;
		border-radius: 50%;
		background: var(--color-navy);
		color: var(--color-white);
		display: inline-flex;
		align-items: center;
		justify-content: center;
		font-family: var(--font-body);
		font-size: 13px;
		font-weight: 600;
		border: 3px solid var(--color-white);
	}
	.hp-proof-card__number {
		font-family: var(--font-display);
		font-size: 22px;
		font-weight: 700;
		line-height: 1.15;
		color: var(--color-white);
		margin: 0 0 6px 0;
	}
	.hp-proof-card__label {
		font-family: var(--font-body);
		font-size: 13px;
		line-height: 1.5;
		color: rgba(255,255,255,0.78);
		margin: 0;
	}

	/* ==================================================================
	   CTA — full-width navy, pilot image extends
	   ================================================================== */
	.hp-cta {
		position: relative;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-navy);
		color: var(--color-white);
		padding: 0;
		overflow: hidden;
	}
	.hp-cta__inner {
		position: relative;
		z-index: 2;
	}
	/* Card: absolute bottom-left composition, 52vw, on desktop; returns to
	   flow at full content width at 900px and below. */
	.hp-cta__content {
		position: absolute;
		left: 0;
		bottom: 0;
		top: auto;
		right: auto;
		width: 52vw;
		max-width: 920px;
		margin: 0;
		padding: 80px 56px 140px max(40px, calc((100vw - 1280px) / 2 + 40px));
		background: var(--color-navy);
		z-index: 3;
		box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
	}
	@media (max-width: 900px) {
		.hp-cta__content {
			position: relative;
			top: auto;
			right: auto;
			bottom: auto;
			left: auto;
			width: 100%;
			max-width: 100%;
			margin: 0;
			padding: 64px 0 40px;
		}
	}
	.hp-cta__heading {
		font-family: var(--font-display);
		font-size: 33px;
		font-weight: 600;
		line-height: 1.12;
		text-transform: uppercase;
		color: var(--color-white);
		margin: 0 0 22px 0;
	}
	.hp-cta__body {
		font-family: var(--font-body);
		font-size: 14px;
		line-height: 1.6;
		color: rgba(255,255,255,0.78);
		margin: 0 0 32px 0;
		max-width: 420px;
	}
	.hp-cta__visual {
		position: absolute;
		top: 0; right: 0; bottom: 0;
		width: 58%;
		z-index: 1;
		pointer-events: none;
	}
	.hp-cta__image {
		width: 100%; height: 100%;
		object-fit: cover;
		object-position: center;
		display: block;
	}

	/* ==================================================================
	   RESPONSIVE
	   ================================================================== */
	@media (max-width: 1024px) {
		.hp-cap__cards { grid-template-columns: 1fr 1fr; }
		.hp-cap__cards .hp-cap-card:nth-child(n) { grid-column: auto; grid-row: auto; }
		.hp-cap__heading-cell { grid-column: 1 / -1; }
		.hp-proof__timeline { grid-template-columns: 1fr; gap: 40px; }
		.hp-proof-card--1, .hp-proof-card--2, .hp-proof-card--3, .hp-proof-card--4 { transform: none; }
		.hp-proof__line { display: none; }
		.hp-cta__visual { width: 45%; opacity: 0.55; }
	}
	@media (max-width: 768px) {
		.hp-hero { padding: 170px 0 60px; }
		.hp-hero__inner { grid-template-columns: 1fr; gap: 40px; }
		.hp-hero__visual { align-items: center; }
		.hp-about { padding: 140px 0 80px; }
		.hp-about__columns { grid-template-columns: 1fr; gap: 32px; }
		.hp-about__video { margin-bottom: 32px; }
		.hp-about__actions { margin-top: 32px; }
		.hp-cap { padding: 140px 0 80px; }
		.hp-cap__cards { grid-template-columns: 1fr; }
		.hp-markets { padding: 140px 0 100px; }
		.hp-markets__body { grid-template-columns: 1fr; }
		.hp-markets__controls { min-width: 0; }
		.hp-proof { padding: 80px 0; }
		.hp-cta__visual { width: 100%; height: 240px; top: auto; bottom: 0; opacity: 0.4; }
	}
	
	/* Correct pill class override */
	.site-header .header-inner {
		border-radius: 8px !important;
		max-width: 1240px !important;
	}
	
	/* === v7 fixes === */
	/* Footer full-width with stronger specificity */
	html body footer.site-footer,
	html body .site-footer {
		width: 100vw !important;
		max-width: none !important;
		margin-left: calc(50% - 50vw) !important;
		margin-right: calc(50% - 50vw) !important;
		background: var(--color-navy) !important;
		color: #fff;
	}
	.site-footer > .container {
		max-width: 1280px !important;
		margin: 0 auto !important;
		padding: 60px 32px 32px !important;
		width: 100% !important;
	}

	/* Social icons — correct class is .footer-social */
	.footer-social {
		display: flex !important;
		gap: 20px !important;
		align-items: center !important;
	}
	.footer-social a {
		background: transparent !important;
		border: none !important;
		padding: 0 !important;
		width: auto !important;
		height: auto !important;
		display: inline-flex !important;
		align-items: center !important;
		justify-content: flex-start !important;
		border-radius: 0 !important;
	}
	.footer-social a svg,
	.footer-social a img {
		width: 28px !important;
		height: 28px !important;
		display: block !important;
		fill: #fff;
		color: #fff;
	}
	.footer-social a svg path,
	.footer-social a svg * {
		fill: currentColor;
	}

	/* About body alignment fix — right body was 34px higher than left.
	   Left column: eyebrow(13px+14mb) + heading(30px, 3 lines, 24mb) + body.
	   Right column: cta (54px) + 24mb + body.
	   Need right body to start at the same y as left body. Simplest: match top spacing.
	*/
	.hp-about__right {
		display: grid !important;
		grid-template-columns: 1fr !important;
		grid-template-rows: auto auto !important;
		gap: 0 !important;
	}
	/* Force body row down so it aligns with left body's starting position.
	   Left body sits after: eyebrow(13 + 14 margin) + heading(3 lines of 30px = 90 + 24 margin) ~= 141px from top of column.
	   Right body starts after CTA (54px) + margin 24 = ~78px. Gap = 63px.
	*/
	.hp-about__right .hp-about__body {
		margin-top: 63px !important;
	}

	/* === v7b fixes === */
	/* Stop "More About Us" button from stretching full-width.
	   The button is inside .hp-about__right which is a grid — force the button to its natural width.
	*/
	.hp-about__right .hp-btn,
	.hp-about__right a.hp-btn,
	.hp-about__right .hp-about__cta {
		justify-self: flex-end !important;
		width: auto !important;
		max-width: max-content !important;
		display: inline-flex !important;
	}
	/* Ensure the right column's first child (button) aligns right, doesn't stretch */
	.hp-about__right > *:first-child {
		justify-self: end !important;
		width: auto !important;
	}

	/* === v9 FINAL PATCHES === */

	/* 1. NAV PILL: widen to match content container, aligned left edge with other sections */
	.site-header {
		padding: 16px 0 !important;
	}
	.site-header .header-inner {
		max-width: 1280px !important;
		width: calc(100% - 64px) !important;
		margin: 0 auto !important;
		padding: 14px 28px !important;
		box-sizing: border-box !important;
	}

	/* 2. FOOTER LEGAL: Terms + Privacy on same line */
	.site-footer .footer-legal ul,
	.site-footer .footer-legal ol,
	.site-footer .footer-legal {
		display: flex !important;
		flex-direction: row !important;
		list-style: none !important;
		padding: 0 !important;
		margin: 0 !important;
		gap: 32px !important;
		align-items: center !important;
		justify-content: flex-end !important;
	}
	.site-footer .footer-legal li {
		list-style: none !important;
		margin: 0 !important;
		padding: 0 !important;
		display: inline-block !important;
	}

		/* FOOTER LEGAL: wrap the row below 768px so no label is clipped. */
		@media (max-width: 768px) {
			.site-footer .footer-legal ul {
				flex-wrap: wrap !important;
				gap: 8px 32px !important;
			}
		}

	/* 3. CAP CARD ICONS: default colored navy (not white). Only invert on hover. */
	/* Reset: remove default invert if any, then explicit navy color */
	.hp-cap-card .hp-cap-card__icon img,
	.hp-cap-card .hp-cap-card__icon-img {
		filter: brightness(0) saturate(100%) invert(8%) sepia(92%) saturate(3000%) hue-rotate(243deg) brightness(60%) contrast(130%) !important;
		/* ^ this filter-chain maps any SVG color to navy #060143 */
	}
	/* Hover flips to white */
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__icon img,
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__icon-img {
		filter: brightness(0) invert(1) !important;
	}

	/* 4. ABOUT body alignment — right body is 25px HIGHER than left; push it down */
	.hp-about__right .hp-about__body {
		margin-top: 88px !important; /* was 63, +25 to match */
	}

	/* 5. MARKETS image overflow — strategy: reduce the markets section padding-bottom
	   AND increase the negative margin so image bottom extends BELOW markets section bottom */
	.hp-markets {
		padding-bottom: 0 !important;
	}
	.hp-markets__slider-images {
		margin-bottom: -160px !important;
		position: relative !important;
		z-index: 5 !important;
	}
	/* Give proof enough padding-top to accommodate the overlap */
	.hp-proof {
		padding-top: 200px !important;
	}

	/* 6. HERO GRID: radial dots pattern (inspired by Group.png), hover-only */
	.hp-hero__grid-bg {
		background-image:
			radial-gradient(circle, rgba(255,255,255,0.45) 1.5px, transparent 2px) !important;
		background-size: 48px 48px !important;
		background-position: center center !important;
		opacity: 0 !important;
		transition: opacity 0.35s ease !important;
	}
	.hp-hero:hover .hp-hero__grid-bg {
		opacity: 1 !important;
	}

	/* === v10 FINAL === */

	/* 1. NAV: match footer content width (1280px, left-aligned with other sections).
	   Footer inner is max-width 1280px, padding 32px, left edge at 80px on 1440 viewport.
	   Target: nav pill should have left=80, right=1360, width=1280. */
	html body .site-header {
		padding: 16px 0 !important;
	}
	html body .site-header .header-inner {
		max-width: 1280px !important;
		width: calc(100% - 64px) !important;
		margin: 0 auto !important;
		padding: 14px 32px !important;
		box-sizing: border-box !important;
	}

	/* 2. HERO GRID: remove entirely — no hover effect at all */
	.hp-hero__grid-bg {
		display: none !important;
	}
	.hp-hero:hover .hp-hero__grid-bg {
		display: none !important;
	}

	/* 4. MARKETS image overlap: HALF the previous negative margin (was -160 → -80) */
	.hp-markets__slider-images {
		margin-bottom: -80px !important;
	}
	/* Restore markets padding-bottom so section has breathing room */
	.hp-markets {
		padding-bottom: 40px !important;
	}
	/* Reduce proof top padding since we're overlapping less */
	.hp-proof {
		padding-top: 120px !important;
	}

	/* 5. CTA pilot image: add -80px NEGATIVE MARGIN ON TOP so it overlaps into proof section above */
	.hp-cta {
		overflow: visible !important;
		padding-top: 0 !important;
	}
	.hp-cta__visual {
		top: -80px !important;
		bottom: 0 !important;
		height: auto !important;
	}

	/* === v10b NAV width: override site-header parent === */
	html body header.site-header,
	html body .site-header {
		max-width: none !important;
		width: 100% !important;
		left: 0 !important;
		right: 0 !important;
		margin: 0 !important;
		padding: 16px 0 !important;
	}
	html body .site-header > .container {
		max-width: 1344px !important;
		width: 100% !important;
		padding: 0 32px !important;
		margin: 0 auto !important;
		box-sizing: border-box !important;
	}
	html body .site-header .header-inner {
		max-width: none !important;
		width: 100% !important;
		margin: 0 !important;
		padding: 14px 24px !important;
		box-sizing: border-box !important;
	}

	/* === v11 === */

	/* 1. NAV TEXT 18px */
	.site-header .header-inner a,
	.site-header .header-inner nav a,
	.site-header .header-inner .menu a,
	.site-header .header-inner ul a,
	.site-header .header-inner li a {
		font-size: 18px !important;
		font-family: var(--font-body) !important;
	}

	/* 2. NAV width & padding to align header logo with footer logo
	   Footer logo-left = 112 (container-left 80 + inner padding 32).
	   Header logo currently at 104 (header-inner left=80 + inner padding 24).
	   Fix: change header-inner padding to 32px horizontal so logo lands at 112. */
	html body .site-header .header-inner {
		padding: 14px 32px !important;
	}

	/* 3. CAP CARD arrows: ensure arrow renders with navy color by default (hidden),
	   then white when hovered (already in hover rule). */
	.hp-cap-card .hp-cap-card__arrow {
		display: inline-flex !important;
		opacity: 0;
		transition: opacity 0.25s;
		position: absolute;
		top: 22px;
		right: 20px;
	}
	.hp-cap-card .hp-cap-card__arrow img {
		width: 16px !important;
		height: 16px !important;
		display: block !important;
		/* In navy state on hover - invert to white, but since default is hidden, doesn't matter */
		filter: brightness(0) invert(1) !important;
	}
	/* On hover: show the arrow */
	.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__arrow {
		opacity: 1 !important;
	}

	/* 4. MARKETS: move controls (dots + text + arrows) to TOP of image column.
	   Current body is grid w/ align-items:end. Change to align-items: start so
	   controls align with top of image. */
	html body .hp-markets__body {
		align-items: start !important;
	}
	html body .hp-markets__controls {
		padding-bottom: 0 !important;
		padding-top: 0 !important;
		margin-top: 0 !important;
	}

	/* 5. PROOF section: +60px bottom padding for breathing room */
	html body .hp-proof {
		padding-bottom: 200px !important;
	}

	/* === v12 === */

	/* 1. PROOF padding: +25 top, +50 bottom */
	html body .hp-proof {
		padding-top: 145px !important;
		padding-bottom: 250px !important;
	}

	/* 2. MARKETS pagination: rectangular bars on a horizontal line (like Figma) */
	html body .hp-markets__pagination {
		position: relative !important;
		display: inline-flex !important;
		gap: 12px !important;
		align-items: center !important;
		padding: 0 !important;
		margin: 0 !important;
		min-width: 240px !important;
	}
	/* Horizontal line running through the pagination */
	html body .hp-markets__pagination::after {
		content: "" !important;
		position: absolute !important;
		left: 0 !important;
		right: -120px !important;
		bottom: -14px !important;
		height: 2px !important;
		background: rgba(255,255,255,0.7) !important;
		z-index: 0 !important;
	}
	/* Override round dots -> rectangles */
	html body .hp-markets__pagination .hp-dot,
	html body .hp-dot {
		width: 16px !important;
		height: 20px !important;
		border-radius: 0 !important;
		border: 1.5px solid rgba(255,255,255,0.7) !important;
		background: transparent !important;
		padding: 0 !important;
		cursor: pointer !important;
		position: relative !important;
		z-index: 1 !important;
		transition: background 0.2s, border-color 0.2s !important;
	}
	html body .hp-dot--active,
	html body .hp-dot.hp-dot--active {
		background: #FFFFFF !important;
		border-color: #FFFFFF !important;
	}

	/* === v13: PAGE TEMPLATES (About / Services / Products / Contact) === */

	/* Shared page hero: navy band under header w/ page title */
	.page-hero {
		position: relative;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-navy);
		color: var(--color-white);
		padding: 250px 0 120px;
		overflow: hidden;
	}
	.page-hero__inner {
		max-width: 900px;
	}
	.page-hero__headline {
		font-family: var(--font-display);
		font-size: clamp(32px, 4vw, 56px);
		font-weight: 600;
		line-height: 1.08;
		text-transform: uppercase;
		color: var(--color-white);
		margin: 0 0 24px 0;
	}
	.page-hero__intro {
		font-family: var(--font-body);
		font-size: 18px;
		line-height: 1.5;
		color: rgba(255,255,255,0.78);
		margin: 0;
		max-width: 720px;
	}

	/* Page body: prose content section */
	.page-body {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-white);
		padding: 100px 0 80px;
	}
	.page-body__content {
		max-width: 780px;
		margin: 0 auto;
		font-family: var(--font-body);
		font-size: 16px;
		line-height: 1.7;
		color: var(--color-gray-700);
	}
	.page-body__content p {
		margin: 0 0 20px 0;
	}
	.page-body__content p:last-child { margin-bottom: 0; }

	.page-section__heading {
		font-family: var(--font-display);
		font-size: 30px;
		font-weight: 700;
		line-height: 1.08;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 0 0 48px 0;
	}

	/* ABOUT: milestones timeline */
	.page-milestones {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-gray-50);
		padding: 100px 0 110px;
	}
	.page-milestones__grid {
		display: grid;
		grid-template-columns: repeat(4, 1fr);
		gap: 24px;
	}
	.milestone-card {
		background: var(--color-white);
		border-radius: 4px;
		padding: 28px 24px;
		border-left: 3px solid var(--color-navy);
	}
	.milestone-card__year {
		font-family: var(--font-display);
		font-size: 26px;
		font-weight: 700;
		color: var(--color-navy);
		margin-bottom: 10px;
		letter-spacing: 0.5px;
	}
	.milestone-card__label {
		font-family: var(--font-body);
		font-size: 14px;
		line-height: 1.5;
		color: var(--color-gray-700);
	}

	/* SERVICES: alternating rows */
	.service-section {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-white);
		padding: 100px 0;
	}
	.service-section--alt {
		background: var(--color-gray-50);
	}
	.service-row {
		display: grid;
		grid-template-columns: 1.05fr 1fr;
		gap: 64px;
		align-items: center;
	}
	.service-row--reverse .service-row__text { order: 2; }
	.service-row--reverse .service-row__image { order: 1; }
	.service-row__heading {
		font-family: var(--font-display);
		font-size: clamp(28px, 3vw, 40px);
		font-weight: 700;
		line-height: 1.1;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 14px 0 24px 0;
	}
	.service-row__text p {
		font-family: var(--font-body);
		font-size: 15px;
		line-height: 1.65;
		color: var(--color-gray-700);
		margin: 0 0 16px 0;
	}
	.service-row__image { min-height: 380px; }
	.service-row__placeholder {
		width: 100%;
		height: 100%;
		min-height: 380px;
		background: linear-gradient(135deg, #1a2450 0%, #3a4a7a 100%);
		border-radius: 4px;
	}
	.service-row__placeholder--2 { background: linear-gradient(135deg, var(--color-navy) 0%, var(--color-accent) 100%); }
	.service-row__placeholder--3 { background: linear-gradient(135deg, #0D0A4F 0%, #4a5a9e 100%); }

	/* PRODUCTS: grid of cards */
	.products-grid-section {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-gray-50);
		padding: 100px 0 120px;
	}
	.products-grid {
		display: grid;
		grid-template-columns: repeat(3, 1fr);
		gap: 24px;
	}
	.product-card {
		background: var(--color-white);
		border-radius: 4px;
		padding: 32px 28px;
		display: flex;
		flex-direction: column;
		gap: 16px;
		transition: transform 0.25s, box-shadow 0.25s;
	}
	.product-card:hover {
		transform: translateY(-4px);
		box-shadow: 0 10px 30px rgba(6,1,67,0.12);
	}
	.product-card--featured {
		background: var(--color-navy);
		color: var(--color-white);
	}
	.product-card--featured .product-card__title,
	.product-card--featured .product-card__desc,
	.product-card--featured .product-card__specs li { color: var(--color-white); }
	.product-card--featured .product-card__icon img { filter: brightness(0) invert(1); }
	.product-card__icon img {
		height: 44px;
		width: auto;
		filter: brightness(0) saturate(100%) invert(8%) sepia(92%) saturate(3000%) hue-rotate(243deg) brightness(60%) contrast(130%);
	}
	.product-card__title {
		font-family: var(--font-body);
		font-size: 20px;
		font-weight: 700;
		line-height: 1.25;
		color: var(--color-navy);
		margin: 0;
	}
	.product-card__desc {
		font-family: var(--font-body);
		font-size: 14px;
		line-height: 1.55;
		color: var(--color-gray-700);
		margin: 0;
	}
	.product-card__specs {
		list-style: none;
		padding: 0;
		margin: 8px 0 0 0;
		display: flex;
		flex-direction: column;
		gap: 8px;
	}
	.product-card__specs li {
		font-family: var(--font-body);
		font-size: 13px;
		line-height: 1.45;
		color: var(--color-gray-700);
		padding-left: 16px;
		position: relative;
	}
	.product-card__specs li::before {
		content: "_";
		position: absolute;
		left: 0;
		top: -2px;
		font-weight: 700;
	}

	/* CONTACT */
	.contact-body {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		background: var(--color-white);
		padding: 100px 0 140px;
	}
	.contact-grid {
		display: grid;
		grid-template-columns: 1fr 1.4fr;
		gap: 80px;
		align-items: start;
	}
	.contact-info__heading,
	.contact-form__heading {
		font-family: var(--font-display);
		font-size: 24px;
		font-weight: 700;
		text-transform: uppercase;
		color: var(--color-navy);
		margin: 0 0 32px 0;
	}
	.contact-info__block { margin-bottom: 28px; }
	.contact-info__label {
		font-family: var(--font-body);
		font-size: 11px;
		font-weight: 700;
		letter-spacing: 1px;
		color: var(--color-gray-700);
		text-transform: uppercase;
		margin: 0 0 6px 0;
	}
	.contact-info__value {
		font-family: var(--font-body);
		font-size: 16px;
		line-height: 1.45;
		color: var(--color-navy);
		margin: 0;
	}
	.contact-info__value a {
		color: var(--color-navy);
		text-decoration: none;
	}
	.contact-info__value a:hover { text-decoration: underline; }

	.acme-contact-form .form-row {
		margin-bottom: 18px;
		display: flex;
		flex-direction: column;
		gap: 6px;
	}
	.acme-contact-form label {
		font-family: var(--font-body);
		font-size: 12px;
		font-weight: 600;
		letter-spacing: 0.5px;
		text-transform: uppercase;
		color: var(--color-navy);
	}
	.acme-contact-form input,
	.acme-contact-form textarea {
		font-family: var(--font-body);
		font-size: 15px;
		padding: 12px 14px;
		border: 1px solid #d5d7e0;
		border-radius: 4px;
		background: var(--color-white);
		color: var(--color-navy);
		width: 100%;
		box-sizing: border-box;
	}
	.acme-contact-form input:focus,
	.acme-contact-form textarea:focus {
		outline: none;
		border-color: var(--color-navy);
	}
	.acme-contact-form button[type="submit"] {
		margin-top: 8px;
	}
	.contact-form__note {
		font-size: 12px;
		color: var(--color-gray-700);
		margin-top: 14px;
		font-style: italic;
	}

	/* RESPONSIVE (pages) */
	@media (max-width: 1024px) {
		.page-milestones__grid { grid-template-columns: repeat(2, 1fr); }
		.products-grid { grid-template-columns: repeat(2, 1fr); }
		.service-row { grid-template-columns: 1fr; gap: 40px; }
		.service-row--reverse .service-row__text,
		.service-row--reverse .service-row__image { order: initial; }
		.contact-grid { grid-template-columns: 1fr; gap: 48px; }
	}
	@media (max-width: 640px) {
		.page-hero { padding: 210px 0 80px; }
		.page-milestones__grid,
		.products-grid { grid-template-columns: 1fr; }
	}

	/* === v14: Proof card number font override ===
	   Commuters Sans DEMO watermark substitutes '+' and '-' glyphs.
	   Force proof card numbers to use Satoshi (no watermark) instead. */
	html body .hp-proof-card__number,
	html body .hp-proof .hp-proof-card__number {
		font-family: "Satoshi", -apple-system, "Segoe UI", Roboto, sans-serif !important;
		font-weight: 700 !important;
	}html body .acme-block--markets .hp-market-card.is-active,
	html body .acme-block--markets .hp-market-slide.is-active {
		display: block !important;
	}

/* ============================================================================
   PRODUCTS ARCHIVE + SINGLE PRODUCT
   ============================================================================ */

/* ----- Page hero used by /products/ archive ----- */
.page-hero {
    background: var(--color-navy, #060143);
    color: #fff;
    padding: 150px 24px 100px;
}
.page-hero__inner {
    max-width: 1280px;
    margin: 0 auto;
}
.page-hero__eyebrow {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 14px;
    letter-spacing: 0.12em;
    margin: 0 0 20px;
    opacity: 0.85;
}
.page-hero__title {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(32px, 4.5vw, 64px);
    line-height: 1.05;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    margin: 0 0 28px;
    max-width: 880px;
}
.page-hero__body {
    font-size: 17px;
    line-height: 1.65;
    max-width: 620px;
    opacity: 0.92;
    margin: 0;
}

/* ===== PRODUCTS ARCHIVE ===== */
.products-archive {
    padding: 64px 24px 96px;
    background: #f7f8fa;
    min-height: 60vh;
}
.products-archive__inner {
    max-width: 1280px;
    margin: 0 auto;
    display: grid;
    grid-template-columns: 260px 1fr;
    gap: 48px;
    align-items: start;
}
@media (max-width: 900px) {
    .products-archive__inner {
        grid-template-columns: 1fr;
    }
}
.products-archive__sidebar {
    position: sticky;
    top: 100px;
}
.acme-filters {
    background: #fff;
    padding: 24px;
    border-radius: 8px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}
.acme-filters__heading {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 14px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--color-navy, #060143);
    margin: 0 0 20px;
    padding-bottom: 16px;
    border-bottom: 1px solid #e5e7eb;
}
.acme-filter {
    margin-bottom: 18px;
}
.acme-filter__label {
    display: block;
    font-size: 12px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #6b7280;
    margin-bottom: 6px;
    font-weight: 600;
}
.acme-filter__select {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    background: #fff;
    font-size: 14px;
    color: var(--color-navy, #060143);
    cursor: pointer;
}
.acme-filter__select:focus {
    outline: 2px solid var(--color-navy, #060143);
    outline-offset: 2px;
}
.acme-filters__clear {
    display: inline-block;
    margin-top: 8px;
    font-size: 13px;
    color: var(--color-navy, #060143);
    text-decoration: underline;
}
.acme-filters__submit {
    margin-top: 12px;
    width: 100%;
    padding: 10px;
    background: var(--color-navy, #060143);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
}

.products-archive__main {
    min-width: 0;
}
.products-archive__count {
    font-size: 14px;
    color: #6b7280;
    margin: 0 0 24px;
}
.products-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 24px;
}
.product-card {
    background: #fff;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.product-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
}
.product-card__link {
    display: block;
    color: inherit;
    text-decoration: none;
}
.product-card__image {
    aspect-ratio: 4 / 3;
    background-size: cover;
    background-position: center;
    background-color: #f3f4f6;
}
.product-card__image--placeholder {
    background: linear-gradient(135deg, #e5e7eb 0%, #f3f4f6 100%);
    position: relative;
}
.product-card__image--placeholder::after {
    content: '';
    position: absolute;
    inset: 0;
    background-image: radial-gradient(circle at 50% 50%, rgba(6, 1, 67, 0.08) 0%, transparent 60%);
}
.product-card__body {
    padding: 20px 22px 24px;
}
.product-card__model {
    font-family: 'Commuters Sans', monospace;
    font-size: 12px;
    letter-spacing: 0.1em;
    color: #6b7280;
    margin: 0 0 6px;
}
.product-card__title {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 18px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--color-navy, #060143);
    margin: 0 0 10px;
}
.product-card__summary {
    font-size: 14px;
    line-height: 1.55;
    color: #4b5563;
    margin: 0;
}

.products-archive__pagination {
    margin-top: 48px;
    text-align: center;
}
.products-archive__pagination .page-numbers {
    display: inline-block;
    padding: 8px 14px;
    margin: 0 3px;
    border-radius: 6px;
    background: #fff;
    color: var(--color-navy, #060143);
    text-decoration: none;
}
.products-archive__pagination .page-numbers.current {
    background: var(--color-navy, #060143);
    color: #fff;
}

.products-archive__empty {
    background: #fff;
    padding: 48px;
    border-radius: 10px;
    text-align: center;
}
.products-archive__empty h2 {
    font-family: 'Commuters Sans', sans-serif;
    color: var(--color-navy, #060143);
    margin: 0 0 12px;
}
.products-archive__empty p {
    color: #6b7280;
    margin: 0 0 16px;
}

/* ===== SINGLE PRODUCT ===== */
.single-product {
    padding: 118px 24px 96px;
    background: #fff;
}
.single-product__inner {
    max-width: 1200px;
    margin: 0 auto;
}
.single-product__breadcrumb {
    font-size: 13px;
    color: #6b7280;
    margin-bottom: 32px;
}
.single-product__breadcrumb a {
    color: var(--color-navy, #060143);
    text-decoration: none;
}
.single-product__breadcrumb span {
    margin: 0 8px;
    opacity: 0.5;
}
.single-product__grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 56px;
    margin-bottom: 56px;
}
@media (max-width: 800px) {
    .single-product__grid {
        grid-template-columns: 1fr;
        gap: 32px;
    }
}
.single-product__hero-image {
    width: 100%;
    aspect-ratio: 4 / 3;
    border-radius: 12px;
    background-color: #f3f4f6;
    object-fit: cover;
}
.single-product__hero-image--placeholder {
    background: linear-gradient(135deg, #e5e7eb, #f3f4f6);
}
.single-product__thumbs {
    display: flex;
    gap: 10px;
    margin-top: 14px;
    flex-wrap: wrap;
}
.single-product__thumb {
    width: 72px;
    height: 72px;
    object-fit: cover;
    border-radius: 6px;
    cursor: pointer;
}
.single-product__model {
    font-family: 'Commuters Sans', monospace;
    font-size: 13px;
    letter-spacing: 0.12em;
    color: #6b7280;
    margin: 0 0 8px;
}
.single-product__title {
    font-family: 'Commuters Sans', sans-serif;
    /* Sized down 2026-07 — real product titles carry long part numbers
       (e.g. "Battery Charger (218BC101-2)") and 44px wrapped badly. */
    font-size: clamp(22px, 2.2vw, 30px);
    line-height: 1.2;
    color: var(--color-navy, #060143);
    margin: 0 0 18px;
}
.single-product__summary {
    font-size: 17px;
    line-height: 1.6;
    color: #374151;
    margin: 0 0 32px;
}
.single-product__meta {
    padding-top: 24px;
    border-top: 1px solid #e5e7eb;
    margin-bottom: 32px;
}
.single-product__meta-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    margin-bottom: 10px;
    font-size: 14px;
}
.single-product__meta-label {
    color: #6b7280;
    font-weight: 600;
    min-width: 80px;
}
.single-product__tag {
    display: inline-block;
    padding: 4px 12px;
    background: #f3f4f6;
    color: var(--color-navy, #060143);
    border-radius: 999px;
    font-size: 13px;
    text-decoration: none;
}
.single-product__tag:hover {
    background: #e5e7eb;
}
.single-product__datasheet {
    display: inline-block;
    padding: 14px 28px;
    background: var(--color-navy, #060143);
    color: #fff;
    border-radius: 6px;
    text-decoration: none;
    font-weight: 600;
    transition: background 0.18s ease;
}
.single-product__datasheet:hover {
    background: #0c0355;
}
.single-product__specs {
    margin-top: 48px;
    padding-top: 40px;
    border-top: 2px solid #e5e7eb;
}
.single-product__specs-heading {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 24px;
    color: var(--color-navy, #060143);
    margin: 0 0 24px;
    text-transform: uppercase;
    letter-spacing: 0.02em;
}
.single-product__specs-table {
    width: 100%;
    border-collapse: collapse;
}
.single-product__specs-table th,
.single-product__specs-table td {
    padding: 14px 16px;
    text-align: left;
    border-bottom: 1px solid #e5e7eb;
}
.single-product__specs-table th {
    color: #6b7280;
    font-weight: 600;
    width: 40%;
}
.single-product__specs-table td {
    color: var(--color-navy, #060143);
}
.single-product__content {
    margin-top: 48px;
    padding-top: 40px;
    border-top: 2px solid #e5e7eb;
    font-size: 16px;
    line-height: 1.7;
    color: #374151;
}


/* ===== PAGE-BODY COLUMNS (About / generic page 2-col layout) =====
   Mirrors .hp-about two-column pattern for static page templates. */
.page-body--columns {
    background: var(--color-white, #ffffff);
    padding: 96px 0 112px;
}
.page-body__grid {
    display: grid;
    grid-template-columns: minmax(280px, 0.75fr) 1.6fr;
    gap: 64px;
    align-items: start;
}
@media (max-width: 900px) {
    .page-body__grid {
        grid-template-columns: 1fr;
        gap: 32px;
    }
}
.page-body__aside {
    position: sticky;
    top: 140px;
}
@media (max-width: 900px) {
    .page-body__aside { position: static; }
}
.page-body__aside .hp-eyebrow {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 14px;
    letter-spacing: 0.12em;
    color: var(--color-navy, #060143);
    opacity: 0.75;
    margin: 0 0 18px;
}
.page-body__heading {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(28px, 3vw, 44px);
    line-height: 1.1;
    letter-spacing: 0.005em;
    text-transform: uppercase;
    color: var(--color-navy, #060143);
    margin: 0;
}
.page-body__prose {
    font-size: 17px;
    line-height: 1.7;
    color: #374151;
    max-width: 680px;
}
.page-body__prose p { margin: 0 0 22px; }
.page-body__prose p:last-child { margin-bottom: 0; }
.page-body__prose strong { color: var(--color-navy, #060143); font-weight: 600; }
.page-body__prose a { color: var(--color-navy, #060143); text-decoration: underline; text-underline-offset: 2px; }


/* ===== LOGO GARDEN / ABOUT REBUILD + SERVICES ===== */

/* --- Logo garden --- */
.logo-garden {
    background: #ffffff;
    padding: 56px 0 64px;
    border-bottom: 1px solid #e5e7eb;
}
.logo-garden__label {
    font-size: 13px;
    letter-spacing: 0.05em;
    color: #6b7280;
    text-align: center;
    margin: 0 0 32px;
    text-transform: uppercase;
}
.logo-garden__grid {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 40px;
    align-items: center;
}
@media (max-width: 900px) {
    .logo-garden__grid { grid-template-columns: repeat(3, 1fr); gap: 32px; }
}
@media (max-width: 500px) {
    .logo-garden__grid { grid-template-columns: repeat(2, 1fr); }
}
.logo-garden__item {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 60px;
}
.logo-garden__item img {
    max-width: 140px;
    max-height: 56px;
    width: auto;
    height: auto;
    filter: grayscale(100%);
    opacity: 0.65;
    transition: opacity 0.18s, filter 0.18s;
}
.logo-garden__item img:hover {
    opacity: 1;
    filter: grayscale(0);
}
.logo-garden__placeholder {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 15px;
    letter-spacing: 0.04em;
    color: #9ca3af;
    text-align: center;
    padding: 14px 10px;
    border: 1px dashed #d1d5db;
    border-radius: 6px;
    width: 100%;
    display: block;
}

/* --- Page-body subhead (for legacy section) --- */
.page-body__subhead {
    font-size: 15px;
    line-height: 1.55;
    color: #6b7280;
    margin: 16px 0 0;
    max-width: 320px;
}

/* --- Leadership quote --- */
.leadership-quote {
    background: var(--color-navy, #060143);
    color: #ffffff;
    padding: 96px 24px 96px;
}
.leadership-quote__inner {
    max-width: 900px;
    margin: 0 auto;
    text-align: center;
    padding: 0;
}
.leadership-quote__mark {
    font-family: 'Commuters Sans', Georgia, serif;
    font-size: 88px;
    line-height: 0.8;
    color: #ffffff;
    opacity: 0.3;
    margin: 0 0 12px;
}
.leadership-quote__text {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(22px, 2.4vw, 32px);
    line-height: 1.35;
    color: #ffffff;
    margin: 0 0 32px;
    font-style: italic;
}
.leadership-quote__cite {
    font-size: 14px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.8);
    font-style: normal;
}
.leadership-quote__author {
    font-weight: 600;
    color: #ffffff;
    margin-right: 12px;
}
.leadership-quote__role {
    opacity: 0.7;
}

/* --- Stats band --- */
.stats-band {
    background: var(--color-navy, #060143);
    color: #ffffff;
    padding: 88px 24px 96px;
}
.stats-band__header {
    text-align: center;
    margin-bottom: 56px;
}
.stats-band__headline {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(28px, 3.2vw, 44px);
    line-height: 1.1;
    text-transform: uppercase;
    color: #ffffff;
    margin: 12px 0 0;
}
.stats-band__grid {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 40px;
}
.stats-band__grid--3 { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 800px) {
    .stats-band__grid,
    .stats-band__grid--3 { grid-template-columns: repeat(2, 1fr); gap: 32px; }
}
@media (max-width: 500px) {
    .stats-band__grid,
    .stats-band__grid--3 { grid-template-columns: 1fr; }
}
.stat-card {
    text-align: left;
    padding: 0;
    border-left: 2px solid rgba(255, 255, 255, 0.25);
    padding-left: 24px;
}
.stat-card__number {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(36px, 3.6vw, 52px);
    line-height: 1;
    color: #ffffff;
    margin: 0 0 12px;
    letter-spacing: 0.01em;
}
.stat-card__label {
    font-size: 15px;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.85);
    margin: 0;
}

/* --- Testimonials --- */
.testimonials {
    background: #f7f8fa;
    padding: 96px 24px 112px;
}
.testimonials__header {
    text-align: center;
    margin-bottom: 56px;
    max-width: 720px;
    margin-left: auto;
    margin-right: auto;
}
.testimonials__headline {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(28px, 3.2vw, 44px);
    line-height: 1.1;
    text-transform: uppercase;
    color: var(--color-navy, #060143);
    margin: 12px 0 0;
}
.testimonials__grid {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
}
@media (max-width: 900px) {
    .testimonials__grid { grid-template-columns: 1fr; }
}
.testimonial-card {
    background: #ffffff;
    padding: 32px 28px;
    border-radius: 10px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 24px;
}
.testimonial-card__quote {
    font-size: 16px;
    line-height: 1.6;
    color: #374151;
    margin: 0;
    position: relative;
    padding-top: 28px;
}
.testimonial-card__quote::before {
    content: '\201C';
    position: absolute;
    top: -10px;
    left: -4px;
    font-family: Georgia, serif;
    font-size: 56px;
    line-height: 1;
    color: var(--color-navy, #060143);
    opacity: 0.2;
}
.testimonial-card__cite {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding-top: 16px;
    border-top: 1px solid #e5e7eb;
    font-size: 13px;
    letter-spacing: 0.04em;
}
.testimonial-card__author {
    font-weight: 600;
    color: var(--color-navy, #060143);
    text-transform: uppercase;
}
.testimonial-card__role {
    color: #6b7280;
}

/* --- Next steps (combined LinkedIn + address + form) --- */
.next-steps {
    background: var(--color-navy, #060143);
    color: #ffffff;
    padding: 96px 24px 112px;
}
.next-steps__grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 72px;
    align-items: start;
}
@media (max-width: 900px) {
    .next-steps__grid { grid-template-columns: 1fr; gap: 56px; }
}
.next-steps__headline {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(28px, 3.2vw, 44px);
    line-height: 1.1;
    text-transform: uppercase;
    color: #ffffff;
    margin: 12px 0 20px;
}
.next-steps__subhead {
    font-size: 17px;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.85);
    margin: 0 0 36px;
    max-width: 500px;
}
.next-steps__meta {
    list-style: none;
    padding: 0;
    margin: 0 0 32px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}
.next-steps__meta li {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.next-steps__meta-label {
    font-size: 12px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.55);
}
.next-steps__meta-value,
.next-steps__meta-link {
    font-size: 15px;
    line-height: 1.5;
    color: #ffffff;
}
.next-steps__meta-link {
    text-decoration: underline;
    text-underline-offset: 3px;
}
.next-steps__social {
    margin-top: 12px;
}
.next-steps__social-link {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 10px 18px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    border-radius: 999px;
    text-decoration: none;
    transition: background 0.18s;
    font-size: 14px;
}
.next-steps__social-link:hover {
    background: rgba(255, 255, 255, 0.15);
}
.next-steps__form {
    background: rgba(255, 255, 255, 0.05);
    padding: 32px;
    border-radius: 12px;
    border: 1px solid rgba(255, 255, 255, 0.08);
}
.next-steps__form-heading {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 20px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: #ffffff;
    margin: 0 0 24px;
}
.next-steps__form-placeholder {
    font-size: 14px;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.65);
    margin: 0;
    padding: 16px;
    background: rgba(255, 255, 255, 0.04);
    border-radius: 8px;
}
.next-steps__form-fallback { display: flex; flex-direction: column; gap: 18px; }
.next-steps__field { display: flex; flex-direction: column; gap: 6px; }
.next-steps__field > span {
    font-size: 12px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.75);
}
.next-steps__field input,
.next-steps__field textarea {
    font-family: inherit;
    font-size: 15px;
    line-height: 1.5;
    color: #ffffff;
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.2);
    border-radius: 6px;
    padding: 10px 14px;
    resize: vertical;
}
.next-steps__field input:focus,
.next-steps__field textarea:focus {
    outline: 2px solid #ffffff;
    outline-offset: 0;
}
.next-steps__submit {
    align-self: flex-start;
    margin-top: 6px;
}

/* ===== SERVICES PAGE sections ===== */
.svc-section {
    padding: 96px 24px 112px;
}
.svc-section--light {
    background: #ffffff;
}
.svc-section__header {
    max-width: 900px;
    margin: 0 auto 56px;
    text-align: left;
}
.svc-section__headline {
    font-family: 'Commuters Sans', sans-serif;
    font-size: clamp(28px, 3.5vw, 44px);
    line-height: 1.1;
    text-transform: uppercase;
    color: var(--color-navy, #060143);
    margin: 12px 0 0;
    max-width: 760px;
}
.svc-section__cta {
    margin-top: 40px;
    text-align: left;
}
.svc-boxes {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
    margin-bottom: 48px;
}
@media (max-width: 900px) {
    .svc-boxes { grid-template-columns: 1fr; }
}
.svc-box {
    background: #f7f8fa;
    padding: 36px 32px 40px;
    border-radius: 10px;
    border-left: 3px solid var(--color-navy, #060143);
}
.svc-box__title {
    font-family: 'Commuters Sans', sans-serif;
    font-size: 20px;
    line-height: 1.25;
    text-transform: uppercase;
    color: var(--color-navy, #060143);
    margin: 0 0 16px;
    letter-spacing: 0.01em;
}
.svc-box__body {
    font-size: 15px;
    line-height: 1.6;
    color: #374151;
    margin: 0;
}
.svc-caps {
    margin-top: 40px;
}
.svc-caps--inline { margin-top: 28px; }
.svc-caps__label {
    font-size: 12px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #6b7280;
    font-weight: 600;
    margin: 0 0 16px;
}
.svc-caps__grid {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px 28px;
}
@media (max-width: 600px) {
    .svc-caps__grid { grid-template-columns: 1fr; }
}
.svc-caps__item {
    font-size: 15px;
    line-height: 1.5;
    color: var(--color-navy, #060143);
    padding-left: 22px;
    position: relative;
}
.svc-caps__item::before {
    content: '';
    position: absolute;
    left: 0;
    top: 9px;
    width: 10px;
    height: 2px;
    background: var(--color-navy, #060143);
}
.svc-inline-cta {
    margin-top: 32px;
    display: inline-block;
}

/* Outline-light button variant (used on Services hero secondary CTA) */
.hp-btn--outline-light {
    background: transparent;
    color: #ffffff;
    border: 1.5px solid rgba(255, 255, 255, 0.7);
}
.hp-btn--outline-light:hover {
    background: rgba(255, 255, 255, 0.1);
    border-color: #ffffff;
}

/* Hero CTA row (About + Services) */
.page-hero__ctas {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
    margin-top: 32px;
}
.page-hero__cta {
    margin-top: 32px;
    display: inline-block;
}

/* --- Section namespace overrides: each section type sits in its own band --- */
.about-intro { background: #ffffff; }
.about-legacy { background: #f7f8fa; }
.about-legacy .page-body__aside { position: static; }
.svc-manufacturing { background: #ffffff; }
.svc-aftermarket { background: #f7f8fa; }
.svc-aftermarket .page-body__aside { position: static; }


/* ===== BUTTON OVERRIDES (About/Services pages) =====
   Explicit color rules for .hp-btn in the new page contexts to avoid
   whatever theme default was rendering pink/red. */
.page-hero .hp-btn,
.page-hero__cta,
.svc-section__cta .hp-btn,
.svc-inline-cta.hp-btn,
.next-steps__submit.hp-btn {
    background: #ffffff !important;
    color: var(--color-navy, #060143) !important;
    border: 1.5px solid #ffffff !important;
    padding: 14px 28px;
    font-weight: 600;
    font-size: 15px;
    letter-spacing: 0.02em;
    text-decoration: none !important;
    border-radius: 4px;
    display: inline-block;
    transition: background 0.18s, color 0.18s;
}
.page-hero .hp-btn:hover,
.page-hero__cta:hover,
.svc-section__cta .hp-btn:hover,
.svc-inline-cta.hp-btn:hover,
.next-steps__submit.hp-btn:hover {
    background: transparent !important;
    color: #ffffff !important;
}
/* Light-backgrounded pages (svc-section--light) need inverse treatment */
.svc-section--light .hp-btn,
.svc-section--light .svc-section__cta .hp-btn {
    background: var(--color-navy, #060143) !important;
    color: #ffffff !important;
    border: 1.5px solid var(--color-navy, #060143) !important;
}
.svc-section--light .hp-btn:hover,
.svc-section--light .svc-section__cta .hp-btn:hover {
    background: #ffffff !important;
    color: var(--color-navy, #060143) !important;
}
/* White-on-white page-body inline CTAs (manufacturing/aftermarket sections) */
.svc-manufacturing .svc-inline-cta.hp-btn,
.svc-aftermarket .svc-inline-cta.hp-btn {
    background: var(--color-navy, #060143) !important;
    color: #ffffff !important;
    border: 1.5px solid var(--color-navy, #060143) !important;
}
.svc-manufacturing .svc-inline-cta.hp-btn:hover,
.svc-aftermarket .svc-inline-cta.hp-btn:hover {
    background: #ffffff !important;
    color: var(--color-navy, #060143) !important;
}

/* ==========================================================================
   SITE-WIDE GRID OVERLAY — Phase A (toggle via body.has-grid)
   All rules are scoped under body.has-grid so the grid is OFF by default.
   Enable for preview by appending ?grid=1 to any URL (see body_class filter
   in functions.php). Phase B will replace ?grid=1 with an admin toggle.
   Size + opacity come from CSS custom properties for future admin control.
   ========================================================================== */

:root {
    --grid-size: 48px;
    --grid-line-light: rgba(255, 255, 255, 0.05);
    --grid-line-dark:  rgba(6, 1, 67, 0.04);
}

body.has-grid .hp-hero, body.has-grid .hp-cta, body.has-grid .hp-markets,
body.has-grid .hp-about, body.has-grid .hp-cap, body.has-grid .hp-proof,
body.has-grid .flex-hero, body.has-grid .flex-cta, body.has-grid .flex-stats,
body.has-grid .flex-ti, body.has-grid .flex-prose, body.has-grid .flex-fg,
body.has-grid .flex-testimonial, body.has-grid .flex-logos,
body.has-grid .site-footer--has-grid {
    position: relative;
}

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta::before, body.has-grid .flex-stats::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .site-footer--has-grid::before {
    content: "";
    position: absolute;
    inset: 0;
    background-size: var(--grid-size) var(--grid-size);
    pointer-events: none;
    z-index: 0;
}

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before {
    background-image:
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
}

body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-image:
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
}

/* Replaced a buggy "> *" rule that forced position:relative on all children
   and thereby broke absolutely-positioned children (e.g. .hp-cta__visual).
   The isolation + ::before z-index:-1 pattern below achieves the same visual
   effect (grid behind content) without touching any child positioning. */
body.has-grid .hp-hero, body.has-grid .hp-cta, body.has-grid .hp-markets,
body.has-grid .hp-about, body.has-grid .hp-cap, body.has-grid .hp-proof,
body.has-grid .flex-hero, body.has-grid .flex-cta, body.has-grid .flex-stats,
body.has-grid .flex-ti, body.has-grid .flex-prose, body.has-grid .flex-fg,
body.has-grid .flex-testimonial, body.has-grid .flex-logos,
body.has-grid .site-footer {
    isolation: isolate;
}
body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta::before, body.has-grid .flex-stats::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .site-footer--has-grid::before {
    z-index: -1;
}

/* ==========================================================================
   GRID OVERLAY — dots at intersections (addendum to Phase A)
   Adds a radial-gradient layer so every line crossing has a small filled dot.
   Rules here OVERRIDE the line-only background-image declarations above.
   ========================================================================== */
:root {
    --grid-dot-size:  3px;
    --grid-dot-light: rgba(255, 255, 255, 0.18);
    --grid-dot-dark:  rgba(6, 1, 67, 0.12);
}

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before {
    background-image:
        radial-gradient(circle at 0 0, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
}

body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-image:
        radial-gradient(circle at 0 0, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
}

/* ==========================================================================
   GRID OVERLAY — corrections: full dots at intersections + larger cell size
   Later rules override earlier ones at same specificity. This block corrects
   (a) the dot geometry (was showing 1/4 circles at tile corners) and
   (b) makes cells larger (was 48px, now 80px) per feedback "too many squares".
   ========================================================================== */
:root {
    --grid-size: 80px;
}

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        0 0,
        0 0;
}

body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        0 0,
        0 0;
}

/* ==========================================================================
   GRID OVERLAY — dot covers the line (4-layer approach)
   Adds an opaque eraser disk between the lines and the visible dot so the
   line is hidden at each intersection, giving the crisp "dot sits on top
   of the line" look instead of visible line-through-dot alpha blending.
   ========================================================================== */

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        radial-gradient(circle at center, var(--color-navy) calc(var(--grid-dot-size) + 2px), transparent calc(var(--grid-dot-size) + 2.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        0 0,
        0 0;
}

body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        radial-gradient(circle at center, var(--color-white) calc(var(--grid-dot-size) + 2px), transparent calc(var(--grid-dot-size) + 2.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        0 0,
        0 0;
}

/* Gray-backgrounded sections need a gray eraser instead of white */
body.has-grid .flex-stats--bg-gray::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        radial-gradient(circle at center, var(--color-gray-50, #f5f6f8) calc(var(--grid-dot-size) + 2px), transparent calc(var(--grid-dot-size) + 2.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        calc(var(--grid-size) / -2) calc(var(--grid-size) / -2),
        0 0,
        0 0;
}

/* ==========================================================================
   GRID OVERLAY — sub-pixel alignment correction
   Lines are 1px wide starting at x=0 of each tile, so their visual center is
   at x=0.5. Shifting the dot + eraser layers by +0.5px aligns the dot center
   with the line center, removing the off-center appearance.
   ========================================================================== */

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before,
body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-position:
        calc(var(--grid-size) / -2 + 0.5px) calc(var(--grid-size) / -2 + 0.5px),
        calc(var(--grid-size) / -2 + 0.5px) calc(var(--grid-size) / -2 + 0.5px),
        0 0,
        0 0;
}

/* ==========================================================================
   GRID OVERLAY — viewport-anchored backgrounds
   Anchors each section's grid to the viewport so the pattern is continuous
   across section boundaries (no more "restart" seam at each section's top).
   ========================================================================== */

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before,
body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-attachment: fixed;
}

/* ==========================================================================
   GRID OVERLAY — revert fixed attachment + add JS-driven continuity
   Grid now scrolls with content. assets/grid-align.js sets --grid-section-offset-y
   on each grid-hosting section so the pattern aligns continuously across
   section boundaries. background-position-y uses that variable.
   ========================================================================== */

body.has-grid .hp-hero::before, body.has-grid .hp-cta::before, body.has-grid .hp-markets::before,
body.has-grid .flex-hero::before, body.has-grid .flex-cta--bg-navy::before,
body.has-grid .flex-stats--bg-navy::before, body.has-grid .site-footer--has-grid::before,
body.has-grid .hp-about::before, body.has-grid .hp-cap::before, body.has-grid .hp-proof::before,
body.has-grid .flex-ti::before, body.has-grid .flex-prose::before, body.has-grid .flex-fg::before,
body.has-grid .flex-testimonial::before, body.has-grid .flex-logos::before,
body.has-grid .flex-cta--bg-white::before,
body.has-grid .flex-stats--bg-white::before, body.has-grid .flex-stats--bg-gray::before {
    background-attachment: scroll;
    background-position-x:
        calc(var(--grid-size) / -2 + 0.5px),
        calc(var(--grid-size) / -2 + 0.5px),
        0,
        0;
    background-position-y:
        calc(var(--grid-section-offset-y, 0px) + var(--grid-size) / -2 + 0.5px),
        calc(var(--grid-section-offset-y, 0px) + var(--grid-size) / -2 + 0.5px),
        var(--grid-section-offset-y, 0px),
        var(--grid-section-offset-y, 0px);
}

/* ==========================================================================
   GRID OVERLAY — per-section opt-out (via .grid-hidden class)
   When a flexible section has its "Hide grid on this section" toggle set,
   page-flexible.php injects .grid-hidden on the <section>. This rule suppresses
   the grid overlay (::before pseudo-element) on that specific section.
   ========================================================================== */
body.has-grid .grid-hidden::before {
    content: none;
}

/* ==========================================================================
   MARKETS SLIDER prev/next buttons — polish
   - Kill browser default focus/tap highlight (the "red after click" artifact)
   - Replace the existing inline chevron SVG with the shared assets/icons/arrow.svg
     via CSS mask, rotated -135deg for prev (left) and +45deg for next (right).
   - Arrow color tracks button color (currentColor), so hover/active state swaps
     work automatically.
   ========================================================================== */

.hp-markets__btn {
    -webkit-tap-highlight-color: transparent;
    transition: background 0.18s ease, color 0.18s ease, transform 0.12s ease, outline-color 0.18s ease;
}
.hp-markets__btn:focus { outline: none; }
.hp-markets__btn:focus-visible {
    outline: 2px solid rgba(255, 255, 255, 0.65);
    outline-offset: 2px;
}
.hp-markets__btn:active {
    transform: scale(0.96);
    background: var(--color-white);
    color: var(--color-navy);
}

/* Hide the inline chevron SVG baked into front-page.php — the CSS-masked
   ::before icon below replaces it for a single source of truth. */
.hp-markets__btn > svg { display: none; }

/* The masked arrow — inherits button color via currentColor */
.hp-markets__btn::before {
    content: "";
    display: block;
    width: 14px;
    height: 14px;
    background-color: currentColor;
    -webkit-mask: url('icons/arrow.svg') no-repeat center / contain;
            mask: url('icons/arrow.svg') no-repeat center / contain;
}
#hp-markets-prev::before { transform: rotate(-135deg); }
#hp-markets-next::before { transform: rotate(45deg); }

/* ==========================================================================
   MARKETS SLIDER buttons — kill system button theming (the "red after click"
   is the OS/browser default for <button> :active/:focus). appearance:none +
   explicit color overrides force our design-system colors regardless of
   user OS theme (Windows accent colors, macOS Big Sur+ button styles, etc.).
   ========================================================================== */
.hp-markets__btn {
    -webkit-appearance: none !important;
            appearance: none !important;
    background-color: transparent !important;
    color: var(--color-white) !important;
    border: 1px solid rgba(255, 255, 255, 0.5) !important;
}
.hp-markets__btn:hover {
    background-color: var(--color-white) !important;
    color: var(--color-navy) !important;
    border-color: var(--color-white) !important;
}
.hp-markets__btn:focus,
.hp-markets__btn:focus:not(:hover) {
    background-color: transparent !important;
    color: var(--color-white) !important;
    outline: none !important;
}
.hp-markets__btn:focus-visible {
    outline: 2px solid rgba(255, 255, 255, 0.65) !important;
    outline-offset: 2px !important;
}
.hp-markets__btn:active:not(:hover) {
    background-color: transparent !important;
    color: var(--color-white) !important;
}

/* Fix: the previous .hp-markets__btn:focus rule was stomping :hover when both
   states were active (which happens RIGHT after clicking — mouse is still over
   the button). Restrict focus-only styling to :not(:hover) so hover wins
   whenever the cursor is on the button, regardless of focus state. */
.hp-markets__btn:hover,
.hp-markets__btn:focus:hover,
.hp-markets__btn:active:hover {
    background-color: var(--color-white) !important;
    color: var(--color-navy) !important;
    border-color: var(--color-white) !important;
}

/* ==========================================================================
   MARKETS IMAGE OVERLAP — restore visible overlap into the Proof section below.
   - Increase negative margin so the image genuinely extends past the markets
     section boundary (was -80px, now -160px so the bottom of the image lands
     ~120px inside the Proof section after accounting for markets padding-bottom).
   - Raise z-index on .hp-markets so the whole section stacks above .hp-proof
     (whose white background was painting over any overflowing content).
   ========================================================================== */
.hp-markets {
    z-index: 2 !important;
    overflow: visible !important;
}
.hp-markets__slider-images {
    margin-bottom: -160px !important;
    z-index: 10 !important;
    position: relative !important;
}
.hp-proof {
    padding-top: 220px !important;  /* accommodate the larger overlap */
}

/* ==========================================================================
   MARKETS SLIDER — visual tweaks
   - Progress line: extend right into the image area + thicker + above image
   - Image: wider landscape aspect (3:2 instead of portrait 4:5) + extend
     past the container's right edge so it juts out beyond the top button
   - Prev/Next buttons: bigger (56x56) with a larger arrow icon
   ========================================================================== */

/* Progress line: wider, thicker, overlaps the image */
html body .hp-markets__pagination::after {
    right: -600px !important;
    height: 3px !important;
    z-index: 15 !important;
    background: rgba(255, 255, 255, 0.9) !important;
}
/* Ensure the pagination container itself doesn't clip the extended line */
html body .hp-markets__pagination,
html body .hp-markets__controls {
    overflow: visible !important;
    position: relative !important;
    z-index: 14 !important;
}

/* Image: landscape rectangle instead of portrait, and extends right */
.hp-market-card__image {
    aspect-ratio: 3 / 2 !important;
    height: auto !important;
    min-height: 420px !important;
}
.hp-markets__slider-images {
    margin-right: -120px !important;
}

/* Bigger prev/next buttons */
.hp-markets__btn {
    width: 56px !important;
    height: 56px !important;
}
.hp-markets__btn::before {
    width: 18px !important;
    height: 18px !important;
}
.hp-markets__nav { gap: 12px !important; }

/* Line was too long at -600px; dial back to -320px (still crosses into the image, but not past it) */
html body .hp-markets__pagination::after {
    right: -320px !important;
}

/* ==========================================================================
   Emergency Battery icon — skip the navy-collapse filter so its light-gray
   inner detail remains visible. Other icons keep the filter because they
   were authored monochromatic and rely on the filter for color mapping.
   ========================================================================== */
.hp-cap-card__icon img[src*="emergency-battery"],
.hp-cap-card .hp-cap-card__icon img[src*="emergency-battery"],
.hp-cap-card .hp-cap-card__icon-img[src*="emergency-battery"] {
    filter: none !important;
}
/* On hover the card turns navy; match the other icons by going all-white so
   the hexagon outline is visible against the navy card background. */
.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__icon img[src*="emergency-battery"],
.hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover .hp-cap-card__icon-img[src*="emergency-battery"] {
    filter: brightness(0) invert(1) !important;
}

/* ==========================================================================
   CTA SECTION — v2 layout
   - Section bg transparent, reveals page grid pattern
   - Image in top-right corner (~68% wide), pushed to z-index:-2 so the grid
     (::before at z-index:-1) paints OVER it, matching other sections
   - Navy card flush to viewport-left, bottom-aligned, overlapping bottom-left
     of the image
   - Grid over this section uses the DARK variant (navy lines on light) since
     the section no longer has a navy bg
   ========================================================================== */

/* Section: no bg, min height, hide overflow */
.hp-cta {
    background: transparent !important;
    min-height: 640px !important;
    padding: 0 !important;
    overflow: hidden !important;
    position: relative !important;
}

/* Image: top-right rectangle, behind the grid */
.hp-cta__visual {
    position: absolute !important;
    top: 60px !important;
    right: 0 !important;
    left: auto !important;
    bottom: auto !important;
    width: 68% !important;
    height: 460px !important;
    z-index: -2 !important;
    opacity: 1 !important;
    pointer-events: none;
}
.hp-cta__image {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    object-position: center !important;
    display: block;
}

/* Inner container: flex, bottom-aligned, no horizontal constraint */
.hp-cta__inner {
    position: relative !important;
    z-index: 1 !important;
    max-width: none !important;
    padding: 0 !important;
    min-height: 640px !important;
    display: flex !important;
    align-items: flex-end !important;
}


/* Mobile: stack normally, image full width at bottom */
@media (max-width: 768px) {
    .hp-cta { min-height: auto !important; }
    .hp-cta__inner { min-height: auto !important; display: block !important; }
    .hp-cta__visual { position: relative !important; top: auto !important; width: 100% !important; height: 240px !important; }
}

/* Grid override: .hp-cta now uses DARK grid variant (navy lines on light bg) */
body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        radial-gradient(circle at center, var(--color-white) calc(var(--grid-dot-size) + 2px), transparent calc(var(--grid-dot-size) + 2.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px) !important;
}

/* CTA grid fix: skip the white eraser disk. The eraser is designed to mask
   line crossings on a solid white bg, but over the image it shows as a
   visible white ring around each dot. Without the eraser, lines cross
   subtly through dots — acceptable over an image. */
body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px) !important;
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size) !important;
    background-position:
        calc(var(--grid-size) / -2 + 0.5px) calc(var(--grid-section-offset-y, 0px) + var(--grid-size) / -2 + 0.5px),
        0 var(--grid-section-offset-y, 0px),
        0 var(--grid-section-offset-y, 0px) !important;
}

/* CTA v3: wider image, full section height, guaranteed overlap with card */
.hp-cta {
    min-height: 560px !important;
}
.hp-cta__visual {
    top: 40px !important;
    bottom: 40px !important;
    right: 0 !important;
    left: auto !important;
    width: 78% !important;
    height: auto !important;
    z-index: -2 !important;
}
.hp-cta__inner {
    min-height: 560px !important;
}
/* On wider viewports bump the overlap further */
@media (min-width: 1600px) {
    .hp-cta__visual { width: 82% !important; left: auto !important; right: 0 !important; }
}

/* CTA v4 — card is LARGER and ABSOLUTELY positioned for heavy overlap */
.hp-cta {
    min-height: 640px !important;
    overflow: hidden !important;
}
.hp-cta__inner {
    position: relative !important;
    min-height: 640px !important;
    display: block !important;  /* stop flex, use absolute positioning */
    padding: 0 !important;
    max-width: none !important;
}
/* Image: 85% wide, anchored right, fills most of section height */
.hp-cta__visual {
    position: absolute !important;
    top: 40px !important;
    right: 0 !important;
    left: auto !important;
    bottom: auto !important;
    width: 85% !important;
    height: 500px !important;
    z-index: -2 !important;
}
@media (max-width: 900px) {
    .hp-cta__visual { width: 100% !important; height: 260px !important; position: relative !important; top: auto !important; }
    .hp-cta__inner { min-height: auto !important; }
    .hp-cta { min-height: auto !important; }
}

/* CTA v5: image fills section vertically, card bottom-aligned with full overlap */
.hp-cta { min-height: 640px !important; }
.hp-cta__inner { min-height: 640px !important; }
.hp-cta__visual {
    position: absolute !important;
    top: 40px !important;
    bottom: 40px !important;
    right: 0 !important;
    left: auto !important;
    width: 80% !important;
    height: auto !important;
    z-index: -2 !important;
}

/* CTA v5.1: remove the 40px bottom gap under the image */
.hp-cta__visual { bottom: 0 !important; }

/* CTA v5.2: taller section (more vertical) */
.hp-cta { min-height: 800px !important; }
.hp-cta__inner { min-height: 800px !important; }

/* CTA v5.3: remove z-index from __inner so it doesn't create a stacking context
   that obscures the grid overlay. The card's absolute positioning + its own
   z-index:3 is enough to keep it above the grid. */
.hp-cta__inner {
    z-index: auto !important;
}

/* CTA v5.4: use LIGHT grid (white lines/dots) so grid is visible on the dark
   image. The previous DARK variant was navy-on-dark = invisible. */
body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px) !important;
}

/* CTA v5.5: use mix-blend-mode so the grid is automatically contrasted on
   BOTH the dark image AND the white area to the left. The grid itself is
   drawn with a neutral-ish gray; the blend mode darkens it over light bg
   and lightens it over dark bg. */
body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, rgba(128, 128, 128, 0.9) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  rgba(128, 128, 128, 0.6) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(128, 128, 128, 0.6) 1px, transparent 1px) !important;
    mix-blend-mode: overlay;
}

/* Revert v5.5 mix-blend-mode — go back to light grid (white on dark image) */
body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px) !important;
    mix-blend-mode: normal !important;
}

/* CTA v5.6: TWO grid layers for dual-surface visibility.
   ::before = white grid, visible on the dark image, effectively invisible on white.
   ::after  = navy grid, visible on the white area, very faint on the dark image.
   Both align to the shared --grid-section-offset-y variable set by grid-align.js
   so the pattern stays continuous with adjacent sections. */

body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, rgba(255, 255, 255, 0.35) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  rgba(255, 255, 255, 0.12) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(255, 255, 255, 0.12) 1px, transparent 1px) !important;
    mix-blend-mode: normal !important;
}

body.has-grid .hp-cta::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(circle at center, rgba(6, 1, 67, 0.22) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  rgba(6, 1, 67, 0.08) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(6, 1, 67, 0.08) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2 + 0.5px) calc(var(--grid-section-offset-y, 0px) + var(--grid-size) / -2 + 0.5px),
        0 var(--grid-section-offset-y, 0px),
        0 var(--grid-section-offset-y, 0px);
    pointer-events: none;
    z-index: -1;
}

/* CTA v5.7: make the dual-grid follow admin-controlled CSS variables
   (size, dot size, opacities) instead of hardcoded values.
   ::before uses the "light" vars (for the dark image).
   ::after  uses the "dark"  vars (for the white area). */

body.has-grid .hp-cta::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px) !important;
}

body.has-grid .hp-cta::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(circle at center, var(--grid-dot-dark) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-dark) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-dark) 1px, transparent 1px);
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-position:
        calc(var(--grid-size) / -2 + 0.5px) calc(var(--grid-section-offset-y, 0px) + var(--grid-size) / -2 + 0.5px),
        0 var(--grid-section-offset-y, 0px),
        0 var(--grid-section-offset-y, 0px);
    pointer-events: none;
    z-index: -1;
}

/* CTA v5.8: remove the 40px top gap so the image hugs the section top */
.hp-cta__visual { top: 0 !important; }

/* CTA image fit + alignment classes (driven by admin select fields) */
.hp-cta__image--fit-cover   { object-fit: cover   !important; }
.hp-cta__image--fit-contain { object-fit: contain !important; }
.hp-cta__image--align-top    { object-position: center top    !important; }
.hp-cta__image--align-center { object-position: center center !important; }
.hp-cta__image--align-bottom { object-position: center bottom !important; }

/* ==========================================================================
   PROOF cards — bordered circle badge on the LEFT side of each card
   (replacing the small top-left badge). Number renders inside a 48px circle
   with navy border + light fill + navy digit.
   ========================================================================== */
.hp-proof-card {
    position: relative;
}
.hp-proof-card__badge {
    position: absolute !important;
    top: 50% !important;
    left: -28px !important;
    transform: translateY(-50%) !important;
    width: 56px !important;
    height: 56px !important;
    border-radius: 50% !important;
    background: var(--color-white) !important;
    color: var(--color-navy) !important;
    border: 3px solid var(--color-navy) !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-family: var(--font-display) !important;
    font-weight: 700 !important;
    font-size: 20px !important;
    line-height: 1 !important;
    z-index: 3 !important;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.15);
}

/* ==========================================================================
   PROOF cards — v2 layout: narrower / taller cards, symmetric zig-zag.
   Row 1 (cards 1,2) is shifted one column to the right of row 2 (cards 3,4)
   so the four cards form a balanced staggered pattern. Badge styling above
   is intentionally left alone (per design direction).
   ========================================================================== */
html body .hp-proof__timeline {
    grid-template-columns: repeat(8, 1fr) !important;
    grid-template-rows: auto auto !important;
    gap: 72px 16px !important;
}
html body .hp-proof-card--1 { grid-column: 3 / span 2 !important; grid-row: 1 !important; }
html body .hp-proof-card--2 { grid-column: 6 / span 2 !important; grid-row: 1 !important; }
html body .hp-proof-card--3 { grid-column: 2 / span 2 !important; grid-row: 2 !important; }
html body .hp-proof-card--4 { grid-column: 5 / span 2 !important; grid-row: 2 !important; }

html body .hp-proof-card {
    padding: 36px 28px 32px 44px !important;
    min-height: 180px !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: flex-start !important;
}
/* Cancel the legacy translateY stagger so each row's cards sit flush on
   their grid row — lets the horizontal lines land on exact card centers. */
html body .hp-proof-card--1,
html body .hp-proof-card--2,
html body .hp-proof-card--3,
html body .hp-proof-card--4 {
    transform: none !important;
}
html body .hp-proof-card__number {
    margin: 0 0 22px 0 !important;
}

/* Mobile — revert to single-column stack so nothing overflows */
@media (max-width: 900px) {
    html body .hp-proof__timeline {
        grid-template-columns: 1fr !important;
        gap: 40px !important;
    }
    html body .hp-proof-card--1,
    html body .hp-proof-card--2,
    html body .hp-proof-card--3,
    html body .hp-proof-card--4 {
        grid-column: 1 !important;
        grid-row: auto !important;
    }
}

/* ==========================================================================
   PROOF timeline — two horizontal lines, one per row of cards.
   Hide the old single midline and draw new lines via pseudo-elements,
   positioned through the vertical center of each row. Lines sit behind
   the cards (z-index:0) so they show in the gaps and "connect" the badges.
   ========================================================================== */
html body .hp-proof__line { display: none !important; }

html body .hp-proof__timeline {
    position: relative;
}
html body .hp-proof__timeline::before,
html body .hp-proof__timeline::after {
    content: '';
    position: absolute;
    left: 50%;
    right: auto;
    width: 100vw;
    margin-left: -50vw;
    height: 3px;
    background: rgba(6, 1, 67, 0.5);
    z-index: 0;
    pointer-events: none;
}
/* Top line — centered on row 1 (cards 1, 2). min-height of a card is
   180px, so 90px from the top of the timeline is the visual midpoint. */
html body .hp-proof__timeline::before { top: 90px; }
/* Bottom line — centered on row 2 (cards 3, 4), measured from the bottom. */
html body .hp-proof__timeline::after  { bottom: 90px; }

/* Mobile — cards stack vertically, decorative lines don't apply */
@media (max-width: 900px) {
    html body .hp-proof__timeline::before,
    html body .hp-proof__timeline::after {
        display: none !important;
    }
}

/* ==========================================================================
   READABILITY — match design spec sizes (1440px reference frame),
   scale responsively below that via clamp().
     - Eyebrow: 22px / 700 at ≥1440px, ~14px at ≤~600px
     - Body paragraphs in homepage sections: 18px at ≥1440px, 16px at ≤768px
   The clamp formulas use a viewport-linked middle term so sizes interpolate
   smoothly between min and max — no sudden jumps at breakpoints.
   ========================================================================== */
html body .hp-eyebrow {
    font-size: clamp(14px, 1.25vw + 4px, 22px) !important;
    font-weight: 700 !important;
    letter-spacing: 0.08em;
    line-height: 1.2;
}

/* Target specific body-copy classes only — never bare `section p`, which
   would collide with display paragraphs like .hp-about__statement. */
html body .hp-hero__body,
html body .hp-about__body,
html body .hp-cap-card__desc,
html body .hp-market-card__desc,
html body .hp-proof-card__label,
html body .hp-cta__body {
    font-size: clamp(16px, 0.3vw + 13.7px, 18px) !important;
    line-height: 1.6 !important;
    font-weight: 500 !important;
}

/* Buttons on light backgrounds need a solid white fill so the grid
   overlay dots/lines don't bleed through the button face. */
html body .hp-btn--outline-dark {
    background: var(--color-white) !important;
}

/* ==========================================================================
   HOVER — unified "press" color for all interactive surfaces, driven by the
   Accent color in ACME Settings → Brand & Identity → Colors. Updating that
   value in admin retints every hover state on this page in one shot.
   Replaces the inconsistent mix of transparent-invert / flat navy hovers.
   ========================================================================== */
html body .hp-btn--primary:hover,
html body .hp-btn--light:hover,
html body .hp-btn--outline-dark:hover,
html body .hp-btn--outline-light:hover {
    background: var(--color-accent) !important;
    color: var(--color-white) !important;
    border-color: var(--color-accent) !important;
}

/* Capability cards — override the flat navy hover with the shared accent. */
html body .hp-cap-card:not(:where(#hp-cap .hp-cap-card:not(.hp-cap-card--linked))):hover {
    background: var(--color-accent) !important;
}

/* Product cards — add a colored hover on top of the existing lift/shadow. */
html body .product-card:hover {
    background: var(--color-accent) !important;
}
html body .product-card:hover .product-card__title,
html body .product-card:hover .product-card__model,
html body .product-card:hover .product-card__summary,
html body .product-card:hover .product-card__desc,
html body .product-card:hover .product-card__specs li {
    color: var(--color-white) !important;
}
html body .product-card:hover .product-card__icon img {
    filter: brightness(0) invert(1);
}

/* ==========================================================================
   SECTION HEADINGS — single shared class used site-wide.
   Every section <h2> on the homepage AND every flex-template layout
   carries the `section-heading` class alongside its scoped BEM class.
   Reference values pulled from the original .hp-about__heading:
   30px / 700 / 1.1 / 0.01em letter-spacing / uppercase / display font.
   Fixed size at every breakpoint for visual consistency across the site.
   (The hero H1 has its own display treatment and does NOT use this class.)
   ========================================================================== */
html body .section-heading {
    font-family: var(--font-display);
    font-size: 30px !important;
    font-weight: 700 !important;
    line-height: 1.1 !important;
    letter-spacing: 0.01em;
    text-transform: uppercase;
}

/* At 320px the content box is 256px and the fixed 30px above leaves several
   real headings with a single word wider than the box. The word breaks instead
   of spilling into the gutter. Size, weight and line height are unchanged. */
@media (max-width: 600px) {
    html body .section-heading { overflow-wrap: break-word; }
}

/* ==========================================================================
   NAV + FOOTER LINK UNDERLINE — hover effect.
   Thin line slides in from the left on hover using transform: scaleX(0→1)
   with transform-origin: left. Integer height (2px) avoids subpixel
   rendering glitches that were making it look thicker in the middle
   and thinner at the ends.
   ========================================================================== */
html body .primary-nav a,
html body .footer-col ul a {
    position: relative;
    display: inline-block;
    text-decoration: none;
}

/* Nav links have ~16px horizontal padding; inset the underline so it
   spans the TEXT width only (not the padded hit-area) and sits closer
   to the baseline via bottom: 4px (inside the padding). */
html body .primary-nav a::after {
    content: '';
    position: absolute;
    left: 16px;
    right: 16px;
    bottom: 4px;
    height: 2px;
    background: currentColor;
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    pointer-events: none;
}

/* Footer links are tight-packed text (no extra padding) → full width. */
html body .footer-col ul a::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: -2px;
    height: 2px;
    background: currentColor;
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    pointer-events: none;
}

html body .primary-nav a:hover::after,
html body .primary-nav a:focus-visible::after,
html body .footer-col ul a:hover::after,
html body .footer-col ul a:focus-visible::after {
    transform: scaleX(1);
}

/* Current-page nav item — keep the underline pinned */
html body .primary-nav a.current-menu-item::after,
html body .primary-nav .current-menu-item > a::after,
html body .primary-nav .current_page_item > a::after {
    transform: scaleX(1);
}

/* ==========================================================================
   CONTACT PAGE — split-screen layout (pilot image + copy on left, white
   form card on right). Full-bleed: site header/footer hidden via body
   class. Top bar with logo + "Back to website" link lives inside the
   left pane. Content ACF-driven (see inc/contact-page.php).
   ========================================================================== */

/* Site header + footer stay visible on this template (no body-class
   hiding anymore). The columns just need enough top padding to clear
   the floating-pill header (~80px tall plus its offset). */

/* 2-column grid, full viewport. Image + overlay live on dedicated child
   elements so we can flip the image (transform: scaleX) and keep the
   overlay full-screen (uniform tint across both columns). #content in
   the selector chain beats the global `main#content { padding:0 !important }`. */
main.acme-contact-page,
html body main.acme-contact-page,
html body main#content.acme-contact-page {
    display: grid;
    grid-template-columns: 1fr 1fr;
    min-height: 100vh;
    width: 100vw;
    margin-left: calc(50% - 50vw) !important;
    padding: 0 !important;
    background-color: var(--color-navy);
    position: relative;
    overflow: hidden;
}

/* Flipped pilot image — fills the whole main element. */
.acme-contact-page__bg {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    transform: scaleX(-1);
    z-index: 0;
    pointer-events: none;
}

/* Full-screen navy overlay — uniform tint across both columns. */
.acme-contact-page__overlay {
    position: absolute;
    inset: 0;
    background: rgba(6, 1, 67, 0.58);
    z-index: 1;
    pointer-events: none;
}

/* Content columns sit above bg + overlay. */
.acme-contact-page__left,
.acme-contact-page__right {
    position: relative;
    z-index: 2;
}

/* LEFT — copy pinned to the bottom so its BOTTOM edge aligns with the
   form card's bottom edge on the right (both use the same padding-bottom).
   padding-left uses container math so the headline's left edge lines up
   with the site header's inner content edge (container is max-width 1280
   centered; add 32px container padding). */
.acme-contact-page__left {
    padding-top: 180px;
    padding-right: 48px;
    padding-bottom: 72px;
    padding-left: max(32px, calc(50vw - 672px + 32px));
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    min-height: 100vh;
    color: var(--color-white);
}

/* Top bar — logo + tagline on the left, "Back to website" on the right. */
.acme-contact-page__top-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}
.acme-contact-page__brand {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    text-decoration: none;
    color: var(--color-white);
}
.acme-contact-page__logo {
    height: 28px;
    width: auto;
    display: block;
}
.acme-contact-page__tagline {
    font-family: var(--font-body);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.7);
}
.acme-contact-page__back {
    font-family: var(--font-body);
    font-size: 14px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.85);
    text-decoration: none;
    transition: color 0.2s;
}
.acme-contact-page__back:hover { color: var(--color-white); }

.acme-contact-page__copy { max-width: 520px; }
.acme-contact-page__headline {
    font-family: var(--font-display);
    font-size: clamp(32px, 3.2vw, 44px);
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    color: var(--color-white);
    margin: 0 0 16px;
}
.acme-contact-page__subhead {
    font-family: var(--font-body);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.78);
    margin: 0;
    max-width: 480px;
}

/* RIGHT — transparent column (image shows through from main). Card is
   pinned to the BOTTOM-RIGHT: its bottom matches the left text's
   bottom (same padding-bottom), its right edge matches the site
   header's inner content edge (container math on padding-right). */
.acme-contact-page__right {
    background: transparent;
    display: flex;
    align-items: flex-end;
    justify-content: flex-end;
    padding-top: 180px;
    padding-right: max(32px, calc(50vw - 672px + 32px));
    padding-bottom: 72px;
    padding-left: 48px;
    position: relative;
    z-index: 1;
}
.acme-contact-page__card {
    width: 100%;
    max-width: 520px;
    background: var(--color-white);
    border-radius: 20px;
    padding: 48px 44px 44px;
    box-shadow: 0 30px 70px rgba(0, 0, 0, 0.30),
                0 8px 20px rgba(0, 0, 0, 0.15);
}
.acme-contact-page__card-title {
    font-family: var(--font-display);
    font-size: 30px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    color: var(--color-navy);
    margin: 0 0 10px;
}
.acme-contact-page__card-subtitle {
    font-family: var(--font-body);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.55;
    color: var(--color-gray-700, #374151);
    margin: 0 0 24px;
}

.acme-contact-page__success,
.acme-contact-page__error {
    padding: 12px 16px;
    border-radius: 6px;
    font-size: 14px;
    margin-bottom: 18px;
    font-weight: 500;
}
.acme-contact-page__success {
    background: rgba(34, 197, 94, 0.10);
    border: 1px solid rgba(34, 197, 94, 0.35);
    color: #16a34a;
}
.acme-contact-page__error {
    background: rgba(239, 68, 68, 0.10);
    border: 1px solid rgba(239, 68, 68, 0.35);
    color: #dc2626;
}

.acme-contact-page__form {
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.acme-contact-page__field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.acme-contact-page__field > span {
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--color-navy);
}
.acme-contact-page__field input,
.acme-contact-page__field textarea {
    width: 100%;
    padding: 12px 14px;
    background: var(--color-white);
    border: 1px solid rgba(6, 1, 67, 0.15);
    border-radius: 8px;
    color: var(--color-navy);
    font-size: 15px;
    font-family: var(--font-body);
    box-sizing: border-box;
    transition: border-color 0.18s, background 0.18s;
    resize: vertical;
}
.acme-contact-page__field input:focus,
.acme-contact-page__field input:focus-visible,
.acme-contact-page__field textarea:focus,
.acme-contact-page__field textarea:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: var(--color-navy) !important;
    background: var(--color-white) !important;
}

/* Submit — matches .hp-btn conventions site-wide: 4px radius, 12px/28px
   padding, 16px/700 type, navy-filled with accent hover. Locked focus /
   active states so Elementor's pink/red default doesn't leak through. */
.acme-contact-page__submit,
.acme-contact-page__submit:focus,
.acme-contact-page__submit:focus-visible,
.acme-contact-page__submit:active {
    margin-top: 8px;
    background: var(--color-navy) !important;
    color: var(--color-white) !important;
    border: 1px solid var(--color-navy) !important;
    border-radius: 4px !important;
    padding: 12px 28px !important;
    font-family: var(--font-body) !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: 0.01em;
    cursor: pointer;
    transition: background 0.2s, border-color 0.2s, color 0.2s;
    outline: none !important;
    box-shadow: none !important;
    text-decoration: none !important;
    align-self: flex-start;
}
.acme-contact-page__submit:hover:not(:disabled) {
    background: var(--color-accent) !important;
    border-color: var(--color-accent) !important;
    color: var(--color-white) !important;
}

/* Responsive — below 900px stack: image-hero on top, form below. */
@media (max-width: 900px) {
    main.acme-contact-page,
    html body main.acme-contact-page,
    html body main#content.acme-contact-page {
        grid-template-columns: 1fr;
    }
    .acme-contact-page__left {
        min-height: 60vh;
        padding: 28px 32px 40px;
    }
    .acme-contact-page__right {
        padding: 56px 24px 72px;
    }
    .acme-contact-page__headline { font-size: clamp(26px, 6vw, 36px); }
    .acme-contact-page__top-bar { flex-wrap: wrap; }
}

/* ==========================================================================
   AUTH — /login/ and /account/ pages.
   Full-viewport navy section with a centered glass-panel card. Matches
   homepage typography (display font heading, body-font form labels).
   ========================================================================== */
main.acme-auth,
html body main.acme-auth,
html body main#content.acme-auth {
    background: var(--color-navy);
    color: var(--color-white);
    min-height: calc(100vh - var(--header-height, 80px));
    display: flex;
    align-items: center;
    justify-content: center;
    /* Top padding clears the fixed floating-pill header. !important
       overrides the global `main.site-main { padding: 0 !important }`
       rule that would otherwise zero this out. */
    padding: 180px 20px 120px !important;
    width: 100vw;
    margin-left: calc(50% - 50vw);
}
.acme-auth__wrap { width: 100%; }
.acme-auth__card {
    max-width: 440px;
    margin: 0 auto;
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-radius: 10px;
    padding: 44px 40px 40px;
}
.acme-auth__title {
    font-family: var(--font-display);
    font-size: 30px;
    font-weight: 700;
    line-height: 1.1;
    color: var(--color-white);
    margin: 0 0 10px;
    text-transform: uppercase;
    letter-spacing: 0.01em;
}
.acme-auth__subtitle {
    font-family: var(--font-body);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.72);
    margin: 0 0 28px;
}
.acme-auth__section-title {
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 700;
    color: var(--color-white);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin: 32px 0 16px;
}
.acme-auth__error,
.acme-auth__message {
    padding: 12px 16px;
    border-radius: 6px;
    font-size: 14px;
    line-height: 1.4;
    margin: 0 0 20px;
    font-weight: 500;
}
.acme-auth__error {
    background: rgba(239, 68, 68, 0.12);
    border: 1px solid rgba(239, 68, 68, 0.35);
    color: #fecaca;
}
.acme-auth__message {
    background: rgba(34, 197, 94, 0.12);
    border: 1px solid rgba(34, 197, 94, 0.35);
    color: #bbf7d0;
}
.acme-auth__form {
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.acme-auth__field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.acme-auth__label {
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.75);
    letter-spacing: 0.02em;
}
.acme-auth__field input {
    width: 100%;
    padding: 12px 14px;
    background: rgba(255, 255, 255, 0.07);
    border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: 6px;
    color: var(--color-white);
    font-size: 15px;
    font-family: var(--font-body);
    transition: border-color 0.18s, background 0.18s;
    box-sizing: border-box;
}
.acme-auth__field input:focus {
    outline: none;
    border-color: rgba(255, 255, 255, 0.5);
    background: rgba(255, 255, 255, 0.10);
}
.acme-auth__submit {
    margin-top: 8px;
    justify-content: center;
    width: 100%;
}
.acme-auth__meta {
    margin: 22px 0 0;
    text-align: center;
    font-size: 14px;
    color: rgba(255, 255, 255, 0.75);
}
.acme-auth__meta a {
    color: rgba(255, 255, 255, 0.9);
    text-decoration: underline;
    text-underline-offset: 3px;
}
.acme-auth__meta a:hover { color: var(--color-white); }
.acme-auth__actions {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-top: 28px;
}
.acme-auth__actions .hp-btn { justify-content: center; }

/* ==========================================================================
   BUTTON STATE LOCK — global.
   Elementor / hello-elementor ship default <button> styles that paint a
   pink/red fill on :focus and :active. Without explicit overrides on the
   .hp-btn variants, that red leaks through anywhere a <button> element
   uses our brand classes (login form, account form, timeline arrows,
   forms generally). Locking every state here kills the leak site-wide
   in a single place. Hover tokens match the existing brand directives
   (accent color = ACME Settings Brand & Identity → Accent).
   ========================================================================== */
.hp-btn,
.hp-btn:focus,
.hp-btn:focus-visible,
.hp-btn:active {
    outline: none !important;
    box-shadow: none !important;
}
.hp-btn--light,
.hp-btn--light:focus,
.hp-btn--light:focus-visible,
.hp-btn--light:active {
    background: var(--color-white) !important;
    color: var(--color-navy) !important;
    border-color: var(--color-white) !important;
}
.hp-btn--light:hover:not(:disabled) {
    background: var(--color-accent) !important;
    color: var(--color-white) !important;
    border-color: var(--color-accent) !important;
}
.hp-btn--outline-light,
.hp-btn--outline-light:focus,
.hp-btn--outline-light:focus-visible,
.hp-btn--outline-light:active {
    background: transparent !important;
    color: var(--color-white) !important;
    border-color: rgba(255, 255, 255, 0.55) !important;
}
.hp-btn--outline-light:hover:not(:disabled) {
    background: var(--color-accent) !important;
    color: var(--color-white) !important;
    border-color: var(--color-accent) !important;
}
/* Input focus — kill any Elementor red focus ring on auth fields. */
.acme-auth__field input:focus,
.acme-auth__field input:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: rgba(255, 255, 255, 0.5) !important;
}

@media (max-width: 600px) {
    main.acme-auth,
    html body main.acme-auth { padding: 140px 16px 88px !important; }
    .acme-auth__card { padding: 32px 24px 28px; }
    .acme-auth__title { font-size: 26px; }
}

/* ==========================================================================
   ACCOUNT DASHBOARD — multi-section layout with quick-links CTA, change-
   password form, and a reset-via-email aside. Log out is pinned top-right
   of the header. Full-viewport navy backdrop matches the login page so
   signed-in + signed-out states feel like one flow.
   ========================================================================== */
main.acme-dashboard,
html body main.acme-dashboard,
html body main#content.acme-dashboard {
    background: var(--color-navy);
    color: var(--color-white);
    width: 100vw;
    margin-left: calc(50% - 50vw);
    /* Top padding clears the fixed floating-pill header. !important
       overrides the global site-main padding: 0 rule. */
    padding: 180px 0 120px !important;
    min-height: calc(100vh - var(--header-height, 80px));
}

.acme-dashboard__head {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    gap: 24px;
    margin-bottom: 56px;
    padding-bottom: 32px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.acme-dashboard__head .hp-eyebrow { margin: 0 0 10px; }
.acme-dashboard__title {
    font-family: var(--font-display);
    font-size: 36px;
    font-weight: 700;
    line-height: 1.1;
    color: var(--color-white);
    text-transform: uppercase;
    letter-spacing: 0.01em;
    margin: 0 0 6px;
}
.acme-dashboard__subtitle {
    font-family: var(--font-body);
    font-size: 15px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.65);
    margin: 0;
}
.acme-dashboard__logout { flex-shrink: 0; }

.acme-dashboard__section { margin-bottom: 56px; }
.acme-dashboard__section:last-child { margin-bottom: 0; }
.acme-dashboard__section-title {
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.55);
    margin: 0 0 20px;
}

/* Quick-links cards — featured CTA card. */
.acme-dashboard__cards {
    display: grid;
    grid-template-columns: 1fr;
    gap: 20px;
}
.acme-dashboard__card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 32px 32px;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-radius: 10px;
    text-decoration: none;
    color: var(--color-white);
    transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.acme-dashboard__card:hover {
    background: var(--color-accent);
    border-color: var(--color-accent);
    transform: translateY(-2px);
}
.acme-dashboard__card-body { flex: 1 1 auto; }
.acme-dashboard__card-title {
    font-family: var(--font-body);
    font-size: 20px;
    font-weight: 700;
    margin: 0 0 6px;
    color: var(--color-white);
}
.acme-dashboard__card-text {
    font-family: var(--font-body);
    font-size: 14px;
    line-height: 1.5;
    color: rgba(255, 255, 255, 0.72);
    margin: 0;
    max-width: 540px;
}
.acme-dashboard__card:hover .acme-dashboard__card-text {
    color: rgba(255, 255, 255, 0.9);
}
.acme-dashboard__card-arrow {
    flex-shrink: 0;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.08);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--color-white);
    transition: background 0.2s ease;
}
.acme-dashboard__card:hover .acme-dashboard__card-arrow {
    background: rgba(255, 255, 255, 0.2);
}

/* Settings area — change-password form on the left, reset-via-email
   aside on the right. Stacks to single column on mobile. */
.acme-dashboard__settings {
    display: grid;
    grid-template-columns: 1.4fr 1fr;
    gap: 24px;
}
.acme-dashboard__form,
.acme-dashboard__aside {
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-radius: 10px;
    padding: 28px 28px 24px;
}
.acme-dashboard__form-title {
    font-family: var(--font-body);
    font-size: 17px;
    font-weight: 700;
    color: var(--color-white);
    margin: 0 0 18px;
}
.acme-dashboard__aside {
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.acme-dashboard__aside-text {
    font-family: var(--font-body);
    font-size: 14px;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.7);
    margin: 0;
    flex: 1 1 auto;
}
.acme-dashboard__aside .hp-btn { align-self: flex-start; }

@media (max-width: 900px) {
    .acme-dashboard__head {
        flex-direction: column;
        align-items: flex-start;
    }
    .acme-dashboard__settings { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
    main.acme-dashboard,
    html body main.acme-dashboard { padding: 140px 0 96px !important; }
    .acme-dashboard__title { font-size: 28px; }
    .acme-dashboard__card {
        flex-direction: column;
        align-items: flex-start;
        padding: 28px 24px;
    }
    .acme-dashboard__card-arrow { align-self: flex-end; }
}

/* ==========================================================================
   SITE-WIDE CUSTOM CURSOR
   Universal selector + !important so the custom cursor wins over every
   existing `cursor: pointer` / `cursor: default` rule in the theme
   (.hp-cap-card, nav items, carousel arrows, etc.). Text inputs and
   disabled elements keep their semantic fallback for accessibility.
   Hotspot 0 0 = top-left of the SVG.
   ========================================================================== */
*, *::before, *::after {
    cursor: url('/wp-content/themes/avionic-child/assets/icons/acme-cursor.svg') 0 0, auto !important;
}
input[type="text"], input[type="email"], input[type="number"],
input[type="password"], input[type="search"], input[type="tel"],
input[type="url"], textarea {
    cursor: url('/wp-content/themes/avionic-child/assets/icons/acme-cursor.svg') 0 0, text !important;
}
[disabled], [aria-disabled="true"] {
    cursor: url('/wp-content/themes/avionic-child/assets/icons/acme-cursor.svg') 0 0, not-allowed !important;
}

/* ==========================================================================
   HERO — reveals the site-wide grid only inside a circle around the cursor.
   The global has-grid ::before layer paints the exact same grid pattern
   used on every other section (driven by ACME Settings → Layout tokens).
   Here we just apply a radial-gradient mask so only a ~220px circle
   centered on --cursor-x / --cursor-y (set by hero-cursor.js on mousemove)
   shows through. When the cursor leaves the hero, JS moves the coords far
   off-screen → mask covers nothing → grid is fully hidden.
   ========================================================================== */
/* Hero-only grid reveal mask. The line/dot peak opacities and the mask
   radius are driven by ACME Settings → Layout → "Hero Cursor Spotlight":
     --grid-line-light / --grid-dot-light  (peak opacities, emitted
       inline in <head> scoped to .hp-hero — these shadow the site-wide
       grid vars inside the hero only)
     --hero-cursor-radius  (mask circle radius in px, inherited from
       .hp-hero by its ::before)
   When the admin toggle is off, functions.php emits radius=0 → the mask
   collapses to a point and the hero renders like any other navy section. */
body.has-grid .hp-hero::before {
    -webkit-mask-image: radial-gradient(
        circle var(--hero-cursor-radius, 320px)
          at var(--cursor-x, -9999px) var(--cursor-y, -9999px),
        rgba(0, 0, 0, 1)   0%,
        rgba(0, 0, 0, 1)   15%,
        rgba(0, 0, 0, 0.6) 45%,
        rgba(0, 0, 0, 0.2) 75%,
        rgba(0, 0, 0, 0)   100%
    ) !important;
    mask-image: radial-gradient(
        circle var(--hero-cursor-radius, 320px)
          at var(--cursor-x, -9999px) var(--cursor-y, -9999px),
        rgba(0, 0, 0, 1)   0%,
        rgba(0, 0, 0, 1)   15%,
        rgba(0, 0, 0, 0.6) 45%,
        rgba(0, 0, 0, 0.2) 75%,
        rgba(0, 0, 0, 0)   100%
    ) !important;
    -webkit-mask-repeat: no-repeat !important;
    mask-repeat: no-repeat !important;
    transition: -webkit-mask-image 0.1s ease, mask-image 0.1s ease;
}

/* Markets slider card titles ("Commercial Aviation" etc.) — smaller than
   section headings, semibold. Not part of the unified section-heading
   set since these are card titles, not section titles. */
html body .hp-markets__slider-text .hp-market-card__title {
    font-size: clamp(23px, 1.6vw + 7px, 29px) !important;
    font-weight: 600 !important;
    line-height: 1.15 !important;
    margin: 0 0 14px 0 !important;
}

/* Drop the legacy 440px max-width cap on the homepage About bodies so
   each paragraph fills its grid cell — matches the flex-split block's
   body width behavior (which Matt prefers). */
html body .hp-about__body {
    max-width: none !important;
}

/* ==========================================================================
   ABOUT SECTION — desktop alignment fix.
   Problem: left and right body paragraphs fell out of vertical alignment
   because the left column's header block (eyebrow + heading) has a
   different height than the right column's header (the button only).
   Hardcoded margin-top: 88px on the right body tried to compensate but
   drifted whenever the heading wrapped to a different line count.
   Fix: flatten both columns into the outer grid via display: contents,
   placing both body paragraphs on a shared row 3 so their tops align
   automatically regardless of heading height.
   ========================================================================== */
@media (min-width: 901px) {
    html body .hp-about__columns {
        grid-template-columns: 1fr 1fr !important;
        grid-template-rows: auto auto 1fr !important;
        column-gap: 80px !important;
        row-gap: 0 !important;
    }
    html body .hp-about__left,
    html body .hp-about__right {
        display: contents !important;
        max-width: none !important;
    }
    html body .hp-about__left > .hp-eyebrow {
        grid-column: 1; grid-row: 1;
        margin: 0 0 14px 0 !important;
    }
    html body .hp-about__left > .hp-about__heading {
        grid-column: 1; grid-row: 2;
        margin: 0 !important;
    }
    html body .hp-about__left > .hp-about__body {
        grid-column: 1; grid-row: 3;
        margin-top: 30px !important;
    }
    html body .hp-about__right > .hp-about__cta {
        grid-column: 2; grid-row: 1 / 3;
        justify-self: end; align-self: start;
        margin: 0 !important;
    }
    html body .hp-about__right > .hp-about__body {
        grid-column: 2; grid-row: 3;
        margin-top: 30px !important;
    }
}

/* ==========================================================================
   ABOUT SECTION — mobile flow fix.
   On <900px the two columns stack. The right column's natural order is
   [CTA, body2] — which drops the button between the two paragraphs and
   keeps it right-aligned. Below we flex-reorder so mobile reads:
     eyebrow → heading → body1 → body2 → CTA (left-aligned).
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-about__right {
        display: flex !important;
        flex-direction: column !important;
        gap: 16px !important;
    }
    html body .hp-about__right .hp-about__body {
        order: 0 !important;
        margin-top: 0 !important;
    }
    html body .hp-about__right .hp-about__cta,
    html body .hp-about__right .hp-btn {
        order: 1 !important;
        align-self: flex-start !important;
        justify-self: flex-start !important;
        margin-top: 8px;
    }
}

/* ==========================================================================
   ABOUT STATEMENT — per-letter scroll-linked color fill.
   The whole sentence starts muted. about-statement-reveal.js wraps each
   non-space character in .hp-about__char and, on scroll, drives a
   per-char --char-progress (0..1) that color-mix() interpolates from
   muted → navy. Adjacent letters overlap so the fill feels continuous.
   Base color on the parent is forced to muted so the pre-JS frame and
   any leftover non-char text render in the starting state.
   ========================================================================== */
html body .hp-about__statement {
    color: var(--color-text-muted) !important;
}
html body .hp-about__char {
    --char-progress: 0;
    color: color-mix(
        in srgb,
        var(--color-navy) calc(var(--char-progress) * 100%),
        var(--color-text-muted)
    ) !important;
}
@media (prefers-reduced-motion: reduce) {
    html body .hp-about__char { --char-progress: 1; }
}

/* Eyebrow typewriter effect — blinking cursor while typing in.
   Driven by assets/eyebrow-typer.js. Pure presentational add-on. */
.hp-eyebrow--typing::after {
    content: '▌';
    display: inline-block;
    margin-left: 2px;
    animation: acme-eyebrow-cursor 0.7s step-end infinite;
    font-weight: 400;
    font-size: 0.9em;
    color: inherit;
}
@keyframes acme-eyebrow-cursor {
    0%, 50% { opacity: 1; }
    51%, 100% { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .hp-eyebrow--typing::after { animation: none; opacity: 0; }
}

/* ==========================================================================
   SECTION FADE-IN — admin-tunable fade-up animation for .section-heading
   and whitelisted section intro paragraphs / eyebrows. Driven by the
   CSS vars + config emitted by inc/animations.php. Only activates when JS
   has tagged <html class='acme-js'> so non-JS users see content immediately.
   ========================================================================== */
html.acme-js .acme-fade {
    opacity: var(--anim-title-start-opacity, 0);
    transform: translateY(var(--anim-title-distance, 28px));
    transition:
        opacity    var(--anim-title-duration, 700ms) ease-out,
        transform  var(--anim-title-duration, 700ms) ease-out;
    will-change: opacity, transform;
}
html.acme-js .acme-fade--para {
    opacity:    var(--anim-para-start-opacity, 0);
    transform:  translateY(var(--anim-para-distance, 22px));
    transition-duration: var(--anim-para-duration, 700ms);
    transition-delay:    var(--anim-para-delay, 140ms);
}
html.acme-js .acme-fade--eyebrow {
    /* Eyebrows use title-speed defaults but a smaller rise. */
    opacity:    var(--anim-title-start-opacity, 0);
    transform:  translateY(16px);
}
html.acme-js .acme-fade.is-visible {
    opacity: 1;
    transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
    html.acme-js .acme-fade {
        opacity: 1;
        transform: none;
        transition: none;
    }
}

/* =========================================================================
   PROOF TIMELINE — row-centered horizontal dividers (override the legacy
   fixed  /  pseudos). The lines are now real grid
   children placed into row 1 / row 2 with , so they
   track the actual vertical center of each card row regardless of height.
   ========================================================================= */
/* Undo the legacy pseudo-element lines (kept hidden for history). */
html body .hp-proof__timeline::before,
html body .hp-proof__timeline::after { display: none !important; }

/* Reveal the real line divs (the global .hp-proof__line { display: none } rule
   was hiding them). Then place each line in its grid row centered. */
html body .hp-proof__timeline .hp-proof__line--row1,
html body .hp-proof__timeline .hp-proof__line--row2 {
    display: block !important;
    width: 100vw;
    margin-left: calc(50% - 50vw);
    height: 3px;
    background: rgba(6, 1, 67, 0.5);
    grid-column: 1 / -1;
    align-self: center;
    z-index: 0;
    pointer-events: none;
}
html body .hp-proof__timeline .hp-proof__line--row1 { grid-row: 1; }
html body .hp-proof__timeline .hp-proof__line--row2 { grid-row: 2; }

/* Mobile — cards stack, lines are purely decorative so hide them. */
@media (max-width: 900px) {
    html body .hp-proof__timeline .hp-proof__line--row1,
    html body .hp-proof__timeline .hp-proof__line--row2 { display: none !important; }
}

/* Match the zig-zag card transforms so the lines track the cards'
   VISUAL centers, not the grid-cell centers (cards 1,2 shift -20px,
   cards 3,4 shift +20px — see rules earlier in this file). */
html body .hp-proof__timeline .hp-proof__line--row1 { transform: translateY(-20px); }
html body .hp-proof__timeline .hp-proof__line--row2 { transform: translateY(20px); }

/* =========================================================================
   PROOF TIMELINE v3 — two row-containers. Each row is position:relative
   with its own line absolutely centered at top:50%. Guarantees the line
   lands on the exact vertical center of its row regardless of card height
   or any future transform/padding tweaks.
   ========================================================================= */
html body .hp-proof__timeline {
    display: flex !important;
    flex-direction: column !important;
    gap: 72px !important;
    grid-template-columns: none !important;
    grid-template-rows: none !important;
}
html body .hp-proof__timeline .hp-proof__row {
    position: relative;
    display: grid;
    grid-template-columns: repeat(8, 1fr);
    gap: 0 16px;
}
html body .hp-proof__timeline .hp-proof__row .hp-proof__line {
    display: block !important;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 100vw;
    height: 3px;
    background: rgba(6, 1, 67, 0.5);
    z-index: 0;
    pointer-events: none;
    margin: 0 !important;
}
/* Row-1 cards land at cols 3 and 6, row-2 cards at cols 2 and 5 (zig-zag). */
html body .hp-proof__row--1 .hp-proof-card--1 { grid-column: 3 / span 2 !important; }
html body .hp-proof__row--1 .hp-proof-card--2 { grid-column: 6 / span 2 !important; }
html body .hp-proof__row--2 .hp-proof-card--3 { grid-column: 2 / span 2 !important; }
html body .hp-proof__row--2 .hp-proof-card--4 { grid-column: 5 / span 2 !important; }
/* Cards need position:relative so the badge ::absolute reference stays correct. */
html body .hp-proof__row .hp-proof-card { position: relative; z-index: 1; }

@media (max-width: 900px) {
    html body .hp-proof__timeline .hp-proof__row {
        grid-template-columns: 1fr 1fr;
        gap: 20px 16px;
    }
    html body .hp-proof__timeline .hp-proof__row .hp-proof__line { display: none !important; }
}

/* Widen proof cards from span 2 (25%) to span 3 (~37.5%) — keeps the
   zig-zag column offsets but cards read more substantial. */
html body .hp-proof__row--1 .hp-proof-card--1 { grid-column: 2 / span 3 !important; }
html body .hp-proof__row--1 .hp-proof-card--2 { grid-column: 6 / span 3 !important; }
html body .hp-proof__row--2 .hp-proof-card--3 { grid-column: 1 / span 3 !important; }
html body .hp-proof__row--2 .hp-proof-card--4 { grid-column: 5 / span 3 !important; }

/* Homepage CTA — admin toggle to hide the section grid behind the image.
   When .hp-cta--image-clean is on the section, we paint an opaque white
   backdrop on the .hp-cta__visual wrapper so the grid ::before beneath
   is covered in the image area only. Rest of the section's grid remains. */
body.has-grid .hp-cta.hp-cta--image-clean .hp-cta__visual,
html body .hp-cta.hp-cta--image-clean .hp-cta__visual {
    z-index: 1 !important;
    background: var(--color-white) !important;
}
body.has-grid .hp-cta.hp-cta--image-clean .hp-cta__visual__ignored {
    position: relative;
    z-index: 1;
    background: var(--color-white);
    border-radius: inherit;
}


/* ==========================================================================
   CAPABILITIES — STACKED VARIANT (6+ cards).
   Triggered by the .hp-cap--stacked class added in front-page.php when the
   admin adds a 6th card. Title moves to a full-width row above; all cards
   flow into a clean 3-col grid below. Featured-card styling is preserved.
   The 5-card hardcoded nth-child grid positions are reset to auto so cards
   flow naturally regardless of count.
   ========================================================================== */
html body .hp-cap--stacked .hp-cap__heading-cell {
    grid-column: 1 / -1;
    grid-row: auto;
    padding-right: 0;
    padding-bottom: 24px;
}
html body .hp-cap--stacked .hp-cap__cards .hp-cap-card:nth-child(n) {
    grid-column: auto;
    grid-row: auto;
}

/* ==========================================================================
   CONTACT PAGE — Topic dropdown styling.
   The <select> element doesn't inherit the input border/font naturally, and
   native browser chrome (the default arrow + chevron border) is ugly. We
   strip the native chrome via appearance:none and paint our own chevron
   via an inline SVG background-image that matches the rest of the form.
   ========================================================================== */
.acme-contact-page__field select {
    width: 100%;
    padding: 12px 38px 12px 14px;
    background: var(--color-white) url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23060143' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 14px center / 12px 8px;
    border: 1px solid rgba(6, 1, 67, 0.15);
    border-radius: 8px;
    color: var(--color-navy);
    font-size: 15px;
    font-family: var(--font-body);
    box-sizing: border-box;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    cursor: pointer;
    transition: border-color 0.18s, background-color 0.18s;
}
.acme-contact-page__field select:focus,
.acme-contact-page__field select:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: var(--color-navy) !important;
}
/* Empty state (placeholder option) — slightly muted so users see "select a topic" cue */
.acme-contact-page__field select:invalid,
.acme-contact-page__field select option[value=""] {
    color: rgba(6, 1, 67, 0.55);
}

/* ==========================================================================
   CONTACT PAGE — Repairs & AOG card on the LEFT, mirroring the Get in Touch
   card on the right. Both cards pin to the bottom of the hero, share the
   same white-rounded-shadow treatment, and remain vertically aligned via
   their parent columns' matching padding-bottom values.
   ========================================================================== */

/* Topic dropdown on the Get in Touch form — strip native chrome and paint
   our own chevron via inline SVG so it visually matches the text inputs. */
.acme-contact-page__field--select select {
    width: 100%;
    padding: 12px 38px 12px 14px;
    background: var(--color-white) url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23060143' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 14px center / 12px 8px;
    border: 1px solid rgba(6, 1, 67, 0.15);
    border-radius: 8px;
    color: var(--color-navy);
    font-size: 15px;
    font-family: var(--font-body);
    box-sizing: border-box;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    cursor: pointer;
    transition: border-color 0.18s, background-color 0.18s;
}
.acme-contact-page__field--select select:focus,
.acme-contact-page__field--select select:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: var(--color-navy) !important;
}

/* Two-card contact layout:
   - Repairs card pins TOP of left column, Engineering headline pins BOTTOM.
   - Get in Touch card pins TOP of right column.
   Both cards' top edges align at padding-top: 180px from their column tops. */
html body .acme-contact-page__left {
    align-items: flex-start;
    justify-content: space-between;
    gap: 32px;
}
html body .acme-contact-page__right {
    align-items: flex-start;
}

/* The Repairs card matches .acme-contact-page__card styling (white +
   rounded + shadow + 520px max-width) by sharing that base class. */
html body .acme-contact-page__card--repairs {
    margin-right: auto;
}

/* Card body (description copy beneath the title). */
.acme-contact-page__card-body {
    font-family: var(--font-body);
    font-size: 15px;
    line-height: 1.6;
    color: var(--color-navy);
    margin: 0 0 24px;
}

/* Contact rows — phone + email links inside the Repairs card.
   Stacked vertically with subtle dividers, navy text + hover accent. */
.acme-contact-page__contact-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 24px;
}
.acme-contact-page__contact-list:empty {
    display: none;
}
.acme-contact-page__contact-row {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 12px 14px;
    border: 1px solid rgba(6, 1, 67, 0.12);
    border-radius: 8px;
    color: var(--color-navy);
    text-decoration: none;
    transition: background 0.18s, border-color 0.18s;
}
.acme-contact-page__contact-row:hover {
    background: rgba(6, 1, 67, 0.03);
    border-color: rgba(6, 1, 67, 0.25);
}
.acme-contact-page__contact-label {
    font-family: var(--font-body);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: rgba(6, 1, 67, 0.65);
}
.acme-contact-page__contact-value {
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 700;
    color: var(--color-navy);
}

/* Repairs card CTA — anchor styled like the form submit button. */
html body a.acme-contact-page__submit--repairs,
html body a.acme-contact-page__submit--repairs:focus,
html body a.acme-contact-page__submit--repairs:focus-visible {
    display: inline-block;
    text-align: center;
    text-decoration: none;
}

/* Mobile: shrink left column padding so the card + headline still fit. */
@media (max-width: 900px) {
    html body .acme-contact-page__left {
        padding-top: 120px;
        padding-bottom: 32px;
        gap: 24px;
    }
    html body .acme-contact-page__right {
        padding-top: 32px;
    }
}

/* ==========================================================================
   HOMEPAGE HERO — image renders BEHIND the brand grid pseudo so the grid
   pattern shows through the image area instead of being clipped by it.

   Mechanics:
   - .hp-hero has `isolation: isolate` (set globally on body.has-grid sections)
     which makes it the stacking-context root. Negative z-index on descendants
     stays inside this hero block, doesn't bleed under prior sections.
   - .hp-hero__inner originally had z-index:1, which created its OWN stacking
     context that trapped the image's negative z-index inside. Override that
     to z-index:auto so descendants can reach .hp-hero's context directly.
   - .hp-hero__image gets z-index:-2 (below brand grid::before at -1) so the
     dot+line pattern paints OVER the image. Position:relative is required
     for z-index to apply on an <img>.
   - Only the image is pulled back; .hp-hero__content text and callouts
     stay in normal flow above the grid.
   ========================================================================== */
html body .hp-hero__inner {
    z-index: auto;
}
html body .hp-hero__image {
    position: relative;
    z-index: -2;
}

/* ==========================================================================
   HERO — soften brand grid over the wireframe image area so the grid
   pattern doesn't compete with the image's own line texture. The mask
   drops the grid to ~50% strength over the image zone (right column,
   vertically centered) with a soft radial falloff, while the rest of the
   hero keeps 100% grid strength.

   ROLLBACK: delete this entire block. The grid pseudo reverts instantly.
   TUNE STRENGTH: change the two rgba(0,0,0,0.5) values together —
     0.3 = stronger softening, 0.7 = subtler softening, 1.0 = no effect.
   ========================================================================== */
@media (min-width: 901px) {
    html body .hp-hero::before {
        -webkit-mask-image: radial-gradient(
            ellipse 600px 400px at 75% 50%,
            rgba(0, 0, 0, 0) 0%,
            rgba(0, 0, 0, 0) 25%,
            rgba(0, 0, 0, 1) 70%,
            rgba(0, 0, 0, 1) 100%
        );
                mask-image: radial-gradient(
            ellipse 600px 400px at 75% 50%,
            rgba(0, 0, 0, 0) 0%,
            rgba(0, 0, 0, 0) 25%,
            rgba(0, 0, 0, 1) 70%,
            rgba(0, 0, 0, 1) 100%
        );
        -webkit-mask-mode: alpha;
                mask-mode: alpha;
        -webkit-mask-repeat: no-repeat;
                mask-repeat: no-repeat;
    }
}

/* ============================================================
   Footer badges — small certification/partner marks under social icons
   Renders one row of up to 3 badges. Image height fixed ~48px,
   width auto preserves aspect ratio.
   ============================================================ */
.footer-badges {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: 14px !important;
    margin-top: 20px !important;
}
.footer-badges .footer-badge {
    display: inline-flex !important;
    align-items: center !important;
    line-height: 0 !important;
}
.footer-badges .footer-badge img {
    display: block !important;
    height: 48px !important;
    width: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
}
a.footer-badge {
    transition: opacity 0.18s ease, transform 0.18s ease;
}
a.footer-badge:hover,
a.footer-badge:focus-visible {
    opacity: 0.85;
    transform: translateY(-1px);
}

/* Footer badges — shape-aware sizing.
   Wide horizontal logos (ratio > 1.4) keep the base 48px height.
   Square/round badges render taller so their visual weight matches
   a horizontal logo at the same row.
   Aspect ratio is computed in PHP from the image's width/height meta. */
.footer-badges .footer-badge--wide img {
    height: 48px !important;
}
.footer-badges .footer-badge--square img {
    height: 64px !important;
}
.footer-badges {
    align-items: center !important;
    gap: 18px !important;
}

/* ============================================================
   Sign-in screen — always paint the grid behind the auth card.
   Independent of body.has-grid (client request: the grid is part
   of the sign-in design itself, regardless of site-wide toggle).
   Uses the light line + dot variant since auth bg is navy.
   ============================================================ */
main.acme-auth {
    position: relative;
    isolation: isolate;
}
main.acme-auth::before {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: -1;
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-image:
        radial-gradient(circle at 0 0, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
}

/* Sign-in card — solid background so the grid doesn't bleed through.
   Slightly lifted from the navy page bg + soft shadow for depth. */
.acme-auth__card {
    background: var(--color-navy) !important;
    box-shadow: 0 18px 48px rgba(0, 0, 0, 0.35) !important;
}

/* Homepage CTA — flex row for primary + optional outlined secondary button. */
.hp-cta__ctas {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
}

/* Capabilities — align eyebrow row to card icon row.
   Cards have padding: 24px 20px 20px; the heading cell had only
   padding-right, leaving the eyebrow 24px higher than the icons. */
.hp-cap__heading-cell {
    padding-top: 24px !important;
}

/* Capabilities — align eyebrow row to card icon row.
   Cards have padding: 24px 20px 20px; the heading cell had only
   padding-right, leaving the eyebrow 24px higher than the icons. */
.hp-cap__heading-cell {
    padding-top: 24px !important;
}

/* Hero — give the image column more room so the max-height slider
   can actually grow the image (3:2 source was capped by column width).
   Heading column still has plenty of width for the 4-line headline
   thanks to its own max-width: 440px. */
.hp-hero__inner {
    grid-template-columns: 1fr 1.4fr !important;
}

/* ==========================================================================
   ACCOUNT — POINT OF CONTACT + REQUEST FORM
   Two-column section on /account/: point-of-contact card (left) + a simple
   "Contact us" request form (right). Navy dashboard theme, white text,
   translucent cards — matches the existing .acme-dashboard styling.
   ========================================================================== */
.acme-poc-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-radius: 12px;
    padding: 32px;
}

.acme-poc__heading {
    font-family: var(--font-body);
    font-size: 18px;
    font-weight: 700;
    color: var(--color-white);
    margin: 0 0 22px;
}

/* ---- LEFT: point of contact ---- */
.acme-poc__person {
    display: flex;
    gap: 20px;
    align-items: flex-start;
    margin-bottom: 22px;
}
.acme-poc__photo {
    flex-shrink: 0;
    width: 96px;
    height: 96px;
    border-radius: 8px;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.08);
}
.acme-poc__photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.acme-poc__photo-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    font-family: var(--font-display);
    font-size: 36px;
    font-weight: 700;
    color: rgba(255, 255, 255, 0.5);
}
.acme-poc__details { min-width: 0; }
.acme-poc__name {
    font-family: var(--font-body);
    font-size: 18px;
    font-weight: 700;
    color: var(--color-white);
    margin: 0 0 2px;
}
.acme-poc__title {
    font-family: var(--font-body);
    font-size: 14px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.6);
    margin: 0 0 12px;
}
.acme-poc__row {
    font-family: var(--font-body);
    font-size: 14px;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.85);
    margin: 0 0 4px;
}
.acme-poc__row strong { color: var(--color-white); font-weight: 700; }
.acme-poc__row a {
    color: rgba(255, 255, 255, 0.85);
    text-decoration: none;
    transition: color 0.18s ease;
}
.acme-poc__row a:hover { color: var(--color-white); text-decoration: underline; }

/* Additional-info sub-card */
.acme-poc__info {
    background: rgba(6, 1, 67, 0.45);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 10px;
    padding: 22px 24px;
}
.acme-poc__info-title {
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 700;
    color: var(--color-white);
    margin: 0 0 12px;
}
.acme-poc__info-row {
    font-family: var(--font-body);
    font-size: 14px;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.78);
    margin: 0 0 6px;
}
.acme-poc__info-row:last-child { margin-bottom: 0; }
.acme-poc__info-row strong { color: var(--color-white); font-weight: 700; }
.acme-poc__info-row a {
    color: rgba(255, 255, 255, 0.85);
    text-decoration: none;
}
.acme-poc__info-row a:hover { color: var(--color-white); text-decoration: underline; }

/* ---- RIGHT: request form ---- */
.acme-poc-form-wrap {
    background: rgba(6, 1, 67, 0.45);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 10px;
    padding: 28px;
}
.acme-poc-form__field {
    display: block;
    margin-bottom: 18px;
}
.acme-poc-form__label {
    display: block;
    font-family: var(--font-body);
    font-size: 14px;
    font-weight: 700;
    color: var(--color-white);
    margin-bottom: 8px;
}
.acme-poc-form__hint {
    font-weight: 500;
    font-size: 12px;
    color: rgba(255, 255, 255, 0.45);
    margin-left: 6px;
}
.acme-poc-form input[type="text"],
.acme-poc-form textarea {
    width: 100%;
    padding: 12px 14px;
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 8px;
    color: var(--color-white);
    font-family: var(--font-body);
    font-size: 15px;
    box-sizing: border-box;
    transition: border-color 0.18s ease, background 0.18s ease;
    resize: vertical;
}
.acme-poc-form input[type="text"]::placeholder,
.acme-poc-form textarea::placeholder {
    color: rgba(255, 255, 255, 0.4);
}
.acme-poc-form input[type="text"]:focus,
.acme-poc-form input[type="text"]:focus-visible,
.acme-poc-form textarea:focus,
.acme-poc-form textarea:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: rgba(255, 255, 255, 0.5) !important;
    background: rgba(255, 255, 255, 0.06) !important;
}

/* Styled file input — dashed dropzone look from the mockup */
.acme-poc-form__file {
    position: relative;
    display: block;
    cursor: pointer;
}
.acme-poc-form__file input[type="file"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}
.acme-poc-form__file-label {
    display: block;
    padding: 14px 16px;
    border: 1px dashed rgba(255, 255, 255, 0.35);
    border-radius: 8px;
    color: rgba(255, 255, 255, 0.55);
    font-family: var(--font-body);
    font-size: 14px;
    transition: border-color 0.18s ease, color 0.18s ease;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.acme-poc-form__file:hover .acme-poc-form__file-label {
    border-color: rgba(255, 255, 255, 0.6);
    color: rgba(255, 255, 255, 0.8);
}

/* Send button — white fill, all 5 states locked vs Elementor pink */
.acme-poc-form__submit,
.acme-poc-form__submit:focus,
.acme-poc-form__submit:focus-visible {
    margin-top: 4px;
    background: var(--color-white) !important;
    color: var(--color-navy) !important;
    border-color: var(--color-white) !important;
    outline: none !important;
    box-shadow: none !important;
}
.acme-poc-form__submit:hover {
    background: var(--color-accent) !important;
    color: var(--color-white) !important;
    border-color: var(--color-accent) !important;
    outline: none !important;
    box-shadow: none !important;
}
.acme-poc-form__submit:active {
    background: var(--color-accent) !important;
    color: var(--color-white) !important;
    border-color: var(--color-accent) !important;
    outline: none !important;
    box-shadow: none !important;
}

/* ---- Responsive ---- */
@media (max-width: 900px) {
    .acme-poc-grid {
        grid-template-columns: 1fr;
        padding: 24px;
    }
}
@media (max-width: 600px) {
    .acme-poc__person { flex-direction: column; gap: 16px; }
    .acme-poc__photo { width: 80px; height: 80px; }
}

/* Account request form — Topic dropdown (dark theme variant). White chevron
   on the translucent navy inputs, matching the account form's text fields. */
.acme-poc-form__field--select select {
    width: 100%;
    padding: 12px 38px 12px 14px;
    background: rgba(255, 255, 255, 0.04) url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 14px center / 12px 8px;
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 8px;
    color: var(--color-white);
    font-family: var(--font-body);
    font-size: 15px;
    box-sizing: border-box;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    cursor: pointer;
    transition: border-color 0.18s ease, background-color 0.18s ease;
}
.acme-poc-form__field--select select:focus,
.acme-poc-form__field--select select:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border-color: rgba(255, 255, 255, 0.5) !important;
}
/* Native option list renders on white in most browsers — keep text dark there */
.acme-poc-form__field--select select option { color: var(--color-navy); }

/* ==========================================================================
   ACCOUNT DASHBOARD — grid background (same standalone pattern as the login
   page's main.acme-auth::before). Always-on white-dot grid on the navy bg,
   independent of the site-wide has-grid toggle. z-index:-1 + isolation keeps
   it behind the dashboard content.
   ========================================================================== */
main.acme-dashboard {
    position: relative;
    isolation: isolate;
}
main.acme-dashboard::before {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: -1;
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-image:
        radial-gradient(circle at 0 0, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
}

/* ==========================================================================
   ACCOUNT — solid (opaque) panel backgrounds so the grid behind the dashboard
   doesn't bleed through the cards (it was showing through the translucent
   rgba backgrounds, washing them out). Same intent as the login card's solid
   navy fill. Two depth levels: lifted panels + darker inset sub-cards.
   --acme-panel = navy + ~5% white, baked opaque (matches the old translucent
   look without the transparency).
   ========================================================================== */
:root { --acme-panel: #120E4C; }

/* Lifted outer panels */
html body .acme-poc-grid,
html body .acme-dashboard__card,
html body .acme-dashboard__form,
html body .acme-dashboard__aside {
    background: var(--acme-panel) !important;
    box-shadow: 0 14px 40px rgba(0, 0, 0, 0.28);
}

/* Darker inset sub-cards (point-of-contact info + the request form box) */
html body .acme-poc__info,
html body .acme-poc-form-wrap {
    background: var(--color-navy) !important;
}

/* Browse-Products card keeps its accent hover (rest state now solid). */
html body .acme-dashboard__card:hover {
    background: var(--color-accent) !important;
}

/* ==========================================================================
   ACCOUNT — welcome/logout header moved INSIDE the first panel (.acme-poc-grid).
   It spans both grid columns and sits above the POC + form, separated by a
   divider, so the first section reads as a single "account home" card.
   ========================================================================== */
.acme-poc-grid__head {
    grid-column: 1 / -1;
    margin: 0 0 4px;
    padding-bottom: 24px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
/* Slightly smaller welcome title now that it lives inside the panel. */
.acme-poc-grid__head .acme-dashboard__title {
    font-size: 30px;
}
@media (max-width: 600px) {
    .acme-poc-grid__head {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
    }
}

/* ==========================================================================
   BRANDED CUSTOM DROPDOWN (.acme-select)
   Replaces the native <select> option list (un-styleable browser chrome)
   with a branded panel. The real <select> stays in the DOM, visually hidden
   but available for form submission + accessibility.

   - Trigger inherits each form's field look (light on the Contact card,
     dark/translucent on the CTA + account forms).
   - The open panel is a consistent solid navy surface with white options and
     an accent highlight, on every form.
   ========================================================================== */
.acme-select {
    position: relative;
    width: 100%;
}
/* Hide the native select but keep it submittable + focusable for a11y. */
.acme-select select {
    position: absolute !important;
    width: 1px; height: 1px;
    padding: 0 !important; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0);
    white-space: nowrap; border: 0 !important;
    background: none !important;
}

/* ---- Trigger (base) ---- */
.acme-select__trigger {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    width: 100%;
    padding: 12px 14px;
    border-radius: 8px;
    font-family: var(--font-body);
    font-size: 15px;
    text-align: left;
    cursor: pointer;
    transition: border-color 0.18s ease, background 0.18s ease;
}
.acme-select__value { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acme-select__arrow {
    flex-shrink: 0;
    width: 12px; height: 8px;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1.5L6 6.5L11 1.5' stroke='black' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>") no-repeat center / contain;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1.5L6 6.5L11 1.5' stroke='black' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>") no-repeat center / contain;
    transition: transform 0.2s ease;
}
.acme-select.is-open .acme-select__arrow { transform: rotate(180deg); }

/* Lock all 5 button states (Elementor pink defeat). */
.acme-select__trigger,
.acme-select__trigger:focus,
.acme-select__trigger:focus-visible,
.acme-select__trigger:active {
    outline: none !important;
    box-shadow: none !important;
}

/* ---- Trigger themes ---- */
/* Light: Contact page card */
.acme-contact-page__form .acme-select__trigger {
    background: var(--color-white);
    color: var(--color-navy);
    border: 1px solid rgba(6, 1, 67, 0.15);
}
.acme-contact-page__form .acme-select.is-open .acme-select__trigger,
.acme-contact-page__form .acme-select__trigger:hover {
    border-color: var(--color-navy);
}
/* Dark: CTA band + account forms */
.flex-cta__form .acme-select__trigger,
.acme-poc-form .acme-select__trigger {
    background: rgba(255, 255, 255, 0.05);
    color: var(--color-white);
    border: 1px solid rgba(255, 255, 255, 0.18);
}
.flex-cta__form .acme-select.is-open .acme-select__trigger,
.flex-cta__form .acme-select__trigger:hover,
.acme-poc-form .acme-select.is-open .acme-select__trigger,
.acme-poc-form .acme-select__trigger:hover {
    border-color: rgba(255, 255, 255, 0.55);
    background: rgba(255, 255, 255, 0.08);
}

/* ---- Panel (consistent branded navy everywhere) ---- */
.acme-select__list {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    z-index: 50;
    margin: 0;
    padding: 6px;
    list-style: none;
    background: var(--color-navy);
    border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: 10px;
    box-shadow: 0 18px 44px rgba(0, 0, 0, 0.38);
    max-height: 280px;
    overflow-y: auto;
}
.acme-select__option {
    padding: 10px 12px;
    border-radius: 6px;
    font-family: var(--font-body);
    font-size: 15px;
    color: rgba(255, 255, 255, 0.85);
    cursor: pointer;
    transition: background 0.14s ease, color 0.14s ease;
}
.acme-select__option:hover,
.acme-select__option.is-focused {
    background: var(--color-accent);
    color: var(--color-white);
}
.acme-select__option.is-selected {
    color: var(--color-white);
    font-weight: 600;
}
.acme-select__option.is-selected::after {
    content: "✓";
    float: right;
    opacity: 0.9;
}
.acme-select__option--placeholder {
    color: rgba(255, 255, 255, 0.45);
}

/* Scrollbar tidy in the panel */
.acme-select__list::-webkit-scrollbar { width: 8px; }
.acme-select__list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); border-radius: 8px; }

/* ==========================================================================
   CUSTOM DROPDOWN TRIGGER — corrective overrides.
   (1) The trigger is a <button>, so Elementor's pink/red :hover/:focus/:active
       leaks through. Lock ALL 5 states with brand colors + !important.
   (2) Elementor's default button styling shrinks it / breaks width. Force it
       to match the sibling text inputs exactly (full width, same metrics).
   ========================================================================== */
.acme-select__trigger {
    box-sizing: border-box !important;
    width: 100% !important;
    display: flex !important;
    min-height: 0 !important;
    height: auto !important;
    line-height: 1.4 !important;
    font-size: 15px !important;
    font-weight: 500 !important;
    letter-spacing: normal !important;
    text-transform: none !important;
}

/* ---- Light theme (Contact card) — all 5 states locked ---- */
.acme-contact-page__form .acme-select__trigger,
.acme-contact-page__form .acme-select__trigger:hover,
.acme-contact-page__form .acme-select__trigger:focus,
.acme-contact-page__form .acme-select__trigger:focus-visible,
.acme-contact-page__form .acme-select__trigger:active {
    background: var(--color-white) !important;
    color: var(--color-navy) !important;
    border: 1px solid rgba(6, 1, 67, 0.15) !important;
    outline: none !important;
    box-shadow: none !important;
}
.acme-contact-page__form .acme-select.is-open .acme-select__trigger,
.acme-contact-page__form .acme-select__trigger:hover {
    border-color: var(--color-navy) !important;
}

/* ---- Dark theme (CTA band + account) — all 5 states locked ---- */
.flex-cta__form .acme-select__trigger,
.flex-cta__form .acme-select__trigger:hover,
.flex-cta__form .acme-select__trigger:focus,
.flex-cta__form .acme-select__trigger:focus-visible,
.flex-cta__form .acme-select__trigger:active,
.acme-poc-form .acme-select__trigger,
.acme-poc-form .acme-select__trigger:hover,
.acme-poc-form .acme-select__trigger:focus,
.acme-poc-form .acme-select__trigger:focus-visible,
.acme-poc-form .acme-select__trigger:active {
    background: rgba(255, 255, 255, 0.05) !important;
    color: var(--color-white) !important;
    border: 1px solid rgba(255, 255, 255, 0.18) !important;
    outline: none !important;
    box-shadow: none !important;
}
.flex-cta__form .acme-select.is-open .acme-select__trigger,
.flex-cta__form .acme-select__trigger:hover,
.acme-poc-form .acme-select.is-open .acme-select__trigger,
.acme-poc-form .acme-select__trigger:hover {
    border-color: rgba(255, 255, 255, 0.55) !important;
    background: rgba(255, 255, 255, 0.08) !important;
}

/* ---- Contact Section forms: the trigger takes the form's own input box, all 5 states locked ---- */
.flex-contact__form .acme-select__trigger,
.flex-contact__form .acme-select__trigger:hover,
.flex-contact__form .acme-select__trigger:focus,
.flex-contact__form .acme-select__trigger:focus-visible,
.flex-contact__form .acme-select__trigger:active {
    background: rgba(255, 255, 255, 0.07) !important;
    color: var(--color-white) !important;
    border: 1px solid rgba(255, 255, 255, 0.14) !important;
    border-radius: 3px !important;
    padding: 8px 16px !important;
    outline: none !important;
    box-shadow: none !important;
}
.flex-contact--bg-white .flex-contact__form .acme-select__trigger,
.flex-contact--bg-white .flex-contact__form .acme-select__trigger:hover,
.flex-contact--bg-white .flex-contact__form .acme-select__trigger:focus,
.flex-contact--bg-white .flex-contact__form .acme-select__trigger:focus-visible,
.flex-contact--bg-white .flex-contact__form .acme-select__trigger:active {
    background: rgba(255, 255, 255, 0.05) !important;
    border-color: rgba(255, 255, 255, 0.18) !important;
}
.flex-contact .flex-contact__form .acme-select.is-open .acme-select__trigger,
.flex-contact .flex-contact__form .acme-select__trigger:hover {
    border-color: rgba(255, 255, 255, 0.55) !important;
    background: rgba(255, 255, 255, 0.10) !important;
}
.flex-contact .flex-contact__form .flex-contact__field.is-invalid .acme-select__trigger {
    border-color: rgba(239, 68, 68, 0.4) !important;
}

/* ==========================================================================
   CUSTOM DROPDOWN — make the trigger field IDENTICAL to the sibling inputs.
   (1) min-width:0 so it fills its grid/flex cell instead of sizing to content.
   (2) line-height matched to the native inputs so the box height is identical
       (inputs render at ~line-height normal; 1.2 on the trigger matches).
   ========================================================================== */
.acme-select {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
}
.acme-select__trigger {
    width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    line-height: 1.2 !important;
    min-height: 46px;          /* match the text inputs' rendered height */
    margin: 0 !important;
}

/* Trigger height = computed from the same padding/font/border as the inputs,
   so it matches exactly (no forced min-height that would make it taller). */
.acme-select__trigger { min-height: 0 !important; }

/* Trigger height — use the SAME line-height the native inputs use (normal),
   with identical padding/border/box-sizing, so the box height is pixel-equal.
   (The earlier line-height:1.2 made the trigger ~4px shorter than the inputs.) */
.acme-select__trigger {
    line-height: normal !important;
    min-height: 0 !important;
}

/* Trigger height = input height. Elementor's default <button> padding
   (8px 16px) was overriding ours, making the trigger 10px shorter. Force the
   input's exact padding + line-height so the box height matches (49px). */
.acme-select__trigger {
    padding: 12px 14px !important;
    line-height: 1.5 !important;
}

/* Trigger border-radius = input radius (8px). Elementor's default button
   radius (3px) was overriding ours — force it with !important to match. */
.acme-select__trigger { border-radius: 8px !important; }

/* ==========================================================================
   ACCOUNT — no-POC layout. When the user has no point of contact assigned
   (and no default), the POC card is omitted and the contact form takes the
   full panel width (single column) instead of the 2-up grid.
   ========================================================================== */
.acme-poc-grid--no-poc {
    grid-template-columns: 1fr;
}
.acme-poc-grid--no-poc .acme-poc-col {
    max-width: 620px;   /* keep the lone form a comfortable reading width */
}

/* No-POC account layout — the lone contact form spans the FULL panel width
   (overrides the earlier 620px reading-width cap). */
.acme-poc-grid--no-poc .acme-poc-col { max-width: none; }

/* ==========================================================================
   SINGLE PRODUCT — member-only 3D model + engineering files.
   ========================================================================== */
.single-product__members {
    margin-top: clamp(40px, 5vw, 72px);
    padding-top: clamp(32px, 4vw, 48px);
    border-top: 1px solid rgba(6, 1, 67, 0.10);
}
.product-3d {
    margin: 8px 0 20px;
}
.product-3d model-viewer {
    width: 100%;
    height: clamp(360px, 48vw, 560px);
    background:
        radial-gradient(circle at 50% 40%, #15104e 0%, #060143 70%);
    border: 1px solid rgba(6, 1, 67, 0.12);
    border-radius: 12px;
    --poster-color: transparent;
}
.product-3d__progress {
    height: 3px;
    background: var(--color-accent);
    border-radius: 3px;
}
.product-3d__hint {
    font-family: var(--font-body);
    font-size: 13px;
    color: rgba(6, 1, 67, 0.55);
    margin: 10px 0 0;
    text-align: center;
}
.single-product__downloads {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 8px;
}
/* Login gate for non-members */
.single-product__gate {
    background: rgba(6, 1, 67, 0.04);
    border: 1px dashed rgba(6, 1, 67, 0.20);
    border-radius: 12px;
    padding: 32px;
    text-align: center;
}
.single-product__gate p {
    font-family: var(--font-body);
    font-size: clamp(16px, 0.3vw + 13.7px, 18px);
    font-weight: 500;
    color: var(--color-navy);
    margin: 0 0 18px;
}

/* ==========================================================================
   404 PAGE — branded not-found. Navy full-viewport panel with the brand
   grid (same standalone ::before pattern as the login page), oversized
   404 in the display font, message + two CTAs.
   ========================================================================== */
main.acme-404,
html body main#content.acme-404 {
    background: var(--color-navy);
    color: var(--color-white);
    min-height: calc(100vh - var(--header-height, 80px));
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 180px 20px 120px !important;
    width: 100vw;
    margin-left: calc(50% - 50vw);
    position: relative;
    isolation: isolate;
}
main.acme-404::before {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: -1;
    background-size:
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size),
        var(--grid-size) var(--grid-size);
    background-image:
        radial-gradient(circle at 0 0, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
}
.acme-404__inner { max-width: 640px; }
.acme-404__code {
    font-family: var(--font-display);
    font-size: clamp(96px, 18vw, 200px);
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0.02em;
    margin: 8px 0 4px;
    color: rgba(255, 255, 255, 0.12);
}
.acme-404__title {
    font-family: var(--font-display);
    text-transform: uppercase;
    font-size: clamp(26px, 3vw, 42px);
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.01em;
    color: var(--color-white);
    margin: 0 0 14px;
}
.acme-404__body {
    /* Site body clamp — see feedback_typography_system.md */
    font-size: clamp(16px, 0.3vw + 13.7px, 18px);
    font-weight: 500;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.75);
    margin: 0 0 28px;
}
.acme-404__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
}

	/* === FOOTER BOTTOM CENTRE + ANCHOR OFFSET === */

	/* FOOTER BOTTOM: zero the paragraph block margin so the copyright line
	   and the legal link row share one centre under align-items: center. */
	.site-footer .footer-bottom > p {
		margin-block: 0;
	}

	/* ANCHORED SECTION HEADINGS: clear the fixed header on a fragment jump. */
	.flex-prose__body h2[id] {
		scroll-margin-top: 120px;
	}

	/* === LEGAL PAGES PROSE WIDTH === */

	/* Prose container on the site grid on the four legal pages. */
	body.page-id-21 .flex-prose--narrow > .container,
	body.page-id-22 .flex-prose--narrow > .container,
	body.page-id-586 .flex-prose--narrow > .container,
	body.page-id-587 .flex-prose--narrow > .container {
		max-width: var(--container-max);
	}

	/* === PROSE LIST MARKERS === */

	/* List markers on prose lists. */
	.flex-prose__body ul {
		list-style: disc outside;
	}

	.flex-prose__body ol {
		list-style: decimal outside;
	}

	/* Nested levels. */
	.flex-prose__body li ul {
		list-style-type: circle;
	}

	.flex-prose__body li li ul {
		list-style-type: square;
	}

	.flex-prose__body li ol {
		list-style-type: lower-alpha;
	}

	.flex-prose__body li li ol {
		list-style-type: lower-roman;
	}

/* ==========================================================================
   HERO — plane drift toward the cursor. .hp-hero__image translates and
   rotates with --plane-x / --plane-y (written by hero-cursor.js: pointer
   position normalised to -1..1 against the hero centre, 0 on mouseleave).
   Scoped under body.has-plane-motion, added by functions.php through the
   same toggle idiom as has-grid (ACME Settings → Layout site-wide switch,
   per-page override, ?plane=1/0 URL flag). Hover-capable pointers only;
   absent entirely under prefers-reduced-motion.
   ========================================================================== */
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
    body.has-plane-motion .hp-hero__image {
        transform: translate(
                calc(var(--plane-x, 0) * 16px),
                calc(var(--plane-y, 0) * 11px)
            )
            rotate(calc(var(--plane-x, 0) * 0.9deg));
        transition: transform 600ms cubic-bezier(0.22, 0.61, 0.36, 1);
        will-change: transform;
    }
}


/* ==========================================================================
   HERO — single column at <=768. The unconditional grid-template-columns
   1fr 1.4fr !important above beats the 768 stack rule on source order;
   this restates the collapse after it. Content first, image below at full
   column width, still capped by --hero-img-max-w / --hero-img-max-h.
   Two-column from 769 up.
   ========================================================================== */
@media (max-width: 768px) {
    html body .hp-hero__inner {
        grid-template-columns: 1fr !important;
    }
    html body .hp-hero__visual { align-items: center; }
}

/* ==========================================================================
   PROOF — two up from 601 to 900 (each row a 1fr 1fr grid, cards side by
   side in DOM order), single column at <=600. The span-3 widen placements
   above are beaten here on specificity and source order.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-proof__row--1 .hp-proof-card--1 { grid-column: 1 !important; grid-row: 1 !important; }
    html body .hp-proof__row--1 .hp-proof-card--2 { grid-column: 2 !important; grid-row: 1 !important; }
    html body .hp-proof__row--2 .hp-proof-card--3 { grid-column: 1 !important; grid-row: 1 !important; }
    html body .hp-proof__row--2 .hp-proof-card--4 { grid-column: 2 !important; grid-row: 1 !important; }
}
@media (max-width: 600px) {
    html body .hp-proof__timeline .hp-proof__row { grid-template-columns: 1fr; }
    html body .hp-proof__row--1 .hp-proof-card--1,
    html body .hp-proof__row--2 .hp-proof-card--3 { grid-column: 1 !important; grid-row: 1 !important; }
    html body .hp-proof__row--1 .hp-proof-card--2,
    html body .hp-proof__row--2 .hp-proof-card--4 { grid-column: 1 !important; grid-row: 2 !important; }
}

/* ==========================================================================
   HOMEPAGE COMPOSITIONS — flow reset at <=900. The CTA composition keeps
   content and visual absolutely positioned at every width (the image-clean
   900 reset above is beaten on source order); the markets image swiper
   carries an unconditional margin-right -120px that lands the container
   120px right of its track; the markets head keeps a fixed flex row. Below
   900 each returns to normal document flow in DOM order: CTA content then
   image at full content width, swiper aligned to its track, head wrapping.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-cta { min-height: 0 !important; }
    html body .hp-cta__inner {
        display: block !important;
        position: relative !important;
        min-height: 0 !important;
        max-width: 100% !important;
        padding-left: 32px !important;
        padding-right: 32px !important;
    }
    html body .hp-cta__visual {
        position: relative !important;
        inset: auto !important;
        width: auto !important;
        height: 260px !important;
        margin: 0 32px 64px !important;
    }
    html body .hp-markets__slider-images {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }
    html body .hp-markets__head { flex-wrap: wrap !important; }
}

/* Markets nav hidden below 600. */
@media (max-width: 600px) {
    .hp-markets__nav { display: none; }
}

/* ==========================================================================
   CTA PANEL FULL BLEED AT <=900
   The navy is painted on .hp-cta__content, which sits inside the 32px padded
   .hp-cta__inner below 900. The panel takes the site full bleed idiom and
   carries the 32px horizontal inset as its own padding, so the background
   reaches both viewport edges and the text box keeps its position.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-cta__content {
        width: 100vw;
        max-width: none;
        margin-left: calc(50% - 50vw);
        padding-left: 32px;
        padding-right: 32px;
    }
}

/* CTA IMAGE BLEED AT <=900
   Clears the horizontal margins on the image so it spans the viewport with the
   panel above it. Vertical margin unchanged. The margin it overrides carries
   !important, so this does too.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-cta__visual {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }
}

/* ==========================================================================
   MOBILE SPACING AT <=900. Three independent blocks, each removable alone.
   ========================================================================== */

/* CTA IMAGE TO FOOTER GAP AT <=900
   Zeroes the 64px bottom margin the composition block sets on the visual. The
   section carries no padding-bottom, so that margin is the whole gap before the
   footer. Above 900 the declaration does not apply and the gap is already 0.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-cta__visual {
        margin-bottom: 0 !important;
    }
}

/* MARKETS IMAGE OVERLAP AT <=900
   Cancels the -160px overlap into Proof. The separation then comes from the two
   sections' own padding, 40px plus 145px, the same way every other section
   boundary on this page is formed. The 145px padding-top on .hp-proof is left
   alone, so 901 and above keep the overlap.
   ========================================================================== */
@media (max-width: 900px) {
    html body .hp-markets__slider-images {
        margin-bottom: 0 !important;
    }
}

/* PROOF CARD GAPS IN ONE COLUMN AT <=600
   Matches the timeline's row gap to the 20px each .hp-proof__row already uses,
   so all three gaps between the four stacked cards are equal. Scoped to 600
   because from 601 to 900 the rows are two up and the 72px separates two rows.
   ========================================================================== */
@media (max-width: 600px) {
    html body .hp-proof__timeline {
        row-gap: 20px !important;
    }
}

/* ==========================================================================
   COMPLIANZ DOCUMENT PAGES
   Styles Complianz generated documents, which render on the default page
   template. Scoped to the compound body selector, so a Complianz document on
   any other template and every page on page-flexible.php are out of reach.
   ========================================================================== */

/* Light content background. Overrides the important navy body background
   declared in style.css. */
body.cmplz-document.page-template-default {
    background: var(--color-white) !important;
}

/* Site grid on the two wrappers the default template renders. */
body.cmplz-document.page-template-default .page-header,
body.cmplz-document.page-template-default .page-content {
    box-sizing: border-box;
    max-width: var(--container-max);
    margin-inline: auto;
    padding-inline: var(--container-pad);
}

/* Section rhythm. Top offset clears the fixed header and adds the flex
   section padding. */
body.cmplz-document.page-template-default .page-header {
    padding-top: 205px;
}
body.cmplz-document.page-template-default .page-content {
    padding-bottom: 110px;
}
@media (max-width: 900px) {
    body.cmplz-document.page-template-default .page-header { padding-top: 177px; }
    body.cmplz-document.page-template-default .page-content { padding-bottom: 72px; }
}
@media (max-width: 600px) {
    body.cmplz-document.page-template-default .page-header { padding-top: 161px; }
    body.cmplz-document.page-template-default .page-content { padding-bottom: 56px; }
}

/* Page title on the grid line, at the prose heading scale. */
body.cmplz-document.page-template-default .page-header .entry-title {
    max-width: none;
    margin-inline: 0;
    margin-bottom: 20px;
    font-family: var(--font-display, "commuters-sans"), sans-serif;
    font-size: clamp(28px, 3vw, 42px);
    line-height: 1.1;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    color: var(--color-navy);
}

/* Document text colour, inherited by the tables and the consent panel. */
body.cmplz-document.page-template-default #cmplz-document {
    color: var(--color-gray-700, #374151);
}

/* Body copy on the document's own top level prose. The cookie tables and the
   consent panel keep the scale the plugin lays them out at. */
body.cmplz-document.page-template-default #cmplz-document > p,
body.cmplz-document.page-template-default #cmplz-document > ul,
body.cmplz-document.page-template-default #cmplz-document > ol,
body.cmplz-document.page-template-default #cmplz-document > ul > li,
body.cmplz-document.page-template-default #cmplz-document > ol > li {
    font-size: clamp(16px, 0.3vw + 13.7px, 18px);
    font-weight: 500;
    line-height: 1.6;
}
body.cmplz-document.page-template-default #cmplz-document > p,
body.cmplz-document.page-template-default #cmplz-document > ul,
body.cmplz-document.page-template-default #cmplz-document > ol {
    margin: 0 0 18px;
}
body.cmplz-document.page-template-default #cmplz-document > ul,
body.cmplz-document.page-template-default #cmplz-document > ol {
    padding-left: 22px;
}
body.cmplz-document.page-template-default #cmplz-document > ul {
    list-style: disc outside;
}
body.cmplz-document.page-template-default #cmplz-document > ol {
    list-style: decimal outside;
}
body.cmplz-document.page-template-default #cmplz-document > ul > li,
body.cmplz-document.page-template-default #cmplz-document > ol > li {
    margin: 0 0 6px;
    line-height: 1.65;
}
body.cmplz-document.page-template-default #cmplz-document > :first-child {
    margin-top: 0;
}

/* Section headings, the document's own. */
body.cmplz-document.page-template-default #cmplz-document > h2,
body.cmplz-document.page-template-default #cmplz-document > h3 {
    margin: 32px 0 12px;
    font-family: var(--font-display, "commuters-sans"), sans-serif;
    font-weight: 500;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    color: var(--color-navy);
}
body.cmplz-document.page-template-default #cmplz-document > h2 {
    font-size: 32px;
}
body.cmplz-document.page-template-default #cmplz-document > h3 {
    font-size: 22px;
}

/* Links, all states. */
body.cmplz-document.page-template-default #cmplz-document a {
    color: var(--color-navy);
    text-decoration: underline;
    text-underline-offset: 2px;
    overflow-wrap: anywhere;
}
body.cmplz-document.page-template-default #cmplz-document a:hover {
    color: var(--color-accent);
}
body.cmplz-document.page-template-default #cmplz-document a:focus-visible {
    outline: 2px solid var(--color-accent);
    outline-offset: 3px;
}

/* Data request form. Colour and focus on the two visible text fields. The
   honeypot label and its input[type=search] are in no selector here. */
body.cmplz-document.page-template-default #cmplz-datarequest-form label {
    color: var(--color-navy);
}
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="text"],
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="email"] {
    color: var(--color-navy);
}
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="text"]:focus-visible,
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="email"]:focus-visible {
    border-color: var(--color-navy);
    outline: 2px solid var(--color-accent);
    outline-offset: 3px;
}

/* Submit control, all states. :focus precedes :hover so a hovered and focused
   control reads hover. The consent panel's toggle buttons are not in scope. */
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="button"] {
    background: var(--color-white);
    color: var(--color-navy);
    border: 1px solid var(--color-navy);
    border-radius: 4px;
    padding: 12px 28px;
    min-height: 44px;
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    transition: all 0.18s ease;
}
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="button"]:focus {
    background: var(--color-white);
    color: var(--color-navy);
    border-color: var(--color-navy);
}
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="button"]:hover,
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="button"]:active {
    background: var(--color-accent);
    color: var(--color-white);
    border-color: var(--color-accent);
}
body.cmplz-document.page-template-default #cmplz-datarequest-form input[type="button"]:focus-visible {
    outline: 2px solid var(--color-accent);
    outline-offset: 3px;
}

/* Cookie tables scroll inside their own box. Their grid has a fixed intrinsic
   width that exceeds a 375 viewport, and html and body clip on the x axis, so
   without this the right hand columns are unreachable at small widths. */
body.cmplz-document.page-template-default #cmplz-cookies-overview .cookies-per-purpose {
    overflow-x: auto;
}

/* Page title gutter. theme.css adds 10px inline padding to .page-header
   .entry-title below 768, which offsets the title from the document text. */
body.cmplz-document.page-template-default .page-header .entry-title {
    padding-inline: 0;
}

/* ==========================================================================
   REQUIRED FIELD MARKER
   A red asterisk after the label text of every field whose control carries
   the required attribute, on each of the theme's forms and on the Complianz
   data request form. Generated content with empty alternative text, so
   assistive technology reads the label and the control's required state and
   never the asterisk; the plain content line is the fallback for browsers
   without the alternative text syntax. The theme selectors match the control
   anywhere inside the label, because acme-select.js wraps a select in its own
   div. The red is the forms' error red.
   ========================================================================== */
.flex-cta__field:has(:required) > span::after,
.flex-contact__field:has(:required) > span::after,
.acme-contact-page__field:has(:required) > span::after,
.acme-auth__field:has(:required) > .acme-auth__label::after,
.acme-poc-form__field:has(:required) > .acme-poc-form__label::after,
#cmplz-datarequest-form div:has(> :required) > label::after {
    content: " *";
    content: " *" / "";
    color: #ef4444;
    font-weight: 700;
}

/* ==========================================================================
   PROOF SECTION: navy stats band. The section carries the stats band's
   fill and type colour, the heading and the stat labels take the site's
   light treatment, and the stat columns sit on the fill with the shared
   .flex-stats__grid classes. The schematic renders on its own layer as
   white line work (the image's navy lines through brightness(0) invert(1),
   the drop-shadow doubling their coverage), under the grid overlay, which
   takes the light pattern the other navy sections use.
   ========================================================================== */
html body .hp-proof {
    background-color: var(--color-navy);
    color: var(--color-white);
    isolation: isolate;
}
html body .hp-proof .hp-proof__heading {
    color: var(--color-white);
}
html body .hp-proof .flex-stats__label {
    color: rgba(255, 255, 255, 0.82);
}
html body .hp-proof .hp-proof__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    background-repeat: no-repeat;
    background-position: center center;
    background-size: cover;
    filter: brightness(0) invert(1) drop-shadow(0 0 0 var(--color-white));
    pointer-events: none;
}
body.has-grid .hp-proof::before {
    background-image:
        radial-gradient(circle at center, var(--grid-dot-light) var(--grid-dot-size), transparent calc(var(--grid-dot-size) + 0.5px)),
        radial-gradient(circle at center, var(--color-navy) calc(var(--grid-dot-size) + 2px), transparent calc(var(--grid-dot-size) + 2.5px)),
        linear-gradient(to right,  var(--grid-line-light) 1px, transparent 1px),
        linear-gradient(to bottom, var(--grid-line-light) 1px, transparent 1px);
}

/* ==========================================================================
   PROOF SCHEMATIC POSITION AND CTA PANEL FILL. Positions the schematic
   layer at 50% 44%. Fills the image clean CTA section and its visual with
   the navy; the section's light grid layer reads on the fill.
   ========================================================================== */
html body .hp-proof .hp-proof__bg {
    background-position: 50% 44%;
}
body.has-grid .hp-cta.hp-cta--image-clean,
html body .hp-cta.hp-cta--image-clean {
    background-color: var(--color-navy) !important;
}
body.has-grid .hp-cta.hp-cta--image-clean .hp-cta__visual,
html body .hp-cta.hp-cta--image-clean .hp-cta__visual {
    background-color: var(--color-navy) !important;
}

/* ==========================================================================
   HOMEPAGE QUALITY SECTION
   #hp-quality carries the .hp-about classes, so its box, grid overlay, column
   grid, headings and body type are the About rules as they stand. Only the
   list is its own: no disc, the timeline node as the marker (the base node's
   14px box; the light image variant's accent fill, white ring and glow),
   centred on the first line, 24px of indent, the paragraph gap between items.
   ========================================================================== */
html body .hp-quality__list {
    list-style: none;
    padding-left: 0;
}
html body .hp-quality__list > li {
    position: relative;
    padding-left: 24px;
    list-style: none;
}
html body .hp-quality__list > li + li {
    margin-top: 16px;
}
html body .hp-quality__list > li::before {
    content: "";
    position: absolute;
    left: 0;
    top: calc(0.8em - 7px);
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--color-accent);
    border: 2px solid var(--color-white);
    box-shadow: 0 0 10px rgba(46, 42, 158, 0.4);
}

/* ==========================================================================
   PROOF HEAD CENTRED AND SCHEMATIC AT 118%. Centres the eyebrow and the
   heading in the section; the heading keeps its width and takes auto side
   margins. Scales the schematic layer to 118% of the section width so the
   horizontal position has room, and sets it at 34% 40%.
   ========================================================================== */
html body .hp-proof .hp-proof__head {
    text-align: center;
}
html body .hp-proof .hp-proof__head > * {
    margin-left: auto;
    margin-right: auto;
}
html body .hp-proof .hp-proof__bg {
    background-size: 118% auto;
    background-position: 34% 40%;
}

/* ==========================================================================
   CAPABILITIES INTRO AND CARD LINKS. The intro sits under the section
   heading on the About body type (the unified body clamp, 1.6, 500, gray
   700), 30px below the heading as the About bodies are, on the 720px intro
   measure. A card whose Link URL is set carries the anchor on its title; the
   anchor's ::after stretches over the card, so the whole card is the link,
   and keyboard focus inside the card shows the hover state.
   ========================================================================== */
html body .hp-cap__intro {
    font-family: var(--font-body);
    font-size: clamp(16px, 0.3vw + 13.7px, 18px);
    line-height: 1.6;
    font-weight: 500;
    color: var(--color-gray-700);
    margin: 30px 0 0;
    max-width: 720px;
}
html body .hp-cap-card__link {
    color: inherit;
    text-decoration: none;
}
html body .hp-cap-card__link::after {
    content: "";
    position: absolute;
    inset: 0;
}
html body .hp-cap-card--linked:focus-within {
    background: var(--color-accent) !important;
}
html body .hp-cap-card--linked:focus-within .hp-cap-card__title { color: var(--color-white); }
html body .hp-cap-card--linked:focus-within .hp-cap-card__desc { color: rgba(255,255,255,0.88); }
html body .hp-cap-card--linked:focus-within .hp-cap-card__icon img { filter: brightness(0) invert(1); }
html body .hp-cap-card--linked:focus-within .hp-cap-card__arrow { opacity: 1 !important; }

/* ==========================================================================
   CONTACT FORMS: NOTICE REGION, FIELD ERRORS AND BUSY STATE
   The notice region is always in the DOM (a live region) and takes no space
   while empty. A field that fails validation carries is-invalid on its label,
   the control's border takes the forms' error red, and the message sits under
   the control at the label size. The submit button while a request is in
   flight. Colours, radii and type sizes are the forms' existing ones.
   ========================================================================== */
.acme-form-notice:empty { display: none; }
.acme-form-notice:focus,
.acme-form-notice:focus-visible { outline: none; box-shadow: none; }
.acme-form-notice a { color: inherit; text-decoration: underline; }
.acme-field-error {
    display: block;
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
}
/* The required marker rule above matches every span in the label. */
.acme-field-error::after { content: none !important; }
.acme-contact-page__field .acme-field-error { color: #dc2626; }
.acme-contact-page__field.is-invalid input,
.acme-contact-page__field.is-invalid textarea,
.acme-contact-page__form .acme-contact-page__field.is-invalid .acme-select__trigger {
    border-color: rgba(239, 68, 68, 0.35);
}
.acme-contact-page__submit:disabled,
.flex-cta__submit:disabled,
.flex-contact__submit:disabled {
    cursor: progress;
    opacity: 0.7;
}
/* The form anchors the non JavaScript submit lands on clear the fixed
   header, the anchored heading offset above. */
.acme-contact-page__right[id],
.flex-cta__split-content[id],
.flex-cta__form-wrap[id],
.flex-contact__form-wrap[id] {
    scroll-margin-top: 120px;
}

/* ==========================================================================
   REQUEST ACCESS FORM: the sign-in card with four fields, a two-up name row
   at desktop, the notice region and field errors on the navy card, and a
   second meta line under the form. Colours, radii and type sizes are the
   auth page's existing ones; the error red is the forms' red.
   ========================================================================== */
.acme-auth__row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}
.acme-auth__success {
    padding: 12px 16px;
    border-radius: 6px;
    font-size: 14px;
    line-height: 1.4;
    margin: 0 0 20px;
    font-weight: 500;
    background: rgba(34, 197, 94, 0.12);
    border: 1px solid rgba(34, 197, 94, 0.35);
    color: #bbf7d0;
}
.acme-auth__field .acme-field-error { color: #fecaca; }
.acme-auth__field.is-invalid input {
    border-color: rgba(239, 68, 68, 0.55);
}
.acme-auth__submit:disabled {
    cursor: progress;
    opacity: 0.7;
}
.acme-auth__meta + .acme-auth__meta { margin-top: 10px; }
.acme-auth__meta-sep { margin: 0 6px; }
.acme-auth__card[id] { scroll-margin-top: 120px; }
@media (max-width: 480px) {
    .acme-auth__row { grid-template-columns: 1fr; }
}

/* ==========================================================================
   ACCOUNT CARD VIEWS — the set password view on /login/: core's strength
   meter result, the weak password confirmation, the password hint and the
   save button while it waits for a stronger password or the confirmation.
   Colours, radii and type sizes are the auth card's own; the meter tints
   follow the error and success tints above.
   ========================================================================== */
.acme-auth__strength {
    margin: -6px 0 0;
    padding: 8px 12px;
    border-radius: 6px;
    border: 1px solid rgba(255, 255, 255, 0.14);
    background: rgba(255, 255, 255, 0.05);
    color: rgba(255, 255, 255, 0.75);
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
}
.acme-auth__strength.short {
    background: rgba(239, 68, 68, 0.12);
    border-color: rgba(239, 68, 68, 0.35);
    color: #fecaca;
}
.acme-auth__strength.bad {
    background: rgba(249, 115, 22, 0.12);
    border-color: rgba(249, 115, 22, 0.35);
    color: #fed7aa;
}
.acme-auth__strength.good {
    background: rgba(234, 179, 8, 0.12);
    border-color: rgba(234, 179, 8, 0.35);
    color: #fef08a;
}
.acme-auth__strength.strong {
    background: rgba(34, 197, 94, 0.12);
    border-color: rgba(34, 197, 94, 0.35);
    color: #bbf7d0;
}
.acme-auth__strength[hidden],
.acme-auth__weak[hidden] {
    display: none;
}
.acme-auth__weak {
    display: flex;
    align-items: center;
    gap: 10px;
    font-family: var(--font-body);
    font-size: 14px;
    color: rgba(255, 255, 255, 0.85);
}
.acme-auth__weak input[type="checkbox"] {
    width: 18px;
    height: 18px;
    margin: 0;
    flex: 0 0 auto;
    accent-color: var(--color-white);
}
.acme-auth__weak label {
    cursor: pointer;
}
.acme-auth__hint {
    margin: -4px 0 0;
    font-family: var(--font-body);
    font-size: 13px;
    line-height: 1.5;
    color: rgba(255, 255, 255, 0.6);
}
.acme-auth__form--reset .acme-auth__submit:disabled {
    cursor: not-allowed;
    opacity: 0.5;
}

/* ==========================================================================
   VIDEO SLOT. One component for every video slot (homepage About, and the
   split_body and services flexible layouts). The markup exists only when a
   slot is filled, so nothing here reaches a page without one. Full width of
   its container at 16:9; the play button and the consent placeholder fill
   the box. Buttons are scoped at (0,2,0) and their states at (0,3,0) so the
   parent theme's reset.css button rules do not apply.
   ========================================================================== */
.acme-video {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    background: var(--color-navy);
}
.acme-video > iframe,
.acme-video > video {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
}
.acme-video > iframe[hidden] { display: none; }
.acme-video > video {
    background: #000;
    object-fit: contain;
}
.acme-video .acme-video__play {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: radial-gradient(ellipse at center, var(--color-navy-light) 0%, var(--color-navy) 72%);
    color: var(--color-white);
    font: inherit;
    white-space: normal;
    cursor: pointer;
    transition: none;
    overflow: hidden;
}
.acme-video .acme-video__play:hover,
.acme-video .acme-video__play:focus,
.acme-video .acme-video__play:active {
    background: radial-gradient(ellipse at center, var(--color-navy-light) 0%, var(--color-navy) 72%);
    color: var(--color-white);
}
.acme-video .acme-video__play:focus { outline: none; }
.acme-video .acme-video__play:focus-visible {
    outline: 3px solid var(--color-white);
    outline-offset: -6px;
}
.acme-video .acme-video__play:focus-visible::after {
    box-shadow: inset 0 0 0 4px var(--color-white), inset 0 0 0 8px var(--color-accent);
}
.acme-video .acme-video__thumb {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    max-width: none;
    object-fit: cover;
}
.acme-video .acme-video__play::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(6, 1, 67, 0) 45%, rgba(6, 1, 67, 0.32) 100%);
    pointer-events: none;
}
.acme-video .acme-video__icon {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 88px;
    height: 88px;
    border-radius: 50%;
    background: var(--color-accent);
    box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.9), 0 8px 28px rgba(6, 1, 67, 0.35);
    transition: transform 0.2s ease, background-color 0.2s ease;
}
.acme-video .acme-video__icon svg {
    display: block;
    width: 32px;
    height: 32px;
    margin-left: 4px;
    fill: var(--color-white);
}
.acme-video .acme-video__play:hover .acme-video__icon {
    background: var(--color-navy);
    transform: scale(1.06);
}
.acme-video .acme-video__play:focus-visible .acme-video__icon {
    box-shadow: 0 0 0 4px var(--color-white), 0 0 0 7px var(--color-accent);
}
.acme-video .acme-video__sr {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}
.acme-video .acme-video__consent {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 18px;
    padding: 24px 32px;
    text-align: center;
    background: rgba(6, 1, 67, 0.92);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.32);
    color: var(--color-white);
}
.acme-video .acme-video__consent-text {
    margin: 0;
    max-width: 36em;
    font-family: var(--font-body);
    font-size: clamp(14px, 0.3vw + 12.5px, 17px);
    font-weight: 500;
    line-height: 1.5;
    color: var(--color-white);
}
.acme-video .acme-video__consent-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto;
    min-height: 44px;
    margin: 0;
    padding: 12px 28px;
    border: 1px solid var(--color-white);
    border-radius: 4px;
    background: var(--color-white);
    color: var(--color-navy);
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 700;
    line-height: 1;
    white-space: normal;
    cursor: pointer;
    transition: background-color 0.18s ease, color 0.18s ease;
}
.acme-video .acme-video__consent-btn:hover,
.acme-video .acme-video__consent-btn:focus,
.acme-video .acme-video__consent-btn:active {
    background: transparent;
    color: var(--color-white);
    border-color: var(--color-white);
}
.acme-video .acme-video__consent-btn:focus-visible {
    outline: 3px solid var(--color-white);
    outline-offset: 3px;
}
/* Link to the video's own site, printed inside <noscript>: covers the box when scripts do not run. */
.acme-video .acme-video__nojs {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding: 0 16px 20px;
    color: var(--color-navy);
    text-decoration: none;
}
.acme-video .acme-video__nojs span {
    display: inline-block;
    padding: 10px 18px;
    border-radius: 4px;
    background: var(--color-white);
    color: var(--color-navy);
    font-family: var(--font-body);
    font-size: 15px;
    font-weight: 700;
    line-height: 1.2;
    text-decoration: underline;
}
.acme-video .acme-video__nojs:focus-visible span {
    outline: 3px solid var(--color-white);
    outline-offset: 3px;
}
@media (max-width: 600px) {
    .acme-video .acme-video__nojs { padding: 0 12px 12px; }
    .acme-video .acme-video__nojs span { padding: 8px 14px; font-size: 14px; }
}
@media (max-width: 600px) {
    .acme-video .acme-video__icon { width: 64px; height: 64px; }
    .acme-video .acme-video__icon svg { width: 24px; height: 24px; margin-left: 3px; }
    .acme-video .acme-video__consent { gap: 10px; padding: 12px 16px; }
    .acme-video .acme-video__consent-text { font-size: 13px; line-height: 1.4; }
    .acme-video .acme-video__consent-btn { min-height: 40px; padding: 10px 18px; font-size: 14px; }
}
@media (prefers-reduced-motion: reduce) {
    .acme-video .acme-video__icon,
    .acme-video .acme-video__consent-btn { transition: none; }
}

/* ==========================================================================
   FOOTER WITHOUT A CONTACT COLUMN, HEADER CLICK THROUGH, IMAGE DRAG,
   MANAGE CONSENT TAB
   ========================================================================== */

/* Footer grid when no contact email or phone is set: brand plus two link
   columns on desktop; on tablets the brand takes the first row and the two
   link columns share the second. Phones keep the single column. */
@media (min-width: 901px) {
    .footer-grid.footer-grid--no-contact { grid-template-columns: 1.8fr 1fr 1fr; }
}
@media (min-width: 601px) and (max-width: 900px) {
    .footer-grid.footer-grid--no-contact .footer-brand { grid-column: 1 / -1; }
}

/* The fixed header passes pointer events through its transparent area; the
   visible bar, and the menus and burger panel inside it, take them. */
.site-header { pointer-events: none; }
.site-header .header-inner { pointer-events: auto; }

/* Images are not dragged (WebKit and Blink; assets/no-drag.js covers the
   rest). */
img { -webkit-user-drag: none; }

/* Complianz "Manage consent" tab: the label capitalised and a navy edge so
   the white tab shows on white pages. */
html body #cmplz-manage-consent .cmplz-manage-consent {
    border: 2px solid var(--color-navy, #060143);
    border-bottom: 0;
    text-transform: capitalize;
}

/* ==========================================================================
   CONTACT PAGE: ADDRESS UNDER THE FORM
   The right column stacks the form card and an address row: the address
   (left) and a LinkedIn button (right) between two hairlines, with the
   About Us contact band's type and spacing. On phones the button sits under
   the address. On screens up to 900px wide the copy sits at the foot of the
   image band, right above the form.
   ========================================================================== */
.acme-contact-page__stack {
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: 520px;
}
.acme-contact-page__address-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    margin-top: 28px;
    padding: 20px 0;
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
    color: var(--color-white);
}
.acme-contact-page__address {
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1;
    min-width: 0;
}
.acme-contact-page__address-label {
    font-family: var(--font-display);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.55);
}
.acme-contact-page__address-value {
    font-family: var(--font-body);
    font-size: 15px;
    line-height: 1.45;
    color: var(--color-white);
}
html body .acme-contact-page__linkedin {
    display: inline-flex !important;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}
.acme-contact-page__linkedin svg {
    width: 16px;
    height: 16px;
    fill: currentColor;
    flex-shrink: 0;
}
@media (max-width: 900px) {
    html body .acme-contact-page__left { justify-content: flex-end; }
}
@media (max-width: 560px) {
    .acme-contact-page__address-row {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
    }
}
