/* =============================================================================
   VOY Search Partners - custom design CSS
   Translated from the Figma design (fileKey XGzazVQLpm6SnUDtELPIVi, node 269:114).
   Fonts: Hedvig Letters Serif (headings) + Inter (body), loaded from Google Fonts
   via functions.php (voy_enqueue_styles).
   ============================================================================= */

/* -----------------------------------------------------------------------------
   1. Design tokens  (confirmed against Figma layers via MCP)
   -------------------------------------------------------------------------- */
:root {
	/* Color */
	--voy-cream:        #F4F2ED; /* page background */
	--voy-navy:         #1A2536; /* contact section + footer */
	--voy-accent:       #E8F988; /* lime: buttons, highlighted card, icons */
	--voy-accent-ink:   #1A2536; /* text on lime */
	--voy-white:        #FFFFFF; /* cards */
	--voy-border:       #E2E0D9; /* card outlines / hairlines */
	--voy-border-rule:  #D9D9D9; /* Figma's "Line" nodes — card top/bottom edges + the focus-list divider run cooler than the card outline */
	--voy-text:         #1A1A1A; /* headings + body on light */
	--voy-text-invert:  #F4F2ED; /* text on navy */
	--voy-muted:        #6B6B6B; /* sub-text */
	--voy-muted-invert: #9BA3AF; /* muted text on navy */
	--voy-eyebrow-color: #1A2536; /* eyebrow labels on light sections (verified vs Figma REST node fills: navy, not muted grey) */
	--voy-blue-accent:  #09347B; /* testimonials-only eyebrow + role color, verified vs Figma REST node fills */

	/* Type */
	--voy-font-heading: "Hedvig Letters Serif", Georgia, "Times New Roman", serif;
	--voy-font-body:    "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;

	/* Fluid heading sizes (design canvas 1440px) */
	--voy-h1:  clamp(2.75rem, 5.9vw, 5.3125rem); /* hero ~85px */
	--voy-h2:  clamp(2rem, 4.1667vw, 3.75rem);   /* section H2 60px @1440 (verified vs Figma REST fills on Home + Desktop-6: About/Expertise both 60px, not 52px) */
	--voy-h3:  clamp(1.375rem, 1.9444vw, 1.75rem); /* card / row titles, 28px @1440 (verified vs Figma: expertise row titles) */
	--voy-eyebrow: 0.8125rem;                    /* ~13px uppercase eyebrow */

	/* Layout */
	--voy-content-max: 1380px; /* content column */
	--voy-gutter:      30px;    /* side gutter */
	--voy-radius:      16px;    /* card radius */
	--voy-radius-pill: 999px;
	--voy-section-y:   clamp(3.5rem, 7vw, 6.5rem);
}

/* -----------------------------------------------------------------------------
   2. Base typography
   -------------------------------------------------------------------------- */
body,
.container-wrap,
#page-header-bg .inner-wrap h1,
p {
	font-family: var(--voy-font-body);
}

body {
	background-color: var(--voy-cream);
	color: var(--voy-text);
	font-family: var(--voy-font-body);
	font-size: 18px;
	line-height: 1.31;
	-webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6,
.nectar-fancy-box h3,
.wpb_wrapper h1, .wpb_wrapper h2, .wpb_wrapper h3 {
	font-family: var(--voy-font-heading);
	color: var(--voy-text);
	font-weight: 400;
	letter-spacing: -0.01em;
}

h1 { font-size: var(--voy-h1); line-height: 1.01; }
h2 { font-size: var(--voy-h2); line-height: 1.06; }
h3 { font-size: var(--voy-h3); line-height: 1.15; }

p { color: var(--voy-text); }

a { color: inherit; }

/* Eyebrow label with small triangular glyph (verified vs Figma REST fillGeometry:
   a scalene triangle rotated 32deg, filled with the eyebrow's own text color, not
   the lime accent — same vector node id reused before every eyebrow sitewide). */
.voy-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	font-family: var(--voy-font-body);
	font-size: var(--voy-eyebrow);
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--voy-eyebrow-color);
	margin-bottom: 1rem;
}
.voy-eyebrow::before {
	content: "";
	width: 0.62em;
	height: 0.5em;
	background: currentColor;
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E");
	mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E");
	-webkit-mask-repeat: no-repeat;
	mask-repeat: no-repeat;
	-webkit-mask-size: 100% 100%;
	mask-size: 100% 100%;
	transform: rotate(32deg);
	display: inline-block;
	flex-shrink: 0;
}

/* -----------------------------------------------------------------------------
   3. Layout helpers
   -------------------------------------------------------------------------- */
.voy-section { padding-block: var(--voy-section-y); }
.voy-section--cream { background: var(--voy-cream); }
.voy-section--white { background: var(--voy-white); }
.voy-section--navy  { background: var(--voy-navy); color: var(--voy-text-invert); }
.voy-section--navy h1,
.voy-section--navy h2,
.voy-section--navy h3,
.voy-section--navy p { color: var(--voy-text-invert); }
.voy-section--navy .voy-eyebrow { color: var(--voy-text-invert); } /* Figma fill on navy-section eyebrows (Areas of Expertise, Testimonials on D3) is pure white, not the muted grey */

/* -----------------------------------------------------------------------------
   4. Buttons / pills
   -------------------------------------------------------------------------- */
.voy-btn {
	display: inline-flex;
	align-items: center;
	gap: 0.6em;
	padding: 0.9em 1.6em;
	border-radius: var(--voy-radius-pill);
	font-family: var(--voy-font-body);
	font-size: 1rem;
	font-weight: 500; /* verified vs Figma REST fontWeight on Home: About Us/Contact Us/Submit all 500, not 600 */
	line-height: 1;
	text-decoration: none;
	transition: transform .2s ease, background-color .2s ease, color .2s ease;
	cursor: pointer;
	border: none;
}
.voy-btn:hover { transform: translateY(-1px); }

.voy-btn--accent { background: var(--voy-accent); color: var(--voy-accent-ink); }
.voy-btn--accent:hover { background: #dff275; }

/* Label is pure white, NOT the cream --voy-text-invert used for body copy on
   navy: all eight frames carrying this button fill it #FFFFFF. */
.voy-btn--dark { background: var(--voy-navy); color: #FFFFFF; }
.voy-btn--dark:hover { background: #232f45; }

/* circular arrow chip that sits inside dark pills */
.voy-btn__chip {
	display: inline-grid;
	place-items: center;
	width: 1.9em;
	height: 1.9em;
	border-radius: 50%;
	background: var(--voy-accent);
	color: var(--voy-accent-ink);
}

/* -----------------------------------------------------------------------------
   5. Cards (Markets We Serve + Functional Expertise)
   -------------------------------------------------------------------------- */
.voy-card {
	background: var(--voy-white);
	border: 1px solid var(--voy-border);
	border-radius: var(--voy-radius);
	padding: 1.75rem;
}
.voy-card--accent { background: var(--voy-accent); border-color: var(--voy-accent); }

/* icon circle used on cards + contact rows */
.voy-icon-circle {
	display: inline-grid;
	place-items: center;
	width: 3.25rem;
	height: 3.25rem;
	border-radius: 50%;
	background: var(--voy-accent);
	color: var(--voy-accent-ink);
	margin-bottom: 1.25rem;
}

/* -----------------------------------------------------------------------------
   6. Contact form (WPForms) inside the navy section
   -------------------------------------------------------------------------- */
/* Two-column field layout: Name | Surname, Phone | Email, Message full-width. */
.voy-contact .wpforms-field-container {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(1.25rem, 2.5vw, 2rem);
}
.voy-contact .wpforms-field {
	margin: 0 !important;
	padding: 0 !important;
	max-width: none !important;
	float: none !important;
	width: auto !important;
}
.voy-contact .wpforms-field-textarea { grid-column: 1 / -1; }

/* Force light labels on the navy panel — WPForms' own stylesheet sets a dark
   label color (and label CSS variables) that otherwise wins on specificity. */
.voy-contact {
	--wpforms-label-color: #F4F2ED;
	--wpforms-label-color-sublabel: rgba(244,242,237,0.7);
}
.voy-contact .wpforms-field-label,
.voy-contact .wpforms-field-label-inline,
.voy-contact .wpforms-form label {
	color: var(--voy-text-invert) !important;
	font-weight: 600;
	font-size: 0.95rem;
	margin-bottom: 0.4rem;
}
.voy-contact .wpforms-field-sublabel,
.voy-contact .wpforms-field-description {
	color: var(--voy-muted-invert) !important;
}
.voy-contact .wpforms-required-label { color: var(--voy-accent) !important; }

/* Underline-only inputs on the navy field (matches Figma). */
.voy-contact .wpforms-form input.wpforms-field-medium,
.voy-contact .wpforms-form input[type="text"],
.voy-contact .wpforms-form input[type="email"],
.voy-contact .wpforms-form input[type="tel"],
.voy-contact .wpforms-form select,
.voy-contact .wpforms-form textarea {
	background: transparent !important;
	border: 0 !important;
	border-bottom: 1px solid rgba(255, 255, 255, 0.28) !important;
	border-radius: 0 !important;
	color: var(--voy-text-invert) !important;
	font-family: var(--voy-font-body);
	font-size: 1rem;
	padding: 0.7em 0 !important;
	box-shadow: none !important;
	width: 100% !important;
	max-width: none !important;
}
.voy-contact .wpforms-form select option { color: #1A1A1A; }
.voy-contact .wpforms-form textarea { min-height: 96px; resize: vertical; }
.voy-contact .wpforms-form input:focus,
.voy-contact .wpforms-form textarea:focus {
	border-bottom-color: var(--voy-accent) !important;
	outline: none !important;
}
.voy-contact .wpforms-form input::placeholder,
.voy-contact .wpforms-form textarea::placeholder { color: var(--voy-muted-invert); opacity: 1; }

/* Lime full-width submit (override Salient button styles). */
.voy-contact .wpforms-submit-container { margin-top: clamp(1.5rem, 3vw, 2.25rem); }
.voy-contact .wpforms-form button[type="submit"],
.voy-contact .wpforms-form button.wpforms-submit,
.voy-contact .wpforms-form input[type="submit"] {
	background: var(--voy-accent) !important;
	background-image: none !important;
	color: var(--voy-navy) !important;
	border: none !important;
	border-radius: var(--voy-radius-pill) !important;
	font-family: var(--voy-font-body) !important;
	font-weight: 600 !important;
	font-size: 1rem !important;
	width: 100% !important;
	padding: 1.05em 1.5em !important;
	text-transform: none !important;
	box-shadow: none !important;
	transition: background 0.2s ease;
}
.voy-contact .wpforms-form button[type="submit"]:hover,
.voy-contact .wpforms-form button.wpforms-submit:hover,
.voy-contact .wpforms-form input[type="submit"]:hover { background: #dff275 !important; }

/* -----------------------------------------------------------------------------
   7. Client logo carousel (grayscale marquee)
   -------------------------------------------------------------------------- */
.voy-logos {
	position: relative;
	display: flex;
	width: 100%;
	overflow: hidden;
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%);
	        mask-image: linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%);
}
.voy-logos__track {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	gap: clamp(2.5rem, 5vw, 5rem);
	margin: 0;
	padding: 0 clamp(2.5rem, 5vw, 5rem) 0 0;
	list-style: none;
	animation: voy-logos-scroll 40s linear infinite;
	will-change: transform;
}
.voy-logos:hover .voy-logos__track { animation-play-state: paused; }
.voy-logos__cell { flex: 0 0 auto; display: flex; align-items: center; }
.voy-logos__img {
	height: 26px;
	width: auto;
	max-width: none;
	filter: grayscale(1);
	opacity: 0.55;
	transition: opacity .2s ease;
}
.voy-logos__cell:hover .voy-logos__img { opacity: 0.9; }
@keyframes voy-logos-scroll {
	from { transform: translateX(0); }
	to   { transform: translateX(-100%); }
}
@media (prefers-reduced-motion: reduce) {
	.voy-logos__track { animation: none; }
	.voy-logos { flex-wrap: wrap; justify-content: center; -webkit-mask-image: none; mask-image: none; }
	.voy-logos__track--dup { display: none; }
	.voy-logos__track { flex-wrap: wrap; justify-content: center; gap: 2.5rem 3rem; }
}

/* -----------------------------------------------------------------------------
   8. Footer wordmark
   -------------------------------------------------------------------------- */
.voy-footer-wordmark {
	font-family: var(--voy-font-heading);
	font-size: clamp(3rem, 12vw, 12rem);
	line-height: 0.9;
	letter-spacing: -0.02em;
	text-align: center;
	background: linear-gradient(180deg, #cfd3da 0%, #8b929c 60%, #6c7380 100%);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

/* -----------------------------------------------------------------------------
   9. Container
   -------------------------------------------------------------------------- */
.voy-container {
	width: 100%;
	max-width: calc(var(--voy-content-max) + var(--voy-gutter) * 2);
	margin-inline: auto;
	padding-inline: var(--voy-gutter);
}

/* -----------------------------------------------------------------------------
   10. Hero
   -------------------------------------------------------------------------- */
.voy-hero {
	position: relative;
	display: flex;
	align-items: stretch;
	min-height: 88vh;
	padding-block: clamp(7rem, 13vh, 10rem);
	background-color: var(--voy-navy);
	overflow: hidden;
	isolation: isolate;
}
/* Background image layer, mirrored horizontally to match the V2 Figma design
   (transform: matrix(-1,0,0,1,0,0)) so the dark slats sit on the left behind
   the copy and the warm slats reveal on the right. */
.voy-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -2;
	background-image: var(--voy-hero-bg);
	background-size: var(--voy-hero-bg-size, cover);
	background-position: var(--voy-hero-bg-pos, center center);
	background-repeat: no-repeat;
	transform: var(--voy-hero-bg-flip, scaleX(-1));
	/* Figma stores per-image adjustments on the fill (`imageFilters`); the block
	   translates them into this property. Safe to apply here and nowhere else:
	   this layer paints the photograph and nothing else. */
	filter: var(--voy-hero-photo-filter, none);
}
/* Navy scrim: strong on the left (behind text), fading toward the image on the right. */
.voy-hero__scrim {
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		linear-gradient(90deg, rgba(26,37,54,0.92) 0%, rgba(26,37,54,0.72) 32%, rgba(26,37,54,0.30) 58%, rgba(26,37,54,0.05) 82%),
		linear-gradient(0deg, rgba(26,37,54,0.35) 0%, rgba(26,37,54,0) 40%);
}
/* Content column: title anchored to the top, sub-copy + CTA to the bottom
   (Figma V2 hero). */
.voy-hero__inner {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: space-between;
	gap: clamp(2.5rem, 6vh, 5rem);
}
.voy-hero__title {
	color: var(--voy-white);
	font-size: var(--voy-h1); /* Figma hero heading = 85px at 1440 design width */
	line-height: 1.01;
	letter-spacing: 0;
	max-width: 8.6em;
	margin: 0;
}
.voy-hero__foot { max-width: 30ch; }
.voy-hero__sub {
	color: rgba(255,255,255,0.82);
	font-size: 1.0625rem;
	line-height: 1.5;
	max-width: 30ch;
	margin: 0 0 1.75rem;
}
.voy-hero__actions { display: flex; flex-wrap: wrap; gap: 1rem; }

/* -------- Background slider ------------------------------------------------
   Real <img> slides rather than a CSS background, so WordPress can hand the
   browser a srcset and let it choose the file. They sit on the same layer the
   ::before background used (z-index -2, under the scrim at -1) and carry the
   same horizontal mirror, so a single-image hero and slide 1 of a slider frame
   identically.
   -------------------------------------------------------------------------- */
.voy-hero__slides {
	position: absolute;
	inset: 0;
	z-index: -2;
	overflow: hidden;
}
.voy-hero--slider::before { display: none; }   /* the slides replace it */
/* Two classes deep on purpose: Salient's `.main-content img { height: auto }` is
   (0,1,1) and would otherwise beat a single-class rule, letting the <img> fall
   back to its intrinsic ratio — a 1920x825 hero then painted only 619px of the
   841px band and left navy underneath. */
.voy-hero__slides .voy-hero__slide {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: center center;
	transform: scaleX(-1);
	opacity: 0;
	transition: opacity 1.2s ease;
	will-change: opacity;
}
.voy-hero__slides .voy-hero__slide.is-active { opacity: 1; }
.voy-hero__slides .voy-hero__slide {
	filter: var(--voy-hero-photo-filter, none);
}
@media (prefers-reduced-motion: reduce) {
	.voy-hero__slides .voy-hero__slide { transition: none; }
}

/* Arrows and dots are off unless the block's toggles are on; both are absolutely
   positioned so turning them on cannot move the hero copy.
   Salient styles every <button> on the page — `body[data-button-style*="slightly_rounded"]
   button` forces `border-radius: 4px !important`, and its button padding/min-width
   would square these off — so the shape properties are restated at !important. */
.voy-hero .voy-hero__arrow {
	position: absolute;
	top: 50%;
	z-index: 2;
	display: inline-grid;
	place-items: center;
	width: 48px !important;
	height: 48px !important;
	min-width: 0 !important;
	margin-top: -24px;
	padding: 0 !important;
	border: 1px solid rgba(255, 255, 255, 0.45) !important;
	border-radius: 50% !important;
	background: rgba(26, 37, 54, 0.35) !important;
	box-shadow: none !important;
	color: #FFFFFF;
	line-height: 1;
	cursor: pointer;
	transition: background 0.2s ease, border-color 0.2s ease;
}
.voy-hero .voy-hero__arrow:hover {
	background: rgba(26, 37, 54, 0.62) !important;
	border-color: #FFFFFF !important;
	transform: none !important;      /* Salient lifts buttons 3px on hover */
}
.voy-hero .voy-hero__arrow svg { width: 20px; height: 20px; }
.voy-hero .voy-hero__arrow--prev { left: clamp(12px, 2vw, 30px); }
.voy-hero .voy-hero__arrow--next { right: clamp(12px, 2vw, 30px); }
.voy-hero__dots {
	position: absolute;
	left: 0;
	right: 0;
	bottom: clamp(16px, 3vh, 34px);
	z-index: 2;
	display: flex;
	justify-content: center;
	gap: 10px;
}
.voy-hero .voy-hero__dot {
	width: 9px !important;
	height: 9px !important;
	min-width: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	border-radius: 50% !important;
	background: rgba(255, 255, 255, 0.45) !important;
	box-shadow: none !important;
	cursor: pointer;
	transition: background 0.2s ease, transform 0.2s ease;
}
.voy-hero .voy-hero__dot:hover { transform: none !important; }
.voy-hero .voy-hero__dot.is-active {
	background: var(--voy-accent) !important;
	transform: scale(1.25) !important;
}

/* Salient transparent header sits over the hero; give hero top breathing room. */
body .voy-hero { margin-top: 0; }

@media (max-width: 999px) {
	.voy-hero__inner { max-width: 100%; }
	.voy-hero__title { max-width: 14ch; }
	.voy-hero__scrim {
		background: linear-gradient(90deg, rgba(26,37,54,0.92) 0%, rgba(26,37,54,0.7) 60%, rgba(26,37,54,0.5) 100%);
	}
}

/* -----------------------------------------------------------------------------
   11. Full-width landing template (neutralize Salient container/padding)
   -------------------------------------------------------------------------- */
.voy-landing-wrap,
.voy-landing-wrap > .main-content,
.voy-landing-wrap > .main-content > .row {
	width: 100% !important;
	max-width: none !important;
	margin: 0 !important;
	padding: 0 !important;
}
.voy-landing-wrap .row:before,
.voy-landing-wrap .row:after { display: none !important; }
/* Each VOY section spans the full width; inner .voy-container bounds the content. */
.voy-landing-wrap .voy-section { width: 100%; }

/* Logo carousel section */
.voy-logos-section { padding-block: clamp(2.75rem, 5vw, 4.5rem); }
/* Desktop-3 used to render a standalone heading section above the reused
   [voy_partners] marquee; it is one grid section now (voy_partners layout="grid"),
   and the id-scoped padding/centring that supported the old shape outranked the
   d3 rhythm block from here. */
.voy-logos__subtitle {
	font-family: var(--voy-font-body);
	font-size: 1rem;
	color: var(--voy-muted);
	max-width: 560px;
	margin: 0.75rem auto 0;
}
/* Eyebrow label — Figma: Inter 600, 12px, line-height 105%, letter-spacing 10%, uppercase, centered. */
.voy-logos__title {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 12px;
	line-height: 1.05;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	/* Pure #000000 on all ten frames that carry this strip, not the #1A1A1A
	   --voy-text token used for headings. */
	color: #000000;
	text-align: center;
	margin: 0 0 clamp(1.75rem, 3vw, 2.75rem);
}
.voy-logos__item {
	font-family: var(--voy-font-body);
	font-weight: 700;
	font-size: 1.35rem;
	letter-spacing: 0.02em;
	color: #6a6f78;
	opacity: 0.7;
	white-space: nowrap;
	transition: opacity .2s ease;
}
.voy-logos__item:hover { opacity: 1; }

/* -----------------------------------------------------------------------------
   12. About section
   -------------------------------------------------------------------------- */
.voy-about__intro {
	max-width: 720px;
	margin-inline: auto;
	text-align: center;
}
.voy-about__intro .voy-eyebrow { justify-content: center; }
.voy-about__title { margin: 0 0 1.25rem; }
.voy-about__body { color: var(--voy-muted); font-size: 1.0625rem; line-height: 1.55; margin: 0; }
.voy-about__media { margin: clamp(2.5rem, 5vw, 4rem) 0 0; }
.voy-about__img {
	display: block;
	width: 100%;
	height: clamp(320px, 42vw, 560px);
	object-fit: cover;
	border-radius: var(--voy-radius);
}

/* -----------------------------------------------------------------------------
   13. Markets We Serve (bordered icon-card grid)
   -------------------------------------------------------------------------- */
.voy-markets__head { text-align: center; max-width: 720px; margin: 0 auto clamp(2rem, 4vw, 3rem); }
.voy-markets__head .voy-eyebrow { justify-content: center; }
/* D4/D5 "Markets We Serve" is left-aligned in Figma, not centered like the default (which was only ever verified against Home, where this heading is empty) */
.voy-markets__head--tall,
.voy-markets__head--grid { text-align: left; max-width: none; margin: 0 0 clamp(2rem, 4vw, 3rem); }
.voy-markets__head--tall .voy-eyebrow,
.voy-markets__head--grid .voy-eyebrow { justify-content: flex-start; }
.voy-markets__grid {
	display: grid;
	grid-template-columns: repeat(var(--voy-cols, 4), 1fr);
	background: var(--voy-white);
	border: 1px solid var(--voy-border);
	border-radius: var(--voy-radius);
	overflow: hidden;
}
.voy-market-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 1.1rem;
	padding: clamp(2rem, 3.2vw, 3rem) 1rem;
	text-align: center;
	border-right: 1px solid var(--voy-border);
	border-bottom: 1px solid var(--voy-border);
}
/* Remove right border on last column, bottom border on last row (4-col, 8-item). */
.voy-markets__grid[style*="--voy-cols:4"] .voy-market-card:nth-child(4n) { border-right: 0; }
.voy-markets__grid[style*="--voy-cols:4"] .voy-market-card:nth-last-child(-n+4) { border-bottom: 0; }
.voy-market-card__icon { color: var(--voy-navy); display: inline-flex; }
.voy-market-card__label {
	font-family: var(--voy-font-body);
	font-size: 1.0625rem;
	font-weight: 500;
	color: var(--voy-text);
}
/* Highlighted card */
.voy-market-card.is-highlight { background: var(--voy-accent); }
.voy-market-card.is-highlight .voy-market-card__label { color: var(--voy-accent-ink); }
.voy-market-card__badge {
	display: inline-grid;
	place-items: center;
	width: 46px;
	height: 46px;
	border-radius: 50%;
	background: var(--voy-navy);
	color: #fff;
}

@media (max-width: 900px) {
	.voy-markets__grid { grid-template-columns: repeat(2, 1fr) !important; }
	.voy-markets__grid .voy-market-card { border-right: 1px solid var(--voy-border) !important; border-bottom: 1px solid var(--voy-border) !important; }
	.voy-markets__grid .voy-market-card:nth-child(2n) { border-right: 0 !important; }
	.voy-markets__grid .voy-market-card:nth-last-child(-n+2) { border-bottom: 0 !important; }
}
@media (max-width: 520px) {
	.voy-markets__grid { grid-template-columns: 1fr !important; }
	.voy-markets__grid .voy-market-card { border-right: 0 !important; }
}

/* -----------------------------------------------------------------------------
   14. Functional Expertise
   -------------------------------------------------------------------------- */
.voy-expertise__head {
	display: grid;
	grid-template-columns: 1.1fr 0.9fr;
	gap: clamp(1.5rem, 4vw, 4rem);
	align-items: end;
	margin-bottom: clamp(2.5rem, 5vw, 4rem);
}
.voy-expertise__title { margin: 0; } /* was capped at 12ch, tuned for the old wrong 52px size; removed so 60px wraps naturally within the grid column like Figma's 2-line break */
.voy-expertise__intro { color: var(--voy-muted); font-size: 0.9375rem; line-height: 1.6; margin: 0 0 0.35rem; }

.voy-expertise__rows { display: flex; flex-direction: column; }
.voy-exp-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(2rem, 5vw, 5rem);
	align-items: center;
	padding-block: clamp(2.5rem, 5vw, 4.5rem);
	border-top: 1px solid var(--voy-border);
}
.voy-exp-row__media { margin: 0; }
.voy-exp-row__img {
	display: block;
	width: 100%;
	height: clamp(300px, 32vw, 460px);
	object-fit: cover;
	border-radius: var(--voy-radius);
}
.voy-exp-row__title { margin: 0 0 1.5rem; }
.voy-exp-row__cta { margin-bottom: 2.25rem; }
.voy-exp-row__cta .voy-btn { padding: 0.7em 1.4em; } /* font-size inherits .voy-btn's 1rem/16px — verified vs Figma; was wrongly shrunk to 15px */

.voy-exp-row__focus-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding-bottom: 0.9rem;
	border-bottom: 1px solid var(--voy-border);
	font-weight: 500;   /* verified vs Figma REST on Home + d6.html: "Key Focus Areas" is font-medium(500), not 600 */
	font-size: 1.375rem; /* verified vs Figma REST on Home + d6.html: 22px, not 17px */
}
.voy-exp-row__focus-arrow { color: var(--voy-text); display: inline-flex; }
.voy-exp-row__list { list-style: none; margin: 1.25rem 0 0; padding: 0; display: grid; gap: 0.85rem; }
.voy-exp-row__list li {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	color: #858585; /* verified vs Figma REST fill on Home ("Corporate Counsel" etc): muted grey, not var(--voy-text) black */
	font-size: 1.25rem; /* verified vs Figma REST on Home: 20px. Desktop-6 overrides to 15px below (its own Figma value, confirmed via d6.html) */
}
.voy-exp-row__marker { color: var(--voy-muted); display: inline-flex; flex: 0 0 auto; }

@media (max-width: 900px) {
	.voy-expertise__head { grid-template-columns: 1fr; align-items: start; }
	.voy-exp-row { grid-template-columns: 1fr; gap: 1.75rem; }
}

/* Page-by-page overrides added during the Visual Composer build. */


/* -----------------------------------------------------------------------------
   Imagery band (full-width photo transition)  [voy_imagery_band]
   ----------------------------------------------------------------------------- */
.voy-band {
	position: relative;
	width: 100%;
	background-position: center;
	background-size: cover;
	background-repeat: no-repeat;
}
.voy-band--short  { min-height: 320px; }
.voy-band--medium { min-height: 480px; }
.voy-band--tall   { min-height: 640px; }
.voy-band--parallax { background-attachment: fixed; }
.voy-band__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(26, 37, 54, 0.15) 0%, rgba(26, 37, 54, 0.05) 45%, rgba(26, 37, 54, 0.25) 100%);
}
/* Mobile / touch: fixed attachment is janky and unsupported on iOS. */
@media (max-width: 900px) {
	.voy-band--parallax { background-attachment: scroll; }
	.voy-band--medium { min-height: 340px; }
	.voy-band--tall   { min-height: 420px; }
}


/* -----------------------------------------------------------------------------
   Contact  [voy_contact]
   ----------------------------------------------------------------------------- */
.voy-contact__head {
	display: grid;
	grid-template-columns: 1fr minmax(280px, 34%);
	gap: clamp(1.5rem, 4vw, 3rem);
	align-items: start;
	margin-bottom: clamp(2rem, 4vw, 3rem);
}
.voy-contact__title { margin: 0.35rem 0 0; font-size: 2.8125rem; } /* verified vs Figma REST on Home ("Get in touch") + d6.html: 45px, smaller than the generic 60px H2 */
.voy-contact__intro {
	color: var(--voy-muted-invert);
	font-size: 0.9375rem;
	line-height: 1.7;
	margin: 0;
	align-self: end;
}

/* Photo with overlaid glass cards */
.voy-contact__media {
	position: relative;
	border-radius: 14px;
	overflow: hidden;
	min-height: 460px;
}
.voy-contact__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.voy-contact__cards {
	position: absolute;
	left: clamp(1rem, 3vw, 2rem);
	right: clamp(1rem, 3vw, 2rem);
	bottom: clamp(1rem, 3vw, 2rem);
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	background: rgba(20, 29, 43, 0.55);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border: 1px solid rgba(255, 255, 255, 0.12);
	border-radius: 12px;
	overflow: hidden;
}
.voy-contact-card {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	padding: clamp(1rem, 2.2vw, 1.6rem);
	text-decoration: none;
	color: var(--voy-text-invert);
	border-left: 1px solid rgba(255, 255, 255, 0.12);
}
.voy-contact-card:first-child { border-left: 0; }
.voy-contact-card__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	background: var(--voy-accent);
	color: var(--voy-navy);
	margin-bottom: 0.35rem;
}
.voy-contact-card__label { font-size: 0.8125rem; color: var(--voy-muted-invert); }
.voy-contact-card__value { font-size: 1.0625rem; font-weight: 600; line-height: 1.35; color: var(--voy-text-invert); }
a.voy-contact-card:hover .voy-contact-card__value { color: var(--voy-accent); }

/* Form */
.voy-contact__form { margin-top: clamp(2rem, 4vw, 3rem); }

@media (max-width: 900px) {
	.voy-contact__head { grid-template-columns: 1fr; }
	.voy-contact__cards { position: static; grid-template-columns: 1fr; margin-top: 1rem; }
	.voy-contact-card { border-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.12); }
	.voy-contact-card:first-child { border-top: 0; }
	.voy-contact__media { min-height: 0; }
	.voy-contact__img { position: relative; height: 260px; }
}


/* -----------------------------------------------------------------------------
   Footer  [voy_footer]
   ----------------------------------------------------------------------------- */
.voy-footer { padding-top: clamp(2rem, 5vw, 4rem); padding-bottom: clamp(1.5rem, 3vw, 2.5rem); }
.voy-footer__wordmark {
	text-align: center;
	margin-bottom: clamp(1.5rem, 3vw, 2.5rem);
	user-select: none;
}
/* Brand mark (chevron + wordmark), sized to roughly the same footprint the
   old text treatment used; gradient fill is set inline via voy_logo_svg(). */
.voy-footer__wordmark-svg {
	display: inline-block;
	width: clamp(21rem, 92vw, 84rem);
	max-width: 100%;
	height: auto;
}

.voy-footer__bar {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: 1rem;
	padding-top: 1.25rem;
	border-top: 1px solid rgba(255, 255, 255, 0.12);
}
/* The socials column only exists when at least one social URL is filled in —
   voy_block_footer_render() drops the whole wrapper otherwise. With three tracks
   declared but two children present, the right-hand legal link (Terms) falls
   into the CENTRE track instead of the right edge. The eight landing frames were
   unaffected only because body.voy-contact-std hardcodes `1fr 1fr` below; every
   page without that class — blog, archive, single, search, 404, the legal pages
   — showed Terms floating in the middle.

   The modifier class is set in PHP, which is the only place that reliably knows
   whether the socials wrapper was rendered. `:has()` also worked, but it is
   unsupported below Safari 15.4 / Firefox 121, so on those browsers the footer
   would have gone quietly back to being wrong. The `:has()` rules are kept as a
   belt-and-braces fallback for any footer markup that predates the class. */
.voy-footer__bar--no-socials,
.voy-footer__bar:not(:has(.voy-footer__socials)),
.voy-footer__bar:has(.voy-footer__socials:empty) {
	grid-template-columns: 1fr 1fr;
}
.voy-footer__socials:empty { display: none; }
.voy-footer__links { display: flex; align-items: center; gap: 1.25rem; font-size: 0.9375rem; } /* verified vs Figma REST on Home ("Privacy"): 15px, not 14px */
.voy-footer__links--right { justify-content: flex-end; }
.voy-footer__links a { color: var(--voy-muted-invert); text-decoration: none; }
.voy-footer__links a:hover { color: var(--voy-text-invert); }
.voy-footer__copy { color: var(--voy-muted-invert); }
.voy-footer__socials { display: flex; align-items: center; justify-content: center; gap: 0.75rem; }
.voy-footer__social {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	border: 1px solid rgba(255, 255, 255, 0.2);
	color: var(--voy-text-invert);
	transition: background 0.2s ease, color 0.2s ease;
}
.voy-footer__social:hover { background: var(--voy-accent); color: var(--voy-navy); border-color: var(--voy-accent); }

@media (max-width: 700px) {
	.voy-footer__bar { grid-template-columns: 1fr; justify-items: center; text-align: center; gap: 1.25rem; }
	.voy-footer__links--right { justify-content: center; }
}


/* -----------------------------------------------------------------------------
   Landing template chrome: suppress Salient's default footer (custom voy_footer
   block replaces it) and page-title bar so sections render edge-to-edge.
   ----------------------------------------------------------------------------- */
body.page-template-template-voy-landing #footer-outer,
body.page-template-template-voy-landing #footer-widgets,
body.page-template-template-voy-landing .page-header,
body.page-template-template-voy-landing #page-header-bg { display: none !important; }
body.page-template-template-voy-landing .voy-landing-wrap { padding: 0 !important; }


/* -----------------------------------------------------------------------------
   Header / nav (Salient) on the VOY landing template.
   Transparent over the hero at the top; Salient adds `.small-nav` to
   #header-outer on scroll, which we style as a solid navy bar. Logo + links are
   white in both states; the "Contact Us" menu item (.voy-nav-cta) is a lime pill.
   ----------------------------------------------------------------------------- */
body.page-template-template-voy-landing #header-outer {
	background: transparent !important;
	box-shadow: none !important;
	border-bottom: 0 !important;
}
/* Salient's own header container is a generic 1425px/90px-padding grid,
   independent of .voy-container's 1380px-content/30px-gutter convention used
   by every section below it — logo/nav sat ~68px further in than the content
   column (confirmed against Figma: logo x=30 in every frame, was rendering
   at x=98). Realign the header to the same 30px gutter.

   The margins MUST stay auto. Pinning them to 0 (as an earlier version of this
   rule did) left-aligns the header container while .voy-container still centres,
   so above a 1440px viewport the logo drifts left of the content by
   (viewport - 1440)/2 — 240px at 1920. Figma has the logo and the hero headline
   on the same x=30 line, so both containers must centre identically. */
body.page-template-template-voy-landing #header-outer .container {
	max-width: 1440px !important;
	width: 100% !important;
	padding-left: 30px !important;
	padding-right: 30px !important;
	margin-left: auto !important;
	margin-right: auto !important;
}
/* Yoast's auto breadcrumb bar (shown on every non-front page by default) sits
   in normal document flow above the hero, pushing it down so the fixed
   transparent header ends up over the plain page background instead of the
   hero photo -- which makes the white logo/nav invisible on every page except
   the designated front page. Suppress it here; this is the "drops the page
   title bar" behavior the template docblock already promises. */
body.page-template-template-voy-landing #breadcrumbs {
	display: none !important;
}
body.page-template-template-voy-landing #header-outer.small-nav {
	background: var(--voy-navy) !important;
	box-shadow: 0 8px 28px rgba(0, 0, 0, 0.22) !important;
}

/* -----------------------------------------------------------------------------
   Condensed (sticky) bar — breathing room.
   -----------------------------------------------------------------------------
   Salient derives the scrolled bar's height purely from the logo: it writes
   `#header-outer.small-nav #logo { margin: 15.5556px 0 }` inline (from
   data-shrink-num="6" against the 28px logo), giving a 22 + 15.56*2 = 53.1px
   bar. The Contact Us control is 45px tall on the eight standard frames, so it
   cleared the bar edges by 4px and read as jammed in.

   22px margins put the bar at 66px and the control back to a ~10px clearance.
   The at-rest 84px header is deliberately NOT touched — that one is measured
   against Figma, which has no scrolled state at all, so this whole block is
   ours to tune.

   Salient's rule is `#header-outer.small-nav #logo` (2 ids, 1 class); the page
   scope adds a class and an element, so this wins without !important. */
body.page-template-template-voy-landing #header-outer.small-nav #logo,
body.page-template-template-voy-landing #header-outer.small-nav .logo-spacing {
	margin-top: 22px;
	margin-bottom: 22px;
}

/* The Contact Us control carries a negative `top` on every page — -5px on the
   eight standard frames, -7.8px on D3/D4/D5 — because Figma places it above the
   optical centre of the 84px header. Those offsets are absolute, so in the much
   shorter condensed bar the same nudge threw the control 5-8px off centre and
   was the larger half of why the sticky bar looked wrong. Zero it out here and
   let flex centring do the work; the at-rest offsets above are unaffected. */
body.page-template-template-voy-landing #header-outer.small-nav #top nav ul.sf-menu > li.voy-nav-cta {
	top: 0;
}

/* Logo + nav links white in both states. */
body.page-template-template-voy-landing #header-outer #logo,
body.page-template-template-voy-landing #header-outer #logo .logo-text,
body.page-template-template-voy-landing #header-outer #top nav > ul > li > a,
body.page-template-template-voy-landing #header-outer #top nav > ul > li > a .menu-title-text {
	color: #ffffff !important;
}

/* Hide the Salient header search + cart affordances (not in the VOY design). */
body.page-template-template-voy-landing #header-outer .nectar-ext-menu-item--search,
body.page-template-template-voy-landing #header-outer .header-search-icon,
body.page-template-template-voy-landing #header-outer #search-btn,
body.page-template-template-voy-landing #header-outer .cart-menu-wrap { display: none !important; }

/* Contact Us CTA -> lime pill. */
body.page-template-template-voy-landing #header-outer #top nav ul li.voy-nav-cta > a {
	background: var(--voy-accent) !important;
	color: var(--voy-navy) !important;
	border-radius: var(--voy-radius-pill) !important;
	padding: 0.6em 1.5em !important;
	margin-left: 0.5rem;
	line-height: 1;
	font-weight: 600;
	transition: background 0.2s ease;
}
/* Pure #000000, not the navy token: every frame in the file that draws the lime
   pill fills this label black (9 of 11; desktop-4/5 use white on their black
   chip and override below). Verified against all 11 cached frame trees. */
body.page-template-template-voy-landing #header-outer #top nav ul li.voy-nav-cta > a .menu-title-text { color: #000000 !important; }
body.page-template-template-voy-landing #header-outer #top nav ul li.voy-nav-cta > a:hover { background: #dff275 !important; }
/* Kill Salient's animated underline under the CTA pill. */
body.page-template-template-voy-landing #header-outer #top nav ul li.voy-nav-cta > a::before,
body.page-template-template-voy-landing #header-outer #top nav ul li.voy-nav-cta > a::after { display: none !important; }


/* Let the fixed transparent header overlay the hero (drop the reserved spacer). */
body.page-template-template-voy-landing #header-space { display: none !important; }

/* Hide Salient's off-canvas "Menu" hamburger on desktop (kept for mobile). */
@media (min-width: 1000px) {
	body.page-template-template-voy-landing #header-outer ul.buttons li.slide-out-widget-area-toggle { display: none !important; }
}
/* On mobile the transparent-over-hero links would collapse into the off-canvas
   menu; keep the hamburger visible and white there. */
@media (max-width: 999px) {
	body.page-template-template-voy-landing #header-outer ul.buttons li.slide-out-widget-area-toggle a i { color: #fff !important; }
}


/* =============================================================================
   Blocks for the earlier Figma concepts (Desktop-3/4/5/6, V2 testimonials)
   ============================================================================= */

/* Testimonials ------------------------------------------------------------- */
.voy-testimonials__head { margin-bottom: clamp(2rem, 4vw, 3rem); }
.voy-testimonials__title { margin: 0.35rem 0 0; font-size: 2.8125rem; } /* verified vs d6.html: 45px, smaller than the generic 60px H2 */
.voy-testimonials__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(1rem, 2vw, 1.75rem); }
.voy-tcard {
	margin: 0;
	background: var(--voy-white, #fff);
	border: 1px solid var(--voy-border);
	border-radius: 16px;
	padding: clamp(1.5rem, 2.5vw, 2.25rem);
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	gap: 1.75rem;
	min-height: 300px;
}
.voy-tcard__quote { margin: 0; font-family: var(--voy-font-heading); font-size: 1.25rem; line-height: 1.45; color: var(--voy-text); }
.voy-tcard__person { display: flex; align-items: center; gap: 0.85rem; }
.voy-tcard__avatar { width: 48px; height: 48px; border-radius: 50%; background: var(--voy-navy); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 600; overflow: hidden; flex: 0 0 auto; }
.voy-tcard__avatar-img { width: 100%; height: 100%; object-fit: cover; }
.voy-tcard__meta { display: flex; flex-direction: column; }
.voy-tcard__name { font-weight: 600; color: var(--voy-text); }
.voy-tcard__role { font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--voy-blue-accent); }
.voy-testimonials .voy-eyebrow { color: var(--voy-blue-accent); }
@media (max-width: 900px) { .voy-testimonials__grid { grid-template-columns: 1fr; } }

/* Expertise 3-column ------------------------------------------------------- */
.voy-exp3__head { max-width: 640px; margin-bottom: clamp(2rem, 4vw, 3rem); }
.voy-exp3__title { margin: 0.35rem 0 0; }
.voy-exp3__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(1rem, 2vw, 1.75rem); }
.voy-exp3__card { border: 1px solid var(--voy-border); border-radius: 16px; padding: clamp(1.5rem, 2.5vw, 2.25rem); min-height: 240px; display: flex; flex-direction: column; justify-content: space-between; gap: 1.5rem; background: var(--voy-white, #fff); }
.voy-exp3__card-title { margin: 0; font-size: 1.5rem; }
.voy-exp3__more { align-self: flex-start; }
@media (max-width: 900px) { .voy-exp3__grid { grid-template-columns: 1fr; } }

/* Statement (What We Do / Philosophy) -------------------------------------- */
.voy-statement__body { font-family: var(--voy-font-heading); font-size: clamp(1.5rem, 3.2vw, 2.4rem); line-height: 1.3; margin: 0.75rem 0 0; max-width: 62rem; }
.voy-statement__body--muted { color: var(--voy-muted-invert); margin-top: 1.25rem; } /* Figma D4/D5: second "Our approach..." line renders dimmer than the first */
.voy-statement--split .voy-statement__grid { display: grid; grid-template-columns: 1fr 2fr; gap: clamp(1.5rem, 4vw, 3rem); align-items: start; }
.voy-statement--split .voy-statement__body { margin: 0; }
@media (max-width: 900px) { .voy-statement--split .voy-statement__grid { grid-template-columns: 1fr; } }

/* CTA band ----------------------------------------------------------------- */
.voy-cta .voy-container { display: flex; flex-direction: column; gap: clamp(1.5rem, 3vw, 2.25rem); }
.voy-cta__title { margin: 0; max-width: 20ch; font-size: clamp(2rem, 4.5vw, 3.25rem); }

/* Why Us -------------------------------------------------------------------- */
.voy-whyus__head { max-width: 780px; margin-bottom: clamp(2rem, 4vw, 3rem); }
.voy-whyus__title { margin: 0.35rem 0 0; }
.voy-whyus__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(1.5rem, 3vw, 2.5rem); }
.voy-whyus__icon { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 50%; background: var(--voy-accent); color: var(--voy-navy); margin-bottom: 1rem; }
.voy-whyus__point-title { margin: 0 0 0.5rem; font-size: 1.1875rem; }
.voy-whyus__point-desc { margin: 0; color: var(--voy-muted); line-height: 1.6; }
@media (max-width: 900px) { .voy-whyus__grid { grid-template-columns: 1fr; } }

/* Trusted logo band -------------------------------------------------------- */
.voy-trusted .voy-container { display: flex; flex-direction: column; align-items: center; gap: 2rem; }
.voy-trusted__label { letter-spacing: 0.14em; text-transform: uppercase; font-size: 0.8125rem; color: var(--voy-muted); margin: 0; }
.voy-trusted__row { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: clamp(1.5rem, 4vw, 3.5rem); }
.voy-trusted__logo { font-weight: 700; letter-spacing: 0.02em; color: #A7A29A; font-size: clamp(1rem, 2vw, 1.4rem); }
.voy-trusted__img { height: 32px; width: auto; max-width: none; filter: grayscale(1); opacity: 0.55; }

/* Classic contact + column footer ------------------------------------------ */
.voy-contactc__top { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.5rem, 4vw, 3rem); align-items: end; margin-bottom: clamp(2.5rem, 5vw, 4rem); }
.voy-contactc__title { margin: 0.35rem 0 0; font-size: clamp(2rem, 4.5vw, 3rem); }
.voy-contactc__blurb { color: var(--voy-muted); line-height: 1.7; margin: 0 0 1rem; }
.voy-section--navy .voy-contactc__blurb { color: var(--voy-muted-invert); }
.voy-contactc__link { display: inline-flex; align-items: center; gap: 0.5rem; font-weight: 600; text-decoration: none; color: inherit; border-bottom: 1px solid currentColor; padding-bottom: 0.35rem; }
.voy-contactc__cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; padding: 1.75rem 0; border-top: 1px solid var(--voy-border); border-bottom: 1px solid var(--voy-border); }
.voy-section--navy .voy-contactc__cols { border-color: rgba(255,255,255,0.14); }
.voy-contactc__col { display: flex; flex-direction: column; gap: 0.4rem; }
.voy-contactc__col a { color: inherit; text-decoration: none; }
.voy-contactc__col a:hover { color: var(--voy-accent); }
.voy-contactc__label { font-size: 0.8125rem; color: var(--voy-muted); margin-bottom: 0.3rem; }
.voy-section--navy .voy-contactc__label { color: var(--voy-muted-invert); }
.voy-contactc__socials { display: flex; gap: 0.85rem; }
.voy-contactc__socials a { display: inline-flex; }
.voy-contactc__legal { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding-top: 1.25rem; font-size: 0.875rem; }
.voy-contactc__legal a { color: inherit; text-decoration: none; }
.voy-contactc__copy { color: var(--voy-muted); }
@media (max-width: 800px) { .voy-contactc__top { grid-template-columns: 1fr; } .voy-contactc__cols { grid-template-columns: 1fr; gap: 1.25rem; } .voy-contactc__legal { flex-direction: column; gap: 0.5rem; } }

/* Markets layout variants: tall + circle ----------------------------------- */
.voy-markets__grid--tall,
.voy-markets__grid--circle { display: grid; grid-template-columns: repeat(var(--voy-cols, 4), 1fr); gap: clamp(1rem, 1.6vw, 1.5rem); }
.voy-market-card--tall,
.voy-market-card--circle {
	position: relative;
	border: 1px solid var(--voy-border);
	border-radius: 16px;
	background: var(--voy-white, #fff);
	display: flex;
	flex-direction: column;
	gap: 1rem;
}
.voy-market-card--tall { min-height: 372px; align-items: flex-start; justify-content: flex-end; padding: 1.75rem; }
.voy-market-card--circle { min-height: 245px; align-items: flex-start; justify-content: flex-end; padding: 1.5rem; }
.voy-market-card__corner { position: absolute; top: 1.25rem; right: 1.25rem; width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--voy-border); display: inline-flex; align-items: center; justify-content: center; color: var(--voy-navy); }
.voy-market-card--tall .voy-market-card__icon,
.voy-market-card--circle .voy-market-card__icon { color: var(--voy-navy); }
.voy-market-card--tall .voy-market-card__label,
.voy-market-card--circle .voy-market-card__label { font-size: 1.375rem; font-family: var(--voy-font-heading); }
.voy-market-card--tall.is-highlight,
.voy-market-card--circle.is-highlight { background: var(--voy-accent); border-color: var(--voy-accent); }
.voy-market-card--tall.is-highlight .voy-market-card__corner,
.voy-market-card--circle.is-highlight .voy-market-card__corner { background: var(--voy-navy); color: #fff; border-color: var(--voy-navy); }
@media (max-width: 1000px) { .voy-markets__grid--tall, .voy-markets__grid--circle { grid-template-columns: repeat(2, 1fr) !important; } }
@media (max-width: 560px) { .voy-markets__grid--tall, .voy-markets__grid--circle { grid-template-columns: 1fr !important; } }


/* -----------------------------------------------------------------------------
   Imagery band — overlay content variant  [voy_imagery_band overlay_text=...]
   ----------------------------------------------------------------------------- */
.voy-band--content { display: flex; align-items: center; }
.voy-band--content .voy-band__scrim {
	background: linear-gradient(180deg, rgba(16, 24, 38, 0.55) 0%, rgba(16, 24, 38, 0.45) 50%, rgba(16, 24, 38, 0.60) 100%);
}
.voy-band__inner {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	gap: 1.6rem;
	color: var(--voy-text-invert, #fff);
}
.voy-band--align-center .voy-band__inner { align-items: center; text-align: center; max-width: 760px; margin-inline: auto; }
.voy-band--align-left .voy-band__inner { align-items: flex-start; text-align: left; max-width: 620px; }
.voy-band__text {
	font-family: var(--voy-font-heading);
	font-size: clamp(1.5rem, 2.4vw, 2.125rem);
	line-height: 1.28;
	font-weight: 400;
	color: #fff;
	margin: 0;
}
.voy-btn--light { background: #fff; color: var(--voy-navy); }
.voy-btn--light:hover { background: #f1efe9; }
.voy-btn--outline { background: transparent; color: #fff; border: 1px solid rgba(255,255,255,0.6); }
.voy-btn--outline:hover { background: rgba(255,255,255,0.12); }


/* Grid market cards with a "+" corner on every card (Desktop-5 style) */
.voy-market-card--grid.has-plus { position: relative; }
.voy-market-card--grid.has-plus .voy-market-card__corner {
	position: absolute;
	top: 1rem;
	right: 1rem;
	width: 28px;
	height: 28px;
	border-radius: 50%;
	border: 1px solid var(--voy-border);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--voy-muted);
}


/* -----------------------------------------------------------------------------
   Expertise — image carousel variant  [voy_expertise_3col variant="carousel"]
   ----------------------------------------------------------------------------- */
.voy-exp3--carousel .voy-exp3__track {
	display: flex;
	gap: 7px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	padding-bottom: 4px;
	scrollbar-width: none;
	-ms-overflow-style: none;
}
.voy-exp3--carousel .voy-exp3__track::-webkit-scrollbar { display: none; }
.voy-exp3__panel {
	position: relative;
	flex: 0 0 634px;
	max-width: 88vw;
	height: 475px;
	border-radius: 14px;
	overflow: hidden;
	background-size: cover;
	background-position: center;
	background-color: var(--voy-navy);
	scroll-snap-align: start;
	display: flex;
	align-items: flex-end;
}
.voy-exp3__panel-scrim {
	position: absolute; inset: 0;
	background: linear-gradient(180deg, rgba(16,24,38,0) 35%, rgba(16,24,38,0.75) 100%);
}
.voy-exp3__panel-body { position: relative; z-index: 1; padding: 2rem; }
.voy-exp3__panel-title {
	font-family: var(--voy-font-heading);
	font-size: 2.5rem;
	font-weight: 400;
	color: #fff;
	margin: 0 0 0.9rem;
}
.voy-exp3__panel-more {
	display: inline-block;
	font-size: 0.875rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: #fff;
	text-decoration: none;
	border-bottom: 1px solid rgba(255,255,255,0.5);
	padding-bottom: 2px;
}
.voy-exp3__panel-more:hover { border-color: #fff; }
.voy-exp3__nav {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 1rem;
	margin-top: 1.75rem;
}
.voy-exp3__dots { display: inline-flex; gap: 8px; margin-right: auto; margin-left: 0; }
.voy-exp3--carousel .voy-exp3__nav .voy-exp3__dots { margin-left: 0; margin-right: 1rem; }
.voy-exp3__dot { width: 8px; height: 8px; border-radius: 50%; background: #cfcbc1; display: inline-block; }
.voy-exp3__dot.is-active { background: var(--voy-navy); }
.voy-exp3__arrow {
	width: 40px; height: 40px; border-radius: 50%;
	border: 1px solid var(--voy-border);
	background: transparent; color: var(--voy-navy);
	font-size: 1.25rem; line-height: 1; cursor: pointer;
	display: inline-flex; align-items: center; justify-content: center;
	transition: background-color .2s ease;
}
.voy-exp3__arrow:hover { background: rgba(0,0,0,0.05); }
@media (max-width: 900px) {
	.voy-exp3__panel { flex-basis: 88vw; height: 320px; }
}

/* -----------------------------------------------------------------------------
   Expertise — 2-panel variant (Desktop-3), built from native Salient
   `fancy_box` elements rather than a new custom block.
   ----------------------------------------------------------------------------- */
.voy-2panel__head { text-align: center; margin-bottom: 2.5rem; }
.voy-2panel__head .voy-eyebrow { justify-content: center; }
.voy-2panel__head h2 {
	font-family: var(--voy-font-heading);
	font-size: var(--voy-h2);
	color: var(--voy-text);
	margin: 0;
}
.voy-2panel__intro {
	font-family: var(--voy-font-body);
	font-size: 1rem;
	color: var(--voy-muted);
	max-width: 640px;
	margin: 1rem auto 0;
}
.voy-2panel .nectar-fancy-box .voy-2panel__img {
	display: block;
	width: 100%;
	height: 200px;
	object-fit: cover;
	margin: 0 0 1.5rem;
}
.voy-2panel .nectar-fancy-box {
	background: var(--voy-white);
	border: 1px solid var(--voy-border);
	padding: clamp(1.75rem, 3vw, 2.75rem);
	box-shadow: none;
}

/* Split (Desktop-3) variant: navy section, left heading column + right column
   of stacked cards with a horizontal text/photo split inside each card. */
.voy-2panel--split .voy-2panel__head { text-align: left; margin-bottom: 0; }
.voy-2panel--split .voy-2panel__head .voy-eyebrow { justify-content: flex-start; }
.voy-2panel--split .voy-2panel__head h2 {
	font-family: var(--voy-font-body); /* D3's Figma frame uses Inter (sans) for this heading, not the sitewide serif — confirmed via node style AND visual zoom on the render, not just REST metadata (which can report font fallbacks) */
	font-weight: 500;
	color: var(--voy-text-invert);
	font-size: clamp(2.5rem, 5vw, var(--voy-h1));
	margin: 0.75rem 0 1rem;
}
.voy-2panel--split .voy-2panel__intro { color: var(--voy-muted-invert); margin: 0; max-width: none; }
.voy-2panel--split .wpb_column:nth-child(2) .vc_column-inner { display: flex; flex-direction: column; gap: 1.5rem; }
.voy-2panel--split .nectar-fancy-box { padding: 0; overflow: hidden; border-radius: var(--voy-radius, 4px); }
.voy-2panel--split .nectar-fancy-box .inner {
	display: flex;
	align-items: stretch;
	min-height: inherit;
	padding: 0 !important;
}
.voy-2panel--split .voy-2panel__body {
	flex: 0 0 46%;
	padding: clamp(1.5rem, 2.5vw, 2.25rem);
	display: flex;
	flex-direction: column;
}
.voy-2panel--split .voy-2panel__body h3 {
	color: var(--voy-text);
	margin: 0 0 1rem;
} /* font-family/weight/size are set later by the higher-specificity
     .voy-2panel--split .nectar-fancy-box .inner h3 rule (needed to beat the generic
     .voy-2panel .nectar-fancy-box .inner h3 rule's serif default) — keep both selectors
     if refactoring so this one doesn't silently start winning again */
.voy-2panel--split .voy-2panel__body ul { list-style: none; margin: 0; padding: 0; }
.voy-2panel--split .voy-2panel__body li {
	font-family: var(--voy-font-body);
	font-size: 0.9375rem;
	color: var(--voy-muted);
	position: relative;
} /* padding/line-height/border are set later by the higher-specificity
     .voy-2panel--split .nectar-fancy-box .inner li rule (needed to beat the generic
     .voy-2panel .nectar-fancy-box .inner li rule's border-bottom + looser 0.6rem padding) */
.voy-2panel--split .voy-2panel__arrow {
	margin-top: auto;
	padding-top: 1.25rem;
	width: 36px; height: 36px;
	display: inline-flex; align-items: center; justify-content: center;
	align-self: flex-start;
} /* the button's rounded-blob shape + fill/stroke colors are baked directly into the SVG markup
     (page-content/desktop-3.html, matching icon/shape.svg exactly) as literal hex, not currentColor —
     it's a Figma "Star" shape, not a plain circle, and hardcoding the colors sidesteps Salient's
     .nectar-fancy-box .inner * { color:#fff } cascade override entirely instead of fighting it */
.voy-2panel--split .voy-2panel__img-side {
	flex: 1 1 54%;
	object-fit: cover;
	width: auto;
	height: auto;
	margin: 0;
	display: block;
}
@media (max-width: 900px) {
	.voy-2panel--split .nectar-fancy-box .inner { flex-direction: column; }
	.voy-2panel--split .voy-2panel__img-side { flex-basis: 220px; width: 100%; }
}

/* Why Us — icon-card variant (Desktop-3), native `fancy_box` icon cards. */
.voy-whyus2__head { text-align: center; margin-bottom: clamp(2rem, 4vw, 3rem); }
.voy-whyus2__head .voy-eyebrow { justify-content: center; }
.voy-whyus2__head h2 {
	font-family: var(--voy-font-heading);
	font-size: var(--voy-h2);
	color: var(--voy-text);
	margin: 0.5rem 0 0;
}
.voy-whyus2 .nectar-fancy-box {
	background: var(--voy-cream);
	border: 1px solid var(--voy-border);
	box-shadow: none;
	padding: clamp(1.5rem, 2.5vw, 2rem);
}
.voy-whyus2 .nectar-fancy-box .box-bg { background-color: var(--voy-cream) !important; background-image: none !important; }
.voy-whyus2 .nectar-fancy-box .box-bg::after,
.voy-whyus2 .nectar-fancy-box .box-bg::before { display: none !important; content: none !important; }
.voy-whyus2 .nectar-fancy-box .inner .voy-whyus2__icon { color: var(--voy-navy); display: block; margin-bottom: 1.25rem; }
.voy-whyus2 .nectar-fancy-box .inner .voy-whyus2__icon * { color: var(--voy-navy); } /* Salient's .inner * sets color:#fff on each child circle/path individually (stroke="currentColor" resolves per-element), so the svg-level override alone isn't enough */
.voy-whyus2 .nectar-fancy-box .inner h3 {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 1.0625rem;
	color: var(--voy-text);
	margin: 0 0 0.5rem;
}
.voy-whyus2 .nectar-fancy-box .inner p {
	font-family: var(--voy-font-body);
	font-size: 0.9375rem;
	color: var(--voy-muted);
	margin: 0;
}

/* Testimonials — navy slider variant (Desktop-3), native `testimonial_slider`. */
.voy-testimonials2__head h2 {
	font-family: var(--voy-font-heading);
	color: var(--voy-text-invert);
	font-size: clamp(2.5rem, 5vw, var(--voy-h1));
	margin: 0.75rem 0 0;
}
.voy-testimonials2 .testimonial_slider blockquote {
	font-family: var(--voy-font-body);
	font-size: 1.375rem;
	line-height: 1.5;
	color: var(--voy-text-invert);
	text-align: left;
	margin: 0;
}
.voy-testimonials2 .testimonial-name {
	display: block;
	margin-top: 1.5rem;
	font-weight: 600;
	color: var(--voy-text-invert);
}
.voy-testimonials2 .testimonial_slider .title { display: block; color: var(--voy-muted-invert); }
.voy-testimonials2 .open-quote,
.voy-testimonials2 .close-quote { color: var(--voy-accent); }
.voy-2panel .nectar-fancy-box .box-bg {
	background-color: var(--voy-white) !important;
	background-image: none !important;
}
/* Kill the style's built-in hover color-bar overlay — this is a static
   content panel, not a hover-interactive box. */
.voy-2panel .nectar-fancy-box .box-bg::after,
.voy-2panel .nectar-fancy-box .box-bg::before {
	display: none !important;
	content: none !important;
}
.voy-2panel .nectar-fancy-box .inner h3 {
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: var(--voy-h3);
	color: var(--voy-text);
	margin: 0 0 1.25rem;
}
.voy-2panel .nectar-fancy-box .voy-2panel__kfa {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 0.8125rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--voy-muted);
	padding-top: 1rem;
	margin: 0 0 0.75rem;
	border-top: 1px solid var(--voy-border);
}
.voy-2panel .nectar-fancy-box .inner ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
.voy-2panel .nectar-fancy-box .inner li {
	font-family: var(--voy-font-body);
	font-size: 0.9375rem;
	color: var(--voy-text);
	padding: 0.6rem 0;
	border-bottom: 1px solid var(--voy-border);
}
.voy-2panel .nectar-fancy-box .inner li:last-child { border-bottom: none; }
/* D3's --split variant has its own lighter list-item color per Figma fills (#858585,
   not near-black) — same specificity as the generic rule above, so it must come after
   in source order to win the cascade tie. */
.voy-2panel--split .nectar-fancy-box .inner li { color: var(--voy-muted); }
/* Same cascade-tie fix for the card heading: D3's Figma card titles are Aspekta (sans),
   not the generic rule's serif --voy-font-heading. */
.voy-2panel--split .nectar-fancy-box .inner h3 {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 1.625rem;
}
/* D3's Figma list has NO divider lines at all (confirmed by sampling pixel rows between
   items on the cached render — solid white, no hairline) and much tighter vertical
   rhythm (~5px between items, line-height 19.65px on 15px text) than the generic rule's
   0.6rem padding + border-bottom. Must win the same cascade tie as color/font above. */
.voy-2panel--split .nectar-fancy-box .inner li {
	padding: 0.15rem 0 0.15rem 1.25rem;
	line-height: 1.3;
	border: none;
	list-style-type: none; /* Salient's own style.css has `ul li { list-style: outside disc }`,
		which explicitly targets li and so beats mere inheritance from our `ul{list-style:none}` —
		was showing a native disc bullet stacked behind/next to our custom triangle ::before */
}
.voy-2panel--split .nectar-fancy-box .inner li::before {
	content: "";
	position: absolute; left: 0; top: 0.7em;
	width: 0; height: 0;
	border-style: solid;
	border-width: 3.5px 0 3.5px 5px;
	border-color: transparent transparent transparent var(--voy-navy);
}

/* -----------------------------------------------------------------------------
   Expertise — accordion variant (V2-d, Desktop-6), built from native Salient
   `toggles`/`toggle` (style="minimal", accordion="true") rather than a new
   custom block. Reskin to VOY tokens: swap Salient's global accent (blue) for
   the brand navy, and style the Key Focus Areas list to match the rest of
   the site's card lists.
   ----------------------------------------------------------------------------- */
.voy-expertise--accordion .vc_row { margin-top: 2.5rem; }
.voy-expertise--accordion .toggle { border-color: var(--voy-border); }
.voy-expertise--accordion .toggle-title,
.voy-expertise--accordion .toggle-heading,
.voy-expertise--accordion .toggle-heading:link,
.voy-expertise--accordion .toggle-heading:visited {
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: var(--voy-h3);
	color: var(--voy-text) !important;
}
.voy-expertise--accordion .toggle.open .toggle-title,
.voy-expertise--accordion .toggle.open .toggle-heading,
.voy-expertise--accordion .toggle.open .toggle-heading:link,
.voy-expertise--accordion .toggle.open .toggle-heading:visited {
	color: var(--voy-navy) !important;
}
.voy-expertise--accordion .toggle .fa-plus-circle,
.voy-expertise--accordion .toggle .fa-minus-circle,
.voy-expertise--accordion .toggle-heading:link .fa-plus-circle,
.voy-expertise--accordion .toggle-heading:visited .fa-plus-circle,
.voy-expertise--accordion .toggle-heading:link .fa-minus-circle,
.voy-expertise--accordion .toggle-heading:visited .fa-minus-circle {
	color: var(--voy-navy) !important;
	border-color: var(--voy-navy) !important;
}
.voy-accordion__list {
	list-style: none;
	margin: 0;
	padding: 1rem 0 0.5rem;
}
.voy-accordion__list li {
	font-family: var(--voy-font-body);
	font-size: 0.9375rem;
	color: var(--voy-text);
	padding: 0.6rem 0;
	border-bottom: 1px solid var(--voy-border);
}

/* =============================================================================
   Desktop-6 (page-id-38) — one confirmed genuine per-version delta: its
   expertise focus-list items run smaller (15px) than Home's (20px), per
   d6.html (Figma dev-mode export, node 154:1009) vs Home's Figma REST fills.
   Everything else that was previously scoped here (H2 60/45px, focus-head
   22px/500, button 16px, footer 15px) turned out to be a SHARED bug also
   present on the "pixel-verified" Home page — promoted to the base rules
   above on 2026-08-10 instead of staying page-scoped. Confirmed 2026-08-09/10.
   ============================================================================= */
.page-id-38 .voy-exp-row__list li { font-size: 0.9375rem; } /* Figma 15px, vs Home's 20px base */
.voy-accordion__list li:last-child { border-bottom: none; }

/* -----------------------------------------------------------------------------
   Expertise panel content — photo + Learn More pill + Key Focus Areas list,
   matching Figma's per-item expanded state (same design reused verbatim by
   V1, Desktop-6's accordion, and V1-b's single always-open panel).
   ----------------------------------------------------------------------------- */
.voy-expertise-panel {
	display: flex;
	gap: 2.5rem;
	align-items: flex-start;
	padding: 0.5rem 0 1rem;
}
.voy-expertise-panel__photo {
	flex: 0 0 46%;
	aspect-ratio: 634 / 381;
	border-radius: 10px;
	overflow: hidden;
}
.voy-expertise-panel__photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
.voy-expertise-panel__body { flex: 1; min-width: 0; }
.voy-expertise-panel__title {
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: var(--voy-h3);
	color: var(--voy-text);
	margin: 0 0 1.5rem;
}
.voy-expertise-panel__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0.75rem 1.75rem;
	border-radius: 999px;
	background: var(--voy-navy);
	color: #fff;
	font-family: var(--voy-font-body);
	font-size: 1rem;
	font-weight: 500;
	text-decoration: none;
	margin-bottom: 1.75rem;
	transition: background-color .2s ease;
}
.voy-expertise-panel__cta:hover { background: #232f45; color: #fff; }
.voy-expertise-panel__subhead {
	display: block;
	font-family: var(--voy-font-body);
	font-size: 1.375rem;
	font-weight: 500;
	color: var(--voy-text);
	margin-bottom: 0.75rem;
}
/* The card body authors "Learn More" and "Key Focus Areas" as loose inline
   elements, so wpautop wraps them in a <p> and injects a <br>. Left alone that
   paragraph's own bottom margin pushes the focus list ~27px past Figma. */
.voy-expertise-panel__body > p { margin: 0; padding: 0; }
.voy-expertise-panel__body > p > br { display: none; }
.voy-expertise--accordion ul.voy-expertise-panel__list { list-style: none !important; margin: 0; padding: 0; }
.voy-expertise--accordion .voy-expertise-panel__list li {
	position: relative;
	list-style: none !important;
	font-family: var(--voy-font-body);
	font-size: 0.9375rem;
	color: var(--voy-text);
	padding: 0.55rem 0 0.55rem 1.6rem;
}
.voy-expertise-panel__list li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.75rem;
	width: 13px;
	height: 11px;
	background-color: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 12 5 5L20 6'/%3E%3C/svg%3E") no-repeat center / contain;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 12 5 5L20 6'/%3E%3C/svg%3E") no-repeat center / contain;
}
@media (max-width: 900px) {
	.voy-expertise-panel { flex-direction: column; }
	.voy-expertise-panel__photo { flex-basis: auto; width: 100%; }
}

/* -----------------------------------------------------------------------------
   Single always-open expertise card — Home + V2-c (--tallest), V1-b + V2-b
   (--tall).
   -----------------------------------------------------------------------------
   These four frames draw the SAME white card the stacked accordions use, just
   never collapsed. Figma "Rectangle 12064" is 1380 wide at x30 with a 1px
   #D9D9D9 rule along its top edge ("Line 19") and another along its bottom
   ("Line 25"), in two heights: 588 and 793.

   Card-relative geometry, shared by both heights:
     photo        x34  y32,  642 wide
     body column  x712, 645 wide (36px gutter after the photo, 23px card inset)
     title        y37
     "Learn More" 130x45 r27, lime #E8F988 with a BLACK label — the open card's
                  pill; the collapsed cards in the stacked variants are navy/white
     hairline     645 wide, 32px under "Key Focus Areas"
     focus list   markers at the body's left edge, text 39px in
     arrow        22.7px diagonal at the body's right edge, 4px below the subhead

   Everything from "Key Focus Areas" down is pinned near the card's bottom rather
   than flowing under the pill, so the two heights differ only in the photo, the
   type scale and the one gap beneath the pill (209 vs 363).
   ----------------------------------------------------------------------------- */
.voy-expertise-panel--tall,
.voy-expertise-panel--tallest {
	display: flex;
	align-items: flex-start;
	gap: 36px;
	box-sizing: border-box;
	background: #fff;
	border-top: 1px solid var(--voy-border-rule, #D9D9D9);
	border-bottom: 1px solid var(--voy-border-rule, #D9D9D9);
	padding: 31px 23px 0 34px;
}
.voy-expertise-panel--tall { height: 588px; }
.voy-expertise-panel--tallest { height: 793px; }

/* Home stacks all five of these cards. Figma puts them on an 835px pitch at
   793px tall, i.e. a 42px cream gutter between cards. A flex column is used
   rather than sibling margins so a stray wpautop <p> can't swallow the rule. */
.voy-expertise__cards {
	display: flex;
	flex-direction: column;
	gap: 42px;
}
.voy-expertise__cards > p:empty { display: none; }

/* -----------------------------------------------------------------------------
   Bottom-anchored focus block (--flow)
   -----------------------------------------------------------------------------
   The fixed 363px pill gap below only ever suited a 4-item list. Figma actually
   bottom-anchors the whole "Key Focus Areas" block: measured off the file, its
   last item sits 29-33px above the card's bottom edge on all five home cards
   regardless of list length, so "Key Focus Areas" itself lands at a different
   offset per card (527 / 566 / 439 / 482 / 527 from the card top for 4/3/6/5/4
   items). Cards opting in with --flow wrap the subhead + list in __focus and get
   that block pushed down by auto margin instead of a hardcoded gap. Scoped to
   the modifier so v2-c / v1-b / v2-b, which are already audited against their
   own frames, keep the fixed-gap geometry untouched. */
.voy-expertise-panel--flow .voy-expertise-panel__body {
	display: flex;
	flex-direction: column;
	/* 793 card - 31px top padding - the body's own 5px title offset */
	height: 757px;
}
.voy-expertise-panel--flow .voy-expertise-panel__cta { align-self: flex-start; margin-bottom: 0; }
.voy-expertise-panel--flow .voy-expertise-panel__focus {
	margin-top: auto;
	/* The last <li> carries 16.1px of its own padding. Figma's gap from the last
	   line of text to the card's bottom edge is NOT constant — it is 29/32/33/32/29
	   across the five cards, a 4px authoring wobble one anchor cannot reproduce.
	   13px reproduced 28.3px and left the 33px card 4.7px low (outside the 4px
	   tolerance); 15.7px targets the 31px mean so all five land within ±2.2px. */
	padding-bottom: 15.7px;
}
.voy-expertise-panel--flow .voy-expertise-panel__focus > p { margin: 0; padding: 0; }

.voy-expertise-panel--tall .voy-expertise-panel__photo,
.voy-expertise-panel--tallest .voy-expertise-panel__photo {
	flex: 0 0 642px;
	border-radius: 0;
	aspect-ratio: auto;
}
.voy-expertise-panel--tall .voy-expertise-panel__photo { height: 524px; }
.voy-expertise-panel--tallest .voy-expertise-panel__photo { height: 728px; }

.voy-expertise-panel--tall .voy-expertise-panel__body,
.voy-expertise-panel--tallest .voy-expertise-panel__body {
	flex: 0 0 645px;
	max-width: 645px;
	/* the photo starts at y32 but the title at y37 */
	margin-top: 5px;
}

.voy-expertise-panel--tall .voy-expertise-panel__title,
.voy-expertise-panel--tallest .voy-expertise-panel__title { color: #000; }
.voy-expertise-panel--tall .voy-expertise-panel__title {
	font-size: 28px;
	line-height: 31.64px;
	margin: 0 0 30.36px;
}
.voy-expertise-panel--tallest .voy-expertise-panel__title {
	font-size: 35px;
	line-height: 39.55px;
	margin: 0 0 42.45px;
}

.voy-expertise-panel--tall .voy-expertise-panel__cta,
.voy-expertise-panel--tallest .voy-expertise-panel__cta {
	width: 130px;
	height: 45px;
	padding: 0;
	border-radius: 27px;
	background: var(--voy-accent);
	color: #000;
	font-size: 16px;
	line-height: 20.96px;
	font-weight: 500;
}
.voy-expertise-panel--tall .voy-expertise-panel__cta:hover,
.voy-expertise-panel--tallest .voy-expertise-panel__cta:hover { background: #DCF05F; color: #000; }
.voy-expertise-panel--tall .voy-expertise-panel__cta { margin: 0 0 209px; }
.voy-expertise-panel--tallest .voy-expertise-panel__cta { margin: 0 0 363px; }

/* The two fixed pill gaps above are tuned for a 4-item list, and they are
   declared LATER than the --flow block at equal specificity (0,2,0), so the
   `margin-bottom: 0` up there never actually applied. That left a hard floor at
   y527 (pill bottom 164 + 363) which `margin-top: auto` can push the focus block
   below but never above — so home's 6-item and 5-item cards overflowed the card's
   bottom edge by 72px and 29px instead of rising to Figma's y439 / y482.
   Re-zero it here, after those rules, with the modifiers combined so only --flow
   cards are touched. Guarded to desktop: below 1001px the card goes height:auto
   and the mobile block's own 32px gap must keep winning. */
@media (min-width: 1001px) {
	.voy-expertise-panel--tall.voy-expertise-panel--flow .voy-expertise-panel__cta,
	.voy-expertise-panel--tallest.voy-expertise-panel--flow .voy-expertise-panel__cta { margin-bottom: 0; }
}

.voy-expertise-panel--tall .voy-expertise-panel__subhead,
.voy-expertise-panel--tallest .voy-expertise-panel__subhead {
	position: relative;
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 22px;
	line-height: 24.86px;
	color: #000;
	padding-bottom: 32px;
	margin-bottom: 26px;
	border-bottom: 1px solid var(--voy-border-rule, #D9D9D9);
}
/* Figma's affordance on these cards is a small diagonal arrow at the body's
   right edge, not a chevron or a "+". */
.voy-expertise-panel--tall .voy-expertise-panel__subhead::after,
.voy-expertise-panel--tallest .voy-expertise-panel__subhead::after {
	content: "";
	position: absolute;
	right: 7.3px;
	top: 4px;
	width: 22.7px;
	height: 22.7px;
	background-color: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
}

.voy-expertise--accordion .voy-expertise-panel--tall .voy-expertise-panel__list li,
.voy-expertise--accordion .voy-expertise-panel--tallest .voy-expertise-panel__list li {
	color: #858585;
	border: 0;
}
.voy-expertise--accordion .voy-expertise-panel--tall .voy-expertise-panel__list li {
	font-size: 15px;
	line-height: 19.65px;
	padding: 0 0 13.35px 39px;
}
.voy-expertise--accordion .voy-expertise-panel--tallest .voy-expertise-panel__list li {
	font-size: 20px;
	line-height: 26.2px;
	padding: 0 0 16.1px 39px;
}
/* Marker is the sitewide eyebrow triangle (10.53x8.43) turned 32deg — the same
   vector Figma repeats here, which is why its node box measures 13.4x12.7. */
.voy-expertise-panel--tall .voy-expertise-panel__list li::before,
.voy-expertise-panel--tallest .voy-expertise-panel__list li::before {
	width: 10.53px;
	height: 8.43px;
	left: 1.44px;
	background-color: #858585;
	transform: rotate(32deg);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
}
.voy-expertise-panel--tall .voy-expertise-panel__list li::before { top: 6.15px; }
.voy-expertise-panel--tallest .voy-expertise-panel__list li::before { top: 9.15px; }

/* -----------------------------------------------------------------------------
   Expertise-card photo crops
   -----------------------------------------------------------------------------
   Checked every card fill in the file with tools/figma_crops.py rather than
   assuming: on home, v2-c, v1-b, v2-b, v1, v2-a and desktop-6 the fills are
   plain `scaleMode: FILL` with NO imageTransform, which is exactly what
   `object-fit: cover` does — those need nothing. Only two crops are real:

   1. home / v2-c draw the photo through a MASK, not a fill transform: the image
      rect is 859x765 while the mask that clips it is 642x728, offset 173 left
      and 16 down. A mask offset is invisible to the fill data, so this one has
      to be read off the node geometry — and it only applies where the local file
      is still the uncropped source (compare the file's aspect to the box before
      applying any crop, or a pre-cropped export gets cropped twice).
   2. v2-d's four cards use `scaleMode: STRETCH` (Figma's UI calls it "crop")
      with a real imageTransform, zoomed on both axes — the one case cover
      genuinely cannot express.
   ----------------------------------------------------------------------------- */
/* Keyed on the FILE, not the panel: home's export is already the cropped
   1284x1456 (exactly 2x the 642x728 mask box), so re-applying the mask there
   would crop it twice. v2-c's is the full 1661x1479 source and needs it. */
.voy-expertise-panel--tallest .voy-expertise-panel__photo { position: relative; }
.voy-expertise-panel--tallest .voy-expertise-panel__photo img[src*="v2c-legal"] {
	position: absolute;
	max-width: none;
	width: 133.80%;    /* 859 / 642 */
	left: -26.95%;     /* -173 / 642 */
	height: 105.08%;   /* 765 / 728 */
	top: -2.20%;       /* -16 / 728 */
	object-fit: cover;
}

/* v2-d, in card order: finance, investment professionals, investor relations,
   legal & compliance. object-fit is `fill` because the transform already maps
   the whole source onto the box. */
body.voy-exp-stack-116 .toggles .toggle .voy-expertise-panel__photo img {
	position: absolute;
	max-width: none;
	object-fit: fill;
}
body.voy-exp-stack-116 .toggles .toggle:nth-of-type(1) .voy-expertise-panel__photo img {
	width: 134.29%; left: -4.53%; height: 204.46%; top: -50.39%;
}
body.voy-exp-stack-116 .toggles .toggle:nth-of-type(2) .voy-expertise-panel__photo img {
	width: 110.89%; left: -4.20%; height: 232.82%; top: -63.20%;
}
body.voy-exp-stack-116 .toggles .toggle:nth-of-type(3) .voy-expertise-panel__photo img {
	width: 112.62%; left: -11.39%; height: 141.56%; top: -19.16%;
}
body.voy-exp-stack-116 .toggles .toggle:nth-of-type(4) .voy-expertise-panel__photo img {
	width: 113.65%; left: -10.97%; height: 170.57%; top: -49.81%;
}

@media (max-width: 1000px) {
	.voy-expertise-panel--tall,
	.voy-expertise-panel--tallest {
		display: block;
		height: auto;
		padding: 24px 20px 32px;
	}
	.voy-expertise-panel--tall .voy-expertise-panel__photo,
	.voy-expertise-panel--tallest .voy-expertise-panel__photo {
		width: 100%;
		height: auto;
		aspect-ratio: 642 / 524;
	}
	.voy-expertise-panel--tall .voy-expertise-panel__body,
	.voy-expertise-panel--tallest .voy-expertise-panel__body {
		flex-basis: auto;
		max-width: none;
		margin-top: 24px;
	}
	.voy-expertise-panel--tall .voy-expertise-panel__cta,
	.voy-expertise-panel--tallest .voy-expertise-panel__cta { margin-bottom: 32px; }
	/* --flow pins the body to a fixed 757px so the focus block can bottom-anchor
	   against the 793px card. The card goes height:auto here, so that fixed height
	   would clip / strand the list on a phone — release it with the card. */
	.voy-expertise-panel--flow .voy-expertise-panel__body { height: auto; }
}

/* -----------------------------------------------------------------------------
   Stacked expertise cards (body.voy-exp-stack) — V1, V2-a (pitch 98) and
   V2-d (pitch 116).
   -----------------------------------------------------------------------------
   Same idea as Desktop-6's stack: Figma draws four identical 1380x446 white
   cards but spaces them only `pitch` apart, so each one covers the one above and
   a collapsed card shows just its title over the top slice of its own photo.
   Salient's [toggles] supplies the behaviour (a fixed collapsed height plus
   overflow:hidden); everything here is presentation.

   Desktop-6 keeps its own block further down — its type runs a size larger and
   its focus list a size smaller, so re-scoping it here would have changed a
   verified page.

   Card-relative geometry (card x30 wide 1380):
     photo            642x381 at x30, y32
     title            28px/31.64 serif #000 at x708, y37
     "Learn More"     130x45 r27 at x708, y99 — navy/white closed, lime/black open
     "Key Focus Areas" 22px/24.86 #000 at x708, y210
     hairline         645 wide at x708, y267
     arrow            22.7px diagonal at x1323, y214
     focus list       marker x708, text x747, 15px/19.65 #858585, 33px pitch
   ----------------------------------------------------------------------------- */
body.voy-exp-stack-98  { --voy-exp-pitch: 98px; }
body.voy-exp-stack-116 { --voy-exp-pitch: 116px; }

body.voy-exp-stack .toggles .toggle {
	position: relative;
	background: #fff;
	border-top: 1px solid var(--voy-border-rule, #D9D9D9);
	border-bottom: 0;
	margin: 0;
	padding: 0;
	overflow: hidden;
}
/* A collapsed card is exactly one pitch tall — Salient hides the panel body, so
   `height` (not just `max-height`) is what holds the strip open. */
body.voy-exp-stack .toggles .toggle:not(.open) {
	height: var(--voy-exp-pitch);
	max-height: var(--voy-exp-pitch);
}
body.voy-exp-stack .toggles .toggle.open { min-height: 446px; }

body.voy-exp-stack .toggles .toggle .toggle-title,
body.voy-exp-stack .toggles .toggle h3.toggle-title { margin: 0; }
body.voy-exp-stack .toggles .toggle .toggle-title a {
	position: relative;
	display: block;
	/* The title row is in normal flow, so it owns the card's y37 offset and the
	   body below simply continues from wherever that leaves off — which keeps the
	   whole block pitch-independent. */
	padding: 37px 60px 0 708px;
	min-height: 0;
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: 28px;
	line-height: 31.64px;
	color: #000;
	background: none;
	border: 0;
}
body.voy-exp-stack .toggles .toggle .toggle-title a i.fa { display: none !important; }
/* Figma's affordance is a small diagonal arrow at the card's right edge. */
body.voy-exp-stack .toggles .toggle .toggle-title a::after {
	content: "";
	position: absolute;
	right: 27px;                  /* card x1323 + 22.7 -> 30 short of x1410 */
	top: 177px;                   /* card y214, measured from this row's own top (37) */
	width: 22.7px;
	height: 22.7px;
	background-color: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	opacity: 0;
}
body.voy-exp-stack .toggles .toggle.open .toggle-title a::after { opacity: 1; }

body.voy-exp-stack .toggles .toggle .inner-toggle-wrap { padding: 0; margin: 0; }
body.voy-exp-stack .toggles .toggle .voy-expertise-panel {
	display: block;
	height: auto;
	background: none;
	border: 0;
	padding: 0;
	gap: 0;
}
/* Positioned against the CARD, not the toggle body, so the photo stays put while
   the card opens and is simply revealed. */
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__photo {
	position: absolute;
	left: 30px;
	top: 32px;
	width: 642px;
	height: 381px;
	flex: none;
	border-radius: 0;
	aspect-ratio: auto;
}
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__body {
	flex: none;
	max-width: none;
	/* title row ends at y68.64; the pill belongs at y99 */
	margin: 0;
	padding: 30.36px 23px 0 708px;
}
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__title { display: none; }
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__body > p { margin: 0; padding: 0; }
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__body > p > br { display: none; }

body.voy-exp-stack .toggles .toggle .voy-expertise-panel__cta {
	width: 130px;
	height: 45px;
	padding: 0;
	border-radius: 27px;
	background: var(--voy-navy);
	color: #fff;
	font-size: 16px;
	line-height: 20.96px;
	font-weight: 500;
	margin: 0 0 66px;                /* pill bottom y144 -> "Key Focus Areas" y210 */
}
/* Only the expanded card's pill is lime. */
body.voy-exp-stack .toggles .toggle.open .voy-expertise-panel__cta {
	background: var(--voy-accent);
	color: #000;
}
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__subhead {
	position: relative;
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 22px;
	line-height: 24.86px;
	color: #000;
	max-width: 645px;
	padding-bottom: 32px;
	margin-bottom: 26px;
	border-bottom: 1px solid var(--voy-border-rule, #D9D9D9);
}
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__list li {
	font-size: 15px;
	line-height: 19.65px;
	padding: 0 0 13.35px 39px;
	color: #858585;
	border: 0;
}
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__list li:last-child { padding-bottom: 0; }
/* Same eyebrow triangle turned 32deg as the single-card variants. */
body.voy-exp-stack .toggles .toggle .voy-expertise-panel__list li::before {
	width: 10.53px;
	height: 8.43px;
	top: 6.15px;
	left: 1.44px;
	background-color: #858585;
	transform: rotate(32deg);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
}

@media (max-width: 1000px) {
	body.voy-exp-stack .toggles .toggle:not(.open) { max-height: 64px; }
	body.voy-exp-stack .toggles .toggle .toggle-title a { padding: 20px 50px 20px 0; min-height: 64px; font-size: 1.5rem; }
	body.voy-exp-stack .toggles .toggle .toggle-title a::after { top: 20px; }
	body.voy-exp-stack .toggles .toggle .voy-expertise-panel__photo { position: static; width: 100%; height: auto; aspect-ratio: 642 / 381; }
	body.voy-exp-stack .toggles .toggle .voy-expertise-panel__body { padding: 24px 0 32px; }
}

/* =============================================================================
   DESKTOP-3 design system (body.voy-d3-system)
   =============================================================================
   Desktop-3 is not a restyle of the sitewide (Home / V2-final) system, it is a
   separate design language. Verified by extracting every text + shape node of
   Figma frame 2031:58 via the Figma MCP `get_design_context` tool (which returns
   the design as real CSS) and cross-checking against the REST node tree:

     - D3 is the ONLY one of the 11 versions with ZERO "Hedvig Letters Serif"
       nodes. Every other version (home, v1, v1-b, v2-a..d, desktop-4/5/6) uses
       the serif for headings; D3 sets ALL headings in Inter Medium (500).
     - Its neutrals are cool, not warm: panel/card fill #F8FAFF (not #F4F2ED),
       hairline #D9D9D9 (not #E2E0D9), body text pure #000 (not #1A1A1A), muted
       #858585 (not #6B6B6B), navy #183158 (not #1A2536).
     - Its corner radii are near-square (2px buttons / 3px photos / 4px cards /
       6px why-us cards), not the sitewide 16px + pill.
     - Its page ground is plain #FFF; only the What-We-Do+Markets band is #F8FAFF.

   So this is scoped to `body.voy-d3-system` rather than changed globally: Home is
   the client-approved deliverable and the other 9 versions are already
   pixel-verified against their own frames — none of them may move.
   -------------------------------------------------------------------------- */

/* Aspekta 550 — used by D3 for the two Expertise card titles only (nodes
   2031:120 / 2031:121). Self-hosted: it is not on Google Fonts. SIL OFL 1.1,
   license text kept alongside the file at assets/fonts/LICENSE-Aspekta.txt. */
@font-face {
	font-family: "Aspekta";
	src: url("assets/fonts/Aspekta-550.woff2") format("woff2");
	font-weight: 550;
	font-style: normal;
	font-display: swap;
}

body.voy-d3-system {
	/* Color */
	--voy-navy:          #183158;
	--voy-cream:         #F8FAFF;
	--voy-border:        #D9D9D9;
	--voy-text:          #000000;
	--voy-muted:         #858585;
	--voy-text-invert:   #FFFFFF;
	--voy-muted-invert:  #FFFFFF;
	--voy-eyebrow-color: #000000;

	/* Type — no serif anywhere on this page */
	--voy-font-heading: var(--voy-font-body);

	/* Display sizes, canvas 1440px: 85 / 75 / 50 / 26 / 12 */
	--voy-h1:      clamp(2.75rem, 5.9028vw, 5.3125rem);
	--voy-h2:      clamp(2.5rem,  5.2083vw, 4.6875rem);
	--voy-h2-sm:   clamp(2rem,    3.4722vw, 3.125rem);
	--voy-h3:      1.625rem;
	--voy-eyebrow: 0.75rem;

	--voy-radius: 4px;

	background: #FFFFFF;
	color: var(--voy-text);
}

/* Headings: Inter Medium, leading 1.05, tracking -0.02em (Figma -1.5px @75px,
   -1.7px @85px, -1px @50px all normalise to -0.02em). */
body.voy-d3-system h1,
body.voy-d3-system h2,
body.voy-d3-system h3,
body.voy-d3-system h4,
body.voy-d3-system .voy-hero__title,
body.voy-d3-system .voy-statement__body,
body.voy-d3-system .voy-band__text,
body.voy-d3-system .voy-cta__title,
body.voy-d3-system .voy-contactc__title {
	font-family: var(--voy-font-body);
	font-weight: 500;
	line-height: 1.05;
	letter-spacing: -0.02em;
}

/* Eyebrows: 12px / 600 / 1.2px tracking, black on light, white on navy. */
body.voy-d3-system .voy-eyebrow {
	font-size: var(--voy-eyebrow);
	letter-spacing: 0.1em;
	line-height: 1.05;
}

/* Section grounds: page is white; only What-We-Do + Markets sit on the #F8FAFF
   band (Figma rect 2031:60, y 987–2105 — one continuous band across both). */
body.voy-d3-system .voy-section--cream { background: transparent; }
body.voy-d3-system #what-we-do,
body.voy-d3-system #markets { background: var(--voy-cream); }
/* Section paddings live in the rhythm block further down; these two id
   selectors used to set them here and silently outranked it. */

/* --- Header ---------------------------------------------------------------
   D3's header (and in fact EVERY one of the 11 Figma frames) is just the logo
   on the left and a single "Contact Us" control on the right — there is no
   About / Markets / Expertise navigation anywhere in the design. D3 draws that
   control as the same split pair the page's buttons use: a 102x39 label box
   (node 2031:104) with the label at a 13px inset (node 2031:127), then a 2px
   gap, then a 39x39 square holding a 14x14 plus glyph (nodes 2031:101/102),
   both #F8FAFF with a 2px radius.

   Scoped to this page only: the nav is a shared WP menu, so hiding its items
   sitewide would silently restyle the client-approved Home page too.
   `#top .container` here measures exactly 1440px with a 1380px row at x=30, so
   these Figma coordinates map 1:1.
   -------------------------------------------------------------------------- */
/* The nav is hidden on EVERY landing page now, not just this one — see the
   sitewide rule near the end of this file. */
/* Header logo vertical position + size are handled sitewide near the end of this
   file (see "Header logo — sitewide Figma alignment"), including D3's variant. */

/* Figma puts the chip at x1283 y15 (its 39px arrow square then follows at
   x1387, drawn by .voy-btn__chip); Salient's own menu padding lands it at
   x1237 y22.8. */
body.voy-d3-system #header-outer #top nav ul.sf-menu > li.voy-nav-cta {
	margin: 0;
	padding: 0;
	position: relative;
	left: 46px;
	top: -7.8px;
}
body.voy-d3-system #header-outer #top nav ul li.voy-nav-cta > a {
	position: relative;
	display: inline-flex !important;
	align-items: center;
	justify-content: flex-start;
	box-sizing: border-box;
	width: 102px;
	height: 39px;
	padding: 0 0 0 13px;
	margin-right: 41px;
	border-radius: 2px !important;
	background: #F8FAFF !important;
	color: #000000 !important;
	font-family: var(--voy-font-body);
	font-size: 0.875rem;
	font-weight: 400;
	line-height: 1.31;
	letter-spacing: normal;
	white-space: nowrap;
}
body.voy-d3-system .voy-nav-cta > a .menu-title-text { color: inherit; }
/* Salient draws an animated underline on menu links — no such thing in Figma. */
body.voy-d3-system .voy-nav-cta > a .menu-title-text::after { display: none !important; }
/* The detached square + its plus glyph. */
body.voy-d3-system #header-outer #top nav ul li.voy-nav-cta > a::after {
	content: "";
	/* An earlier landing-template rule kills this pseudo-element with
	   `display: none !important` to suppress Salient's menu underline, so the
	   square has to re-declare display at the same weight or it never paints. */
	display: block !important;
	position: absolute;
	left: calc(100% + 2px);
	top: 0;
	width: 39px;
	height: 39px;
	border-radius: 2px;
	background-color: #F8FAFF;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Cpath d='M7 1v12M1 7h12'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: center;
	background-size: 14px 14px;
}

/* --- Hero (Figma y 0–987) -------------------------------------------------
   Figma stacks the hero content low: h1 top y=250, sub y=549, button y=626,
   band ends y=987. The sitewide hero is a vh-based centred block (`88vh`, set
   with enough weight that it needs !important here), so the whole rhythm is
   restated in canvas pixels and allowed to collapse on short viewports.        */
body.voy-d3-system .voy-hero {
	min-height: 987px !important;
	align-items: flex-start;
	padding-top: 250px;
	padding-bottom: 0;
}
body.voy-d3-system .voy-hero__inner { justify-content: flex-start; }
body.voy-d3-system .voy-hero__title {
	line-height: 1.01; /* Figma 85.85px on 85px — tighter than the 1.05 display default */
	max-width: 807px;
	margin-bottom: 41px; /* h1 bottom y=508 -> sub top y=549 */
}
body.voy-d3-system .voy-hero__actions { margin-top: 29px; } /* sub bottom y=597 -> button y=626 */
/* Figma's hero button is white (nodes 2031:123/124); only the CTA button near the
   footer is navy (2031:174/175), so the shared --dark variant is undone here. */
body.voy-d3-system .voy-hero .voy-btn,
body.voy-d3-system .voy-hero .voy-btn--dark {
	background: #FFFFFF;
	color: #000000;
}
@media (max-width: 900px) {
	body.voy-d3-system .voy-hero { min-height: 620px !important; padding-top: 140px; }
}
/* Figma overlays the photo with one flat rgba(0,0,0,0.76) rect (node 2031:78),
   not the sitewide left-to-right navy gradient. */
body.voy-d3-system .voy-hero__scrim { background: rgba(0, 0, 0, 0.76); }
body.voy-d3-system .voy-hero__foot { align-items: flex-start; width: 100%; max-width: none; }
body.voy-d3-system .voy-hero__sub {
	font-size: 1.125rem;
	line-height: 1.31;
	color: #FFFFFF; /* Figma fill is pure white, not the 82%-alpha sitewide value */
	width: 447px;
	max-width: 100%;
}

/* --- Buttons -------------------------------------------------------------- */
/* D3's button is two separate near-square boxes with a 2px gap — a 120x39 label
   box and a detached 39x39 icon box — not the sitewide 999px pill with an inset
   lime chip. The existing markup is <a class="voy-btn"><span class="voy-btn__chip">,
   so the label box is the <a> itself and the chip is lifted out to its right;
   `background: inherit` keeps the two boxes the same colour in both variants. */
body.voy-d3-system .voy-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: flex-start;
	width: 120px;
	height: 39px;
	padding: 0 0 0 14px;
	margin-right: 41px;
	border-radius: 2px;
	font-family: var(--voy-font-body);
	font-size: 0.875rem;
	font-weight: 400;
	line-height: 1.31;
	letter-spacing: normal;
	background: #F8FAFF;
	color: #000000;
}
body.voy-d3-system .voy-btn--dark {
	background: var(--voy-navy);
	color: #FFFFFF;
}
body.voy-d3-system .voy-btn__chip {
	position: absolute;
	left: calc(100% + 2px);
	top: 0;
	width: 39px;
	height: 39px;
	margin: 0;
	border-radius: 2px;
	background: inherit;
	color: inherit;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
body.voy-d3-system .voy-btn__chip svg { width: 16px; height: 14px; }

/* --- What We Do / Philosophy statements (Figma 50px) ---------------------- */
body.voy-d3-system .voy-statement__body {
	font-size: var(--voy-h2-sm);
	color: var(--voy-text);
	max-width: 975px;
}

/* --- Markets cards (Figma 339x245, r4, #D9D9D9 hairline, NO fill) --------- */
/* Figma columns sit at x 30/377/724/1071 — an 8px gutter, not the sitewide 24px:
   4 x 339 + 3 x 8 = 1380, the exact content width. */
body.voy-d3-system .voy-markets__grid { gap: 8px; border: 0; }
body.voy-d3-system .voy-market-card {
	background: transparent;
	border: 1px solid var(--voy-border);
	border-radius: 4px;
}
body.voy-d3-system .voy-market-card__label {
	font-weight: 500;
	font-size: 1.125rem;
	line-height: 1.13;
	color: var(--voy-text);
}

/* --- Expertise (navy, Figma y 2105–3003) --------------------------------- */
body.voy-d3-system .voy-2panel--split .voy-2panel__head h2 { font-size: var(--voy-h2); }
body.voy-d3-system .voy-2panel--split .voy-2panel__intro {
	font-size: 1.125rem;
	line-height: 1.31;
	color: #FFFFFF;
	max-width: 403px;
}
body.voy-d3-system .voy-2panel--split .nectar-fancy-box { border-radius: 4px; }
/* Card titles are the one place D3 leaves Inter: Aspekta 550 26px / 1.13. */
body.voy-d3-system .voy-2panel--split .nectar-fancy-box .inner h3 {
	font-family: "Aspekta", var(--voy-font-body);
	font-weight: 550;
	font-size: 1.625rem;
	line-height: 1.13;
	letter-spacing: normal;
	color: var(--voy-text);
}
/* Figma: card 900x373 at x510, photo 489x365 at x917 — a flat 4px inset on the
   top/right/bottom, so the photo runs the full card height rather than floating. */
body.voy-d3-system .voy-2panel--split .nectar-fancy-box .inner { padding: 4px; }
body.voy-d3-system .voy-2panel--split .voy-2panel__body { padding: 26px 0 26px 30px; }
body.voy-d3-system .voy-2panel--split .voy-2panel__img-side {
	border-radius: 3px;
	align-self: stretch;
	height: auto;
	object-fit: cover;
}
/* The "Learn More" blob (node 2031:146) is 54px square, not 36px. */
body.voy-d3-system .voy-2panel--split .voy-2panel__arrow { width: 54px; height: 54px; }
body.voy-d3-system .voy-2panel--split .voy-2panel__arrow svg { width: 54px; height: 54px; }
/* Match the list bullet to the eyebrow glyph: same Figma vector, 13.4x12.7. */
body.voy-d3-system .voy-2panel--split .nectar-fancy-box .inner li::before {
	width: 0.62em;
	height: 0.5em;
	border: 0;
	background: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	transform: rotate(32deg);
	top: 0.45em;
}

/* --- Why Us (Figma y 3003–3742) ------------------------------------------ */
/* Head is centred in Figma (eyebrow x=705 against a 720px page centre). */
body.voy-d3-system .voy-whyus2__head { text-align: center; }
body.voy-d3-system .voy-whyus2__head .voy-eyebrow { justify-content: center; }
body.voy-d3-system .voy-whyus2__head h2 {
	font-size: var(--voy-h2);
	max-width: 853px;
	margin-inline: auto;
}
/* Figma columns sit at x 30/493/957 — 453px cards with a 10px gutter. VC's own
   column padding gives 441px cards with a 28px gutter, so drive the row directly. */
body.voy-d3-system .voy-whyus2 .wpb_row { display: flex; gap: 10px; }
body.voy-d3-system .voy-whyus2 .wpb_row .wpb_column { flex: 1 1 0; width: auto; margin: 0; padding: 0; }
body.voy-d3-system .voy-whyus2 .wpb_row .vc_column-inner { padding-left: 0; padding-right: 0; }
body.voy-d3-system .voy-whyus2 .nectar-fancy-box {
	background: var(--voy-cream);
	border: 1px solid var(--voy-border);
	border-radius: 6px;
}
body.voy-d3-system .voy-whyus2 .nectar-fancy-box .inner h3 {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 1.125rem;
	line-height: 1.13;
	letter-spacing: normal;
	color: var(--voy-text);
}
body.voy-d3-system .voy-whyus2 .nectar-fancy-box .inner p {
	font-size: 0.9375rem;
	line-height: 1.31;
	color: var(--voy-muted);
}
body.voy-d3-system .voy-whyus2__icon { width: 20px; height: 20px; }

/* --- Imagery band (Figma y 3742–4640; 75px white, bottom-left) ------------ */
/* The sitewide left-aligned band caps its column at 620px; Figma's D3 text block
   is 834px wide and sits at the bottom of the 898px band, not vertically centred. */
/* Keep the container at full content width so the text stays flush to the 30px
   gutter (capping the container itself re-centres it); cap only the text. */
body.voy-d3-system .voy-band--align-left .voy-band__inner {
	max-width: var(--voy-content-max);
	justify-content: flex-end;
}
body.voy-d3-system .voy-band--content { align-items: flex-start; }
/* Copy sits at y4340 in a band that starts at y3742. */
body.voy-d3-system .voy-band--align-left .voy-band__inner { padding-top: 598px; }
/* The band container adds its own gutter on top of the page container's. */
body.voy-d3-system .voy-band .voy-band__inner { padding-inline: 0; }
body.voy-d3-system .voy-band__text {
	font-size: var(--voy-h2);
	color: #FFFFFF;
	width: 100%;
	max-width: 834px;
}
/* Figma has no gradient here — the photo itself is uniformly darkened. */
body.voy-d3-system .voy-band__scrim { background: rgba(0, 0, 0, 0.45); }

/* =============================================================================
   DESKTOP-3 section rhythm (frame 2031:58, 1440x7418)
   =============================================================================
   This frame was invisible to the audit until 2026-08-11: the id on file,
   `2008:58`, is the Figma SECTION wrapping it, and a section reports its own
   1440x1024 header box — so everything measured from it was a fragment. Always
   take the FRAME inside a SECTION of the same name (tools/figma_landmarks.py
   now refuses a non-FRAME id outright).

   Section bounds, measured off the frame:
     hero          0    -  987   (photo 1508x1006 bled to y-19)
     what we do    987  - 1455   (#F8FAFF; eyebrow y1152, h2 y1195 50px/52.5)
     markets       1455 - 2105   (8 cards 339x245 from y1532, 8px gutters)
     expertise     2105 - 3003   (navy; eyebrow y2176, h2 y2220 75px, 900x373 panels)
     why us        3003 - 3742   (eyebrow y3125, h2 y3169, 3 cards 453x200 at y3403)
     imagery band  3742 - 4640   (1440x898; copy y4340, 834 wide, left)
     philosophy    4640 - 5188   (body y4805 at x502, eyebrow y4814 at x30)
     partners      5188 - 5833   (h2 y5311 + sub y5388 left, 4x2 grid of 164px cards)
     testimonials  5833 - 6568   (navy; eyebrow y5904, h2 y5948, quote y6182)
     cta           6568 - 7040   (h2 y6746, 161x39 button y6903)
     contact       7040 - 7418   (rule y7120, columns y7192, rule y7349, legal y7372)
   -------------------------------------------------------------------------- */
body.voy-d3-system .voy-statement { padding: 165px 0 0; }
body.voy-d3-system .voy-statement .voy-eyebrow { margin: 0 0 21.7px; }

/* wpautop wraps the loose spans/SVGs authored inside these shortcode bodies in
   paragraphs and leaves empty ones behind; their margins are what pushed the
   expertise, why-us and CTA blocks past their Figma heights. */
body.voy-d3-system .voy-2panel__head > p:empty,
body.voy-d3-system .voy-whyus2 .nectar-fancy-box p:empty { display: none; }
body.voy-d3-system .voy-whyus2 .nectar-fancy-box .inner > p { margin: 0; }
body.voy-d3-system .voy-2panel .vc_column-inner,
body.voy-d3-system .voy-whyus2 .vc_column-inner { padding-top: 0; }

/* -------- Expertise: two 900x373 panels, 4px apart, from x510 ------------- */
body.voy-d3-system .voy-2panel .nectar-fancy-box {
	box-sizing: border-box;
	width: 900px;
	max-width: 100%;
	height: 373px;
	min-height: 0;
	margin: 0 0 4px;
	overflow: hidden;
}
body.voy-d3-system .voy-2panel .vc_row { margin-bottom: 0; }
/* The eyebrow is inline-flex sitewide, so it sits on a 23.58px line box and
   starts ~8.7px below its container's content edge. */
body.voy-d3-system .voy-2panel__head .voy-eyebrow,
body.voy-d3-system .voy-testimonials2__head .voy-eyebrow,
body.voy-d3-system .voy-whyus2__head .voy-eyebrow {
	display: flex;
	margin: 0 0 31.4px;   /* every section head on this frame is eyebrow +44 -> h2 */
}
body.voy-d3-system .voy-2panel__head h2,
body.voy-d3-system .voy-testimonials2__head h2,
body.voy-d3-system .voy-whyus2__head h2 { margin-top: 0; }
body.voy-d3-system .voy-cta .voy-container > p:empty { display: none; }
body.voy-d3-system .voy-2panel .nectar-fancy-box:last-child { margin-bottom: 0; }

/* -------- Why us: head y3125/3169, three 453x200 cards at y3403 ----------- */
body.voy-d3-system .voy-whyus2__head { margin-bottom: 76.5px; }
body.voy-d3-system .voy-whyus2 h2 { margin-top: 0; }
body.voy-d3-system .voy-whyus2 .vc_row { margin-bottom: 0; }
/* Card 453x200 at y3403: icon 20px at +27, title 18px/20.34 at +97,
   body 15px/19.65 at +132. */
body.voy-d3-system .voy-whyus2 .nectar-fancy-box {
	box-sizing: border-box;
	min-height: 198px;
	padding: 0;
}
body.voy-d3-system .voy-whyus2 .nectar-fancy-box .inner {
	box-sizing: border-box;
	min-height: 198px !important;   /* the shortcode writes min-height inline */
	padding: 27px 32px 0;
}
body.voy-d3-system .voy-whyus2 .nectar-fancy-box .voy-whyus2__icon { margin-bottom: 50px; }
body.voy-d3-system .voy-whyus2 .nectar-fancy-box h3 {
	margin: 0 0 14.66px;
	font-size: 18px;
	line-height: 20.34px;
	font-weight: 600;
}
body.voy-d3-system .voy-whyus2 .nectar-fancy-box p {
	margin: 0;
	font-size: 15px;
	line-height: 19.65px;
}

/* -------- Testimonials: eyebrow +71, h2 +115, quote +349, controls +622 --- */
body.voy-d3-system .voy-testimonials2 { padding-block: 71px 71px; }
body.voy-d3-system .voy-testimonials2 .voy-eyebrow { margin: 0 0 31.4px; }
body.voy-d3-system .voy-testimonials2 .vc_row { margin-bottom: 0; }
body.voy-d3-system .voy-testimonials2 h2 { margin-top: 0; }

/* -------- CTA: h2 y6746, 161x39 button y6903 ----------------------------- */
body.voy-d3-system .voy-cta__title { margin-bottom: 52px; }
/* The sitewide CTA container is a flex column with a 36px gap, which stacks on
   top of the heading's own margin. */
body.voy-d3-system .voy-cta .voy-container { gap: 0; }
body.voy-d3-system .voy-cta__actions { margin: 0; }

/* -------- Contact columns: rule y7120, heads y7192, rule y7349 ----------- */
body.voy-d3-system .voy-contactc__cols { padding: 72px 0 62px; }
body.voy-d3-system .voy-contactc__legal { padding-top: 23px; }
body.voy-d3-system .voy-markets { padding: 74.5px 0 75px; }
body.voy-d3-system .voy-2panel { padding: 71px 0 77px; }
body.voy-d3-system .voy-whyus2 { padding: 122px 0 139px; }
body.voy-d3-system .voy-band--tall { min-height: 898px; height: 898px; }
body.voy-d3-system .voy-statement--split { padding: 165px 0 120.5px; }
/* The statement body carries a 75px tail that belongs to no Figma node. */
body.voy-d3-system .voy-statement__body { margin-top: 0; padding-bottom: 0; }
body.voy-d3-system .voy-logos-section.voy-logos-section--grid { padding: 123px 0 165px; }
body.voy-d3-system .voy-cta { padding: 178px 0 98px; }
body.voy-d3-system .voy-contactc { padding: 80px 0 26px; }

/* --- Partners ------------------------------------------------------------- */
/* Figma sets this one as two columns — the heading block at x30 and a 4x2 grid
   of 164px cards from x502 — rather than the sitewide marquee. The eight cards
   in the frame all carry the SAME placeholder image, so the real shipped logos
   are used instead of repeating a placeholder eight times. */
body.voy-d3-system .voy-logos-grid {
	display: grid;
	grid-template-columns: 472px 746px;
	column-gap: 0;
	align-items: start;
}
body.voy-d3-system .voy-logos-grid__title {
	font-size: var(--voy-h2-sm);
	margin: 0 0 25px;
}
body.voy-d3-system .voy-logos-grid__cards {
	display: grid;
	grid-template-columns: repeat(4, 164px);
	gap: 30px;
	margin: 0;
	padding: 0;
	list-style: none;
}
body.voy-d3-system .voy-logos-grid__card {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 164px;
	height: 164px;
	border-radius: 4px;
	background: var(--voy-cream);
}
body.voy-d3-system .voy-logos-grid__card .voy-logos__img {
	height: auto;
	max-width: 158px;
	max-height: 57px;
	opacity: 1;
}
@media (max-width: 1000px) {
	body.voy-d3-system .voy-logos-grid { grid-template-columns: 1fr; row-gap: 32px; }
	body.voy-d3-system .voy-logos-grid__cards { grid-template-columns: repeat(2, 1fr); }
	body.voy-d3-system .voy-logos-grid__card { width: auto; }
}

/* "Our Partners" is a 50px Inter Medium heading in Figma (node 2031:142), not an
   uppercase eyebrow — see the matching markup change in page-content/desktop-3.html. */
body.voy-d3-system .voy-logos-section h2 {
	font-size: var(--voy-h2-sm);
	margin: 0 0 1.25rem;
}
/* The sitewide logos section centres its intro; Figma's D3 block is flush left
   at the 30px gutter (heading node 2031:142 x=30, subtitle node 2031:107 x=30). */
body.voy-d3-system .voy-logos-section,
body.voy-d3-system .voy-logos-section .voy-container { text-align: left; }
body.voy-d3-system .voy-logos__subtitle {
	font-size: 1.125rem;
	line-height: 1.31;
	color: var(--voy-text);
	max-width: 349px;
	margin-inline: 0;
}

/* --- Testimonials (navy, Figma y 5833–6568) ------------------------------ */
/* Figma builds this as a slider: quote on top, then a controls row holding the
   "1/4" counter bottom-left (node 2031:108), a centred pair of 42px outlined
   circular arrows (group 2031:382), and the right-aligned attribution
   (node 2031:109, name in Inter Bold over role in Inter Regular). */
body.voy-d3-system .voy-testimonials2__head h2 { font-size: var(--voy-h2); }
body.voy-d3-system .voy-testimonials2 .testimonial_slide p,
body.voy-d3-system .voy-testimonials2 blockquote p {
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: clamp(1.5rem, 2.6389vw, 2.375rem);
	line-height: 1.05;
	letter-spacing: -0.02em;
	color: #FFFFFF;
	margin: 0;
}
/* Salient insets its blockquote to leave room for the decorative quote mark and
   speech-bubble arrow; Figma's quote runs the full 746px column width. */
body.voy-d3-system .voy-testimonials2 .testimonial_slider blockquote {
	background: none;
	border: 0;
	padding: 0;
	margin: 0;
	width: 100%;
	max-width: 746px;
}
body.voy-d3-system .voy-testimonials2 .testimonial_slider .slides { padding: 0; margin: 0; width: 100%; max-width: 746px; }
body.voy-d3-system .voy-testimonials2 .testimonial_slider blockquote p { padding: 0; }
body.voy-d3-system .voy-testimonials2 .testimonial-name,
body.voy-d3-system .voy-testimonials2 .testimonial_slider .title {
	display: block;
	text-align: right;
	position: relative;
	z-index: 1;
	pointer-events: none;
	font-family: var(--voy-font-body);
	font-size: 1.125rem;
	line-height: 1.31;
	color: #FFFFFF;
}
body.voy-d3-system .voy-testimonials2 .testimonial-name {
	font-weight: 700;
	margin-top: 4.375rem; /* Figma: quote bottom y6382 -> attribution top y6452 */
}
/* Figma node 2031:109 fills BOTH lines pure white (only the weight differs). */
body.voy-d3-system .voy-testimonials2 .testimonial_slider .title {
	font-weight: 400;
	font-style: normal;
	color: #FFFFFF;
	opacity: 1;
}
/* Figma vertical rhythm inside the navy band (top y5833): eyebrow +71, h2 +115,
   quote +349, controls +619, band ends +735. */
/* padding lives in the D3 rhythm block above */
body.voy-d3-system .voy-testimonials2__head .voy-eyebrow { margin-bottom: 31px; }
body.voy-d3-system .voy-testimonials2 .testimonial_slider { padding-top: 278px; }
@media (max-width: 900px) {
	body.voy-d3-system .voy-testimonials2 .testimonial_slider { padding-top: 2.5rem; }
}
body.voy-d3-system .voy-testimonials2 .open-quote,
body.voy-d3-system .voy-testimonials2 .close-quote { color: inherit; }
body.voy-d3-system .voy-testimonials2 .bottom-arrow { display: none; }

/* Salient's own testimonial controls ARE Figma's design: `.controls` renders a
   scrolling "n / total" counter and `.testimonial-next-prev` a prev/next pair. Both
   only appear once the shortcode has >1 testimonial, so they were invisible while the
   section had a single quote. With four slides they render natively — no custom
   slider script needed, and the counter tracks the real slide automatically.
   Figma (navy band top y5833): counter x502 y6464, arrow pair x829-920 y6455 (42px
   circles, 1.5px white stroke, 7px apart, centred on the 746px quote column). */
/* The 90px here reserved room for controls Salient positions absolutely anyway;
   Figma ends the section 71px under the arrows, so it is pure overhang. */
body.voy-d3-system .voy-testimonials2 .testimonial_slider { position: relative; padding-bottom: 0; }
/* Salient measures the tallest slide and writes the result inline, before web
   fonts settle, so the viewport ends up a floating number that drifts. Figma's
   quote block runs y6182-6497, so pin it. */
body.voy-d3-system .voy-testimonials2 .testimonial_slider .slides {
	height: 315px !important;
	margin-bottom: 0;
}
/* Only the active quote shows once the behaviour script marks one; without JS the
   quotes simply stack, which still reads correctly. */
body.voy-d3-system .voy-tslider--ready .slides > blockquote { display: none; }
body.voy-d3-system .voy-tslider--ready .slides > blockquote.is-active { display: block; }
/* Salient's counter is a 20px clipping window over a stacked list — the script
   translates the list; this just makes the movement smooth. */
body.voy-d3-system .voy-testimonials2 .controls .control-wrap ul { transition: transform 0.35s ease; }
/* the strip is horizontal (floated <li>), so it must be free to shift on X */
body.voy-d3-system .voy-testimonials2 .controls .control-wrap { overflow: hidden; }
body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev a { cursor: pointer; }


body.voy-d3-system .voy-testimonials2 .controls {
	position: absolute;
	left: 0;
	right: auto;
	bottom: 137px; /* lands the counter on Figma's y6464 baseline */
	top: auto;
	width: auto;
	margin: 0;
	font-family: var(--voy-font-body);
	font-size: 1.125rem;
	font-weight: 400;
	line-height: 1.31;
	color: #FFFFFF;
	text-align: left;
}
/* Figma renders the counter tight ("1/4"); Salient spaces the parts out. */
body.voy-d3-system .voy-testimonials2 .controls .out-of,
body.voy-d3-system .voy-testimonials2 .controls .total {
	color: #FFFFFF;
	margin: 0;
	padding: 0;
}
body.voy-d3-system .voy-testimonials2 .controls .control-wrap { margin-right: 0; }

/* Salient styles these through `.testimonial_slider[data-style="minimal"] ... .prev`
   — four class/attribute selectors — so the page scope needs the slider class too
   or it loses the cascade and the arrows stay 40px and absolutely stacked. */
body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev {
	position: absolute;
	left: 373px; /* half of the 746px quote column */
	bottom: 128px;
	/* The active blockquote overlaps this line and Salient stacks it at z-index 20
	   inline (for its fade transition), so anything lower here gets covered and
	   swallows every click — elementFromPoint at the arrow centre returned the
	   blockquote, not the arrow. */
	z-index: 30;
	transform: translateX(-50%);
	display: flex;
	gap: 7px;
	width: auto;
	height: auto;
	margin: 0;
}
body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev a {
	/* relative + z-index so each arrow stacks above the absolutely-positioned
	   blockquote (z-index 1) that shares this line — otherwise the quote body sits
	   on top and swallows the clicks. */
	position: relative;
	z-index: 1;
	transform: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	margin: 0;
	opacity: 1;
	border: 1.5px solid #FFFFFF !important;
	border-radius: 50% !important;
	background: transparent !important;
	color: #FFFFFF !important;
	font-size: 18px;
	line-height: 1;
	transition: background-color 0.2s ease, color 0.2s ease;
}
body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev a:hover,
body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev a:focus-visible {
	background: #FFFFFF !important;
	color: var(--voy-navy) !important;
}

/* --- CTA ------------------------------------------------------------------ */
body.voy-d3-system .voy-cta__title {
	font-size: var(--voy-h2-sm);
	max-width: 708px;
}

/* --- Footer / contact ----------------------------------------------------- */
/* Column labels are 18px semibold #858585 in Figma, not 13px muted caps. */
body.voy-d3-system .voy-contactc__label {
	font-size: 1.125rem;
	font-weight: 600;
	line-height: 1.13;
	letter-spacing: normal;
	text-transform: none;
	color: var(--voy-muted);
}
body.voy-d3-system .voy-contactc__link {
	font-size: 1.125rem;
	font-weight: 600;
	line-height: 1.13;
	color: var(--voy-text);
}
/* D3's footer has no "Get In Touch" heading / blurb / "Let's Connect" link — the
   frame goes straight from the CTA band (node 2031:171 + its button) to the
   Contact/Socials/Address rule-separated columns (nodes 2031:178-190). */
body.voy-d3-system .voy-contactc__top { display: none; }
body.voy-d3-system .voy-contactc__addr,
body.voy-d3-system .voy-contactc__legal {
	font-size: 0.9375rem;
	line-height: 1.31;
	color: var(--voy-muted);
}
body.voy-d3-system .voy-contactc__addr { max-width: 121px; } /* Figma node 2031:178 */
/* Figma sets a small arrow after each contact link (nodes 2031:187 / 2031:188). */
body.voy-d3-system .voy-contactc__link::after {
	content: "";
	display: inline-block;
	width: 16px;
	height: 14px;
	margin-left: 10px;
	vertical-align: middle;
	background-color: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 14' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 7h13M9 2l5 5-5 5'/%3E%3C/svg%3E") no-repeat center / contain;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 14' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 7h13M9 2l5 5-5 5'/%3E%3C/svg%3E") no-repeat center / contain;
}

/* =============================================================================
   Header logo — sitewide Figma alignment
   =============================================================================
   Audited across all 11 frames. Two facts drive this block:

   1. The logo geometry is NOT the same in every frame. Eight of them (home, v1,
      v1-b, v2-a/b/c/d, desktop-6) draw it at x30 y30, 260 x 27.23. The other
      three (desktop-3/4/5) draw it 2.31% larger and 6px higher: x30 y24,
      266 x 27.86. Both share the same 9.548 aspect, so it is a pure scale.
   2. `assets/logo-header.svg` has a `0 0 260 28` viewBox whose INK measures
      260 x 27.30 (verified by rendering it at 10x and reading the pixel bounds)
      — i.e. ~0.7 units of empty space at the bottom of the box, not a stretched
      logo. So the rendered 260x28 element already puts the artwork at Figma's
      260x27.23 within a rounding hair; only the box's top edge needs moving, and
      only the three larger frames need a width change.

   Salient centres the logo in its 84px header, landing the ink at y28 on every
   page — 2px high for the eight, 4px low for the three.
   -------------------------------------------------------------------------- */
#logo { position: relative; top: 2px; }

body.voy-logo-lg #logo { top: -3.7px; }

/* Salient sizes the logo from `#header-outer #logo img` (height) and
   `#top #logo img` (width: auto) — both two-ID selectors, so the page scope has
   to carry an id of its own to outrank them. */
/* `:not(.small-nav)` keeps this to the at-rest header. Salient shrinks the logo
   proportionally once the header goes sticky, and a hard size here would pin
   these three pages at full size while the other eight shrank — Figma has no
   scrolled state, so its own behaviour is left to run. */
body.voy-logo-lg #header-outer:not(.small-nav) #logo img {
	width: 266px;
	height: 28.65px; /* 266/260 of the 28-unit viewBox -> 27.86 of ink, per Figma */
}
body.voy-logo-lg #header-outer.small-nav #logo { top: 2px; }

/* Salient scales the logo down proportionally when the header goes sticky; Figma
   has no scrolled state to match, so that behaviour is left alone. */

/* =============================================================================
   Desktop-3 (Slider) — page-id-159
   =============================================================================
   Same design system as page 35 (see the Desktop-3 block above), with the hero
   swapped from the custom `voy_hero` block to Salient's OWN Nectar Slider
   (`[nectar_slider location="VOY Hero"]`), so every slide — background photo,
   heading, caption, button + link, overlay colour — is editable from the WP
   dashboard under Slides, with no code change.

   Everything below only re-skins Salient's native slide markup to the Figma hero
   spec (frame 2031:58): 85px Inter Medium headline at x30/y250, 18px white
   caption, and the split white button. The slider chrome itself (arrows + "1 → 6"
   counter) is Salient's own and is intentionally beyond Figma, which has no
   hero slider of any kind in any of its 11 frames.
   -------------------------------------------------------------------------- */
/* --- Nectar Slider hero --------------------------------------------------- */
/* Salient puts `opacity: .6` on its slide overlay on top of whatever colour the
   slide sets, so the rgba(0,0,0,0.76) from Figma node 2031:78 was landing at an
   effective 0.46 and the photo read about twice as bright as the design. The
   alpha is already in the colour — drop the extra multiplier. */
body.page-id-159 .nectar-slider-wrap .slide-bg-overlay { opacity: 1; }
/* Salient centres the slide content in a 1245px box at x98; the page grid is a
   1440 container with a 30px gutter, so the slide container is re-gridded to
   match and the content pinned to the same x=30 line as the logo. */
body.page-id-159 .nectar-slider-wrap .swiper-slide .container {
	max-width: 1440px;
	width: 100%;
	margin-inline: auto;
	padding-inline: 30px;
	box-sizing: border-box;
}
/* Salient's `.content` is absolutely positioned and carries its own 90px inline
   padding, which pushed the headline to x90 and squeezed it to 627px. Zero the
   padding so the container's 30px gutter alone sets x, and pin the top to Figma's
   h1 y=250 instead of Salient's vertical centring. */
body.page-id-159 .nectar-slider-wrap .swiper-slide .content {
	max-width: 807px;
	width: 807px;
	margin: 0;
	padding: 0 !important;
	top: 250px !important;
	left: 30px !important; /* absolute box resolves against the container's border box */
	bottom: auto !important;
	transform: none !important;
	text-align: left;
}
body.page-id-159 .nectar-slider-wrap .swiper-slide h1,
body.page-id-159 .nectar-slider-wrap .swiper-slide .ns-heading-el {
	font-family: var(--voy-font-body) !important;
	font-weight: 500 !important;
	font-size: var(--voy-h1) !important;
	line-height: 1.01 !important;
	letter-spacing: -0.02em !important;
	color: #FFFFFF !important;
	margin: 0 0 41px !important;
	max-width: 807px;
	text-transform: none !important;
}
body.page-id-159 .nectar-slider-wrap .swiper-slide p {
	font-family: var(--voy-font-body) !important;
	font-weight: 400 !important;
	font-size: 1.125rem !important;
	line-height: 1.31 !important;
	color: #FFFFFF !important;
	max-width: 447px;
	margin: 0 0 29px !important;
	opacity: 1 !important;
}

/* Button: same split white pair as the rest of D3 (Figma nodes 2031:123/124) —
   a 120x39 label box, a 2px gap, then a 39x39 square holding the arrow. */
body.page-id-159 .nectar-slider-wrap .swiper-slide .buttons { margin: 0; }
body.page-id-159 .nectar-slider-wrap .swiper-slide .buttons a {
	position: relative;
	display: inline-flex !important;
	align-items: center;
	justify-content: flex-start;
	box-sizing: border-box;
	width: 120px;
	height: 39px;
	min-width: 0;
	padding: 0 0 0 14px !important;
	margin: 0 41px 0 0 !important;
	border: 0 !important;
	border-radius: 2px !important;
	background: #FFFFFF !important;
	color: #000000 !important;
	font-family: var(--voy-font-body) !important;
	font-size: 0.875rem !important;
	font-weight: 400 !important;
	line-height: 1.31 !important;
	letter-spacing: normal !important;
	text-transform: none !important;
	white-space: nowrap;
}
body.page-id-159 .nectar-slider-wrap .swiper-slide .buttons a::after {
	content: "";
	position: absolute;
	left: calc(100% + 2px);
	top: 0;
	width: 39px;
	height: 39px;
	border-radius: 2px;
	background-color: #FFFFFF;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 14' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 7h13M9 2l5 5-5 5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: center;
	background-size: 16px 14px;
}
/* Salient appends a hover-fill span inside its buttons — it would paint over the
   flat white box. */
body.page-id-159 .nectar-slider-wrap .swiper-slide .buttons a > .button-bg,
body.page-id-159 .nectar-slider-wrap .swiper-slide .buttons a::before { display: none !important; }

/* Below ~900px the fixed 250px top would crowd the shorter slide, so let it flow. */
@media (max-width: 900px) {
	body.page-id-159 .nectar-slider-wrap .swiper-slide .content {
		width: 100%;
		top: 140px !important;
	}
}

/* -----------------------------------------------------------------------------
   Hero headline wrap width (sitewide)
   -------------------------------------------------------------------------- */
/* Figma sets the hero H1 text box to 923px on the eight standard frames — the
   `8.6em` here resolved to 731px, so the headline broke onto different lines than
   the design everywhere except Desktop-3 (which sets its own 807px). Expressed in
   em so it tracks the clamped font size instead of pinning a desktop pixel value.
   923 / 85 = 10.86em. */
.voy-hero__title { max-width: 10.86em; }

/* =============================================================================
   DESKTOP-4 / DESKTOP-5 type scale (body.voy-d45-system)
   =============================================================================
   A third scale, distinct from both the sitewide one and Desktop-3's. Verified
   against Figma frames 79:338 and 142:680, which are identical to each other:

     hero H1              90px / lh 90.9 / box 891   (sitewide renders 85px)
     statement body       36px / lh 40.7 / box 949   (was 38.4px)
     "Markets We Serve"   50px / lh 56.5 / box 563   (was 60px)
     imagery band text    40px / lh 45.2 / box 733   (was 34px)
     expertise heading    40px / lh 45.2 / box 476   (was 60px)
     card titles          40px / lh 45.2             (already correct)
     "Get In Touch"       40px / lh 45.2 / box 476   (was 48px)
     "Let's Connect"      30px / lh 39.3

   All line heights are 1.13 apart from the hero (1.01) and the CTA link (1.31).
   -------------------------------------------------------------------------- */
body.voy-d45-system {
	--voy-h1: clamp(2.75rem, 6.25vw, 5.625rem);   /* 90px @1440 */
	--voy-h2: clamp(2rem,    3.4722vw, 3.125rem); /* 50px @1440 */
	--voy-h3: clamp(1.75rem, 2.7778vw, 2.5rem);   /* 40px @1440 */

	/* Colour, and it is its own system exactly like Desktop-3's. Every text fill
	   in both frames is pure #000000 or #858585 — never the sitewide #1A1A1A /
	   #6B6B6B — and the fills on the navy statement band are pure #FFFFFF, not
	   the cream used elsewhere. Read straight off frames 79:338 / 142:680. */
	--voy-text:          #000000;
	--voy-muted:         #858585;
	--voy-eyebrow-color: #000000;
	--voy-text-invert:   #FFFFFF;
	--voy-muted-invert:  #FFFFFF;
}
/* Headings sitewide carry a small negative tracking; these two frames carry
   none at all (letterSpacing 0 on every heading node). */
body.voy-d45-system h1,
body.voy-d45-system h2,
body.voy-d45-system h3,
body.voy-d45-system h4,
body.voy-d45-system .voy-hero__title,
body.voy-d45-system .voy-statement__body,
body.voy-d45-system .voy-band__text,
body.voy-d45-system .voy-exp3__title,
body.voy-d45-system .voy-exp3__panel-title,
body.voy-d45-system .voy-contactc__title {
	letter-spacing: 0;
}
/* The one node in either frame with deliberate tracking: the 30px "Let's
   Connect" link, at -1.2px (-0.04em). */
body.voy-d45-system .voy-contactc__link { letter-spacing: -1.2px; }

/* Eyebrows: 1.2px tracking (0.1em at 12px), not the sitewide 0.14em. The marker
   is the same rotated triangle as everywhere else, drawn at its natural 10.53 x
   8.43 — Figma reports the ROTATED bounding box as 13x13, which is what that
   glyph measures once the 32deg is applied. Gap 10px puts the text at x50.5;
   Figma itself lands it at 52 on the statement and 49 on the expertise head, so
   this splits the difference and sits within tolerance of both. */
body.voy-d45-system .voy-eyebrow {
	/* Block-level, not the sitewide inline-flex. As an inline box it sits on its
	   parent's baseline, and the parent's strut was adding ~7px of leading above
	   it — enough to push both eyebrows off their Figma y on their own. */
	display: flex;
	letter-spacing: 1.2px;
	gap: 10px;
}
body.voy-d45-system .voy-eyebrow::before { width: 10.53px; height: 8.43px; }
body.voy-d45-system .voy-hero__title { max-width: 9.9em; } /* 891 / 90 */

body.voy-d45-system .voy-statement__body {
	font-size: clamp(1.5rem, 2.5vw, 2.25rem); /* 36px */
	line-height: 1.13;
}
body.voy-d45-system .voy-markets__head--tall h2 {
	font-size: var(--voy-h2);
	line-height: 1.13;
}
body.voy-d45-system .voy-band__text {
	font-size: var(--voy-h3);
	line-height: 1.13;
}
body.voy-d45-system .voy-exp3__title,
body.voy-d45-system .voy-contactc__title {
	font-size: var(--voy-h3);
	line-height: 1.13;
}
body.voy-d45-system .voy-contactc__cta {
	font-size: clamp(1.25rem, 2.0833vw, 1.875rem); /* 30px */
	line-height: 1.31;
}

/* =============================================================================
   DESKTOP-6 — stacked-card expertise accordion (body.voy-d6-stack)
   =============================================================================
   Figma frame 154:1009, groups 169:2038 / 169:2019 / 169:2000 / 169:1999.
   Identical in both the client's VOY file and our VOY Dev copy (382 nodes each,
   byte-for-byte — verified by diff, so the dev copy is safe to build from).

   Each panel is a full 1380x446 WHITE card with a hairline along its top edge.
   The four cards are pitched 78px apart, so a closed card is clipped to 78px and
   shows its title plus the top slice of its own photograph; the open card reveals
   the whole 446px. That "stacking" look is simply an accordion with a fixed 78px
   collapsed height and overflow:hidden — Salient's native [toggles] supplies the
   behaviour, and everything below is presentation only.

   Card-relative geometry (card x30, width 1380):
     photo           642x381 at x30,  y32
     title           32px serif #000 at x708, y37
     "Learn More"    130x45 r27 at x708, y99 — navy closed / lime #E8F988 open
     "Key Focus Areas" 25px #000 at x708, y210
     hairline        645 wide at x708, y267
     bullets         13x13 marker at x708, text at x747, #858585, 33px pitch
   -------------------------------------------------------------------------- */
body.voy-d6-stack .toggles .toggle {
	position: relative;
	background: #FFFFFF;
	border-top: 1px solid var(--voy-border);
	border-bottom: 0;
	margin: 0;
	padding: 0;
	overflow: hidden;
}
/* Closed cards clip to the 78px pitch; the open one shows the full card. */
body.voy-d6-stack .toggles .toggle:not(.open) { max-height: 78px; }

body.voy-d6-stack .toggles .toggle .toggle-title,
body.voy-d6-stack .toggles .toggle h3.toggle-title { margin: 0; }
body.voy-d6-stack .toggles .toggle .toggle-title a {
	position: relative;
	display: block;
	padding: 37px 60px 0 708px;   /* title baseline at card y37, right column at x708 */
	min-height: 78px;
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: 2rem;              /* Figma 32px (was 28px) */
	line-height: 1;
	color: #000000;               /* Figma node fill is pure black, not the navy default */
	background: none;
	border: 0;
}
/* Salient's "+" glyph is not the design — Figma uses a small diagonal arrow at
   the card's right edge (node 169:1981, 23x23 at x1353). */
body.voy-d6-stack .toggles .toggle .toggle-title a i.fa { display: none !important; }
body.voy-d6-stack .toggles .toggle .toggle-title a::after {
	content: "";
	position: absolute;
	right: 27px;                  /* 1380 - 1323 - 23 -> card x1323 */
	top: 214px;
	width: 23px;
	height: 23px;
	background-color: var(--voy-text);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	opacity: 0;
}
body.voy-d6-stack .toggles .toggle.open .toggle-title a::after { opacity: 1; }

/* The photo is positioned against the CARD, not the toggle body, so it stays put
   as the card opens and simply gets revealed. */
body.voy-d6-stack .toggles .toggle .inner-toggle-wrap { padding: 0; margin: 0; }
body.voy-d6-stack .toggles .toggle .voy-expertise-panel {
	display: block;
	padding: 0;
	gap: 0;
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__photo {
	position: absolute;
	left: 30px;
	top: 32px;
	width: 642px;
	height: 381px;
	flex: none;
	border-radius: 0;
	aspect-ratio: auto;
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__body {
	/* The 78px title row is in normal flow above this, so the top padding is the
	   REMAINDER to Figma's pill position (99 - 78), not 99 itself. */
	padding: 21px 60px 0 708px;
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__title { display: none; } /* the toggle heading is the title */

body.voy-d6-stack .toggles .toggle .voy-expertise-panel__cta {
	width: 130px;
	height: 45px;
	padding: 0;
	border-radius: 27px;
	background: var(--voy-accent);   /* Figma: the OPEN card's pill is lime */
	color: var(--voy-accent-ink);
	font-size: 0.875rem;
	margin: 0 0 66px;                /* pill bottom y144 -> "Key Focus Areas" y210 */
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__subhead {
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 1.5625rem;            /* 25px */
	color: var(--voy-text);
	margin: 0 0 24px;
	padding-bottom: 24px;
	border-bottom: 1px solid var(--voy-border);  /* hairline at y267, 645 wide */
	max-width: 645px;
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__list li {
	padding: 0 0 13px 39px;          /* marker x708, text x747 -> 39px indent */
	font-size: 0.9375rem;
	line-height: 20px;
	color: #858585;                  /* Figma's muted here, not the sitewide #6B6B6B */
	border: 0;
}
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__list li:last-child { padding-bottom: 0; }
/* Figma's markers here are the small right-pointing triangle used sitewide for
   eyebrows (nodes 169:1987-1990, 13x13), not the checkmark the other six pages
   share. Same vector, so reuse the eyebrow mask rather than a new asset. */
body.voy-d6-stack .toggles .toggle .voy-expertise-panel__list li::before {
	width: 9px;
	height: 7px;
	top: 7px;
	left: 0;
	background-color: #858585;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	transform: rotate(32deg);
}

@media (max-width: 1000px) {
	body.voy-d6-stack .toggles .toggle:not(.open) { max-height: 64px; }
	body.voy-d6-stack .toggles .toggle .toggle-title a { padding: 20px 50px 20px 0; min-height: 64px; font-size: 1.5rem; }
	body.voy-d6-stack .toggles .toggle .toggle-title a::after { top: 20px; }
	body.voy-d6-stack .toggles .toggle .voy-expertise-panel__photo { position: static; width: 100%; height: auto; aspect-ratio: 642 / 381; }
	body.voy-d6-stack .toggles .toggle .voy-expertise-panel__body { padding: 24px 0 32px; }
}

/* -----------------------------------------------------------------------------
   DESKTOP-6 — contact form (Figma frame 154:1009, y6103-6630)
   -----------------------------------------------------------------------------
   Two 658px columns at x30 / x752 — a 64px gutter, which on the existing 1fr 1fr
   grid falls out of the gap alone. All-white type on the navy panel:
   labels Inter 500 22px/24.9, values Inter 500 16px/21, 1px SOLID white rules,
   103px field height + 48px row gap (Figma's 151px pitch), and a 1380x45 lime
   submit at radius 27 with black 16px/500 text.

   The shared `.voy-contact` rules above set colour, border, width and padding with
   !important, so these need matching weight — plain overrides silently lost.
   -------------------------------------------------------------------------- */
body.voy-contact-std .voy-contact .wpforms-field-container {
	column-gap: 64px;
	row-gap: 48px;
}
body.voy-contact-std .voy-contact .wpforms-field-label {
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 1.375rem;            /* 22px */
	line-height: 1.13;
	color: #FFFFFF !important;
	margin: 0 0 36px !important;    /* label top y6103 -> value top y6164 */
	text-transform: none;
	letter-spacing: normal;
}
body.voy-contact-std .voy-contact .wpforms-form input.wpforms-field-medium,
body.voy-contact-std .voy-contact .wpforms-form input[type="text"],
body.voy-contact-std .voy-contact .wpforms-form input[type="email"],
body.voy-contact-std .voy-contact .wpforms-form input[type="tel"],
body.voy-contact-std .voy-contact .wpforms-form select,
body.voy-contact-std .voy-contact .wpforms-form textarea {
	font-weight: 500;
	font-size: 1rem;                /* 16px */
	line-height: 21px;
	color: #FFFFFF !important;
	/* Figma rules (Line 20-24) are white at 54% opacity, matching the placeholder
	   type — typed input stays full white so it reads against the navy. */
	border-bottom: 1px solid rgba(255, 255, 255, 0.56) !important;
	padding: 0 0 21px !important;                  /* underline lands at field y103 */
}
body.voy-contact-std .voy-contact .wpforms-form input::placeholder,
body.voy-contact-std .voy-contact .wpforms-form textarea::placeholder {
	color: rgba(255, 255, 255, 0.56);
	opacity: 1;
}
/* Service dropdown: Figma draws its own 12.2x5.8 chevron (vector 172:2174,
   white 56%, 1.5 stroke) at the right edge of the column, so suppress the UA
   control and paint that one. */
/* `background: transparent !important` on the shared rule expands to
   `background-image: initial !important`, so the chevron needs !important too. */
body.voy-contact-std .voy-contact .wpforms-form select {
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 13.2 6.8' fill='none' stroke='rgba(255,255,255,0.56)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0.75 0.75 6.6 6.05 12.45 0.75'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: right 1px top 6px !important;   /* chevron x1396, 34px above the rule */
	background-size: 12.2px 5.8px !important;
	padding-right: 24px !important;
}
/* Until a real option is picked the field shows Figma's muted "Select a subject". */
body.voy-contact-std .voy-contact .wpforms-form select:invalid { color: rgba(255, 255, 255, 0.56) !important; }
body.voy-contact-std .voy-contact .wpforms-form select option { color: #1A2536; }
body.voy-contact-std .voy-contact .wpforms-form textarea {
	min-height: 0;
	height: 75px !important;       /* Figma: message rule sits 75px under the value */
	resize: none;                  /* Figma draws no grabber */
}
/* Figma sets the asterisk in the label's own colour, tight against the word. */
body.voy-contact-std .voy-contact .wpforms-required-label {
	color: inherit !important;
	margin-left: -0.26em;
	font-weight: inherit;
}

/* Figma: message rule y6541 -> submit y6585. The textarea's own hairline and
   the field wrapper eat 9px of that, so the declared gap is 35, not 44. */
body.voy-contact-std .voy-contact .wpforms-submit-container { padding-top: 33px; }
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"],
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit {
	width: 100% !important;
	height: 45px !important;
	padding: 0 !important;
	border: 0 !important;
	border-radius: 27px !important;
	background: var(--voy-accent) !important;
	color: #000000 !important;
	font-family: var(--voy-font-body);
	font-weight: 500 !important;
	font-size: 1rem !important;
	line-height: 45px;
	transition: background-color 0.2s ease;
}
/* Salient ships a global button lift: with data-button-style="slightly_rounded_shadow"
   its `.container-wrap button[type="submit"]:hover` applies translateY(-3px) plus a
   0 20px 38px shadow, so the pill jumped up and cast a halo on hover. Figma draws a
   flat lime pill that doesn't move, and the lift also broke the 45px gap to the legal
   row, so the geometry is pinned here and hover is a colour shift only. Salient's rule
   carries no !important, so ours wins outright. */
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"],
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit,
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"]:hover,
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit:hover,
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"]:focus,
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit:focus,
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"]:active,
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit:active {
	transform: none !important;
	box-shadow: none !important;
	top: 0 !important;
}
/* The generic :hover tint at the top of this file loses on specificity to the
   contact-std background above, so restate it at this weight. */
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"]:hover,
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit:hover,
body.voy-contact-std .voy-contact .wpforms-form button[type="submit"]:focus,
body.voy-contact-std .voy-contact .wpforms-form .wpforms-submit:focus {
	background: #DFF275 !important;
}
@media (max-width: 900px) {
	body.voy-contact-std .voy-contact .wpforms-field-container { grid-template-columns: 1fr; }
}

/* -----------------------------------------------------------------------------
   DESKTOP-6 — header, hero and "Trusted by professionals"
   -----------------------------------------------------------------------------
   Measured against Figma frame 154:1009. The page ground is #F8F8F5.
   -------------------------------------------------------------------------- */
body.voy-d6-stack { background: #F8F8F5; }

/* Header: like every other frame, Figma has NO nav menu — just the logo and one
   "Contact Us" control (rect 165:1668 + text 165:1669). Here that control is a
   lime 130x45 pill at radius 27 with BLACK Inter 500 16px, not the navy chip. */
/* nav hidden sitewide — see the rule near the end of this file */
body.voy-hero-841 #header-outer #top nav ul li.voy-nav-cta > a {
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	width: 130px;
	height: 45px;
	padding: 0 !important;
	border-radius: 27px !important;
	background: var(--voy-accent) !important;
	color: #000000 !important;
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 1rem;               /* Figma 16px, was 14px/600 */
	line-height: 1.31;
	letter-spacing: normal;
	white-space: nowrap;
}
body.voy-hero-841 .voy-nav-cta > a .menu-title-text::after { display: none !important; }

/* Hero — Figma: h1 top y189, sub y543, button y645, all from x30, band ends 861.
   The height itself comes from the block's own `min_height` param (dashboard
   editable) because it is written as an inline style and would outrank any rule
   here; the shortcode on this page passes 861px instead of the 88vh default.
   The base `.voy-hero__inner` is space-between with a 6vh gap, so everything
   under the h1 used to slide with the window height — pin it to a flow. */
body.voy-d6-stack .voy-hero { align-items: flex-start; padding-top: 189px; padding-bottom: 0; }
body.voy-d6-stack .voy-hero__inner { justify-content: flex-start; gap: 0; }
body.voy-d6-stack .voy-hero__title {
	max-width: 923px;
	margin-bottom: 96px;           /* h1 bottom y447 -> sub top y543 */
}
body.voy-d6-stack .voy-hero__foot { margin-top: 0; align-items: flex-start; width: 100%; max-width: none; }
/* Figma's text box is 289px wide but its longest line ("Search & Talent Advisory
   across") only inks ~274px; Chrome's Inter is a shade wider and broke that line
   early, giving 4 lines instead of 3. Widening the invisible box to 300px
   restores Figma's exact three line breaks without moving any glyph. */
body.voy-d6-stack .voy-hero__sub {
	width: 300px;
	max-width: 100%;
	margin: 0 0 32px;              /* sub bottom y613 -> button y645 */
	padding-bottom: 0;
	font-size: 1.125rem;           /* Figma 18px, was 17px */
	line-height: 23.58px;          /* Figma 131% */
	color: #FFFFFF;                /* Figma fill is pure white, not 82% alpha */
}
body.voy-d6-stack .voy-hero .voy-hero__foot .voy-hero__actions { margin-top: 0 !important; }
/* Figma pill spans x1280-1410, i.e. flush to the 1410 content edge. */
/* The pill is 130x45 at x1280 y15 on all eight standard frames, not just this
   one — Salient's own menu padding puts it at x1252/y26 otherwise. */
body.voy-hero-841 #header-outer #top nav ul.sf-menu > li.voy-nav-cta { margin-right: -40px; position: relative; top: -5px; }

/* Hero button: a 167x54 BLACK pill (rect 161:1630) with a detached 46px WHITE
   circle holding the arrow (ellipse 161:1634 at x147) — the inverse of D3's. */
body.voy-d6-stack .voy-hero .voy-btn,
body.voy-d6-stack .voy-hero .voy-btn--dark {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: flex-start;
	box-sizing: border-box;
	width: 167px;
	height: 54px;
	padding: 0 0 0 22px;
	margin-right: 25px;
	border-radius: 27px;
	background: #000000;
	color: #FFFFFF;
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 1rem;
	line-height: 1.31;
}
body.voy-d6-stack .voy-hero .voy-btn__chip {
	position: absolute;
	left: 117px;                   /* circle x147 - button x30 */
	top: 4px;                      /* circle y649 - button y645 */
	width: 46px;
	height: 46px;
	margin: 0;
	border-radius: 50%;
	background: #FFFFFF;
	color: #000000;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
body.voy-d6-stack .voy-hero .voy-btn__chip svg { width: 13px; height: 12px; }
body.voy-d6-stack .voy-hero .voy-btn:hover { background: #1A2536; }

/* "Trusted by professionals" (node 165:1671) is a CENTRED 26px serif heading in
   Figma — it was rendering as a 12px uppercase eyebrow at the left gutter. */
body.voy-d6-stack .voy-logos-section .voy-eyebrow,
body.voy-d6-stack .voy-logos__title {
	display: block;
	width: 100%;
	text-align: center;
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: 1.625rem;           /* 26px */
	line-height: 1.13;
	letter-spacing: normal;
	text-transform: none;
	color: #000000;
}
body.voy-d6-stack .voy-logos-section .voy-eyebrow::before { display: none; }
/* Heading y938 / logo row y1002-1062 relative to the hero band's y841 end: the
   padding now lives in the shared "standard rhythm" block at the end of this
   file, since all eight standard frames use exactly these numbers. */
body.voy-d6-stack .voy-logos-section .voy-container .voy-eyebrow,
body.voy-d6-stack .voy-logos-section .voy-container .voy-logos__title {
	margin: 0 0 34.6px;
	padding-bottom: 0;             /* Salient puts padding-bottom on <p> */
}
body.voy-d6-stack .voy-logos-section .voy-logos,
body.voy-d6-stack .voy-logos-section .voy-logos__track { height: 60px; }

/* -----------------------------------------------------------------------------
   DESKTOP-6 — eyebrow glyph, page ground, About and "Get in touch"
   -----------------------------------------------------------------------------
   Every measurement below is the Figma value from frame 154:1009 (VOY Dev
   XGzazVQLpm6SnUDtELPIVi, byte-identical to the client's VOY file for this
   frame). Coordinates in comments are frame-absolute.
   -------------------------------------------------------------------------- */

/* The page ground is #F8F8F5 (frame fill), not the warm sitewide cream. */
body.voy-d6-stack .voy-section--cream { background: #F8F8F5; }

/* Eyebrow marker — Figma draws an ARROW (vector 169:1676 and its twins before
   every eyebrow on this frame), not the sitewide rotated triangle. Exported
   path, used as a mask so it inherits the eyebrow's own colour (navy on light
   sections, white on the navy contact section). */
body.voy-d6-stack .voy-eyebrow {
	display: flex;                 /* block-level: no line-box leading, so the
	                                  eyebrow starts exactly on its Figma y */
	align-items: center;
	gap: 9.5px;                    /* arrow right edge 681.5 -> text x691 */
	font-size: 14px;
	font-weight: 600;
	line-height: 14.7px;
	letter-spacing: 1.4px;         /* Figma letterSpacing 1.4 at 14px */
}
body.voy-d6-stack .voy-eyebrow::before {
	width: 11px;
	height: 12px;
	transform: none;               /* the exported path is already rotated */
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 12'%3E%3Cpath d='M0.000321901 12L10.8807 6.75808L0.065384 0C0.065384 0 4.58319 5.22549 0.000321901 12Z'/%3E%3C/svg%3E");
	        mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 12'%3E%3Cpath d='M0.000321901 12L10.8807 6.75808L0.065384 0C0.065384 0 4.58319 5.22549 0.000321901 12Z'/%3E%3C/svg%3E");
}

/* -------- About ------------------------------------------------------------
   eyebrow y1162 · h2 y1204 (805x68, ONE line) · body y1297 (682x63, 3 lines) ·
   photo y1406 (1380x614). Section runs 1062 -> 2120.
   ------------------------------------------------------------------------- */
body.voy-d6-stack .voy-about { padding-top: 100px; padding-bottom: 0; }
body.voy-d6-stack .voy-about__intro { max-width: none; }
body.voy-d6-stack .voy-about__intro .voy-eyebrow {
	justify-content: center;
	color: #1A2536;
	margin: 0 0 27.3px;
}
body.voy-d6-stack .voy-about__title {
	max-width: 805px;
	margin: 0 auto 25.2px;
	font-size: 60px;
	line-height: 67.8px;           /* Figma 113% */
	letter-spacing: 0;             /* sitewide h2 tightens to -0.01em; Figma is 0 */
	color: #000000;
}
body.voy-d6-stack .voy-about__body {
	max-width: 682px;
	margin: 0 auto;
	padding-bottom: 0;
	font-size: 16px;
	line-height: 20.96px;          /* Figma 131% */
	color: #858585;
}
body.voy-d6-stack .voy-about__media { margin: 46.1px 0 0; }
/* The 1380x614 letterbox itself is shared with v1/v1-b/v2-a/v2-b/v2-c — see the
   "About photo letterbox" block at the end of this file. */

/* -------- Get in touch (body.voy-contact-std) -------------------------------
   Eight frames — home, desktop-6 and the six V-pages — draw this section
   identically; only where it STARTS differs. Measured from the navy band's own
   top edge, every one of them puts:
     eyebrow +93 · h2 +129 (45px) · intro x928 +107 (388 wide) · photo +220
     (1380x703) · glass cards +660 (3 x 438x235 at x64/501/938) · form labels
     +987/+1138/+1289 · submit +1469 (1380x45, r27) · band height 1988
   Desktop-6 is the sole 3px outlier (photo +217, 706 tall) and overrides below.
   Originally written page-scoped to Desktop-6; promoted 2026-08-11 once the
   other seven frames were measured and matched.
   ------------------------------------------------------------------------- */
body.voy-contact-std .voy-contact { padding-top: 93px; }
body.voy-contact-std .voy-contact__head {
	grid-template-columns: 898px 388px;   /* title col x30, intro col x928 */
	column-gap: 0;
	align-items: start;
	margin-bottom: 40.15px;               /* h2 bottom +179.85 -> photo +220 */
}
body.voy-contact-std .voy-contact .voy-eyebrow { color: #FFFFFF; margin: 0 0 21.3px; }
body.voy-contact-std .voy-contact__title {
	margin: 0;
	font-size: 45px;
	line-height: 50.85px;                 /* Figma 113% */
	letter-spacing: 0;
	color: #FFFFFF;
}
body.voy-contact-std .voy-contact__intro {
	align-self: start;
	margin-top: 14px;                     /* intro y5223 vs eyebrow y5209 */
	padding-bottom: 0;
	font-size: 16px;
	line-height: 20.96px;
	color: #FFFFFF;
}
body.voy-contact-std .voy-contact__media {
	min-height: 0;
	height: 703px;
	border-radius: 0;
}
/* Desktop-6 alone draws the photo 3px taller and 3px higher. */
body.voy-d6-stack .voy-contact__head { margin-bottom: 37.2px; }
body.voy-d6-stack .voy-contact__media { height: 706px; }
body.voy-contact-std .voy-contact .voy-contact__img {
	height: 100%;
	border-radius: 0;
	/* 184:2244 shows 4.8%-80.4% of the source height => 21% of the cover overflow */
	object-position: 0 21%;
	filter: brightness(0.94);      /* matches the fill's 12% monotone grain */
}

/* Glass cards: Figma fills them #000 at 33% over a 36.4 BACKGROUND_BLUR (CSS
   blur() is half Figma's radius), hairlines them in white at 54%, square. */
body.voy-contact-std .voy-contact__cards {
	/* Offsets are 1px inside Figma's so the wrapper's own hairline lands on the
	   card edge: content box then starts exactly at x64 / y5776 and spans 1312x235. */
	left: 33px;
	right: 33px;
	bottom: 27px;
	height: 237px;
	border-radius: 0;
	background: rgba(0, 0, 0, 0.33);
	border: 1px solid rgba(255, 255, 255, 0.54);
	-webkit-backdrop-filter: blur(18.2px);
	        backdrop-filter: blur(18.2px);
}
body.voy-contact-std .voy-contact-card {
	gap: 0;
	padding: 30px 0 0 27px;               /* circle x91/y5806 inside card x64/y5776 */
	border-left: 1px solid rgba(255, 255, 255, 0.54);
}
body.voy-contact-std .voy-contact-card:first-child { border-left: 0; }
body.voy-contact-std .voy-contact-card__icon {
	width: 49px;
	height: 49px;
	margin: 0 0 42px;                     /* circle bottom 5855 -> label y5897 */
	color: #000000;
}
body.voy-contact-std .voy-contact-card__icon svg { width: 24px; height: 24px; }
body.voy-contact-std .voy-contact-card__label {
	font-size: 16px;
	font-weight: 500;
	line-height: 20.96px;
	margin-bottom: 36px;                  /* label bottom 5918 -> value y5954 */
	color: #FFFFFF;
}
body.voy-contact-std .voy-contact-card__value {
	font-size: 24px;
	font-weight: 500;
	line-height: 27.12px;
	color: #FFFFFF;
}
/* The address is the only value that runs to two lines, and every one of the
   eight frames lifts it so the pair straddles the single-line values rather
   than hanging below them: its box starts 14px under the label (y5932 on
   Desktop-6) where Call Us / Email start 36 (y5954). */
body.voy-contact-std .voy-contact-card--address .voy-contact-card__label {
	margin-bottom: 14px;
}

/* Form: photo bottom 6039 -> first label y6103. WPForms' own 24px block margin
   escapes the wrapper and would push the footer down with it. */
body.voy-contact-std .voy-contact__form { margin-top: 64px; }
body.voy-contact-std .voy-contact .wpforms-container { margin: 0; }

/* -------- Footer -----------------------------------------------------------
   Figma draws no separate footer: the navy band simply continues past the
   submit button with the chrome wordmark (1378x144.3 at x30, +177 below the
   button) and a legal row 155px under it — "Privacy" at x30 and
   "Terms & Conditions" ending at x1408, both 15px/19.65 in #858585. There is no
   rule above them, no copyright line and no social row on any of the eight
   frames; the block still renders those when its params are filled in, they are
   just left empty in page-content. The band ends 122.35 under the legal row.
   ------------------------------------------------------------------------- */
body.voy-contact-std .voy-contact { padding-bottom: 0; }
body.voy-contact-std .voy-footer { padding: 176px 0 122.35px; }
body.voy-contact-std .voy-footer__wordmark {
	text-align: left;
	margin-bottom: 10px;
	line-height: 0;
}
body.voy-contact-std .voy-footer__wordmark-svg { width: 1378px; max-width: 100%; height: auto; }
body.voy-contact-std .voy-footer__bar {
	grid-template-columns: 1fr 1fr;
	align-items: start;
	gap: 0;
	padding-top: 0;
	border-top: 0;
}
body.voy-contact-std .voy-footer__links { gap: 20px; font-size: 15px; line-height: 19.65px; }
body.voy-contact-std .voy-footer__links a,
body.voy-contact-std .voy-footer__copy { color: #858585; }
body.voy-contact-std .voy-footer__links a:hover { color: var(--voy-text-invert); }
/* The socials column is empty on these frames, so the right-hand legal link has
   to be the second grid track rather than the third. */
body.voy-contact-std .voy-footer__socials:empty { display: none; }

@media (max-width: 900px) {
	body.voy-contact-std .voy-footer { padding: 64px 0 48px; }
	body.voy-contact-std .voy-footer__bar { grid-template-columns: 1fr; gap: 1rem; }
}

/* -----------------------------------------------------------------------------
   DESKTOP-6 — the run between About and "Get in touch"
   -----------------------------------------------------------------------------
   Figma section bounds on frame 154:1009, and what each padding buys:
     markets      2020 -> 2511   (tiles y2088/y2299, 346x212, no heading)
     expertise    2511 -> 3583   (eyebrow y2599, h2 y2686, cards y2858-3538)
     imagery band 3583 -> 4370   (1440x787 full bleed)
     testimonials 4370 -> 5116   (white; eyebrow y4481, h2 y4525, cards y4620)
   These four were collectively 80px short, which is why the contact band used to
   start at y5036 instead of Figma's y5116.
   -------------------------------------------------------------------------- */

/* -------- Markets: eight tiles, no heading on this frame ------------------ */
body.voy-d6-stack .voy-markets { padding-top: 68px; padding-bottom: 0; }
body.voy-d6-stack .voy-markets__grid {
	border-radius: 0;
	border-color: #D9D9D9;
	background: #FFFFFF;
}
body.voy-d6-stack .voy-market-card {
	height: 211px;                 /* 210 content + its own 1px divider */
	padding: 50px 8px 0;
	justify-content: flex-start;
	gap: 21px;                     /* icon bottom -> label top y2224 */
	border-color: #D9D9D9;
	transition: background-color .25s ease;
}
body.voy-d6-stack .voy-market-card:nth-last-child(-n+4) { height: 210px; }
body.voy-d6-stack .voy-market-card__icon { height: 64px; }
body.voy-d6-stack .voy-market-card__icon svg { width: auto; height: 64px; }
body.voy-d6-stack .voy-market-card__label {
	font-size: 22px;
	font-weight: 400;
	line-height: 24.86px;
	color: #858585;
}
/* Figma shows one tile (Portfolio Companies) washed lime with a dark circled "+"
   over its icon. That is the HOVER state, drawn onto a static frame the only way
   a static frame can show it — not a permanently selected tile. So it lives here
   as a real :hover on every tile, and no card ships with `is-highlight` (the
   markets shortcodes pass no_highlight="yes"). The is-highlight rules further
   down are kept so the mockup look can be restored for a client review.
   Shared by all eight frames that draw the grid, not just Desktop-6. */
body.voy-hero-841 .voy-market-card { position: relative; }
body.voy-hero-841 .voy-market-card:hover { background: rgba(232, 249, 136, 0.46); }
body.voy-hero-841 .voy-market-card__icon { position: relative; }
body.voy-hero-841 .voy-market-card__icon::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 60px;
	height: 60px;
	margin: -30px 0 0 -30px;
	border-radius: 50%;
	background: #1A2536 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22' stroke='%23FFFFFF' stroke-width='1.8' stroke-linecap='round'%3E%3Cpath d='M11 3v16M3 11h16'/%3E%3C/svg%3E") no-repeat center / 22px 22px;
	opacity: 0;
	transform: scale(.85);
	transition: opacity .25s ease, transform .25s ease;
	pointer-events: none;
}
body.voy-hero-841 .voy-market-card:hover .voy-market-card__icon::after { opacity: 1; transform: scale(1); }
/* Figma fades the tile's own icon to 16% behind the "+" rather than hiding it.
   That fade used to be baked into portfolio-companies.svg (`<g opacity="0.16">`),
   which is how the icon was exported out of the hovered tile — it left that one
   tile looking washed out next to its siblings once the static highlight came
   off. The asset is now full-strength and the fade lives in the hover. */
body.voy-hero-841 .voy-market-card .voy-market-icon { transition: opacity .25s ease; }
body.voy-hero-841 .voy-market-card:hover .voy-market-icon,
body.voy-hero-841 .voy-market-card.is-highlight .voy-market-icon { opacity: .16; }

/* -------- Functional Expertise head --------------------------------------- */
body.voy-d6-stack .voy-expertise { padding-top: 88px; padding-bottom: 45px; }
body.voy-d6-stack .voy-expertise__head {
	grid-template-columns: 788px 436px;   /* h2 col x30, intro col x928 */
	column-gap: 110px;
	align-items: start;
	margin-bottom: 36px;                  /* h2 bottom 2822 -> first card y2858 */
}
body.voy-d6-stack .voy-expertise .voy-eyebrow { margin: 0 0 72.3px; }
body.voy-d6-stack .voy-expertise__title {
	max-width: 788px;
	margin: 0;
	font-size: 60px;
	line-height: 67.8px;
	letter-spacing: 0;
	color: #000000;
}
body.voy-d6-stack .voy-expertise__intro {
	margin: 126px 0 0;                    /* intro y2725 vs eyebrow y2599 */
	padding-bottom: 0;
	font-size: 16px;
	line-height: 20.96px;
	color: #858585;
}

/* -------- Imagery band ---------------------------------------------------- */
body.voy-d6-stack .voy-band--tall { min-height: 787px; }

/* -------- Testimonials (body.voy-testi-std) ---------------------------------
   Three frames carry this section — desktop-6, v2-a, v2-b — and all three place
   it identically against its own top edge: eyebrow +111, h2 +155, card rail
   +250, section 746 tall. Promoted from the Desktop-6 scope 2026-08-11.
   ------------------------------------------------------------------------- */
body.voy-testi-std .voy-testimonials {
	background: #FFFFFF;           /* Figma 172:2090 — white, not the page cream */
	padding: 111px 0 86px;
	overflow: hidden;              /* the rail runs past the right edge by design */
}
body.voy-testi-std .voy-testimonials__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	margin-bottom: 44.2px;         /* h2 bottom 4575.9 -> card y4620 */
}
body.voy-testi-std .voy-testimonials .voy-eyebrow { color: #09347B; margin: 0 0 29.3px; }
body.voy-testi-std .voy-testimonials__title {
	margin: 0;
	font-size: 45px;
	line-height: 50.85px;
	letter-spacing: 0;
	color: #000000;
}
/* Two 51.2px navy circles at x1292 / x1359, y4512. */
body.voy-testi-std .voy-testimonials__nav { display: flex; gap: 15.8px; margin-top: 31px; }
body.voy-testi-std .voy-tnav {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 51.2px;
	height: 51.2px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: #1A2536;
	color: #FFFFFF;
	cursor: pointer;
	transition: opacity .2s ease, background-color .2s ease;
}
body.voy-testi-std .voy-tnav:hover { background: #09347B; }
body.voy-testi-std .voy-tnav[disabled] { opacity: .35; cursor: default; }

/* Card rail: 596x410 cards on a 595px pitch, first one at x125. */
body.voy-testi-std .voy-testimonials__grid {
	display: flex;
	gap: 0;
	margin-left: 95px;             /* container x30 -> first card x125 */
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
}
body.voy-testi-std .voy-testimonials__grid::-webkit-scrollbar { display: none; }
body.voy-testi-std .voy-tcard {
	flex: 0 0 596px;
	height: 410px;
	margin-right: -1px;            /* neighbours share one hairline */
	padding: 60px 0 0;
	gap: 0;
	justify-content: flex-start;
	align-items: center;
	text-align: center;
	background: #F8F8F5;
	border: 1px solid #D9D9D9;
	border-radius: 0;
	min-height: 0;
	scroll-snap-align: start;
}
body.voy-testi-std .voy-tcard__avatar {
	width: 94px;
	height: 97px;
	border-radius: 0;
	background: transparent;
	margin-bottom: 32px;           /* avatar bottom 4777 -> quote y4809 */
}
body.voy-testi-std .voy-tcard__quote {
	width: 371px;
	margin: 0 0 37px;              /* quote bottom 4884 -> name y4921 */
	font-family: var(--voy-font-body);
	font-weight: 500;
	font-size: 22px;
	line-height: 24.86px;
	color: #000000;
}
body.voy-testi-std .voy-tcard__person { display: contents; }
body.voy-testi-std .voy-tcard__meta { display: contents; }
body.voy-testi-std .voy-tcard__name {
	font-weight: 500;
	font-size: 22px;
	line-height: 24.86px;
	color: #000000;
	margin-bottom: 7.1px;
}
body.voy-testi-std .voy-tcard__role {
	font-family: var(--voy-font-body);
	font-weight: 600;
	font-size: 14px;
	line-height: 14.7px;
	letter-spacing: 1.4px;
	color: #09347B;
}

@media (max-width: 900px) {
	body.voy-d6-stack .voy-expertise__head { grid-template-columns: 1fr; column-gap: 0; }
	body.voy-d6-stack .voy-expertise__intro { margin-top: 24px; }
	body.voy-testi-std .voy-testimonials__grid { margin-left: 0; }
	body.voy-testi-std .voy-tcard { flex-basis: min(596px, 88vw); }
	body.voy-d6-stack .voy-band--tall { min-height: 420px; }
}

/* The open card measured 442px against Figma's 446 — a 4px content shortfall that
   propagated down the page as a 5px deficit for every later section. */
body.voy-d6-stack .toggles .toggle.open { min-height: 446px; }

/* Figma stacks the quote card as avatar -> quote -> name -> role; the block's
   markup is quote-first (blockquote before figcaption), so reorder rather than
   restructure the shared markup. */
body.voy-testi-std .voy-tcard__avatar { order: 1; }
body.voy-testi-std .voy-tcard__quote  { order: 2; }
body.voy-testi-std .voy-tcard__name   { order: 3; }
body.voy-testi-std .voy-tcard__role   { order: 4; }

/* Salient's inline button skin forces `border-radius: 4px !important` on every
   <button>, and skin-material gives <blockquote> a 1.8em indent plus an accent
   bar — neither belongs on the Figma quote rail. */
body.voy-testi-std .voy-tnav { border-radius: 50% !important; }
body.voy-testi-std .voy-tcard__quote { padding: 0 !important; border: 0 !important; }
body.voy-testi-std .voy-tcard__quote::before,
body.voy-testi-std .voy-tcard__quote::after { display: none !important; content: none !important; }
/* Figma keeps the label muted under the lime wash rather than darkening it. */
body.voy-hero-841 .voy-market-card:hover .voy-market-card__label { color: #858585; }

/* =============================================================================
   About photo letterbox — six frames, one geometry
   =============================================================================
   Figma draws the About photo as 1380x614 at x30 y1406 on desktop-6, v1, v1-b,
   v2-a, v2-b and v2-c. (home and v2-d are a DIFFERENT design: a 1444x654
   full-bleed at y1386 — deliberately not covered here.)

   Two things had to be got right:

   1. Salient ships `.main-content img { height: auto }`, specificity (0,1,1),
      which outranks `.voy-about__img` (0,1,0) — so the height declared there had
      never applied on any page. Desktop-6/v1/v1-b were rendering their portrait
      source at its natural 1380x2069; v2-a/v2-b at 918. Two classes to win.

   2. `object-fit: cover` cannot reproduce a Figma crop in general: it always
      fits one axis exactly, whereas Figma's fill `imageTransform` can be zoomed
      in on both. The transform's second row is [yScale, _, yOffset] and the
      first is [xScale, _, xOffset] — the visible window as a fraction of the
      source. Positioning the image absolutely inside a clipped, aspect-locked
      figure reproduces that window exactly, at any viewport width:

          width  = 100 / xScale  %        left = -xOffset / xScale  %
          height = 100 / yScale  %        top  = -yOffset / yScale  %

      (percentages resolve against the figure, which is why the figure needs
      aspect-ratio rather than a hard pixel height.)

   The crop is keyed off `voy-img-<filename>` (emitted by voy_vc_img()), so it
   travels with the photograph rather than with the page it happens to be used
   on. Deliberately NOT WordPress's `wp-image-<id>`: an attachment id is not
   portable, so importing one of the demo packages onto another site renumbers
   it and an id-keyed crop silently stops matching — the photograph reverts to
   an uncropped fill, which is exactly the regression a round-trip import test
   caught here.
   -------------------------------------------------------------------------- */
body.voy-about-614 .voy-about__media {
	position: relative;
	overflow: hidden;
	aspect-ratio: 1380 / 614;
	border-radius: 0;
}
body.voy-about-614 .voy-about .voy-about__img {
	position: absolute;
	max-width: none;
	border-radius: 0;
	object-fit: fill;
}

/* getty-images-Kd3960tIahw (2731x4096) — desktop-6 + v1/v1-b.
   Band 40.13%-69.80% of the source height; fill carries `exposure: -0.17`,
   which this brightness/contrast pair matches (mean pixel error .104 -> .029
   against the Figma render). */
body.voy-about-614 .voy-about .voy-about__img.voy-img-voy-d6-about,
body.voy-about-614 .voy-about .voy-about__img.voy-img-voy-v1-about {
	width: 100.04%;
	left: -0.02%;
	height: 336.97%;
	top: -135.21%;
	filter: brightness(0.8) contrast(1.12);
}
/* istockphoto-1020236228 (1024x681) — v2-a/v2-b. Figma zooms to 83.94% of
   the source width, which is why cover alone would have framed it too wide. */
body.voy-about-614 .voy-about .voy-about__img.voy-img-voy-v2a-about {
	width: 119.13%;
	left: 0.01%;
	height: 178.06%;
	top: -11.10%;
}
/* v2-c (2873x1347) — near-full frame, a 4% inset. */
body.voy-about-614 .voy-about .voy-about__img.voy-img-voy-v2c-about {
	width: 104.17%;
	left: -1.96%;
	height: 109.69%;
	top: -3.26%;
}

/* Market icons are now real Figma SVG files (assets/icons/markets/), referenced
   as <img> so the ~95KB set is cached once rather than inlined per page. They
   carry their own #1A2536 fill and their own aspect, so height drives the size. */
.voy-market-icon { width: auto; max-width: none; }
body.voy-d6-stack .voy-market-card__icon .voy-market-icon { height: 64px; width: auto; }
/* Figma keeps the tile icon visible under the badge on the highlighted card. */
.voy-market-card__icon { position: relative; display: inline-flex; align-items: center; justify-content: center; }
body.voy-d6-stack .voy-market-card__badge {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 60px;
	height: 60px;
	margin: -30px 0 0 -30px;
}
/* Figma's highlighted tile is the lime at 46% over white (not the solid accent),
   keeps its label muted, and sets a 60px circle with a light 22px "+". */
body.voy-d6-stack .voy-market-card.is-highlight { background: rgba(232, 249, 136, 0.46); }
body.voy-d6-stack .voy-market-card.is-highlight .voy-market-card__label { color: #858585; }
body.voy-d6-stack .voy-market-card__badge svg { width: 22px; height: 22px; stroke-width: 1.6; }

/* =============================================================================
   Hero geometry — shared by the eight frames that draw it identically
   =============================================================================
   home, v1, v1-b, v2-a, v2-b, v2-c, v2-d, desktop-6: photo band ends y841,
   h1 x30 y189 (923x258, 85px/85.85), sub x30 y543 (289 wide, 18px/23.58),
   button x30 y645 (167x54).

   The HEIGHT is not set here on purpose — `voy_hero` writes min-height as an
   inline style, which outranks any rule, so each page passes `min_height="841px"`
   on the shortcode instead (and stays dashboard-editable).

   The base `.voy-hero__inner` is `justify-content: space-between` with a
   `clamp(2.5rem, 6vh, 5rem)` gap, so everything under the h1 used to slide with
   the browser window height: at a 1000px viewport the hero measured 880px and
   the headline sat at y130 instead of y189. Pin it to a plain top-down flow.
   -------------------------------------------------------------------------- */
body.voy-hero-841 .voy-hero {
	align-items: flex-start;
	padding-top: 189px;
	padding-bottom: 0;
}
body.voy-hero-841 .voy-hero__inner { justify-content: flex-start; gap: 0; }
body.voy-hero-841 .voy-hero__title {
	max-width: 923px;
	margin-bottom: 96px;           /* h1 bottom y447 -> sub top y543 */
}
body.voy-hero-841 .voy-hero__foot {
	margin-top: 0;
	align-items: flex-start;
	width: 100%;
	max-width: none;
}
body.voy-hero-841 .voy-hero__sub {
	width: 300px;                  /* Figma's box is 289 but its longest line inks
	                                  274; Chrome's Inter is a shade wider and broke
	                                  to 4 lines at 289 — 300 restores Figma's 3 */
	max-width: 100%;
	margin: 0 0 32px;              /* sub bottom -> button y645 */
	padding-bottom: 0;
	font-size: 1.125rem;           /* 18px */
	line-height: 23.58px;          /* 131% */
}
body.voy-hero-841 .voy-hero__actions { margin-top: 0 !important; }

/* Desktop-4 / Desktop-5: the one hero that differs — 839px band, h1 at y344
   (891x273 at 90px/90.9), sub at y646 (547 wide), and a two-part white control
   at y732: an 89x39 label chip at x29 and a detached 39x39 arrow square at x120,
   both radius 2, with "About Us" in black Inter Medium 14 at x43.

   An earlier pass read this frame as having no button and left the sitewide navy
   pill in place; it is the same split control Desktop-3 uses, just 89 wide
   instead of 102, so the page now asks the hero block for button_style="split"
   and only the width is restated here. */
body.voy-d45-system .voy-hero {
	align-items: flex-start;
	padding-top: 344px;
	padding-bottom: 0;
}
body.voy-d45-system .voy-hero__inner { justify-content: flex-start; gap: 0; }
body.voy-d45-system .voy-hero__title { max-width: 891px; margin-bottom: 29px; }
body.voy-d45-system .voy-hero__foot { margin-top: 0; align-items: flex-start; width: 100%; max-width: none; }
/* Neither frame draws an overlay rectangle over the hero or the band photo —
   the darkening is an image filter on the fill, which the blocks now carry as
   backdrop-filter on the scrim layer. So the scrim's own gradient, which exists
   to hold the white copy up on the other nine pages, has to come off here or it
   double-darkens. */
body.voy-d45-system .voy-hero__scrim,
body.voy-d45-system .voy-band__scrim,
body.voy-d45-system .voy-band--content .voy-band__scrim { background: none; }

body.voy-d45-system .voy-hero__sub {
	width: 547px;
	max-width: 100%;
	margin: 0 0 39px;
	padding-bottom: 0;
	font-size: 1.125rem;
	line-height: 23.58px;
	color: var(--voy-text-invert);
}
/* Same specificity race as the shared split rule: it is (0,4,0) via
   .voy-landing-wrap, so matching it needs the page class plus an element. */
body.voy-d45-system .voy-landing-wrap .voy-hero.voy-hero--btn-split .voy-btn {
	width: 89px;
	padding-left: 14px;
	font-weight: 500;
}

/* =============================================================================
   DESKTOP-4 / DESKTOP-5 section rhythm (body.voy-d45-system)
   =============================================================================
   Frames 79:338 and 142:680 are byte-identical apart from the hero photograph —
   diffing their node trees turns up exactly one differing node — so everything
   here is written once for both. Section bounds, measured off the frames:

     hero        0    -  839
     logos       839  - 1562   ("TRUSTED BY" y992, marks y1081-1427)
     statement   1562 - 2212   (navy 1450x650; eyebrow y1617, body y1689)
     markets     2212 - 3223   (h2 y2317, 4x2 of 338x372 from y2440, 9px gaps)
     band        3223 - 3851   (1443x628)
     expertise   3851 - 4783   (#EEF3FE; eyebrow y3956, h2 y4016, rail y4151)
     contact     4783 - 5511   (h2 y4942, rule y5218, columns y5290, rule y5447)

   The type scale itself lives in the block near the top of this file; this is
   only where each section starts and stops.
   -------------------------------------------------------------------------- */

/* The page ground on both frames is white, not the sitewide cream. */
body.voy-d45-system,
body.voy-d45-system .voy-section--cream { background: #FFFFFF; }

/* Eyebrows on these two frames are a size down from the sitewide 13px. */
body.voy-d45-system .voy-eyebrow { font-size: 12px; line-height: 12.6px; }

/* -------- Trusted-by marks ------------------------------------------------ */
body.voy-d45-system .voy-logos-section { padding: 153px 0 135px; }
body.voy-d45-system .voy-logos__title {
	padding-bottom: 0;
	margin-bottom: 76.4px;
	font-size: 12px;
	line-height: 12.6px;
}
/* Figma clusters 15 marks in a 5x3 block from y1081 to y1427, so the sitewide
   marquee is the wrong presentation here — this is a static grid. */
body.voy-d45-system .voy-logos {
	display: block;
	height: 346px;
	overflow: visible;
	-webkit-mask-image: none;
	        mask-image: none;
}
body.voy-d45-system .voy-logos__track {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	grid-auto-rows: 115.33px;
	align-items: center;
	justify-items: center;
	width: 100%;
	gap: 0;
	padding: 0;
	animation: none;
}
body.voy-d45-system .voy-logos__track--dup { display: none; }
body.voy-d45-system .voy-logos__img { height: auto; max-height: 60px; max-width: 190px; opacity: 1; }

/* -------- Statement (navy) ------------------------------------------------ */
body.voy-d45-system .voy-statement { padding: 55px 0 118.1px; }
body.voy-d45-system .voy-statement .voy-eyebrow { margin: 0 0 57.7px; }
body.voy-d45-system .voy-statement__body {
	width: 949px;
	max-width: 100%;
	margin: 0;
	padding-bottom: 0;
	font-size: 36px;
	line-height: 40.68px;
}
/* Figma is a single text node whose two paragraphs are separated by a blank
   line, i.e. exactly one line-height; its style override table dims the second
   one to white at 30%. */
body.voy-d45-system .voy-statement__body--muted {
	margin-top: 40.68px;
	color: rgba(255, 255, 255, 0.3);
}

/* -------- Markets --------------------------------------------------------- */
body.voy-d45-system .voy-markets { padding: 105px 0 30px; }
body.voy-d45-system .voy-markets__head { margin-bottom: 66.5px; }
body.voy-d45-system .voy-markets__head h2 { margin: 0; font-size: 50px; line-height: 56.5px; }
body.voy-d45-system .voy-markets__grid {
	display: grid;
	grid-template-columns: repeat(4, 338px);
	gap: 9px;
	justify-content: space-between;
	border: 0;
}
/* The card is NOT vertically centred, which is what it looks like at a glance.
   Measuring all eight icons in the frame, every one starts at card-top + 128 and
   is ~65 tall, with the label at card-top + 223 — leaving a deliberate 126px of
   empty card below the label. The base card rule is `justify-content: center`,
   so the padding-top here was being treated as slack and the whole block sank to
   the bottom of the 372px card; pinning it to flex-start is what makes the 128
   mean what it says. */
body.voy-d45-system .voy-market-card {
	width: 338px;
	height: 372px;
	padding: 128px 0 0;
	border: 0;
	border-radius: 0;
	background: #F1F1F2;
	align-items: center;
	justify-content: flex-start;
	gap: 0;
	text-align: center;
}
body.voy-d45-system .voy-market-card__corner { position: absolute; top: 18px; right: 18px; width: 34px; height: 34px; }
/* Height-driven, width auto: the eight icons run 53-80 wide but all sit within a
   point of 65 tall, so pinning height keeps them on one optical baseline the way
   the frame does, and `contain` stops the wider ones distorting. */
body.voy-d45-system .voy-market-card__icon { width: auto; height: 65px; margin: 0 0 30px; }
body.voy-d45-system .voy-market-card__icon img,
body.voy-d45-system .voy-market-card__icon svg {
	width: auto;
	height: 65px;
	max-width: 100%;
	object-fit: contain;
}
body.voy-d45-system .voy-market-card__label {
	font-family: var(--voy-font-body);
	font-size: 20px;
	line-height: 22.6px;
	font-weight: 500;
}

/* -------- Imagery band ----------------------------------------------------
   Copy 733 wide centred at y3416, then a 144x39 two-part control at y3607: a
   103px label chip and a 39px arrow square, both white at 34% and radius 2.  */
body.voy-d45-system .voy-band--tall { min-height: 628px; height: 628px; }
body.voy-d45-system .voy-band--content { align-items: flex-start; }
/* 733 is the COPY width; the inner is a .voy-container, which contributes the
   sitewide 30px gutter on each side, so capping the container itself at 733 left
   the text 673 wide and wrapping a word early. */
body.voy-d45-system .voy-band--align-center .voy-band__inner {
	max-width: 793px;
	gap: 0;
	padding-top: 193px;
}
body.voy-d45-system .voy-band__text {
	width: 733px;
	max-width: 100%;
	margin: 0 0 56px;
	padding-bottom: 0;
	font-size: 40px;
	line-height: 45.2px;
}
/* Split, like the hero control: a 103x39 label chip at x648 and a detached
   39x39 arrow square at x753 — 2px of photo showing between them — both white at
   34%, radius 2. It was previously drawn as one 137px chip with the arrow inside. */
body.voy-d45-system .voy-band .voy-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: flex-start;
	width: 103px;
	height: 39px;
	padding: 0 0 0 14px;
	margin-right: 41px;
	border-radius: 2px;
	background: rgba(255, 255, 255, 0.34);
	color: #fff;
	font-size: 14px;
	line-height: 18.34px;
	font-weight: 500;
}
body.voy-d45-system .voy-band .voy-btn .voy-btn__chip {
	position: absolute;
	left: calc(100% + 2px);
	top: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 39px;
	height: 39px;
	margin: 0;
	border-radius: 2px;
	background: inherit;
	color: inherit;
}
body.voy-d45-system .voy-band .voy-btn .voy-btn__chip svg { width: 16px; height: 14px; }

/* -------- Expertise rail -------------------------------------------------- */
body.voy-d45-system .voy-exp3 { padding: 105px 0 57px; background: #EEF3FE; }
body.voy-d45-system .voy-exp3__head { max-width: none; margin-bottom: 44.8px; }
body.voy-d45-system .voy-exp3 .voy-eyebrow { margin: 0 0 45.7px; }
body.voy-d45-system .voy-exp3__title { max-width: 476px; margin: 0; font-size: 40px; line-height: 45.2px; }
body.voy-d45-system .voy-exp3--carousel .voy-exp3__track { gap: 7px; padding-bottom: 0; }
body.voy-d45-system .voy-exp3__panel { flex: 0 0 634px; width: 634px; height: 475px; border-radius: 0; }
/* Panel copy is pinned, not bottom-stacked: title at +342, button at +407. */
body.voy-d45-system .voy-exp3__panel-body { padding: 342px 23px 29px; }
body.voy-d45-system .voy-exp3__panel-title { margin: 0 0 19.8px; font-size: 40px; line-height: 45.2px; }
body.voy-d45-system .voy-exp3__panel-more {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 104px;
	height: 39px;
	padding: 0;
	border: 1px solid #fff;
	border-radius: 2px;
	font-size: 14px;
	line-height: 18.34px;
	font-weight: 500;
	/* The shared rule uppercases this and tracks it out 0.08em. Both frames draw
	   it as plain sentence-case "Learn more" with no tracking, 76px wide — the
	   uppercase treatment rendered it 91px and overflowed the 104px box's
	   intended padding. This block is used by Desktop-4/5 and nowhere else, so
	   there is no other page relying on the uppercase look. */
	text-transform: none;
	letter-spacing: 0;
}
body.voy-d45-system .voy-exp3__nav { margin-top: 58px; }
body.voy-d45-system .voy-exp3__arrow { width: 42px; height: 42px; }
body.voy-d45-system .voy-exp3__dot { width: 7px; height: 7px; }
body.voy-d45-system .voy-exp3__dots { gap: 4px; }

/* -------- Contact / footer ------------------------------------------------ */
body.voy-d45-system .voy-contactc { padding: 159px 0 21.35px; background: #FFFFFF; }
body.voy-d45-system .voy-contactc__top {
	grid-template-columns: 865px 1fr;
	gap: 0;
	align-items: start;
	margin-bottom: 0;
}
/* Both the heading and its blurb sit at x166, not at the container edge. */
body.voy-d45-system .voy-contactc__intro { padding-left: 136px; }
body.voy-d45-system .voy-contactc__title { margin: 0; font-size: 40px; line-height: 45.2px; }
body.voy-d45-system .voy-contactc__blurb {
	width: 319px;
	max-width: 100%;
	margin: 17.8px 0 0;
	padding-bottom: 0;
	font-size: 14px;
	line-height: 18.34px;
	font-weight: 500;
	color: var(--voy-text);
}
body.voy-d45-system .voy-contactc__cta { padding-top: 33px; }
body.voy-d45-system .voy-contactc__link {
	width: 218px;
	justify-content: flex-start;
	gap: 0;
	padding-bottom: 4.7px;
	white-space: nowrap;
	font-family: var(--voy-font-body);
	font-size: 30px;
	line-height: 39.3px;
	font-weight: 400;
}
body.voy-d45-system .voy-contactc__link .voy-svg { flex: none; width: 19px; height: 18px; margin-left: auto; margin-right: 14px; }
/* rule y5218 -> heads y5290, values y5325/5355, rule y5447 */
body.voy-d45-system .voy-contactc__cols {
	grid-template-columns: 667px 573px 140px;
	gap: 0;
	margin-top: 158px;
	padding: 72px 0 62px;
}
body.voy-d45-system .voy-contactc__col { gap: 0; }
body.voy-d45-system .voy-contactc__label {
	margin: 0 0 15px;
	font-size: 18px;
	line-height: 20.34px;
	font-weight: 600;
	color: var(--voy-muted);
}
body.voy-d45-system .voy-contactc__col a,
body.voy-d45-system .voy-contactc__col span:not(.voy-contactc__label) {
	font-size: 18px;
	line-height: 20.34px;
	font-weight: 600;
}
body.voy-d45-system .voy-contactc__col a + a { margin-top: 10px; }
/* The address runs a size down from the phone/email values. */
body.voy-d45-system .voy-contactc__col--address a,
body.voy-d45-system .voy-contactc__col--address span:not(.voy-contactc__label) {
	max-width: 121px;
	font-size: 15px;
	line-height: 19.65px;
	font-weight: 400;
	color: var(--voy-muted);
}
/* Phone and email are the only black type in the footer; the labels, the address
   and the legal row are all #858585. */
body.voy-d45-system .voy-contactc__col a { color: #000; }
/* Figma trails each contact value with a 16x14 arrow, 19px clear of the text. */
body.voy-d45-system .voy-contactc__col--contact a::after {
	content: "";
	display: inline-block;
	width: 16px;
	height: 14px;
	margin-left: 19px;
	vertical-align: -1px;
	background-color: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") no-repeat center / contain;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") no-repeat center / contain;
}
body.voy-d45-system .voy-contactc__legal a,
body.voy-d45-system .voy-contactc__copy { color: var(--voy-muted); }
/* The legal row sits on the same three columns as the labels above it — Privacy
   at x30, (c)2026 at x697 under "Socials", Terms at x1270 under "Address". The
   base rule is space-between, which floats the middle item to the visual centre
   at x652 instead of onto the column. */
body.voy-d45-system .voy-contactc__legal {
	display: grid;
	grid-template-columns: 667px 573px 140px;
	gap: 0;
	padding-top: 23px;
	font-size: 15px;
	line-height: 19.65px;
	color: var(--voy-muted);
}
body.voy-d45-system .voy-contactc__legal > * { justify-self: start; }

@media (max-width: 1000px) {
	body.voy-d45-system .voy-logos-section { padding: 64px 0; }
	/* The wall is pinned to 346px for its three desktop rows of five. Narrower
	   viewports reflow it to three columns and then two, i.e. five rows and then
	   eight, and the fixed height left those extra rows painting over the navy
	   About band below. */
	body.voy-d45-system .voy-logos { height: auto; }
	body.voy-d45-system .voy-logos__track { grid-auto-rows: minmax(84px, auto); }
	body.voy-d45-system .voy-statement { padding: 48px 0 64px; }
	body.voy-d45-system .voy-markets { padding: 64px 0 30px; }
	body.voy-d45-system .voy-markets__grid { grid-template-columns: repeat(2, 1fr); }
	body.voy-d45-system .voy-market-card { width: auto; height: auto; padding: 40px 20px; }
	body.voy-d45-system .voy-band--tall { height: auto; min-height: 360px; }
	body.voy-d45-system .voy-exp3 { padding: 64px 0 40px; }
	body.voy-d45-system .voy-exp3__panel { flex-basis: 86vw; width: 86vw; height: auto; aspect-ratio: 634 / 475; }
	body.voy-d45-system .voy-contactc { padding: 64px 0 32px; }
	body.voy-d45-system .voy-contactc__intro { padding-left: 0; }
	body.voy-d45-system .voy-contactc__cols { grid-template-columns: 1fr; margin-top: 48px; padding: 32px 0; }
	body.voy-d45-system .voy-contactc__legal { grid-template-columns: 1fr; gap: 0.5rem; }

	/* Display type. The pixel values above are Figma's, measured at the 1440
	   canvas, and they are stated in px on purpose so the desktop audit can hold
	   them to the frame — but that also pins them at every width, and 36-50px
	   copy in a 315px column wraps to three words a line. Below the desktop
	   breakpoint they become fluid; the 1440 rendering is untouched. */
	body.voy-d45-system .voy-statement__body { font-size: clamp(20px, 3.4vw, 36px); line-height: 1.13; }
	body.voy-d45-system .voy-markets__head h2 { font-size: clamp(28px, 4.8vw, 50px); line-height: 1.13; }
	body.voy-d45-system .voy-band__text { font-size: clamp(22px, 3.8vw, 40px); line-height: 1.13; }
	body.voy-d45-system .voy-exp3__title,
	body.voy-d45-system .voy-exp3__panel-title,
	body.voy-d45-system .voy-contactc__title { font-size: clamp(24px, 3.8vw, 40px); line-height: 1.13; }
	body.voy-d45-system .voy-contactc__link { font-size: clamp(22px, 3vw, 30px); line-height: 1.31; }
	body.voy-d45-system .voy-hero__title { font-size: clamp(34px, 7.4vw, 90px); }
}

/* =============================================================================
   Standard section rhythm — the eight frames that share it
   =============================================================================
   home, v1, v1-b, v2-a, v2-b, v2-c, v2-d and desktop-6 are laid out identically
   from the hero down to the Functional Expertise heading. Verified across all
   eight frames' node trees, not assumed:

     hero band ends            y841
     "Trusted by professionals" y938   (26px serif, centred)
     logo row                  y1002-1062
     About eyebrow             y1162
     About h2                  y1204
     About body                y1297
     About photo               y1406 (1380x614) — or y1386 (1444x654 full bleed)
     markets grid              y2088-2511
     "FUNCTIONAL EXPERTISE"    y2599
     expertise h2              y2686

   Desktop-4/5 are the exception and keep their own rules (hero 839, h1 y344,
   expertise h2 y4016).
   -------------------------------------------------------------------------- */
body.voy-hero-841 .voy-logos-section { padding-top: 97px; padding-bottom: 0; }
body.voy-hero-841 .voy-logos-section .voy-container .voy-eyebrow,
body.voy-hero-841 .voy-logos-section .voy-container .voy-logos__title {
	display: block;
	width: 100%;
	margin: 0 0 34.6px;
	padding-bottom: 0;             /* Salient puts padding-bottom on <p> */
	text-align: center;
	font-family: var(--voy-font-heading);
	font-weight: 400;
	font-size: 1.625rem;           /* 26px */
	line-height: 1.13;
	letter-spacing: normal;
	text-transform: none;
	color: #000000;
}
body.voy-hero-841 .voy-logos-section .voy-container .voy-eyebrow::before { display: none; }
body.voy-hero-841 .voy-logos-section .voy-logos,
body.voy-hero-841 .voy-logos-section .voy-logos__track { height: 60px; }

body.voy-hero-841 .voy-about { padding-top: 100px; padding-bottom: 0; }
body.voy-hero-841 .voy-markets { padding-top: 68px; padding-bottom: 0; }
body.voy-hero-841 .voy-expertise { padding-top: 88px; padding-bottom: 45px; }
body.voy-hero-841 .voy-band--tall { min-height: 787px; }
/* V2-c only — verified off the frame render, not the node list: two photographs
   are stacked in the band and the visible one runs y3718-4510. */
body.voy-band-792 .voy-expertise { padding-bottom: 40px; }
body.voy-band-792 .voy-band--tall { min-height: 792px; }

/* home and v2-d draw the About photo differently: a full-bleed 1444x654 band at
   y1386 rather than the 1380x614 letterbox inside the container. The source is
   2797x1267 (2.208) against the band's 2.208 — a straight fit, no crop. */
body.voy-about-654 .voy-about__media {
	position: relative;
	width: 100vw;
	max-width: none;
	margin: 26px 0 0 calc(50% - 50vw);   /* body bottom y1360 -> band y1386 */
	aspect-ratio: 1440 / 654;
	overflow: hidden;
	border-radius: 0;
}
body.voy-about-654 .voy-about .voy-about__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 0;
}
body.voy-about-654 .voy-markets { padding-top: 48px; }   /* band ends y2040 -> tiles y2088 */

/* About block internals — same eight frames (eyebrow y1162 / h2 y1204, 805x68 on
   ONE line at 60px/67.8 / body y1297, 682 wide at 16px/20.96 in #858585). These
   were Desktop-6-only; every standard frame authors them identically. */
body.voy-hero-841 .voy-about__intro { max-width: none; }
body.voy-hero-841 .voy-about__intro .voy-eyebrow {
	justify-content: center;
	color: #1A2536;
	margin: 0 0 27.3px;
}
body.voy-hero-841 .voy-about__title {
	max-width: 805px;
	margin: 0 auto 25.2px;
	font-size: 60px;
	line-height: 67.8px;
	letter-spacing: 0;
	color: #000000;
}
body.voy-hero-841 .voy-about__body {
	max-width: 682px;
	margin: 0 auto;
	padding-bottom: 0;
	font-size: 16px;
	line-height: 20.96px;
	color: #858585;
}
body.voy-about-614 .voy-about__media { margin: 46.1px 0 0; }

/* Eyebrow — Figma authors it identically on all eight standard frames: an ARROW
   marker (vector 169:1676 and its twins, exported to the mask below) plus Inter
   600 14px/14.7 at 1.4 letter-spacing. The sitewide default is a 13px rotated
   triangle, which also left a taller line box and pushed each following heading
   down by ~9px. Block-level flex so there is no line-box leading at all. */
body.voy-hero-841 .voy-eyebrow {
	display: flex;
	align-items: center;
	gap: 9.5px;
	font-size: 14px;
	font-weight: 600;
	line-height: 14.7px;
	letter-spacing: 1.4px;
}
body.voy-hero-841 .voy-eyebrow::before {
	width: 11px;
	height: 12px;
	transform: none;
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 12'%3E%3Cpath d='M0.000321901 12L10.8807 6.75808L0.065384 0C0.065384 0 4.58319 5.22549 0.000321901 12Z'/%3E%3C/svg%3E");
	        mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 12'%3E%3Cpath d='M0.000321901 12L10.8807 6.75808L0.065384 0C0.065384 0 4.58319 5.22549 0.000321901 12Z'/%3E%3C/svg%3E");
}

/* Markets grid — identical on all eight standard frames: 1380x423 at y2088,
   tiles 346x212 on a 4x2 grid at x30/375/719/1064, square, #D9D9D9 hairlines,
   64px icons and Inter 400 22px/24.86 labels in #858585. Was rendering with the
   sitewide 16px radius, 34px icons and a 17px label, which also left the grid
   ~82px short and pushed every later section up by that much. */
body.voy-hero-841 .voy-markets__grid {
	border-radius: 0;
	border-color: #D9D9D9;
	background: var(--voy-white);
}
body.voy-hero-841 .voy-market-card {
	height: 211px;                 /* 210 content + its own 1px divider */
	padding: 50px 8px 0;
	justify-content: flex-start;
	gap: 21px;
	border-color: #D9D9D9;
	transition: background-color .25s ease;
}
body.voy-hero-841 .voy-market-card:nth-last-child(-n+4) { height: 210px; }
body.voy-hero-841 .voy-market-card__icon { height: 64px; }
body.voy-hero-841 .voy-market-card__icon .voy-market-icon { height: 64px; width: auto; }
body.voy-hero-841 .voy-market-card__label {
	font-size: 22px;
	font-weight: 400;
	line-height: 24.86px;
	color: #858585;
}
body.voy-hero-841 .voy-market-card.is-highlight { background: rgba(232, 249, 136, 0.46); }
body.voy-hero-841 .voy-market-card.is-highlight .voy-market-card__label { color: #858585; }
body.voy-hero-841 .voy-market-card__badge {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 60px;
	height: 60px;
	margin: -30px 0 0 -30px;
}
body.voy-hero-841 .voy-market-card__badge svg { width: 22px; height: 22px; stroke-width: 1.6; }
/* The :hover wash and muted label live with the rest of the tile hover further up. */

/* Functional Expertise head — again identical on all eight standard frames:
   eyebrow y2599, h2 y2686 (788 wide, TWO authored lines at 60px/67.8), intro
   x928 y2725 (436 wide, 16px/20.96 in #858585). The gap below the head differs
   per frame because the panel below it does, so it stays out of this block. */
body.voy-hero-841 .voy-expertise__head {
	display: grid;
	grid-template-columns: 788px 436px;
	column-gap: 110px;
	align-items: start;
}
body.voy-hero-841 .voy-expertise .voy-eyebrow { margin: 0 0 72.3px; }
body.voy-hero-841 .voy-expertise__title {
	max-width: 788px;
	margin: 0;
	font-size: 60px;
	line-height: 67.8px;
	letter-spacing: 0;
	color: #000000;
}
body.voy-hero-841 .voy-expertise__intro {
	margin: 126px 0 0;
	padding-bottom: 0;
	font-size: 16px;
	line-height: 20.96px;
	color: #858585;
}
/* The stacked frames start their first card at y2858, 27px above where the
   single-card frames put theirs (y2885). */
body.voy-exp-stack .voy-expertise__head { margin-bottom: 36.4px; }
/* V2-d alone drops its heading and intro 27px, then still starts the stack at
   y2885 — the one frame where the two offsets cancel out. */
body.voy-exp-stack-116 .voy-expertise .voy-eyebrow { margin: 0 0 99.3px; }
body.voy-exp-stack-116 .voy-expertise__intro { margin-top: 153px; }

@media (max-width: 900px) {
	body.voy-hero-841 .voy-expertise__head { grid-template-columns: 1fr; column-gap: 0; }
	body.voy-hero-841 .voy-expertise__intro { margin-top: 24px; }
}

/* =============================================================================
   Header navigation — none of the eleven Figma frames has one
   =============================================================================
   Every frame draws the header as exactly two things: the logo at x30 and a
   single "Contact Us" control at the right edge. There is no menu on home, on
   any V-version, or on Desktop-3/4/5/6 — the four-item nav was never in the
   design. It was hidden on Desktop-3 and Desktop-6 only, because doing it
   sitewide would have changed the client-approved Home page; that is now the
   intended change, applied on 2026-08-11.

   The menu itself is untouched in WordPress — this only stops the landing
   template from painting it, so restoring it is deleting this one rule.
   Salient sets `display:flex` on menu items with weight, hence the !important.
   -------------------------------------------------------------------------- */
body.page-template-template-voy-landing #header-outer #top nav ul.sf-menu > li:not(.voy-nav-cta) {
	display: none !important;
}

/* -----------------------------------------------------------------------------
   DESKTOP-4 / DESKTOP-5 header control
   -----------------------------------------------------------------------------
   These two frames draw a single BLACK 102x39 chip at x1308 y15, radius 2, with
   "Contact Us" in Inter 400 14px/18.34 at x1321 — no lime pill, and no arrow
   square (that one belongs to Desktop-3).
   -------------------------------------------------------------------------- */
body.voy-d45-system #header-outer #top nav ul.sf-menu > li.voy-nav-cta {
	margin: 0;
	padding: 0;
	position: relative;
	left: 40px;
	top: -7.8px;
}
body.voy-d45-system #header-outer #top nav ul li.voy-nav-cta > a {
	display: inline-flex !important;
	align-items: center;
	justify-content: flex-start;
	box-sizing: border-box;
	width: 102px;
	height: 39px;
	padding: 0 0 0 13px !important;
	border-radius: 2px !important;
	background: #000000 !important;
	color: #FFFFFF !important;
	font-family: var(--voy-font-body);
	font-size: 0.875rem;
	font-weight: 400;
	line-height: 18.34px;
	letter-spacing: normal;
	white-space: nowrap;
}
body.voy-d45-system .voy-nav-cta > a .menu-title-text::after { display: none !important; }
/* The label lives in an inner span, and the landing template paints that span
   navy for the lime pill it assumes every page has. On this black chip that was
   navy-on-black — all but unreadable. Figma: white, Inter Medium. */
body.voy-d45-system #header-outer #top nav ul li.voy-nav-cta > a .menu-title-text {
	color: #FFFFFF !important;
	font-weight: 500;
}
body.voy-d45-system #header-outer #top nav ul li.voy-nav-cta > a { font-weight: 500; }

/* =============================================================================
   Responsive fallbacks for the pixel-exact scopes
   =============================================================================
   Everything above translates Figma at its 1440 design width, so a lot of it is
   authored in absolute pixels — `grid-template-columns: 898px 388px`, a 708px
   left padding that reserves room for an absolutely positioned photo, fixed
   flex-basis card widths. That is correct at 1440 and only at 1440.

   The base blocks (`.voy-contact__head`, `.voy-expertise__head`, ...) already
   ship 900px/700px collapses, but those are single-class selectors and every
   pixel-exact rule is scoped to a body class, so the older fallbacks are
   outranked and never applied. This block restates them at the winning
   specificity. It is deliberately the LAST thing in the file and every rule is
   inside a media query, so nothing here can affect the verified 1440 layout.
   ========================================================================== */

@media (max-width: 1439px) {
	/* Two-column heads: back to proportional columns. */
	body.voy-contact-std .voy-contact__head {
		grid-template-columns: 1fr minmax(260px, 34%);
		column-gap: clamp(1.5rem, 4vw, 3rem);
	}
	body.voy-d6-stack .voy-expertise__head,
	body.voy-hero-841 .voy-expertise__head {
		grid-template-columns: 1.1fr 0.9fr;
		column-gap: clamp(1.5rem, 4vw, 4rem);
	}
	body.voy-d6-stack .voy-expertise__title,
	body.voy-hero-841 .voy-expertise__title { max-width: none; }
	body.voy-contact-std .voy-contact__intro,
	body.voy-d6-stack .voy-expertise__intro,
	body.voy-hero-841 .voy-expertise__intro { width: auto; max-width: 100%; }

	/* Desktop-3 partner grid + Desktop-4/5 contact columns. */
	body.voy-d3-system .voy-logos-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1.6fr); }
	body.voy-d45-system .voy-contactc__top { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); }
	body.voy-d45-system .voy-contactc__cols,
	body.voy-d45-system .voy-contactc__legal { grid-template-columns: repeat(3, minmax(0, auto)); }
	body.voy-d45-system .voy-contactc__intro { padding-left: clamp(0px, 6vw, 136px); }
	body.voy-d45-system .voy-market-card { width: auto; }

	/* Testimonial rail: cards sized against the viewport, not a fixed 596px. */
	body.voy-testi-std .voy-tcard { flex-basis: min(596px, 82vw); }

	/* The single always-open expertise card (home, v2-c, v1-b, v2-b): its photo
	   and body are each ~645px, i.e. 1287px + padding before it can breathe. */
	.voy-expertise-panel--tall,
	.voy-expertise-panel--tallest {
		height: auto;
		padding: 31px 23px 31px 34px;
	}
	.voy-expertise-panel--tall .voy-expertise-panel__photo,
	.voy-expertise-panel--tallest .voy-expertise-panel__photo {
		flex: 1 1 46%;
		min-width: 0;
		height: auto;
		aspect-ratio: 642 / 728;
	}
	.voy-expertise-panel--tall .voy-expertise-panel__photo { aspect-ratio: 642 / 524; }
	.voy-expertise-panel--tall .voy-expertise-panel__body,
	.voy-expertise-panel--tallest .voy-expertise-panel__body {
		flex: 1 1 46%;
		min-width: 0;
		max-width: none;
	}
}

/* Bounded on both sides deliberately: see the note where the shared 1439px block
   drops this rule. */
@media (min-width: 1001px) and (max-width: 1439px) {
	body.voy-d45-system .voy-exp3__panel { flex: 1 1 0; width: auto; }
}

@media (max-width: 1200px) {
	/* Stacked accordion: the 708px left padding exists only to clear the photo
	   that is absolutely positioned over it. Below this width there is no room
	   for both, so the photo goes back into the flow above the copy and the card
	   grows to fit rather than being pinned to a pitch. */
	body.voy-exp-stack .toggles .toggle:not(.open),
	body.voy-d6-stack .toggles .toggle:not(.open) {
		height: auto;
		max-height: none;
	}
	body.voy-exp-stack .toggles .toggle.open,
	body.voy-d6-stack .toggles .toggle.open { min-height: 0; }
	body.voy-exp-stack .toggles .toggle .voy-expertise-panel__photo,
	body.voy-d6-stack .toggles .toggle .voy-expertise-panel__photo {
		position: relative;
		left: 0;
		top: 0;
		width: 100%;
		height: auto;
		aspect-ratio: 642 / 381;
		margin-bottom: 24px;
	}
	body.voy-exp-stack .toggles .toggle .voy-expertise-panel__photo img,
	body.voy-d6-stack .toggles .toggle .voy-expertise-panel__photo img {
		position: static;
		width: 100%;
		height: 100%;
		object-fit: cover;
	}
	body.voy-exp-stack .toggles .toggle .toggle-title,
	body.voy-d6-stack .toggles .toggle .toggle-title { padding: 0; }
	body.voy-exp-stack .toggles .toggle .toggle-title a,
	body.voy-d6-stack .toggles .toggle .toggle-title a {
		padding: 26px 54px 26px 24px;
		min-height: 0;
		height: auto;
	}
	body.voy-exp-stack .toggles .toggle .voy-expertise-panel__body,
	body.voy-d6-stack .toggles .toggle .voy-expertise-panel__body { padding: 0 24px 28px; }
}

@media (max-width: 900px) {
	/* One column everywhere the design still holds two. */
	body.voy-contact-std .voy-contact__head,
	body.voy-d6-stack .voy-expertise__head,
	body.voy-hero-841 .voy-expertise__head,
	body.voy-d3-system .voy-logos-grid,
	body.voy-d45-system .voy-contactc__top {
		grid-template-columns: 1fr;
		column-gap: 0;
	}
	body.voy-d45-system .voy-contactc__cols { grid-template-columns: 1fr; gap: 1.5rem; }
	body.voy-d45-system .voy-contactc__legal { grid-template-columns: 1fr; gap: 0.5rem; }
	body.voy-d45-system .voy-contactc__intro { padding-left: 0; }
	body.voy-contact-std .voy-contact__intro { margin-top: 1rem; }

	/* The glass cards are absolutely positioned over the photo at 1440; on a
	   phone they stack underneath it instead. */
	body.voy-contact-std .voy-contact__cards {
		position: static;
		left: auto;
		right: auto;
		bottom: auto;
		height: auto;
		grid-template-columns: 1fr;
		margin-top: 1rem;
		-webkit-backdrop-filter: none;
		        backdrop-filter: none;
		background: rgba(255, 255, 255, 0.06);
	}
	body.voy-contact-std .voy-contact-card {
		border-left: 0;
		border-top: 1px solid rgba(255, 255, 255, 0.35);
		padding: 24px;
	}
	body.voy-contact-std .voy-contact-card:first-child { border-top: 0; }
	body.voy-contact-std .voy-contact-card__icon { margin-bottom: 18px; }
	body.voy-contact-std .voy-contact-card__label { margin-bottom: 8px; }
	body.voy-contact-std .voy-contact-card--address .voy-contact-card__label { margin-bottom: 8px; }
	body.voy-contact-std .voy-contact__media { height: auto; }
	body.voy-contact-std .voy-contact .voy-contact__img { height: 280px; }

	/* The tall card becomes photo-over-copy. */
	.voy-expertise-panel--tall,
	.voy-expertise-panel--tallest { flex-direction: column; gap: 24px; }
	.voy-expertise-panel--tall .voy-expertise-panel__photo,
	.voy-expertise-panel--tallest .voy-expertise-panel__photo,
	.voy-expertise-panel--tall .voy-expertise-panel__body,
	.voy-expertise-panel--tallest .voy-expertise-panel__body { flex: 0 0 auto; width: 100%; }

	/* Footer wordmark is a 1378px-wide vector lockup. */
	body.voy-contact-std .voy-footer__wordmark svg { width: 100%; height: auto; }
	body.voy-contact-std .voy-footer { padding: 64px 0 48px; }
}

@media (max-width: 1439px) {
	/* Desktop-3's partner tiles are a fixed repeat(4, 164px) = 746px with gaps,
	   inside a column that is well under that once the page stops being 1440. */
	body.voy-d3-system .voy-logos-grid__cards { grid-template-columns: repeat(4, minmax(0, 164px)); }
	body.voy-d3-system .voy-logos-grid__card { width: auto; }
}

@media (max-width: 1000px) {
	/* Desktop-4/5 logo wall: five fixed columns, each holding a logo capped at
	   190px. The cap is wider than the column below ~1000px, so the cells push
	   out of the grid; let the artwork shrink with its cell instead. */
	body.voy-d45-system .voy-logos__track { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	body.voy-d45-system .voy-logos__cell { min-width: 0; width: 100%; }
	body.voy-d45-system .voy-logos__img { max-width: 100%; }
}

@media (max-width: 600px) {
	body.voy-d45-system .voy-logos__track { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	body.voy-d3-system .voy-logos-grid__cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 800px) {
	/* Desktop-3's prev/next pair is pinned at left:373px — half of the 746px
	   quote column — which is past the right edge of a phone. Centre it under
	   the quote instead, and put the counter back in the flow above it. */
	body.voy-d3-system .voy-testimonials2 .testimonial_slider .testimonial-next-prev {
		left: 50%;
		transform: translateX(-50%);
		bottom: 24px;
	}
	body.voy-d3-system .voy-testimonials2 .controls { bottom: 72px; }
}

@media (max-width: 900px) {
	/* The quote is authored at a fixed 371px inside a 596px card; once the card
	   is viewport-sized the text kept its width and ran under the card edge. */
	body.voy-testi-std .voy-tcard {
		height: auto;
		padding: 40px 20px;
	}
	body.voy-testi-std .voy-tcard__quote {
		width: auto;
		max-width: 100%;
		margin-bottom: 24px;
	}
	/* The prev/next pair is justified against the heading on one flex row, which
	   at phone width lands it on top of the words. */
	body.voy-testi-std .voy-testimonials__head {
		flex-direction: column;
		gap: 20px;
		margin-bottom: 28px;
	}
	body.voy-testi-std .voy-testimonials__nav { align-self: flex-start; }
}

@media (max-width: 560px) {
	/* The card values are 24px from Figma; the email address alone is wider than
	   a 375px screen at that size. */
	body.voy-contact-std .voy-contact-card__value {
		/* Scales down just enough that info@voysearchpartners.com — the longest
		   value and one unbreakable token — still fits on one line at 375px.
		   overflow-wrap is the safety net for anything longer. */
		font-size: clamp(17px, 4.8vw, 24px);
		line-height: 1.3;
		overflow-wrap: anywhere;
	}
}

/* =============================================================================
   WPBakery wrapper hardening
   =============================================================================
   These pages were authored as bare shortcodes, but the moment anyone opens a
   page in the builder and saves, WPBakery normalises it into
   [vc_row][vc_column]...[/vc_column][/vc_row] — which wraps everything in
   `.wpb_wrapper` and `.row .col`. That changes the cascade underneath rules that
   were previously unopposed:

     * `.wpb_wrapper h1` (0,1,1) — from the base heading rule at the top of this
       file — started beating `.voy-hero__title` (0,1,0), painting the white hero
       headline in body-text navy on a dark photo.
     * `.row .col img { height: auto; margin-bottom: 15px }` (0,2,1) beat
       `.voy-hero__slides .voy-hero__slide` (0,2,0), so a slide fell back to its
       intrinsic ratio and left a navy strip under the hero.

   Both are restated here at a specificity that survives the wrapper. Any new
   rule that styles a bare element (h1..h6, img, p, ul) inside a VOY block needs
   the same treatment.
   ========================================================================== */
.voy-hero .voy-hero__title { color: var(--voy-white); }
.voy-hero .voy-hero__slides .voy-hero__slide {
	height: 100%;
	margin: 0;
}

/* WPBakery's row wrapper carries Salient's grid gutter as a negative margin, so
   once a page has been saved in the builder the column is a few px wider than
   the viewport on each side. Our sections are full-bleed and do their own
   containing, so the gutter has nothing to align and only produces a phantom
   horizontal overflow. */
.voy-landing-wrap .wpb_row.vc_row-fluid > .row_col_wrap_12,
.voy-landing-wrap .wpb_row.vc_row-fluid {
	margin-left: 0;
	margin-right: 0;
}
.voy-landing-wrap .wpb_row.vc_row-fluid > .row_col_wrap_12 > .wpb_column {
	padding-left: 0;
	padding-right: 0;
}

/* =============================================================================
   Hero design patterns  [voy_hero variant / button_style / scrim]
   =============================================================================
   Measured off the eleven built frames at 1440. The hero is drawn three ways:

     signature  home, v1, v1-b, v2-a, v2-b, v2-c, v2-d, desktop-6  (8 frames)
                841 band, headline at y189, Hedvig serif 85px/400, sub-copy
                300px wide at the bottom left, left-to-right navy gradient.
     banner     desktop-4, desktop-5
                839 band, headline lower at y344 and larger at 90px, sub-copy
                560px, otherwise identical to signature.
     editorial  desktop-3
                987 band, headline at y250 in Inter 85px/500 (the only
                sans-serif hero), pure-white sub-copy 447px, and a single flat
                rgba(0,0,0,.76) wash instead of the gradient.

   Button treatments, which vary independently of the variant:
     pill     162x59, radius 999, navy, lime 30px chip inline   (7 frames)
     capsule  167x54, radius 27, black, white 46px chip pinned right (desktop-6)
     split    120x39 radius 2 white label + a detached 39x39 white square,
              2px apart                                          (desktop-3)

   These classes are added ONLY when the shortcode passes the attribute (see
   voy_block_hero_classes), because desktop-3/4/5 still get their look from
   page-scoped CSS at the same specificity and a defaulted class would win.
   ========================================================================== */

/* -------- Variants -------------------------------------------------------- */
.voy-landing-wrap .voy-hero.voy-hero--banner .voy-hero__title { font-size: 90px; }
.voy-landing-wrap .voy-hero.voy-hero--banner .voy-hero__inner { justify-content: flex-end; }
.voy-landing-wrap .voy-hero.voy-hero--banner .voy-hero__sub { width: 560px; max-width: 100%; }

.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__inner { justify-content: flex-start; }
.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__title {
	font-family: var(--voy-font-body);
	font-weight: 500;
	line-height: 1.05;
	letter-spacing: -0.02em;
	max-width: 807px;
	margin-bottom: 41px;
}
.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__foot {
	align-items: flex-start;
	width: 100%;
	max-width: none;
}
.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__sub {
	width: 447px;
	max-width: 100%;
	font-size: 1.125rem;
	line-height: 1.31;
	color: #FFFFFF;
}
.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__actions { margin-top: 29px; }

/* -------- Scrims ---------------------------------------------------------- */
.voy-landing-wrap .voy-hero.voy-hero--scrim-flat .voy-hero__scrim { background: rgba(0, 0, 0, 0.76); }
.voy-landing-wrap .voy-hero.voy-hero--scrim-none .voy-hero__scrim { background: none; }

/* -------- Button treatments ----------------------------------------------- */
/* capsule — Desktop-6: a black pill whose arrow chip is a white circle pinned to
   the right edge rather than sitting inline. */
.voy-landing-wrap .voy-hero.voy-hero--btn-capsule .voy-btn,
.voy-landing-wrap .voy-hero.voy-hero--btn-capsule .voy-btn--dark {
	position: relative;
	width: 167px;
	height: 54px;
	padding: 0 0 0 24px;
	border-radius: 27px;
	background: #000000;
	color: #FFFFFF;
	justify-content: flex-start;
}
.voy-landing-wrap .voy-hero.voy-hero--btn-capsule .voy-btn__chip {
	position: absolute;
	right: 4px;
	top: 4px;
	width: 46px;
	height: 46px;
	margin: 0;
	border-radius: 50%;
	background: #FFFFFF;
	color: #000000;
}

/* split — Desktop-3: the label box IS the <a>, and the chip is lifted out to its
   right as a detached square, 2px clear. */
.voy-landing-wrap .voy-hero.voy-hero--btn-split .voy-btn,
.voy-landing-wrap .voy-hero.voy-hero--btn-split .voy-btn--dark {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: flex-start;
	width: 120px;
	height: 39px;
	padding: 0 0 0 14px;
	margin-right: 41px;
	border-radius: 2px;
	font-family: var(--voy-font-body);
	font-size: 0.875rem;
	font-weight: 400;
	line-height: 1.31;
	letter-spacing: normal;
	background: #FFFFFF;
	color: #000000;
}
.voy-landing-wrap .voy-hero.voy-hero--btn-split .voy-btn__chip {
	position: absolute;
	left: calc(100% + 2px);
	top: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 39px;
	height: 39px;
	margin: 0;
	border-radius: 2px;
	background: inherit;
	color: inherit;
}
.voy-landing-wrap .voy-hero.voy-hero--btn-split .voy-btn__chip svg { width: 16px; height: 14px; }

@media (max-width: 900px) {
	.voy-landing-wrap .voy-hero.voy-hero--banner .voy-hero__title { font-size: clamp(38px, 8vw, 90px); }
	.voy-landing-wrap .voy-hero.voy-hero--banner .voy-hero__sub,
	.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__sub { width: auto; }
	.voy-landing-wrap .voy-hero.voy-hero--editorial .voy-hero__title { margin-bottom: 24px; }
}

/* =============================================================================
   HOME-2 — the same design built from native Salient + WPBakery elements only
   =============================================================================
   Page 319 (/home-2/). Proof that the approved homepage is reproducible with the
   stock toolkit: no [voy_*] block appears in its content. Every section is a
   Salient `vc_row` carrying the VOY section classes through the row's own
   `class` param, with native elements inside.

   TWO SALIENT BEHAVIOURS THIS DEPENDS ON, both found the hard way:
   1. Salient's vc_row DROPS `el_class` and `el_id` and stamps its own
      `id="fws_…"`. Its row exposes `class` and `id` params instead. Rows built
      with el_class render completely unstyled with no error.
   2. `el_class` DOES work on vc_column, vc_column_inner and the elements — only
      rows are special.

   The rules below are the bridge between VC's wrapper markup
   (.vc_column-inner > .wpb_wrapper) and the flat structure app.css's section
   rules were written against. Everything is scoped to a `voy-n-*` class so it
   cannot reach the eleven approved pages.
   -------------------------------------------------------------------------- */

/* VC nests two wrapper divs inside every column. The section layouts are flex
   and grid, so those wrappers would become the only flex child and swallow the
   layout. `display: contents` makes them invisible to layout while leaving the
   elements themselves addressable. */
.voy-n-hero > .row_col_wrap_12 > .voy-hero__inner > .vc_column-inner,
.voy-n-hero > .row_col_wrap_12 > .voy-hero__inner > .vc_column-inner > .wpb_wrapper {
	display: contents;
}

/* --- Hero ---------------------------------------------------------------- */
/* `body.voy-hero-841 .voy-hero` (0,3,0) sets align-items:flex-start and outranks
   a bare `.voy-n-hero` (0,1,0), so the hero's content sat at the TOP of the
   841px band — over the logo — instead of at its foot. Invisible to the section
   comparator, which measures the band's own box (841 either way); only a
   screenshot at scroll 0 shows it. Matched here at (0,4,0). */
.voy-n-hero { display: flex; }
/* Salient's row overlay is a FLAT wash (color_overlay + overlay_strength). The
   approved hero uses a two-axis gradient scrim — dense navy at the left where
   the headline sits, clearing to the right so the slats stay readable. Painted
   on the row's own overlay layer so it stays a native row, just re-skinned. */
/* The approved hero MIRRORS the photograph (scaleX(-1)) so the dark slats fall
   on the left behind the headline and the warm ones reveal on the right. The
   scrim below is built for that orientation, so the flip has to come first. */
.voy-n-hero > .row-bg-wrap .row-bg { transform: scaleX(-1); }
.voy-n-hero > .row-bg-wrap .row-bg-overlay {
	opacity: 1 !important;
	background-color: transparent !important;
	background-image:
		linear-gradient(90deg, rgba(26,37,54,0.92) 0%, rgba(26,37,54,0.72) 32%, rgba(26,37,54,0.30) 58%, rgba(26,37,54,0.05) 82%),
		linear-gradient(0deg, rgba(26,37,54,0.35) 0%, rgba(26,37,54,0) 40%) !important;
}
body.voy-hero-841 .voy-hero.voy-n-hero { align-items: flex-end; }
/* Bottom-flush against the band edge otherwise; home leaves 105px under the CTA. */
/* h1(257) + 96 + sub(71) + 32 + cta(59) = 515; 841 - 515 - 137 puts it at y189. */
.voy-n-hero > .row_col_wrap_12 { width: 100%; padding-bottom: 127px; }
/* The h1 lives inside a vc_column_text, and .wpb_text_column carries Salient's
   27px element margin on top of the title's own 96px — which pushed the
   subhead and CTA 27px below where the approved hero puts them. */
.voy-n-hero .voy-n-h1-wrap { margin-bottom: 0 !important; }
.voy-n-hero .voy-hero__title { margin: 0 0 96px; }
.voy-n-hero .voy-hero__sub { margin: 0 0 32px !important; }
.voy-n-hero .voy-hero__sub { margin: 0 0 2.25rem; max-width: 289px; }
.voy-n-hero .voy-hero__sub p { margin: 0; }
.voy-n-hero a.nectar-button.voy-btn {
	display: inline-flex; align-items: center; justify-content: center;
	padding: 0 25.6px; height: 59px; min-width: 162px; font-size: 16px;
	border-radius: var(--voy-radius-pill) !important;
	font-family: var(--voy-font-body); font-weight: 500;
	/* colour intentionally NOT forced here: the approved hero CTA is navy
	   with a white label, and nectar_btn's colour_override supplies it as an
	   inline style. Forcing lime here overrode that silently. */
	box-shadow: none !important; opacity: 1 !important; transform: none !important;
}

/* THIRD SALIENT BEHAVIOUR, and the one that silently voided most of the rules
   below on the first pass: every vc_row is rendered with an INLINE
   `style="padding-top: …; padding-bottom: …"` built from its top_padding /
   bottom_padding params (salient-core/includes/vc_templates/vc_row.php ->
   nectar_get_row_padding_styles). Inline beats any class, so `padding` written
   here measured as 0px on every section. Section padding therefore lives on the
   element, in the builder, exactly where a site editor would set it — CSS below
   only does what the builder cannot express. */

/* The column carries `el_class="voy-container"`, but Salient's own
   .vc_column_container padding rules outrank the .voy-container padding-inline,
   so the content ran the full 1440 instead of the 1380 content column every
   other page uses.

   Deliberately NOT scoped to `voy-n-*`: any row the client builds on the
   landing template hits exactly the same thing, so the fix belongs to the
   container, not to this one page. The contained-template counterpart is in
   interior.css under `voy-vc-content`, at a higher specificity than this so it
   can take the gutter back off where Salient's own container already supplies
   one. */
.vc_row > .row_col_wrap_12 > .voy-container {
	padding-inline: var(--voy-gutter) !important;
}

/* Salient gives every row a 27px bottom margin. The approved home butts its
   sections edge to edge, so six rows of it were 162px of drift on their own.
   `:not(.inner_row)` is load-bearing: this selector is more specific than the
   per-row rules further down, so without it the expertise cards' 42px gap and
   the contact head's 40px gap were silently zeroed by a rule meant for the
   section rows. */
.vc_row[class*="voy-n-"]:not(.inner_row) { margin-bottom: 0 !important; }

/* `use_theme_fonts="yes"` on a vc_custom_heading resolves to the theme's HEADING
   font — right for an h2, wrong for the eyebrow, which the design sets in Inter
   600. Colour is left to the existing per-section rules (navy on cream, white on
   navy), so only family/weight/tracking are forced here. */
.voy-n-eyebrow {
	font-family: var(--voy-font-body) !important;
	font-weight: 600 !important;
	color: var(--voy-navy) !important;
}
.voy-n-contact .voy-n-eyebrow { color: #fff !important; }

/* --- Trusted-by logo marquee ---------------------------------------------
   `clients` is a CONTAINER element (is_container => true in its nectar_map):
   it takes nested [client image="ID"] children. The image_1…image_15 params it
   was given at first are not in its schema, which is why the carousel rendered
   as a completely empty <div class="row carousel clients"> — no markup, no
   error, no console warning. */
.voy-n-logos .voy-logos__title { margin: 0 0 34px; }
.voy-n-logos .carousel-wrap { margin: 0 !important; }
/* The carousel's slides are bare `.no-link` divs, not `.col`. */
.voy-n-logos .clients { margin: 0 !important; padding: 0 !important; }
.voy-n-logos .clients > div {
	padding: 0 !important; margin: 0 !important;
	height: 60px; display: flex !important; align-items: center; justify-content: center;
}
.voy-n-logos .clients > div img {
	max-height: 47px; max-width: 148px; width: auto; height: auto; margin: 0 auto;
	filter: grayscale(1); opacity: .75;
}

/* --- About --------------------------------------------------------------- */
.voy-n-about .voy-eyebrow { display: block; margin: 0 0 27.3px; }
.voy-n-about .voy-about__title { margin: 0 0 24px; }
.voy-n-about .voy-about__body { max-width: 856px; margin: 0 0 109px; }
.voy-n-about .voy-about__body p { margin: 0; }
.voy-n-about-media { display: block; width: 100% !important; height: 654px !important; object-fit: cover; }

/* --- Markets grid ---------------------------------------------------------
   The approved home draws this as ONE white panel with a hairline and internal
   dividers, not eight detached tiles — and with no heading above it. The two
   vc_row_inner grids are the panel's two halves, so the column's own
   .wpb_wrapper (which contains exactly those two rows) becomes the panel. */
.voy-n-markets > .row_col_wrap_12 > .voy-container > .vc_column-inner > .wpb_wrapper {
	background: var(--voy-white);
	border: 1px solid var(--voy-border);
	border-radius: var(--voy-radius);
	overflow: hidden;
}
.voy-n-grid { margin: 0 !important; }
.voy-n-grid > .row_col_wrap_12_inner { margin: 0 !important; }
.voy-n-tile,
.voy-n-tile > .vc_column-inner { padding: 0 !important; }
/* fancy_box's "bottom colour bar" hover effect paints a permanent
   rgba(51,51,51,.5) wash through .box-bg::after on a static (never-hovered)
   box — the whole grid rendered mid-grey behind the icons. */
.voy-n-tile .nectar-fancy-box .box-bg::after,
.voy-n-tile .nectar-fancy-box::after { display: none !important; }
.voy-n-tile { border-right: 1px solid var(--voy-border); }
.voy-n-tile:last-child { border-right: 0; }
/* The divider between the two rows is a real 1px border, so the first row's
   cards have to give that pixel back or the panel comes out 425 instead of 423. */
.voy-n-grid--first .voy-n-tile { border-bottom: 1px solid var(--voy-border); }
.voy-n-grid--first .voy-n-tile .nectar-fancy-box .inner {
	min-height: 210px !important; padding-bottom: 50px !important;
}
/* SALIENT DROPS el_class ON fancy_box AND nectar_icon_list TOO — not just on
   rows. The tile/column el_class DOES survive, so everything below is scoped
   through .voy-n-tile / .voy-n-card-text and then targets Salient's own class
   names. Selectors written against .voy-n-fancy / .voy-n-list matched nothing. */
/* Salient renders fancy_box's image_url as a full-bleed background on .box-bg,
   and custom_icon_image renders nothing at all here. So keep image_url and size
   the background down to a glyph rather than fighting for an <img>. */
.voy-n-tile .nectar-fancy-box .box-bg {
	/* the glyph renders 68x64 on the approved page, not at its 34px intrinsic size */
	background-size: 68px 64px !important;
	background-position: center 50px !important;
	background-repeat: no-repeat !important;
	background-color: transparent !important;
	opacity: 1 !important;
}
/* THE DOCUMENTED FANCY_BOX CASCADE TRAP: Salient ships
   `.nectar-fancy-box[data-style="default"] .inner * { color:#fff }` — three
   class-level components, so a two-class rule loses and every label rendered
   white on white. Needs !important, and a rule for the descendants too. */
.voy-n-tile .nectar-fancy-box .inner,
.voy-n-tile .nectar-fancy-box .inner * {
	color: #858585 !important;
}
/* `min_height` makes Salient pad the BOX to centre .inner vertically — 42px top
   and bottom here, on top of .inner's own height. The card's height is set on
   .inner, so the box has to contribute nothing. */
.voy-n-tile .nectar-fancy-box {
	background: transparent !important;
	border: 0; border-radius: 0;
	padding: 0 !important; min-height: 0 !important;
	transition: background .25s ease;
	overflow: hidden;
}
/* `color="extra-color-gradient-1"` paints Salient's own palette onto the box.
   The design's tile is plain white with a hairline, so every layer Salient can
   colour has to be neutralised — the wrapper, .box-bg, .inner and the hover
   overlay pseudo-element all carry it. */
.voy-n-tile .nectar-fancy-box .inner,
.voy-n-tile .nectar-fancy-box .box-bg,
.voy-n-tile .nectar-fancy-box::before,
.voy-n-tile .nectar-fancy-box::after {
	background-color: transparent !important;
	background-image: none;
}
.voy-n-tile .nectar-fancy-box .box-bg { background-image: inherit; }
/* 50 top pad + 64 icon block + 21 gap = 135 to the label, 25 label, 51 bottom
   => the 211px card the approved home draws. */
.voy-n-tile .nectar-fancy-box .inner {
	padding: 135px 16px 51px !important;
	min-height: 211px !important;
	display: block; text-align: center;
	background: none !important;
}
/* The glyph comes through as an <img> in the icon slot once custom_icon_image
   is used instead of image_url (image_url is the box's full-bleed background). */
.voy-n-tile .nectar-fancy-box .icon-wrap img,
.voy-n-tile .nectar-fancy-box .inner > img {
	width: 44px !important; height: 44px !important; margin: 0 0 auto;
}
.voy-n-tile .nectar-fancy-box h3 {
	font-family: var(--voy-font-body) !important; font-size: 22px !important;
	font-weight: 400 !important; line-height: 25px !important; margin: 0 !important;
	color: #858585 !important;
}
.voy-n-tile:hover .nectar-fancy-box { background: var(--voy-accent) !important; }

/* --- Expertise cards ----------------------------------------------------- */
/* Same two-track head as the contact section: eyebrow + 60px title on the left,
   the intro paragraph sitting beside it, not underneath. Stacked, the header ran
   104px taller than the approved page. */
.voy-n-ehead { margin: 0 0 64px !important; }
.voy-n-ehead > .row-bg-wrap { display: none; }
.voy-n-ehead > .row_col_wrap_12_inner {
	display: grid !important;
	grid-template-columns: 788px 436px;
	column-gap: 110px;
	align-items: start;
	margin: 0 !important;
}
.voy-n-ehead > .row_col_wrap_12_inner > .wpb_column {
	padding: 0 !important; width: auto !important; float: none !important;
}
.voy-n-ehead .vc_column-inner { padding: 0 !important; }
.voy-n-expertise .voy-eyebrow { display: block; margin: 0 0 72.3px; }
.voy-n-h2-wrap { margin: 0 !important; }
.voy-n-expertise .voy-expertise__title { margin: 0 !important; max-width: 788px; }
.voy-n-expertise .voy-expertise__intro { max-width: none; margin: 126px 0 0 !important; }
.voy-n-expertise .voy-expertise__intro p { margin: 0; }
/* 31 top pad + 728 photo + 42 row gap = the 835px pitch home draws. */
.voy-n-card {
	background: var(--voy-white);
	border: 1px solid var(--voy-border);
	border-radius: var(--voy-radius);
	padding: 31px 32px 0 !important;
	margin: 0 0 42px !important;
	min-height: 793px;
}
.voy-n-card:last-child { margin-bottom: 0 !important; }
.voy-n-card .vc_column_inner { padding: 0 !important; }
/* Photo is the LEFT column on the approved home — the first build had it on the
   right. Fixed in the layout's column order, not with a CSS reversal, so the
   builder canvas shows the same order the page does. */
/* The text column is a flex column so the focus-areas block can be pushed to the
   card's bottom edge, level with the photo, the way the approved card sets it.
   VC's two wrapper divs are made display:contents so they do not become the only
   flex child and swallow that layout. */
.voy-n-card-text {
	padding-left: 22px !important; display: flex; flex-direction: column;
	margin-top: 5px; min-height: 746px;
}
.voy-n-card-text > .vc_column-inner,
.voy-n-card-text > .vc_column-inner > .wpb_wrapper { display: contents; }
.voy-n-card-title {
	margin: 0 0 42.45px !important;
	font-size: 35px !important; line-height: 40px !important; color: #000 !important;
}
.voy-n-card a.nectar-button.voy-n-pill {
	display: inline-flex; align-items: center; justify-content: center;
	height: 45px; padding: 0 26px; margin: 0; align-self: flex-start;
	border-radius: var(--voy-radius-pill) !important;
	background-color: var(--voy-accent) !important; color: #000 !important;
	font-family: var(--voy-font-body); font-size: 16px; font-weight: 500;
	box-shadow: none !important; opacity: 1 !important; transform: none !important;
}
.voy-n-card a.nectar-button.voy-n-pill span { color: #000 !important; }
.voy-n-subhead {
	position: relative;
	margin: auto 0 26px !important;
	padding-bottom: 32px;
	font-family: var(--voy-font-body) !important; font-weight: 500 !important;
	font-size: 22px !important; line-height: 24.86px !important; color: #000;
	border-bottom: 1px solid var(--voy-border-rule, #D9D9D9);
}
/* Figma's affordance on these cards is a small diagonal arrow at the body's
   right edge, not a chevron or a "+". */
.voy-n-subhead::after {
	content: "";
	position: absolute; right: 7.3px; top: 4px; width: 22.7px; height: 22.7px;
	background-color: var(--voy-navy);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 7 7 17M7 7v10h10'/%3E%3C/svg%3E") no-repeat center / contain;
}
/* Salient's list item is .nectar-icon-list-item > .list-icon-holder + .content > h4.
   The numbered disc is replaced with the design's lime dot. */
/* Salient's list item is .nectar-icon-list-item > .list-icon-holder + .content.
   The holder is absolutely positioned by the parent theme, which is why the
   marker printed on top of the label instead of beside it; it is taken out of
   the box model entirely and the marker redrawn as the sitewide eyebrow
   triangle the design uses (10.53x8.43 at 32deg, #858585). */
.voy-n-card-text .nectar-icon-list { margin: 0; }
/* The vertical connector rail Salient draws down the list (::after, 1px at 10%
   black) belongs to its timeline styling, not to this design. */
.voy-n-card-text .nectar-icon-list::after { display: none !important; }
.voy-n-card-text .nectar-icon-list-item {
	position: relative; display: block; margin: 0; padding: 0 0 16.1px 39px;
}
.voy-n-card-text .nectar-icon-list-item .list-icon-holder { display: none !important; }
.voy-n-card-text .nectar-icon-list-item::before {
	content: "";
	position: absolute; left: 1.44px; top: 6.15px;
	width: 10.53px; height: 8.43px;
	background-color: #858585; transform: rotate(32deg);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10.53 8.43'%3E%3Cpath d='M5.20475 8.43083 10.5297 0 0 0Z'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
}
.voy-n-card-text .nectar-icon-list-item .content { padding: 0 !important; }
.voy-n-card-text .nectar-icon-list-item .content h4 {
	font-family: var(--voy-font-body) !important; font-size: 20px !important;
	font-weight: 400 !important; line-height: 26.2px !important;
	color: #858585 !important; margin: 0 !important;
	text-transform: none; letter-spacing: 0;
}
.voy-n-photo { display: block; width: 100% !important; height: 728px !important; object-fit: cover; border-radius: 12px; }

/* --- Contact --------------------------------------------------------------
   Head is a two-track grid (title block | intro paragraph), the photo carries a
   glass card strip inset over its lower edge, then the form. The card strip is
   pulled over the photo with a negative margin rather than absolute positioning:
   VC gives no arbitrary wrapper to position against, and a negative margin needs
   no containing block, so the strip stays a real builder row the client can edit. */
/* The grid goes on Salient's own column wrapper, not on the row: that wrapper is
   `display: flex` from the parent theme and would not yield to display:contents,
   so the row's two columns ended up as one flex item in the second track. */
.voy-n-chead { margin: 0 0 40.15px !important; }
.voy-n-chead > .row_col_wrap_12_inner {
	display: grid !important;
	grid-template-columns: 898px 388px;
	column-gap: 0;
	align-items: start;
	margin: 0 !important;
}
/* Every Salient row emits an empty `.row-bg-wrap` background layer BEFORE its
   column wrapper. Once the wrapper is display:contents that layer becomes the
   grid's first item and eats track 1, which is what pushed the title and the
   intro both into the 388px track. */
.voy-n-chead > .row-bg-wrap,
.voy-n-ccards > .row-bg-wrap { display: none; }
/* The inner row's columns are .wpb_column.vc_col-sm-8/-4 — there is no
   `.vc_column_inner` element in this markup, only `.vc_column-inner`. Left as
   the percentage widths, the 45px title wrapped to two lines. */
.voy-n-chead > .row_col_wrap_12_inner > .wpb_column {
	padding: 0 !important; width: auto !important; float: none !important;
}
.voy-n-chead .vc_column-inner { padding: 0 !important; }
.voy-n-contact .voy-eyebrow { display: block; margin: 0 0 21.3px; color: #fff; }
.voy-n-contact .voy-contact__title {
	margin: 0; font-size: 45px !important; line-height: 50.85px !important; color: #fff;
}
.voy-n-cintro { margin-top: 14px; }
/* 14px below the eyebrow, matching the approved head row. */
.voy-n-cintro { margin: 14px 0 0; }
.voy-n-cintro p { margin: 0; font-size: 16px !important; line-height: 20.96px; color: #fff !important; }

/* Salient's image_with_animation forces `height: auto` on the <img>, so every
   fixed height here has to be !important or the image just takes its natural
   aspect (1380 wide => 920 tall, not the 703 the design draws). */
.voy-n-cphoto {
	display: block; width: 100% !important; height: 703px !important;
	object-fit: cover; object-position: 0 21%;
	border-radius: 0; filter: brightness(0.94);
}
/* image_with_animation nests wrap > inner > hover-wrap > hover-wrap-inner > img,
   and it is `.hover-wrap` (the third level down, not the outer wrapper) that
   carries a 15px bottom margin. Harmless everywhere else, but here the card
   strip is positioned off the photo's bottom edge, so every offset below it
   inherited the 15. */
.voy-n-contact .hover-wrap { margin-bottom: 0 !important; }
/* strip height 237 + 27 clear of the photo's bottom edge */
.voy-n-ccards {
	position: relative; z-index: 2;
	margin: -264px 33px 0 !important;
	height: 237px;
	background: rgba(0, 0, 0, 0.33);
	border: 1px solid rgba(255, 255, 255, 0.54);
	-webkit-backdrop-filter: blur(18.2px);
	        backdrop-filter: blur(18.2px);
}
.voy-n-ccards > .row_col_wrap_12_inner { display: flex; height: 100%; margin: 0 !important; }
.voy-n-ccards > .row_col_wrap_12_inner > .wpb_column { flex: 1 1 0; float: none !important; }
.voy-n-ccell { padding: 0 !important; border-left: 1px solid rgba(255, 255, 255, 0.54); }
.voy-n-ccell > .vc_column-inner { padding: 0 !important; }
.voy-n-ccell:first-child { border-left: 0; }
.voy-n-ccard { padding: 30px 0 0 27px; }
.voy-n-ccard__icon {
	display: flex; align-items: center; justify-content: center;
	width: 49px; height: 49px; margin: 0 0 42px;
	border-radius: 50%; background: var(--voy-accent); color: #000;
}
.voy-n-ccard__icon svg { width: 24px; height: 24px; }
.voy-n-ccard__label {
	display: block; font-size: 16px; font-weight: 500; line-height: 20.96px;
	margin-bottom: 36px; color: #fff;
}
.voy-n-ccard--address .voy-n-ccard__label { margin-bottom: 14px; }
.voy-n-ccard__value {
	display: block; font-size: 24px; font-weight: 500; line-height: 27.12px; color: #fff;
}
.voy-n-ccard__value a { color: #fff !important; text-decoration: none; }
.voy-n-ccard__value a:hover { color: var(--voy-accent) !important; }
/* photo bottom + 64 = first form label. The strip's -264 pull has to be added
   back, since it left the flow 27px short of the photo's bottom edge. */
.voy-n-form { margin-top: 91px !important; }

/* --- Footer -------------------------------------------------------------- */
/* The footer lockup is a brand asset (icon mark + wordmark), not a typeface the
   heading element can reproduce — set as text it came out in the serif with no
   mark and no chrome. So the heading keeps the words (they stay the accessible
   name and stay editable in the builder) and the shipped white vector is used as
   a mask over the brushed-metal gradient, which is the same treatment the
   approved footer paints into its inline SVG. */
.voy-n-wordmark {
	display: block; height: 145px; margin: 0 0 10px;
	font-size: 0; line-height: 0; color: transparent;
	background: linear-gradient(100deg, #fff 0%, #c7cdd6 38%, #8a93a3 55%, #dfe4ea 78%, #6f7789 100%);
	-webkit-mask-image: url(assets/logo-header.svg);
	        mask-image: url(assets/logo-header.svg);
	-webkit-mask-repeat: no-repeat;      mask-repeat: no-repeat;
	-webkit-mask-size: auto 145px;       mask-size: auto 145px;
	-webkit-mask-position: left center;  mask-position: left center;
}
.voy-n-footer-bar { margin: 0 !important; }
.voy-n-footer-bar .vc_column_inner { padding: 0 !important; }
.voy-n-legal { line-height: 20px; }
.voy-n-legal p { margin: 0; line-height: 20px; }
.voy-n-legal a { color: #858585 !important; font-size: 15px; line-height: 20px; text-decoration: none; }
.voy-n-legal a:hover { color: var(--voy-text-invert) !important; }
.voy-n-legal--right { text-align: right; }

@media (max-width: 1000px) {
	.voy-n-card { min-height: 0; }
	.voy-n-card-text { padding-left: 0 !important; }
	.voy-n-photo { height: 320px; }
	.voy-n-about-media { height: 320px; }
	.voy-n-cphoto { height: 260px !important; }
	.voy-n-chead > .row_col_wrap_12_inner { grid-template-columns: 1fr; row-gap: 14px; }
	.voy-n-cintro { margin-top: 0; }
	.voy-n-ccard { padding: 24px 20px; }
	.voy-n-ccard__icon { margin-bottom: 20px; }
	.voy-n-ccard__label { margin-bottom: 10px; }
	.voy-n-ccard--address .voy-n-ccard__label { margin-bottom: 10px; }
	/* 24px runs the email address past the card edge at 375. */
	.voy-n-ccard__value { font-size: 18px; line-height: 24px; word-break: break-word; }
	/* The glass strip stacks under the photo on narrow screens, so the pull-up
	   and the margin that compensates for it both have to go. */
	.voy-n-ccards { margin: 16px 0 0 !important; height: auto; }
	.voy-n-ccards > .row_col_wrap_12_inner { display: block; }
	.voy-n-ccell { border-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.54); }
	.voy-n-ccell:first-child { border-top: 0; }
	.voy-n-form { margin-top: 40px !important; }
	.voy-n-wordmark { font-size: clamp(3rem, 9.6vw, 8.6rem); }
	.voy-n-tile { border-right: 0; }
}


/* -----------------------------------------------------------------------------
   voy-ui-fixes-2026-08-14
   -----------------------------------------------------------------------------
   Three fixes reported off the staging build. Kept in one block at the end of
   the file so they win on order without needing !important where specificity
   alone is enough.
   ----------------------------------------------------------------------------- */

/* (1) Logo strip -- belt and braces for the inline sizing set in logos.php.
   Salient's `.main-content img { height: auto }` is (0,1,1) and outranks the
   (0,1,0) `.voy-logos__img` rule above, which is why the strip fell back to the
   raster's natural size (exactly 2x the Figma dimensions). Match that
   specificity so the design height wins on the marquee, and let each logo keep
   its own Figma width from the inline style. */
.voy-logos .voy-logos__img {
	height: auto;
	max-width: 100%;
}

/* (2) The approved header is logo + nav + Contact pill. Salient injects its own
   search affordance at <=768px; suppress it on the landing template and inside
   the off-canvas panel. Blog, category, tag, date and author pages are left
   alone deliberately -- search belongs to them. */
body.page-template-template-voy-landing #header-outer a.mobile-search,
body.page-template-template-voy-landing #header-outer .mobile-search,
body.page-template-template-voy-landing #search-btn,
body.page-template-template-voy-landing #slide-out-widget-area .slide_out_area_close ~ #searchform,
body.page-template-template-voy-landing #slide-out-widget-area #searchform,
body.page-template-template-voy-landing .slide-out-widget-area-toggle ~ #search-outer {
	display: none !important;
}

/* (3) Functional Expertise on tablet/mobile. Below 1001px the card becomes
   display:block, so the flex gap that separates the "Learn More" pill from
   "Key Focus Areas" on desktop stops applying and the two collapse to 32px.
   Figma's compact card variant (the stacked accordion, card-relative) puts the
   pill at y99 h45 and "Key Focus Areas" at y210 -- a 66px gap. Use the design's
   own number rather than inventing one. */
@media (max-width: 1000px) {
	.voy-expertise-panel--tall .voy-expertise-panel__cta,
	.voy-expertise-panel--tallest .voy-expertise-panel__cta {
		margin-bottom: 66px;
	}
	/* the title needs to breathe from the photo above it too */
	.voy-expertise-panel--tall .voy-expertise-panel__title,
	.voy-expertise-panel--tallest .voy-expertise-panel__title {
		margin-bottom: 28px;
	}
}


/* -----------------------------------------------------------------------------
   voy-home2-parity-2026-08-14
   -----------------------------------------------------------------------------
   /home-2/ is the approved homepage rebuilt from native Salient/WPBakery
   elements. Everything below closes a measured gap against the approved page;
   geometry already matched, so these are alignment, colour and one affordance.
   ----------------------------------------------------------------------------- */

/* The approved hero CTA is a navy pill with a 30px lime chip holding a right
   arrow. `nectar_btn` has no chip parameter, so draw it as a pseudo-element on
   the button rather than dropping to a custom block. */
.voy-n-btn--chip .nectar-button-inner,
a.voy-n-btn--chip {
	display: inline-flex !important;
	align-items: center;
	gap: 12px;
}
a.voy-n-btn--chip::after {
	content: "";
	flex: 0 0 auto;
	width: 30px;
	height: 30px;
	border-radius: 50%;
	background-color: var(--voy-accent, #E8F988);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E") no-repeat center / 15px 15px,
	             linear-gradient(#000 0 0);
	-webkit-mask-composite: xor;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E") no-repeat center / 15px 15px,
	             linear-gradient(#000 0 0);
	        mask-composite: exclude;
}

/* Eyebrow, heading and body copy are centred on the approved page. The two
   headings carry text_align in their own shortcode now; the body copy comes
   from a vc_column_text, which has no alignment parameter. */
.voy-n-about .voy-about__body,
.voy-n-about .voy-about__body p,
.voy-n-about .wpb_text_column p {
	text-align: center;
}

/* The approved about photo is full-bleed (1440 at a 1440 viewport); inside
   .voy-container it was being held to the 1380 content column. */
.voy-n-about .voy-n-about-media,
.voy-n-about .voy-about__media {
	width: 100vw;
	max-width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}


/* -----------------------------------------------------------------------------
   voy-home2-bleed-2026-08-14
   -----------------------------------------------------------------------------
   image_with_animation puts el_class on the <img>, so the earlier full-bleed
   rule fought Salient's own image sizing and lost. Bleed the wrapper instead.
   ----------------------------------------------------------------------------- */
.voy-n-about .img-with-aniamtion-wrap {
	width: 100vw;
	max-width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}
.voy-n-about .img-with-aniamtion-wrap .voy-n-about-media {
	width: 100% !important;
	max-width: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}


/* -----------------------------------------------------------------------------
   voy-mobile-header-2026-08-14
   ----------------------------------------------------------------------------- */

/* (A) Mobile sticky bar had no background. Salient uses `.small-nav` on desktop
   but `.scrolled-down` on mobile, and the navy rule above only matched the
   former. Match Salient's mobile class so the condensed bar is navy on a phone
   too -- without it the white logo and Contact pill sit on bare page. */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer.scrolled-down,
	body.page-template-template-voy-landing #header-outer.small-nav {
		background: var(--voy-navy) !important;
		box-shadow: 0 8px 28px rgba(0, 0, 0, 0.22) !important;
	}
}

/* (B) Landing pages carry no burger menu: Contact Us is the whole mobile nav.
   Salient hides ul.sf-menu wholesale below its breakpoint and swaps in the
   off-canvas toggle, so both halves have to be inverted here. Scoped to the
   landing template so blog/category/tag/date/author keep a real menu. */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer .slide-out-widget-area-toggle,
	body.page-template-template-voy-landing #header-outer .mobile-icon,
	body.page-template-template-voy-landing #header-outer a.mobile-search {
		display: none !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav,
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu {
		display: flex !important;
		visibility: visible !important;
		opacity: 1 !important;
		float: none;
		width: auto;
		justify-content: flex-end;
		align-items: center;
	}
	/* every item except the Contact pill stays hidden */
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li {
		display: none !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta {
		display: flex !important;
		align-items: center;
		margin: 0;
	}
}


/* -----------------------------------------------------------------------------
   voy-mobile-fit-2026-08-14
   -----------------------------------------------------------------------------
   Phone header fit. With the burger gone the row is logo + Contact pill, and at
   desktop sizing that is 468px of content in a 375px viewport -- the pill was
   overlapping the wordmark. Shrink both and tighten the gutter under 600px:
   ~170 logo + ~112 pill + 40 gutter = ~322, which clears 375 comfortably and
   still fits a 320px device.
   ----------------------------------------------------------------------------- */
@media (max-width: 600px) {
	body.page-template-template-voy-landing #header-outer .container {
		padding: 0 20px !important;
	}
	body.page-template-template-voy-landing #header-outer #logo img,
	body.page-template-template-voy-landing #header-outer #logo img.default-logo {
		width: auto !important;
		max-width: 170px !important;
		height: auto !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav ul.sf-menu > li.voy-nav-cta > a {
		font-size: 13px !important;
		padding: 0 16px !important;
		height: 32px !important;
		line-height: 32px !important;
		min-width: 0 !important;
	}
}

/* 601-1000px has room for the full-size pill, but Salient's own right-edge
   reservation for the (now hidden) toggle leaves a gap; pull it back in. */
@media (min-width: 601px) and (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer .container {
		padding: 0 30px !important;
	}
}


/* -----------------------------------------------------------------------------
   voy-mobile-header-pos-2026-08-14
   -----------------------------------------------------------------------------
   Salient's mobile header positions its pieces absolutely, so the nav has to be
   placed the same way rather than floated -- floating it pulled the inner
   .container to y=-121 and clipped the Contact pill off the top of the screen.
   Pin the nav to the right edge and centre it against the bar's own height.
   ----------------------------------------------------------------------------- */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer #top nav {
		position: absolute !important;
		right: 20px;
		top: 50%;
		transform: translateY(-50%);
		float: none !important;
		width: auto !important;
		margin: 0 !important;
		z-index: 5;
	}
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu {
		margin: 0 !important;
		padding: 0 !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta > a {
		display: inline-flex !important;
		align-items: center;
		justify-content: center;
	}
}
@media (min-width: 601px) and (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer #top nav { right: 30px; }
}


/* -----------------------------------------------------------------------------
   voy-single-post-2026-08-14
   -----------------------------------------------------------------------------
   Single-post tail: drop Salient's prev/next post band and tighten the run into
   the footer.
   ----------------------------------------------------------------------------- */

/* The prev/next band carried the pagination, a 100.8px bottom padding that read
   as dead cream space above the footer, and overflow:hidden that clipped its own
   hover arrow. Not wanted on this site -- remove all three at once. */
body.single-post .blog_next_prev_buttons,
body.single .blog_next_prev_buttons {
	display: none !important;
}

/* With the band gone the content would butt straight into the footer; give it
   the same breathing room the rest of the site uses. */
body.single-post .container-wrap,
body.single .container-wrap {
	padding-bottom: 72px !important;
}

/* The byline was inheriting the serif display face at 28px. That face is for
   headings; a byline belongs on the body face. The post H1 is untouched. */
body.single-post #author-bio h3,
body.single-post #author-bio h3 a,
body.single #author-bio h3,
body.single #author-bio h3 a {
	font-family: var(--voy-font-body) !important;
	font-size: 16px !important;
	font-weight: 600 !important;
	line-height: 1.4 !important;
	color: var(--voy-text) !important;
}
body.single-post #author-bio,
body.single #author-bio {
	padding-top: 24px;
}


/* -----------------------------------------------------------------------------
   voy-mobile-audit-2026-08-14
   ----------------------------------------------------------------------------- */

/* (1a) The Contact pill inherited list padding, so it stopped 50px short of the
   edge while the logo sat on a 20px gutter. Put both on the same gutter. */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta {
		padding: 0 !important;
		margin: 0 !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta > a {
		margin: 0 !important;
	}
}

/* (1b) At 320px the logo (170) and pill (130) plus gutters need 350 of a 375
   design -- on a 320 screen they overlapped by 50px. Scale both down below
   360px so the pair fits a 320 device with room to spare. */
@media (max-width: 360px) {
	body.page-template-template-voy-landing #header-outer .container {
		padding: 0 16px !important;
	}
	body.page-template-template-voy-landing #header-outer #logo img,
	body.page-template-template-voy-landing #header-outer #logo img.default-logo {
		max-width: 132px !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta > a {
		font-size: 12px !important;
		padding: 0 13px !important;
		height: 30px !important;
		line-height: 30px !important;
	}
	body.page-template-template-voy-landing #header-outer #top nav { right: 16px; }
}

/* (1c) The pill measured 5px above the bar's centre at every width: the anchor
   is translated by the nav, but the inline-flex line box added a half-leading
   offset. Neutralise it. */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer #top nav > ul.sf-menu > li.voy-nav-cta > a {
		line-height: 1 !important;
		vertical-align: middle;
	}
}

/* (3) Restore the approved page's hover tint on /home-2/'s market tiles. The
   approved card uses rgba(232,249,136,0.46); fancy_box's own overlay is
   suppressed further up, so set it on the box itself. */
.voy-n-markets .voy-n-tile .fancy-box,
.voy-n-markets .voy-n-tile .fancy-box .box-bg {
	transition: background-color .25s ease;
}
.voy-n-markets .voy-n-tile .fancy-box:hover,
.voy-n-markets .voy-n-tile:hover .fancy-box {
	background-color: rgba(232, 249, 136, 0.46) !important;
}


/* voy-mobile-audit-final-2026-08-14
   The pill's <a> sits ~20px inside its <li>, so pinning the NAV to a 20px gutter
   left the visible pill 40px off the edge while the logo sat on 20. Pin the nav
   to 0 and let that inset become the gutter, so both sides read equal. The pill
   also measured 5px above centre: the nav's containing block is not the header
   box, so translateY(-50%) lands slightly high -- correct it explicitly. */
@media (max-width: 1000px) {
	body.page-template-template-voy-landing #header-outer #top nav {
		right: 0 !important;
		margin-top: 5px !important;
	}
}
@media (max-width: 360px) {
	body.page-template-template-voy-landing #header-outer #top nav {
		right: 0 !important;
		margin-top: 4px !important;
	}
}


/* voy-tile-hover-final — paint the hover tint on the TILE as well as the fancy_box.
   The approved page tints .voy-market-card itself; on home-2 the equivalent box
   is the VC column (.voy-n-tile) wrapping a fancy_box, and which of the two
   actually paints depends on Salient's own box markup. Setting both makes the
   result identical to the approved page either way. */
.voy-n-markets .voy-n-tile { transition: background-color .25s ease; }
.voy-n-markets .voy-n-tile:hover { background-color: rgba(232, 249, 136, 0.46) !important; }
