/*
 * Per-block styles. Every value traces to TOKENS.md or the corresponding design reference.
 * Grids use auto-fill, never auto-fit — auto-fit stretches a lone card in the last row.
 */

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

.nvs-hero {
	background-color: var(--nvs-navy);
	background-size: cover;
	background-position: center center;
	background-repeat: no-repeat;
}

.nvs-hero--image {
	background-image: var(--nvs-scrim-hero), var(--nvs-hero-image);
}

.nvs-hero > .nvs-container {
	padding-top: var(--nvs-pad-hero);
	padding-bottom: var(--nvs-pad-hero);
}

.nvs-hero--page > .nvs-container {
	padding-top: var(--nvs-pad-hero-page);
	padding-bottom: var(--nvs-pad-hero-page);
}

.nvs-hero__inner {
	max-width: 780px;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 28px;
}

/* Sub-page heroes give the headline more room and sit tighter than the home hero. */
.nvs-hero--section .nvs-hero__inner {
	max-width: 940px;
	gap: 20px;
}

.nvs-hero .nvs-eyebrow {
	color: var(--nvs-blue-light);
}

.nvs-hero h1 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-h1);
	line-height: 1.08;
	font-weight: 800;
	letter-spacing: -0.02em;
	color: #ffffff;
	text-wrap: pretty;
}

.nvs-hero--section h1 {
	font-size: var(--nvs-size-h1-sub);
	line-height: 1.1;
}

.nvs-hero__sub {
	margin: 0;
	max-width: 640px;
	font-size: var(--nvs-size-lead);
	line-height: 1.65;
	color: var(--nvs-on-dark);
	text-wrap: pretty;
}

.nvs-hero .nvs-buttons {
	margin-top: 8px;
}

.nvs-hero .nvs-btn {
	padding: 18px 34px;
}

/* -------------------------------------------------------------------------
 * nvs/rich-text — prose
 * ---------------------------------------------------------------------- */

.nvs-rich-text__figure {
	margin: 0 0 32px;
}

.nvs-rich-text__figure--below {
	margin: 32px 0 0;
}

.nvs-rich-text__figure img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: var(--nvs-radius-card);
}

.nvs-rich-text .nvs-section__header {
	margin-bottom: 24px;
}

.nvs-prose {
	font-size: 16.5px;
	line-height: 1.78;
	color: var(--nvs-ink);
}

.nvs-prose > *:first-child {
	margin-top: 0;
}

.nvs-prose > *:last-child {
	margin-bottom: 0;
}

.nvs-prose p {
	margin: 0 0 20px;
	text-wrap: pretty;
}

/*
 * theme.json sets blockGap to 0 so our sections can abut with no seam. Prose therefore owns its
 * own vertical rhythm — including for the core blocks a blog post body is written with.
 */
.nvs-prose h2 {
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-h2-narrow);
	font-weight: 800;
	line-height: 1.2;
	letter-spacing: -0.02em;
	color: var(--nvs-navy);
	margin: 44px 0 16px;
}

.nvs-prose h3 {
	font-family: var(--nvs-font-heading);
	font-size: 22px;
	font-weight: 700;
	line-height: 1.35;
	color: var(--nvs-navy);
	margin: 36px 0 14px;
}

.nvs-prose figure,
.nvs-prose .wp-block-image,
.nvs-prose .wp-block-embed {
	margin: 32px 0;
}

.nvs-prose figure img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: var(--nvs-radius-card);
}

.nvs-prose figcaption {
	margin-top: 10px;
	font-size: 14.5px;
	color: var(--nvs-ink-faint);
}

.nvs-prose h4 {
	font-family: var(--nvs-font-heading);
	font-size: 18px;
	font-weight: 700;
	color: var(--nvs-navy);
	margin: 28px 0 12px;
}

.nvs-prose ul,
.nvs-prose ol {
	margin: 0 0 22px;
	padding-left: 22px;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nvs-prose li {
	line-height: 1.7;
}

.nvs-prose li::marker {
	color: var(--nvs-blue);
}

.nvs-prose strong {
	color: var(--nvs-navy);
	font-weight: 600;
}

.nvs-prose iframe,
.nvs-prose video {
	display: block;
	width: 100%;
	aspect-ratio: 16 / 9;
	height: auto;
	border: 0;
	border-radius: var(--nvs-radius-card);
	background: var(--nvs-navy);
	margin: 12px 0 0;
}

.nvs-prose blockquote {
	margin: 28px 0;
	padding: 4px 0 4px 24px;
	border-left: 3px solid var(--nvs-blue);
	font-size: 18px;
	line-height: 1.65;
	color: var(--nvs-navy);
}

/* -------------------------------------------------------------------------
 * nvs/card-grid
 * ---------------------------------------------------------------------- */

.nvs-card-grid__items {
	margin-top: 56px;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--nvs-col-min, 320px), 1fr));
	gap: 32px;
}

.nvs-card-grid--tile .nvs-card-grid__items,
.nvs-card-grid--accentTile .nvs-card-grid__items,
.nvs-card-grid--plain .nvs-card-grid__items {
	margin-top: 48px;
	gap: 28px;
}

.nvs-card-grid__items:first-child {
	margin-top: 0;
}

/* imageCard */
.nvs-card {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	overflow: hidden;
	display: flex;
	flex-direction: column;
	transition: box-shadow var(--nvs-duration-hover) ease, transform var(--nvs-duration-hover) ease;
}

.nvs-card:hover {
	box-shadow: var(--nvs-shadow-hover);
	transform: translateY(-4px);
}

.nvs-card__media img {
	width: 100%;
	height: 208px;
	object-fit: cover;
	display: block;
}

.nvs-card__body {
	padding: 30px 30px 34px;
	display: flex;
	flex-direction: column;
	gap: 14px;
	flex: 1;
}

.nvs-card__body h3 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-card-h3);
	font-weight: 700;
	line-height: 1.3;
	color: var(--nvs-navy);
}

.nvs-card__body p {
	margin: 0;
	font-size: var(--nvs-size-card-body);
	line-height: 1.7;
	color: var(--nvs-ink);
}

.nvs-card__body .nvs-textlink {
	margin-top: auto;
	padding-top: 4px;
	align-self: flex-start;
}

/* tile */
.nvs-tile {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	padding: 28px 26px 32px;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nvs-tile h4 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-tile-h4);
	font-weight: 700;
	color: var(--nvs-navy);
}

.nvs-tile p {
	margin: 0;
	font-size: var(--nvs-size-card-body);
	line-height: 1.7;
	color: var(--nvs-ink);
}

.nvs-tile .nvs-textlink {
	margin-top: 4px;
	align-self: flex-start;
}

/* accentTile — 3px blue top border on surface-alt */
.nvs-tile--accent {
	background: var(--nvs-surface-alt);
	border: 0;
	border-top: 3px solid var(--nvs-blue);
	border-radius: 0;
}

/*
 * A lead sentence inside a tile: authored as <strong> at the start of the text field, promoted to
 * its own line so the editor never has to pick a size or colour.
 */
.nvs-tile p > strong:first-child {
	display: block;
	font-size: 16px;
	line-height: 1.6;
	font-weight: 600;
	color: var(--nvs-navy);
	margin-bottom: 6px;
}

/* plain — no chrome, larger heading. Used for capability columns. */
.nvs-tile--plain {
	background: transparent;
	border: 0;
	padding: 0;
	border-radius: 0;
	gap: 12px;
}

.nvs-tile--plain h4 {
	font-size: clamp(21px, 2.3vw, 27px);
	line-height: 1.25;
}

.nvs-tile--plain p {
	font-size: 16.5px;
	line-height: 1.78;
}

/* -------------------------------------------------------------------------
 * nvs/split-content
 * ---------------------------------------------------------------------- */

.nvs-split > .nvs-container {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
	gap: var(--nvs-gap-split);
	align-items: center;
}

.nvs-split__text {
	display: flex;
	flex-direction: column;
	gap: 20px;
}

.nvs-split__text p {
	margin: 0;
	font-size: 16.5px;
	line-height: 1.75;
	color: var(--nvs-ink);
}

.nvs-split__media {
	display: flex;
	flex-direction: column;
	gap: 36px;
}

.nvs-split--media-left > .nvs-container .nvs-split__media {
	order: -1;
}

.nvs-split__media img {
	width: 100%;
	height: auto;
	border-radius: var(--nvs-radius-card);
	display: block;
}

.nvs-checklist {
	margin: 8px 0 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.nvs-checklist li {
	display: grid;
	grid-template-columns: 22px 1fr;
	gap: 14px;
	font-size: 16px;
	line-height: 1.65;
	color: var(--nvs-ink);
}

.nvs-checklist__mark {
	color: var(--nvs-blue);
	font-weight: 700;
}

.nvs-checklist strong {
	color: var(--nvs-navy);
	font-weight: 600;
}

.nvs-stats {
	margin-top: 24px;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
	gap: 24px;
}

.nvs-stat {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	padding: 24px 20px;
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.nvs-section--bg-white .nvs-stat {
	background: var(--nvs-surface-alt);
}

.nvs-stat__value {
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-stat);
	font-weight: 800;
	letter-spacing: -0.02em;
	color: var(--nvs-navy);
	line-height: 1.1;
}

.nvs-stat__label {
	font-size: 14.5px;
	line-height: 1.5;
	color: var(--nvs-ink);
}

/* -------------------------------------------------------------------------
 * nvs/cta
 * ---------------------------------------------------------------------- */

.nvs-cta--bar {
	background: var(--nvs-blue);
}

.nvs-cta--bar > .nvs-container,
.nvs-cta--photoBar > .nvs-container {
	padding-top: 48px;
	padding-bottom: 48px;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
}

.nvs-cta--photoBar {
	position: relative;
	background: var(--nvs-navy);
	overflow: hidden;
}

.nvs-cta--photoBar > .nvs-container {
	position: relative;
	z-index: 1;
	padding-top: clamp(56px, 6vw, 88px);
	padding-bottom: clamp(56px, 6vw, 88px);
	gap: 28px;
}

.nvs-cta__backdrop {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	opacity: 0.3;
}

.nvs-cta__bar-heading {
	margin: 0;
	max-width: 660px;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-cta-h3);
	line-height: 1.25;
	font-weight: 700;
	color: #ffffff;
	text-wrap: pretty;
}

.nvs-cta--panel {
	background-color: var(--nvs-navy-deep);
	background-image: linear-gradient(var(--nvs-scrim-cta), var(--nvs-scrim-cta)), var(--nvs-cta-image);
	background-size: cover;
	background-position: center;
}

.nvs-cta--panel > .nvs-container {
	max-width: var(--nvs-width-faq);
	padding-top: var(--nvs-pad-cta-panel);
	padding-bottom: var(--nvs-pad-cta-panel);
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 24px;
}

.nvs-cta__panel-heading {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: clamp(30px, 3.6vw, 46px);
	line-height: 1.14;
	font-weight: 800;
	letter-spacing: -0.02em;
	color: #ffffff;
	text-wrap: pretty;
}

.nvs-cta__panel-text {
	margin: 0;
	max-width: 700px;
	font-size: var(--nvs-size-body);
	line-height: 1.75;
	color: var(--nvs-on-dark);
	text-wrap: pretty;
}

.nvs-cta .nvs-buttons {
	margin-top: 8px;
}

.nvs-cta--bar .nvs-buttons,
.nvs-cta--photoBar .nvs-buttons {
	margin-top: 0;
}

/* -------------------------------------------------------------------------
 * nvs/faq
 * ---------------------------------------------------------------------- */

.nvs-faq > .nvs-container {
	max-width: var(--nvs-width-faq);
}

.nvs-faq__heading {
	margin: 0 0 40px;
}

.nvs-faq__items {
	display: flex;
	flex-direction: column;
}

.nvs-faq__item {
	border-top: 1px solid var(--nvs-border);
}

.nvs-faq__item:last-child {
	border-bottom: 1px solid var(--nvs-border);
}

.nvs-faq__item > summary {
	cursor: pointer;
	list-style: none;
	padding: 24px 40px 24px 0;
	font-family: var(--nvs-font-heading);
	font-size: 18px;
	font-weight: 700;
	line-height: 1.4;
	color: var(--nvs-navy);
	position: relative;
}

.nvs-faq__item > summary::-webkit-details-marker {
	display: none;
}

.nvs-faq__item > summary::after {
	content: "";
	position: absolute;
	right: 6px;
	top: 50%;
	width: 10px;
	height: 10px;
	border-right: 2px solid var(--nvs-blue);
	border-bottom: 2px solid var(--nvs-blue);
	transform: translateY(-70%) rotate(45deg);
	transition: transform var(--nvs-duration-hover) ease;
}

.nvs-faq__item[open] > summary::after {
	transform: translateY(-30%) rotate(225deg);
}

.nvs-faq__answer {
	margin: 0;
	padding: 0 40px 26px 0;
	font-size: 16px;
	line-height: 1.75;
	color: var(--nvs-ink);
}

/* -------------------------------------------------------------------------
 * nvs/case-highlight-grid
 * ---------------------------------------------------------------------- */

.nvs-cases__heading {
	margin: 0;
	max-width: 760px;
}

.nvs-cases__items {
	margin-top: 48px;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
	gap: 36px;
}

.nvs-case {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

.nvs-case__media img {
	width: 100%;
	height: 232px;
	object-fit: cover;
	display: block;
}

.nvs-case__body {
	padding: 32px 32px 36px;
	display: flex;
	flex-direction: column;
	gap: 18px;
	flex: 1;
}

.nvs-case__body h3 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: 22px;
	line-height: 1.3;
	font-weight: 700;
	color: var(--nvs-navy);
	text-wrap: pretty;
}

.nvs-case__body p {
	margin: 0;
	font-size: var(--nvs-size-card-body);
	line-height: 1.72;
	color: var(--nvs-ink);
}

.nvs-case__body p strong,
.nvs-case__label {
	color: var(--nvs-navy);
	font-weight: 600;
}

.nvs-case__body .nvs-textlink {
	margin-top: auto;
	padding-top: 4px;
	font-weight: 700;
	align-self: flex-start;
}

.nvs-cases__footer {
	margin-top: 48px;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	padding: 34px 36px;
}

.nvs-cases__footer h3 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: clamp(19px, 2vw, 24px);
	font-weight: 700;
	color: var(--nvs-navy);
}

/* -------------------------------------------------------------------------
 * Archives and single posts
 *
 * Phase 1 renders these with core query-loop blocks inside our section chrome;
 * nvs/post-list replaces the loop in phase 2.
 * ---------------------------------------------------------------------- */

.nvs-archive .nvs-h2 {
	margin: 0 0 48px;
}

/* Archive cards are a grid, so the zeroed blockGap has to be replaced explicitly. */
.nvs-archive__grid > li > * {
	margin-block: 0;
}

.nvs-archive__grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
	gap: 36px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.nvs-archive__grid > li {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	overflow: hidden;
	padding: 0 0 28px;
	display: flex;
	flex-direction: column;
	gap: 12px;
	transition: box-shadow var(--nvs-duration-hover) ease, transform var(--nvs-duration-hover) ease;
}

.nvs-archive__grid > li:hover {
	box-shadow: var(--nvs-shadow-hover);
	transform: translateY(-4px);
}

.nvs-archive__grid .nvs-archive__thumb {
	margin: 0;
}

.nvs-archive__grid .nvs-archive__thumb img {
	width: 100%;
	height: 250px;
	object-fit: cover;
	display: block;
}

.nvs-archive__grid > li > :not(.nvs-archive__thumb) {
	margin-left: 28px;
	margin-right: 28px;
}

.nvs-archive__grid .nvs-label {
	margin-top: 24px;
}

.nvs-archive__grid .nvs-h3 a {
	color: var(--nvs-navy);
	text-decoration: none;
}

.nvs-archive__grid .nvs-h3 a:hover {
	color: var(--nvs-blue);
}

.nvs-archive__grid p {
	font-size: var(--nvs-size-card-body);
	line-height: 1.7;
	color: var(--nvs-ink);
	margin: 0;
}

.nvs-archive__pagination {
	margin-top: 48px;
	display: flex;
	gap: 12px;
	align-items: center;
	font-weight: 600;
}

.nvs-post-hero .nvs-hero__inner {
	max-width: 100%;
}

.nvs-post-hero__date {
	font-size: 15px;
	color: var(--nvs-on-dark-muted);
}

.nvs-post-body__figure {
	margin: 0 0 36px;
}

.nvs-post-body__figure img {
	width: 100%;
	height: auto;
	border-radius: var(--nvs-radius-card);
	display: block;
}

/* -------------------------------------------------------------------------
 * Narrow viewports
 * ---------------------------------------------------------------------- */

@media (max-width: 900px) {
	.nvs-cases__items {
		grid-template-columns: 1fr;
	}

	.nvs-split > .nvs-container {
		grid-template-columns: 1fr;
	}

	.nvs-split--media-left > .nvs-container .nvs-split__media {
		order: 0;
	}
}

@media (max-width: 600px) {
	:root {
		--nvs-gutter: 20px;
	}

	.nvs-card-grid__items,
	.nvs-cases__items {
		grid-template-columns: 1fr;
	}

	.nvs-cta--bar > .nvs-container,
	.nvs-cta--photoBar > .nvs-container,
	.nvs-cases__footer {
		flex-direction: column;
		align-items: flex-start;
	}

	.nvs-btn {
		min-height: 44px;
	}
}

/* -------------------------------------------------------------------------
 * nvs/steps
 * ---------------------------------------------------------------------- */

.nvs-steps__list {
	margin: 48px 0 0;
	padding: 0;
	list-style: none;
	counter-reset: nvs-step;
}

.nvs-steps__list:first-child {
	margin-top: 0;
}

.nvs-step {
	display: grid;
	grid-template-columns: 64px 1fr;
	gap: 24px;
	padding: 28px 0;
	border-top: 1px solid var(--nvs-border);
}

.nvs-step:last-child {
	border-bottom: 1px solid var(--nvs-border);
}

.nvs-step__number {
	font-family: var(--nvs-font-heading);
	font-size: 28px;
	font-weight: 800;
	letter-spacing: -0.02em;
	color: var(--nvs-blue);
	line-height: 1.2;
}

.nvs-step__body {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nvs-step__body p {
	margin: 0;
	font-size: 16px;
	line-height: 1.75;
	color: var(--nvs-ink);
}

/* Card layout: numbered tiles instead of rows. */
.nvs-steps--cards .nvs-steps__list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
	gap: 28px;
}

.nvs-steps--cards .nvs-step {
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: 28px 26px 32px;
	border: 1px solid var(--nvs-border);
	border-top: 3px solid var(--nvs-blue);
	border-radius: var(--nvs-radius-card);
	background: var(--nvs-surface);
}

.nvs-steps--cards .nvs-step:last-child {
	border-bottom: 1px solid var(--nvs-border);
}

/* -------------------------------------------------------------------------
 * nvs/meta-band
 * ---------------------------------------------------------------------- */

.nvs-meta-band__list {
	margin: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 32px;
}

.nvs-meta-band__item {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nvs-meta-band__item dt {
	margin: 0;
}

.nvs-meta-band__value {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: 17px;
	font-weight: 700;
	line-height: 1.45;
	color: var(--nvs-navy);
}

.nvs-meta-band--stats .nvs-meta-band__value {
	font-size: var(--nvs-size-stat);
	font-weight: 800;
	letter-spacing: -0.02em;
	line-height: 1.1;
}

/* -------------------------------------------------------------------------
 * nvs/logo-grid
 * ---------------------------------------------------------------------- */

.nvs-logo-grid__items {
	margin: 48px 0 0;
	padding: 0;
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--nvs-col-min, 200px), 1fr));
	gap: 24px;
}

.nvs-logo-grid__items:first-child {
	margin-top: 0;
}

.nvs-logo-grid__item {
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	background: var(--nvs-surface);
	min-height: 120px;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 20px 24px;
}

.nvs-logo-grid__item a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
}

.nvs-logo-grid__item img {
	max-height: 72px;
	max-width: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	display: block;
}

.nvs-logo-grid__name {
	font-family: var(--nvs-font-heading);
	font-size: 16px;
	font-weight: 700;
	color: var(--nvs-navy);
	text-align: center;
}

/* -------------------------------------------------------------------------
 * nvs/team-grid
 * ---------------------------------------------------------------------- */

.nvs-team__items {
	margin: 48px 0 0;
	padding: 0;
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--nvs-col-min, 220px), 1fr));
	gap: 32px;
}

.nvs-team__items:first-child {
	margin-top: 0;
}

.nvs-team__member {
	display: flex;
	flex-direction: column;
	gap: 6px;
}

/*
 * `height: auto` is load-bearing, not decoration. wp_get_attachment_image() emits width/height
 * attributes, which map to the width/height CSS properties as presentational hints. `width: 100%`
 * out-specifies the width hint, but with no `height` declaration the height hint wins — so every
 * photo rendered at its own intrinsic height and the row came out ragged. Setting height auto lets
 * aspect-ratio size the box. Every other image rule in this file already sets a height for the
 * same reason.
 */
.nvs-team__photo img {
	width: 100%;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	display: block;
	border-radius: var(--nvs-radius-card);
	filter: grayscale(0.15);
	margin-bottom: 14px;
}

.nvs-team__name {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: 18px;
	font-weight: 700;
	color: var(--nvs-navy);
}

.nvs-team__role {
	margin: 0;
	font-size: 15px;
	line-height: 1.55;
	color: var(--nvs-blue);
	font-weight: 600;
}

.nvs-team__bio {
	margin: 4px 0 0;
	font-size: 15px;
	line-height: 1.7;
	color: var(--nvs-ink);
}

.nvs-team__linkedin {
	margin-top: 6px;
	width: 34px;
	height: 34px;
	border: 1px solid var(--nvs-border);
	border-radius: 50%;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--nvs-ink-muted);
	transition: background-color var(--nvs-duration-hover) ease, color var(--nvs-duration-hover) ease, border-color var(--nvs-duration-hover) ease;
}

.nvs-team__linkedin:hover {
	background: var(--nvs-blue);
	border-color: var(--nvs-blue);
	color: #ffffff;
}

/* -------------------------------------------------------------------------
 * nvs/office-grid
 * ---------------------------------------------------------------------- */

.nvs-offices__items {
	margin: 48px 0 0;
	padding: 0;
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--nvs-col-min, 280px), 1fr));
	gap: 28px;
}

.nvs-offices__items:first-child {
	margin-top: 0;
}

.nvs-office {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

.nvs-office__media img {
	width: 100%;
	height: 200px;
	object-fit: cover;
	display: block;
}

.nvs-office__body {
	padding: 26px 26px 30px;
	display: flex;
	flex-direction: column;
	gap: 12px;
	flex: 1;
}

.nvs-office__badge {
	align-self: flex-start;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-label);
	font-weight: 800;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: #ffffff;
	background: var(--nvs-blue);
	padding: 5px 10px;
	border-radius: var(--nvs-radius-control);
}

.nvs-office__address {
	margin: 0;
	font-style: normal;
	font-size: 15.5px;
	line-height: 1.7;
	color: var(--nvs-ink);
}

.nvs-office__contact {
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 6px;
	font-size: 15.5px;
	color: var(--nvs-ink);
}

.nvs-office__contact > div {
	display: grid;
	grid-template-columns: 18px 1fr;
	gap: 10px;
}

.nvs-office__contact dt {
	margin: 0;
	font-weight: 700;
	color: var(--nvs-ink-faint);
}

.nvs-office__contact dd {
	margin: 0;
}

.nvs-office .nvs-textlink {
	margin-top: auto;
	padding-top: 6px;
	align-self: flex-start;
}

/* -------------------------------------------------------------------------
 * Forms — nvs/contact-form and the listing controls
 * ---------------------------------------------------------------------- */

.nvs-contact--split > .nvs-container {
	display: grid;
	grid-template-columns: minmax(0, 1.6fr) minmax(260px, 1fr);
	gap: var(--nvs-gap-split);
	align-items: start;
}

.nvs-contact__main .nvs-h2 {
	margin: 0 0 28px;
}

.nvs-form {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	gap: 20px 24px;
}

.nvs-form__row {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nvs-form__row--full,
.nvs-form__actions {
	grid-column: 1 / -1;
}

.nvs-form__label {
	font-size: 13.5px;
	font-weight: 600;
	color: var(--nvs-navy);
}

.nvs-form__required {
	color: var(--nvs-danger);
}

.nvs-form__control {
	width: 100%;
	font-family: var(--nvs-font-body);
	font-size: 15.5px;
	line-height: 1.5;
	color: var(--nvs-navy);
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border-input);
	border-radius: var(--nvs-radius-control);
	padding: 12px 14px;
}

.nvs-form__control:focus {
	outline: 2px solid var(--nvs-blue);
	outline-offset: 1px;
	border-color: var(--nvs-blue);
}

textarea.nvs-form__control {
	resize: vertical;
	min-height: 120px;
}

.nvs-form__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px 24px;
	margin-top: 4px;
}

.nvs-form__consent {
	margin: 0;
	flex: 1 1 260px;
	font-size: 13.5px;
	line-height: 1.6;
	color: var(--nvs-ink-faint);
}

.nvs-form__notice {
	margin: 0 0 24px;
	padding: 16px 20px;
	border-radius: var(--nvs-radius-card);
	font-size: 15.5px;
	line-height: 1.6;
	border: 1px solid var(--nvs-border);
}

.nvs-form__notice--ok {
	border-left: 3px solid var(--nvs-green);
	background: var(--nvs-surface-alt);
	color: var(--nvs-navy);
}

.nvs-form__notice--error {
	border-left: 3px solid var(--nvs-danger);
	background: var(--nvs-surface-alt);
	color: var(--nvs-navy);
}

.nvs-contact__aside {
	background: var(--nvs-surface-alt);
	border-radius: var(--nvs-radius-card);
	padding: 32px 30px;
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.nvs-contact__aside p {
	margin: 0;
	font-size: 15.5px;
	line-height: 1.7;
}

.nvs-contact__phone {
	font-family: var(--nvs-font-heading);
	font-size: 20px;
	font-weight: 700;
}

/* -------------------------------------------------------------------------
 * nvs/post-list and nvs/job-board
 * ---------------------------------------------------------------------- */

.nvs-filters {
	margin-top: 40px;
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.nvs-chip {
	font-size: 14.5px;
	font-weight: 600;
	color: var(--nvs-ink);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-control);
	padding: 9px 16px;
	background: var(--nvs-surface);
	transition: background-color var(--nvs-duration-hover) ease, color var(--nvs-duration-hover) ease, border-color var(--nvs-duration-hover) ease;
}

.nvs-chip:hover,
.nvs-chip.is-active {
	background: var(--nvs-blue);
	border-color: var(--nvs-blue);
	color: #ffffff;
}

.nvs-listing-search {
	margin-top: 24px;
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	max-width: 560px;
}

.nvs-listing-search .nvs-form__control {
	flex: 1 1 240px;
}

.nvs-post-list__items {
	margin: 48px 0 0;
	padding: 0;
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--nvs-col-min, 340px), 1fr));
	gap: 36px;
}

.nvs-post-list__items .nvs-card__body h3 {
	margin: 0;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-card-h3);
	font-weight: 700;
	line-height: 1.3;
}

.nvs-post-list__items .nvs-card__body h3 a {
	color: var(--nvs-navy);
}

.nvs-post-list__items .nvs-card__body h3 a:hover {
	color: var(--nvs-blue);
}

.nvs-pagination {
	margin-top: 48px;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	align-items: center;
}

.nvs-pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	padding: 0 12px;
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-control);
	font-size: 15px;
	font-weight: 600;
	color: var(--nvs-ink);
}

.nvs-pagination .page-numbers:hover,
.nvs-pagination .page-numbers.current {
	background: var(--nvs-blue);
	border-color: var(--nvs-blue);
	color: #ffffff;
}

.nvs-jobs__filters {
	margin-top: 40px;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: 20px 24px;
	align-items: end;
}

.nvs-jobs__filter {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nvs-jobs__count {
	margin: 28px 0 0;
	font-family: var(--nvs-font-heading);
	font-size: 15px;
	font-weight: 700;
	color: var(--nvs-ink-muted);
}

.nvs-jobs__items {
	margin: 20px 0 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
}

.nvs-job {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	padding: 26px 0;
	border-top: 1px solid var(--nvs-border);
}

.nvs-job:last-child {
	border-bottom: 1px solid var(--nvs-border);
}

.nvs-job h3 {
	margin: 0 0 6px;
}

.nvs-job h3 a {
	color: var(--nvs-navy);
}

.nvs-job h3 a:hover {
	color: var(--nvs-blue);
}

.nvs-job__meta {
	margin: 0;
	font-size: 15px;
	color: var(--nvs-ink-muted);
}

.nvs-empty {
	margin-top: 40px;
	padding: 48px 40px;
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	background: var(--nvs-surface);
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 14px;
}

.nvs-empty--dashed {
	border-style: dashed;
	border-color: var(--nvs-border-input);
	background: transparent;
}

.nvs-empty p {
	margin: 0;
	max-width: 560px;
	font-size: 16px;
	line-height: 1.7;
	color: var(--nvs-ink);
}

.nvs-empty .nvs-btn {
	margin-top: 8px;
}

.nvs-editor-empty {
	padding: 32px;
	text-align: center;
	color: var(--nvs-ink-muted);
}

/* -------------------------------------------------------------------------
 * nvs/site-map
 * ---------------------------------------------------------------------- */

.nvs-sitemap__columns {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	gap: 40px 32px;
}

.nvs-sitemap__title {
	margin: 0 0 16px;
	font-family: var(--nvs-font-heading);
	font-size: var(--nvs-size-tile-h4);
	font-weight: 700;
	color: var(--nvs-navy);
}

.nvs-sitemap__list,
.nvs-sitemap__list ul {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nvs-sitemap__list ul {
	margin: 10px 0 0 16px;
	padding-left: 14px;
	border-left: 2px solid var(--nvs-border);
}

.nvs-sitemap__list a {
	font-size: 15.5px;
	line-height: 1.5;
	color: var(--nvs-ink);
}

.nvs-sitemap__list a:hover {
	color: var(--nvs-blue);
}

@media (max-width: 900px) {
	.nvs-contact--split > .nvs-container {
		grid-template-columns: 1fr;
	}
}

.nvs-split__footnote {
	margin: 8px 0 0;
	font-size: 16.5px;
	line-height: 1.75;
	font-weight: 700;
	color: var(--nvs-navy);
}

/* -------------------------------------------------------------------------
 * nvs/member-login, nvs/member-signup, nvs/member-profile
 *
 * The member forms reuse .nvs-form__* wholesale. The only structural difference is that they stack
 * in a single column instead of the contact form's auto-fill grid — a sign-in form reads badly two
 * fields wide.
 * ---------------------------------------------------------------------- */

.nvs-member-auth__panel {
	max-width: 480px;
	margin: 0 auto;
}

.nvs-member-profile {
	max-width: 560px;
}

.nvs-member-auth__panel .nvs-h2 {
	margin: 0 0 20px;
}

.nvs-member-auth__panel .nvs-lead {
	margin: 0 0 28px;
}

.nvs-form--stack {
	grid-template-columns: 1fr;
}

.nvs-form__row--check {
	flex-direction: row;
	align-items: center;
	gap: 10px;
}

.nvs-form__row--check label {
	display: flex;
	align-items: center;
	gap: 10px;
	font-size: 15px;
	color: var(--nvs-navy);
}

.nvs-form__hint {
	font-size: 13px;
	line-height: 1.5;
	color: var(--nvs-ink-faint);
}

.nvs-form__strength {
	font-size: 13px;
	font-weight: 600;
	color: var(--nvs-ink-faint);
}

.nvs-form__strength[data-level="0"],
.nvs-form__strength[data-level="1"] {
	color: var(--nvs-danger);
}

.nvs-form__strength[data-level="2"] {
	color: #996800;
}

.nvs-form__strength[data-level="3"] {
	color: var(--nvs-green);
}

.nvs-form__fieldset {
	grid-column: 1 / -1;
	display: flex;
	flex-direction: column;
	gap: 20px;
	margin: 12px 0 0;
	padding: 24px 0 0;
	border: 0;
	border-top: 1px solid var(--nvs-border);
}

.nvs-form__legend {
	padding: 0;
	font-size: 13.5px;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nvs-navy);
}

/* The 6-digit code gets its own treatment: wide tracking so digits are easy to check. */
.nvs-form__control--code {
	font-size: 26px;
	font-weight: 700;
	letter-spacing: 0.4em;
	text-align: center;
	padding: 14px 14px 14px 24px;
}

.nvs-form__notice--info {
	border-left: 3px solid var(--nvs-blue);
	background: var(--nvs-surface-alt);
	color: var(--nvs-navy);
}

.nvs-member-auth__sentto,
.nvs-member-auth__signedin {
	margin: 0 0 24px;
	font-size: 15.5px;
	line-height: 1.6;
	color: var(--nvs-navy);
}

.nvs-member-auth__secondary {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px 24px;
	margin-top: 24px;
	padding-top: 20px;
	border-top: 1px solid var(--nvs-border);
	font-size: 14.5px;
}

.nvs-member-auth__secondary form {
	margin: 0;
}

/* Resend / start over are real form submissions, so they must be buttons — styled as links. */
.nvs-textlink--button {
	padding: 0;
	border: 0;
	background: none;
	font-family: inherit;
	font-size: inherit;
	cursor: pointer;
}

.nvs-member-profile__confirm {
	margin: 0 0 32px;
	padding: 24px;
	background: var(--nvs-surface-alt);
	border-radius: var(--nvs-radius-card);
}

.nvs-member-profile__confirm .nvs-h3 {
	margin: 0 0 12px;
}

/* -------------------------------------------------------------------------
 * nvs/resource-list
 * ---------------------------------------------------------------------- */

.nvs-resource-list__items {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(var(--nvs-resource-columns, 1), minmax(0, 1fr));
	gap: 2px 40px;
}

.nvs-resource-list__row {
	display: grid;
	grid-template-columns: auto 1fr;
	align-items: baseline;
	gap: 4px 12px;
	padding: 10px 0;
	border-bottom: 1px solid var(--nvs-border);
}

.nvs-resource-list__icon {
	grid-row: 1 / span 2;
	align-self: center;
	display: inline-flex;
	color: var(--nvs-ink-faint);
}

.nvs-resource-list__row--pdf .nvs-resource-list__icon {
	color: var(--nvs-danger);
}

.nvs-resource-list__row--video .nvs-resource-list__icon {
	color: var(--nvs-blue);
}

.nvs-resource-list__row--doc .nvs-resource-list__icon,
.nvs-resource-list__row--ppt .nvs-resource-list__icon {
	color: var(--nvs-blue-dark);
}

.nvs-resource-list__row--xls .nvs-resource-list__icon {
	color: var(--nvs-green);
}

.nvs-resource-list__link {
	font-size: 16px;
	line-height: 1.5;
	font-weight: 600;
	color: var(--nvs-navy);
	text-decoration: none;
}

.nvs-resource-list__link:hover,
.nvs-resource-list__link:focus-visible {
	color: var(--nvs-blue);
	text-decoration: underline;
}

.nvs-resource-list__link--locked {
	color: var(--nvs-ink-faint);
	font-weight: 500;
}

.nvs-resource-list__meta {
	grid-column: 2;
	font-size: 12.5px;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--nvs-ink-faint);
}

.nvs-file-icon {
	flex: none;
}

@media (max-width: 700px) {
	.nvs-resource-list__items {
		grid-template-columns: 1fr;
	}
}

/* -------------------------------------------------------------------------
 * Card bullets and the "Watch video" link (nvs/card-grid)
 * ---------------------------------------------------------------------- */

.nvs-card__bullets {
	margin: 12px 0 0;
	padding: 0 0 0 20px;
	list-style: disc;
}

.nvs-card__bullet {
	margin: 0 0 5px;
	font-size: 15.5px;
	line-height: 1.55;
	color: var(--nvs-ink);
}

.nvs-card__bullet::marker {
	color: var(--nvs-green);
}

/* A bullet that carries a member file reads as a link, marked as opening in a new tab. */
.nvs-card__bullet--file > a {
	color: var(--nvs-blue);
	text-decoration: none;
	font-weight: 600;
}

.nvs-card__bullet--file > a::after {
	content: "\2197";
	display: inline-block;
	margin-left: 5px;
	font-weight: 700;
	text-decoration: none;
}

.nvs-card__bullet--file > a:hover,
.nvs-card__bullet--file > a:focus-visible {
	color: var(--nvs-blue-dark);
	text-decoration: underline;
}

.nvs-card__video {
	margin: 10px 0 0;
	font-size: 15px;
	font-weight: 600;
}

/* -------------------------------------------------------------------------
 * nvs/member-login — "beside copy" layout
 *
 * Same grid-on-the-container approach as .nvs-contact--split, and it collapses at the same 900px
 * so the two read consistently. The form column is capped rather than fluid: a sign-in form that
 * grows to half a 1280px canvas looks broken.
 * ---------------------------------------------------------------------- */

.nvs-member-auth--split > .nvs-container {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(320px, 440px);
	gap: var(--nvs-gap-split);
	align-items: start;
}

.nvs-member-auth--split .nvs-member-auth__panel {
	max-width: none;
	margin: 0;
}

.nvs-member-auth__aside .nvs-eyebrow {
	display: block;
	margin: 0 0 12px;
}

.nvs-member-auth__aside .nvs-h2 {
	margin: 0 0 20px;
}

.nvs-member-auth__aside .nvs-prose > :last-child {
	margin-bottom: 0;
}

.nvs-member-auth__aside .nvs-prose ul {
	margin: 0;
	padding-left: 20px;
}

.nvs-member-auth__aside .nvs-prose li {
	margin: 0 0 12px;
}

.nvs-member-auth__aside .nvs-prose li::marker {
	color: var(--nvs-green);
}

/* Give the form a card of its own so it reads as a distinct panel next to the copy. */
.nvs-member-auth--split .nvs-member-auth__panel {
	background: var(--nvs-surface);
	border: 1px solid var(--nvs-border);
	border-radius: var(--nvs-radius-card);
	padding: 36px 32px;
}

.nvs-section--bg-white .nvs-member-auth--split .nvs-member-auth__panel {
	background: var(--nvs-surface-alt);
}

@media (max-width: 900px) {
	.nvs-member-auth--split > .nvs-container {
		grid-template-columns: 1fr;
	}

	.nvs-member-auth--split .nvs-member-auth__panel {
		max-width: 560px;
		padding: 28px 24px;
	}
}

/* Card-level document links — the card's own collateral, above its bullet list. */
.nvs-card__docs {
	list-style: none;
	margin: 14px 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nvs-card__doc > a {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	font-size: 15px;
	font-weight: 600;
	line-height: 1.4;
	color: var(--nvs-blue);
	text-decoration: none;
}

.nvs-card__doc > a:hover,
.nvs-card__doc > a:focus-visible {
	color: var(--nvs-blue-dark);
}

.nvs-card__doc > a:hover span,
.nvs-card__doc > a:focus-visible span {
	text-decoration: underline;
}

.nvs-card__doc .nvs-file-icon {
	color: var(--nvs-danger);
}

/* A card that leads with a document wants a little air above its bullets. */
.nvs-card__docs + .nvs-card__bullets {
	margin-top: 14px;
}
