/* ============================================================
   NOVOS Blocks — section styles.
   Tokens come from theme.json (--wp--preset--*, --wp--custom--*).
   Local aliases below exist only for readability; every color
   resolves to the theme.json palette.
   ============================================================ */
:root {
	--nv-orange: var(--wp--preset--color--orange);
	--nv-orange-deep: var(--wp--preset--color--orange-deep);
	--nv-orange-soft: var(--wp--preset--color--orange-soft);
	--nv-energy: var(--wp--preset--color--energy);
	--nv-growth: var(--wp--preset--color--growth);
	--nv-paper: var(--wp--preset--color--paper);
	--nv-beige: var(--wp--preset--color--beige);
	--nv-beige-dark: var(--wp--preset--color--beige-dark);
	--nv-ink: var(--wp--preset--color--ink);
	--nv-ink-80: var(--wp--preset--color--ink-80);
	--nv-ink-60: var(--wp--preset--color--ink-60);
	--nv-ink-40: var(--wp--preset--color--ink-40);
	--nv-ink-20: var(--wp--preset--color--ink-20);
	--nv-ink-10: var(--wp--preset--color--ink-10);
	--nv-ink-05: var(--wp--preset--color--ink-05);
	--nv-white: var(--wp--preset--color--white);
	--nv-serif: var(--wp--preset--font-family--serif);
	--nv-sans: var(--wp--preset--font-family--sans);
	--nv-mono: var(--wp--preset--font-family--mono);
	--nv-fs-display: var(--wp--preset--font-size--display);
	--nv-fs-h2: var(--wp--preset--font-size--heading-2);
	--nv-fs-h3: var(--wp--preset--font-size--heading-3);
	--nv-fs-lead: var(--wp--preset--font-size--lead);
	--nv-fs-lead-display: var(--wp--preset--font-size--lead-display);
	--nv-fs-mono: var(--wp--preset--font-size--mono);
	--nv-radius-tile: var(--wp--custom--radius--tile);
	--nv-radius-xs: var(--wp--custom--radius--xs);
	--nv-radius-btn: var(--wp--custom--radius--btn);
	--nv-radius-sm: var(--wp--custom--radius--sm);
	--nv-radius: var(--wp--custom--radius--md);
	--nv-radius-lg: var(--wp--custom--radius--lg);
	--nv-radius-panel: var(--wp--custom--radius--panel);
	--nv-ease: var(--wp--custom--motion--ease);
	--nv-shadow-sm: var(--wp--custom--shadow--sm);
	--nv-shadow: var(--wp--custom--shadow--md);
	--nv-shadow-lg: var(--wp--custom--shadow--lg);
	--nv-lh-hero: var(--wp--custom--type--lh-hero);
	--nv-ls-btn: var(--wp--custom--type--ls-btn);
	--nv-container: 1440px;
	--nv-container-mid: 1500px;
	--nv-container-wide: 1600px;
	--nv-gutter: clamp(22px, 2.8vw, 40px);
	--nv-gutter-wide: clamp(22px, 2.8vw, 40px);
	--nv-section-pad: var(--wp--preset--spacing--80);
	--nv-ink-warm: var(--wp--preset--color--ink-warm);
	--nv-bulletin-h: var(--wp--custom--chrome--bulletin-h);
	--nv-nav-h: var(--wp--custom--chrome--nav-h);
	--nv-top-stack: calc(var(--nv-bulletin-h) + var(--nv-nav-h));
	--nv-on-dark-muted: var(--wp--custom--text-on-dark-muted);
	--nv-border-on-dark: var(--wp--custom--border-on-dark);
}

/* Section rhythm: the tighter homepage padding (VP feedback 2026-07 —
   modules were too spaced out, too much scrolling) is now the site-wide
   default via theme.json spacing preset 80 (2026-07-22, PDP feedback). */

html {
	scroll-behavior: smooth;
	scroll-padding-top: calc(var(--nv-top-stack) + 22px);
	-webkit-text-size-adjust: 100%;
	/* Make <html> the viewport scroller with a permanently reserved scrollbar
	   gutter. overflow-x:hidden gives <html> a non-visible overflow so
	   scrollbar-gutter actually takes effect here (and stops the gutter being
	   propagated from <body>); the gutter then stays reserved when the cart
	   drawer locks <body> via position:fixed — so opening/closing the drawer no
	   longer removes the scrollbar and shifts the page + right-anchored nav. */
	overflow-x: hidden;
	scrollbar-gutter: stable;
}

body {
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	/* Marquee tracks and scroll-snap rails overflow the viewport by design.
	   overflow-x:hidden on <html> alone is not enough on Android/iOS — touch
	   scroll chaining from a rail can still pan the root sideways. clip on
	   <body> hard-caps horizontal overflow without creating a scroll
	   container (so position:sticky descendants keep working). */
	overflow-x: clip;
}

/* Utility for every scroll strip/box (carousels, tab strips, compare
   scrollers, tickers): swipes never chain into a sideways pan of the whole
   page, and no scrollbar is ever painted (content still scrolls by touch,
   wheel and keyboard). Add the class to the scroll container's markup.
   overflow-y is locked to hidden because overflow-x: auto alone computes
   overflow-y to auto too — any transient vertical overflow (e.g. the
   .nv-reveal translateY offset on cards) then turns the rail into a
   vertical scroll target that traps the wheel mid-page-scroll. */
.nv-rail {
	overflow-y: hidden;
	overscroll-behavior-x: contain;
	scrollbar-width: none;
}

.nv-rail::-webkit-scrollbar {
	display: none;
}

/* Card carousels (novos.js): user-driven native scroll-snap tracks. The
   shared class carries snap + grab affordance; snap is suspended mid-drag
   so the track follows the pointer 1:1, then re-engages on release. */
.nv-cardrail {
	scroll-snap-type: x mandatory;
	cursor: grab;
}

.nv-cardrail:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 4px;
}

.nv-cardrail.is-dragging {
	scroll-snap-type: none;
	cursor: grabbing;
	scroll-behavior: auto;
	user-select: none;
}

.nv-cardrail.is-dragging a,
.nv-cardrail.is-dragging img {
	pointer-events: none;
}

/* Touch scrolling felt jumpy with mandatory snap on big cards — proximity
   keeps the alignment help without yanking the rail mid-flick. */
@media (max-width: 980px) {
	.nv-cardrail:not(.is-dragging) {
		scroll-snap-type: x proximity;
	}
}

/* Generic content carousel — the block-theme replacement for the legacy
   ACF novos-slider. Compose on the scroll container:
   `nv-carousel__track nv-rail nv-cardrail` (+ id, tabindex="0", role
   ="group", aria-label), preceded by a `.nv-carousel-nav.nv-carousel__nav`
   arrow group wired via aria-controls (novos.js). Card width comes from
   --nv-carousel-card; the default is narrower than the container so the
   next card always peeks. */
.nv-carousel__track {
	display: flex;
	gap: var(--nv-carousel-gap, clamp(16px, 2.2vw, 30px));
	overflow-x: auto;
	padding: 4px var(--nv-gutter) 14px 4px;
	/* Bleed to the right viewport edge like the shop/protocol rails, so the
	   cut-off card touches the screen instead of dying at the content box
	   with dead space beside it (staging QA 2026-07-31). !important because
	   these tracks are direct children of constrained groups, where WP's
	   layout CSS pins `margin-right: auto !important` and caps max-width. */
	margin-right: calc(50% - 50vw) !important;
	max-width: none !important;
}

.nv-carousel__slide {
	flex: none;
	width: var(--nv-carousel-card, min(520px, 78vw));
	scroll-snap-align: start;
	min-width: 0;
	/* Stretch the card to the tallest slide so rows are equal height. */
	display: flex;
}

.nv-carousel__slide > * {
	width: 100%;
	box-sizing: border-box;
}

.nv-carousel__head {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 20px;
	margin-bottom: clamp(14px, 2vw, 24px);
}

.nv-carousel__head :is(h2, h3) {
	margin: 0;
}

/* Arrow group for generic content carousels: same controls as the PDP
   timeline — right-aligned above the rail, hidden on touch widths where
   swiping is the natural gesture. */
.nv-carousel__nav {
	margin-bottom: clamp(10px, 1.4vw, 18px);
}

@media (max-width: 980px) {
	.nv-carousel__nav {
		display: none;
	}
}

/* Scroll boxes with uniform generated markup (drawer panels, mobile nav):
   same no-scrollbar treatment without classing every instance. */
dialog.drawer .drawer-content,
.nv-mnav__panel {
	scrollbar-width: none;
}

dialog.drawer .drawer-content::-webkit-scrollbar,
.nv-mnav__panel::-webkit-scrollbar {
	display: none;
}

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

h1,
h2,
h3 {
	text-wrap: balance;
}

.nv-mono {
	font-family: var(--nv-mono);
	font-variant-numeric: tabular-nums;
}

.nv-eyebrow {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-orange-deep);
}

.nv-eyebrow--soft {
	color: var(--nv-orange-soft);
}

.nv-lead {
	font-size: var(--nv-fs-lead);
	color: var(--nv-ink-60);
}

.nv-limitation {
	display: block;
	margin-top: 1em;
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	line-height: 1.48;
	color: var(--nv-on-dark-muted);
	letter-spacing: 0.01em;
}

.nv-limitation--faint {
	color: var(--nv-ink-40);
}

/* ---------- Organic line (signature heading underline swoosh) ----------
   Colored via currentColor: set `color` on the element (or inherit) per section.
   Three segments: flat lead (bottom), fixed-aspect S-bend, flat tail (top).
   novos.js measures the preceding heading and sets --nv-bend-x so the bend
   lands just past the text at every width; without JS it sits at 38%.
   Stroke thickness tracks the bend SVG (viewBox 149x55, stroke 2). */
.nv-orgline {
	--nv-orgline-h: clamp(28px, 3.4vw, 54px);
	--nv-orgline-stroke: calc(var(--nv-orgline-h) / 27.5);
	--nv-bend-w: calc(var(--nv-orgline-h) * 2.71);
	--nv-bend-x: 38%;
	--nv-bend-lead: clamp(0px, var(--nv-bend-x), calc(100% - var(--nv-bend-w)));
	position: relative;
	display: block;
	width: 100%;
	height: var(--nv-orgline-h);
	pointer-events: none;
}

.nv-orgline::before {
	content: "";
	position: absolute;
	top: 0;
	left: var(--nv-bend-lead);
	width: var(--nv-bend-w);
	height: 100%;
	background: currentColor;
	-webkit-mask: url("../img/organic-bend.svg") center / 100% 100% no-repeat;
	mask: url("../img/organic-bend.svg") center / 100% 100% no-repeat;
}

/* Lead and tail overlap the bend by 2px; the bend is horizontal at both
   ends, so the seam is invisible at any rounding. */
.nv-orgline::after {
	content: "";
	position: absolute;
	inset: 0;
	background:
		linear-gradient(currentColor, currentColor) left bottom / calc(var(--nv-bend-lead) + 2px) var(--nv-orgline-stroke) no-repeat,
		linear-gradient(currentColor, currentColor) right top / calc(100% - var(--nv-bend-lead) - var(--nv-bend-w) + 2px) var(--nv-orgline-stroke) no-repeat;
}

/* ---------- Help tooltip (nv-tip, timeline.com style) ----------
   The whole sentence is the trigger (button wraps the label text + a
   circle-help icon). The bubble is a white card fixed to the viewport;
   novos.js places it above the trigger when there's room, below otherwise,
   and clamps it horizontally. Shows on hover/focus (CSS) and click-toggles
   for touch (novos.js adds .is-open + aria-expanded). */
.nv-tip {
	display: inline;
}

.nv-tip__btn {
	display: inline;
	margin: 0;
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
	color: inherit;
	letter-spacing: inherit;
	line-height: inherit;
	text-align: inherit;
	cursor: pointer;
}

.nv-tip__btn svg {
	display: inline-block;
	width: 15px;
	height: 15px;
	margin-left: 6px;
	vertical-align: -2px;
	color: var(--nv-ink-40);
	transition: color 0.2s var(--nv-ease);
}

.nv-tip:hover .nv-tip__btn svg,
.nv-tip.is-open .nv-tip__btn svg,
.nv-tip__btn:focus-visible svg {
	color: var(--nv-orange);
}

.nv-tip__btn:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
	border-radius: 4px;
}

/* White card bubble; left/top set by novos.js (fixed = never clipped by
   the compare tables' horizontal scroll boxes). */
.nv-tip__bubble {
	box-sizing: border-box;
	position: fixed;
	left: 0;
	top: 0;
	z-index: 1200;
	width: max-content;
	max-width: min(400px, calc(100vw - 32px));
	padding: 16px 20px;
	border-radius: var(--nv-radius-sm);
	background: var(--nv-white);
	color: var(--nv-ink-80);
	font-family: var(--nv-sans);
	font-weight: 400;
	font-size: 0.88rem;
	line-height: 1.5;
	letter-spacing: 0;
	text-align: left;
	text-transform: none;
	white-space: normal;
	box-shadow: var(--nv-shadow-lg);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	opacity: 0;
	visibility: hidden;
	transform: translateY(4px);
	transition: opacity 0.18s var(--nv-ease), transform 0.18s var(--nv-ease), visibility 0.18s;
	pointer-events: none;
}

.nv-tip--above .nv-tip__bubble {
	transform: translateY(-4px);
}

.nv-tip:hover .nv-tip__bubble,
.nv-tip:focus-within .nv-tip__bubble,
.nv-tip.is-open .nv-tip__bubble {
	opacity: 1;
	visibility: visible;
	transform: none;
}

/* Glue a label's last word to its tip icon so the icon never wraps alone. */
.nv-nowrap {
	white-space: nowrap;
}

@media (prefers-reduced-motion: reduce) {
	.nv-tip__bubble {
		transition: none;
	}
}

/* Even out multi-line section headings so no width leaves an orphan word. */
.nv-proof__title,
.nv-compare__title,
.nv-people__head h2,
.nv-protocol__head h2 {
	text-wrap: balance;
}

/* ---------- Buttons (Figma "NOVOS Buttons": 12px radius, SemiBold, hairline border) ---------- */
.nv-btn {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.55em;
	border-radius: var(--nv-radius-xs);
	border: 0.5px solid transparent;
	padding: 1em 2em;
	font-weight: 600;
	font-size: 1rem;
	line-height: 1.08;
	letter-spacing: var(--nv-ls-btn);
	text-decoration: none;
	transition: transform 0.25s var(--nv-ease), box-shadow 0.25s var(--nv-ease), background 0.25s var(--nv-ease), color 0.25s var(--nv-ease), border-color 0.25s var(--nv-ease);
	will-change: transform;
}

.nv-btn:hover {
	transform: translateY(-2px);
}

.nv-btn:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 3px;
}

.nv-btn--primary {
	background: var(--nv-orange);
	color: var(--nv-white);
	border-color: var(--wp--custom--glass--border);
	backdrop-filter: var(--wp--custom--glass--blur-chip);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-chip);
}

.nv-btn--primary:hover {
	background: var(--wp--custom--brand-hover);
	color: var(--nv-white);
}

.nv-btn--dark {
	background: var(--nv-ink);
	color: var(--nv-white);
}

.nv-btn--dark:hover {
	background: #000;
	color: var(--nv-white);
}

.nv-btn--white {
	background: var(--nv-white);
	color: var(--nv-orange-deep);
}

.nv-btn--white:hover {
	background: var(--nv-ink);
	color: var(--nv-white);
}

.nv-btn--glass {
	background: var(--wp--custom--glass--light);
	color: var(--nv-white);
	border-color: var(--wp--custom--glass--border);
	backdrop-filter: var(--wp--custom--glass--blur-chip);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-chip);
}

.nv-btn--glass:hover {
	background: var(--wp--custom--glass--light-strong);
	color: var(--nv-white);
}

.nv-btn--outline {
	border: 0.5px solid color-mix(in srgb, var(--nv-ink) 20%, transparent);
	background: var(--wp--custom--glass--light);
	color: var(--nv-ink);
	backdrop-filter: var(--wp--custom--glass--blur-chip);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-chip);
}

.nv-btn--outline:hover {
	border-color: var(--nv-ink);
	background: var(--nv-white);
}

/* ---------- Skip link ---------- */
.skip-link {
	position: fixed;
	top: -64px;
	left: 16px;
	z-index: 1200;
	background: var(--nv-ink);
	color: var(--nv-white);
	border-radius: 12px;
	padding: 0.8em 1.1em;
	font-weight: 700;
	transition: top 0.2s var(--nv-ease);
	clip: auto;
	width: auto;
	height: auto;
}

.skip-link:focus {
	top: 12px;
}

/* ---------- Chrome flow ----------
   Bulletin + nav live in normal document flow (the header template-part
   wrapper is flattened via display:contents so the nav's sticky range is
   the whole page, not the 110px wrapper). The bulletin scrolls away with
   the page; the nav sticks and is hidden/revealed by scroll direction in
   novos.js (timeline.com behavior). main pulls up under the chrome so
   heroes still run edge-to-edge behind the glass nav. */
.wp-block-template-part:has(.nv-nav) {
	display: contents;
}

main#main {
	margin-top: calc(-1 * var(--nv-top-stack));
}

/* Root blockGap (1.25rem) puts a margin on every top-level template block —
   kill it on the footer wrapper so the CTA runs seamlessly into the footer. */
.wp-block-template-part:has(.nv-footer) {
	margin-block-start: 0;
}

/* ---------- Bulletin ---------- */
.nv-bulletin {
	position: relative;
	height: var(--nv-bulletin-h);
	z-index: 1000;
	display: flex;
	align-items: center;
	overflow: hidden;
	background: var(--wp--preset--gradient--bulletin);
	color: var(--nv-white);
	border-bottom: 1px solid var(--nv-border-on-dark);
}

/* No flex gap — see .nv-ticker__track seam note; span padding-left spaces items. */
.nv-bulletin__track {
	display: flex;
	white-space: nowrap;
	animation: nv-bulletin-move 28s linear infinite;
	will-change: transform;
}

.nv-bulletin__track span {
	font-family: var(--nv-mono);
	font-size: 0.8rem;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	padding-left: 36px;
	color: color-mix(in srgb, var(--nv-white) 96%, transparent);
}

.nv-bulletin__track i {
	font-style: normal;
	color: var(--nv-white);
}

@keyframes nv-bulletin-move {
	to {
		transform: translateX(-50%);
	}
}

/* ---------- Nav (floating pill shell) ---------- */
.nv-nav {
	position: sticky;
	top: 0;
	z-index: 990;
	padding: 12px var(--nv-gutter-wide) 0;
	pointer-events: none;
	transition: transform 0.34s var(--nv-ease);
	/* Own compositor layer: without it Chromium (Chrome/Brave) can flash the
	   shell's backdrop-filter while the hide/reveal transform transitions. */
	will-change: transform;
}

/* Scroll direction: hidden while scrolling down, revealed on scroll-up
   (class toggled in novos.js; never hidden at page top or with menu open). */
.nv-nav.nv-nav--hidden {
	transform: translateY(calc(-100% - 2px));
	pointer-events: none;
}

.nv-nav__shell {
	box-sizing: border-box;
	pointer-events: auto;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: clamp(18px, 3vw, 42px);
	width: 100%;
	/* Pill edges sit on the same line as section content: container-wide
	   minus the gutters the section inners spend on padding (Figma nav
	   container-wide, ~190-200px margins at 1920). */
	max-width: calc(var(--nv-container-wide) - 2 * var(--nv-gutter-wide));
	margin-inline: auto;
	min-height: 64px;
	padding: 7px 8px 7px 28px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-white) 16%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 22%, transparent);
	box-shadow: 0 20px 54px -40px rgba(0, 0, 0, 0.72);
	backdrop-filter: blur(18px) saturate(1.18);
	-webkit-backdrop-filter: blur(18px) saturate(1.18);
	transition: background 0.35s var(--nv-ease), border-color 0.35s var(--nv-ease);
}

.nv-nav__logo {
	color: var(--nv-white);
	font-family: var(--nv-sans);
	font-weight: 760;
	font-size: 1.02rem;
	letter-spacing: 0.01em;
	text-decoration: none;
	transition: color 0.35s var(--nv-ease);
	display: inline-flex;
	align-items: center;
}

/* Wordmark is ink-on-transparent; inverted to white over the dark hero,
   back to ink once the shell goes solid (scrolled / light-hero pages). */
.nv-nav__logo img {
	display: block;
	height: 20px;
	width: auto;
	filter: invert(1);
	transition: filter 0.35s var(--nv-ease);
}

.nv-nav.scrolled .nv-nav__logo img,
.nv-nav-solid .nv-nav__logo img {
	filter: none;
}

.nv-nav__links {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 4px;
	min-width: 0;
}

.nv-nav__item {
	position: relative;
}

/* Hover bridge keeps the mega panel open while the cursor travels down */
.nv-nav__item::after {
	content: "";
	position: absolute;
	left: -10px;
	right: -10px;
	top: 100%;
	height: 18px;
}

/* Root items are non-navigating <button>s that only reveal their mega panel,
   hence the button resets alongside the pill styling. */
.nv-nav__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 0 18px;
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	background: none;
	font-family: inherit;
	font-weight: 700;
	font-size: 0.96rem;
	color: color-mix(in srgb, var(--nv-white) 88%, transparent);
	text-decoration: none;
	cursor: pointer;
	transition: background 0.24s var(--nv-ease), color 0.24s var(--nv-ease), transform 0.24s var(--nv-ease);
}

.nv-nav__link:hover,
.nv-nav__item:focus-within .nv-nav__link {
	background: color-mix(in srgb, var(--nv-white) 14%, transparent);
	color: var(--nv-white);
	transform: translateY(-1px);
}

.nv-nav__actions {
	display: flex;
	align-items: center;
	gap: 8px;
}

.nv-nav__pro {
	font-weight: 700;
	font-size: 0.88rem;
	white-space: nowrap;
	color: color-mix(in srgb, var(--nv-white) 82%, transparent);
	text-decoration: none;
	padding: 0 8px;
	transition: color 0.24s var(--nv-ease);
}

.nv-nav__pro:hover,
.nv-nav__pro:focus-visible {
	color: var(--nv-white);
}

.nv-nav.scrolled .nv-nav__pro,
.nv-nav-solid .nv-nav__pro {
	color: var(--nv-ink-60);
}

.nv-nav.scrolled .nv-nav__pro:hover,
.nv-nav-solid .nv-nav__pro:hover {
	color: var(--nv-ink);
}

@media (max-width: 1340px) {
	.nv-nav__pro {
		display: none;
	}
}

/* Eight top-level links: compact the pill below 1280px so nothing clips. */
@media (max-width: 1280px) and (min-width: 981px) {
	.nv-nav__shell {
		gap: clamp(10px, 1.4vw, 20px);
		padding-left: 20px;
	}

	.nv-nav__link {
		padding: 0 10px;
		font-size: 0.9rem;
	}
}

.nv-btn--nav-cta {
	background: var(--nv-orange);
	color: var(--nv-white);
	padding: 0.86em 1.35em;
}

.nv-btn--nav-cta:hover {
	background: var(--wp--custom--brand-hover);
	color: var(--nv-white);
}

/* Mega panel */
.nv-mega {
	position: absolute;
	left: 50%;
	top: calc(100% + 14px);
	z-index: 1005;
	width: min(610px, calc(100vw - 44px));
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 14px;
	padding: 18px;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 14%, transparent);
	border-radius: 30px;
	background: linear-gradient(180deg, color-mix(in srgb, var(--nv-paper) 99%, transparent), color-mix(in srgb, var(--nv-beige) 98.5%, transparent));
	box-shadow: 0 34px 90px -48px rgba(0, 0, 0, 0.76), 0 0 0 1px color-mix(in srgb, var(--nv-white) 55%, transparent) inset;
	backdrop-filter: blur(8px) saturate(1.05);
	-webkit-backdrop-filter: blur(8px) saturate(1.05);
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	/* --nv-mega-shift (set by JS) nudges the panel so it never escapes the
	   nav shell's left/right edges while staying centered when it fits. */
	transform: translate(calc(-50% + var(--nv-mega-shift, 0px)), 8px);
	transition: opacity 0.24s var(--nv-ease), transform 0.24s var(--nv-ease), visibility 0s linear 0.24s;
}

.nv-nav__item:hover .nv-mega,
.nv-nav__item:focus-within .nv-mega {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	transform: translate(calc(-50% + var(--nv-mega-shift, 0px)), 0);
	transition: opacity 0.24s var(--nv-ease), transform 0.24s var(--nv-ease);
}

body:not(.nv-nav-solid) .nv-nav:not(.scrolled) .nv-mega::before {
	content: "";
	position: absolute;
	/* Arrow stays under the nav item even when the panel is shifted. */
	left: calc(50% - var(--nv-mega-shift, 0px));
	top: -7px;
	width: 14px;
	height: 14px;
	transform: translateX(-50%) rotate(45deg);
	background: color-mix(in srgb, var(--nv-paper) 99%, transparent);
	border-left: 1px solid color-mix(in srgb, var(--nv-ink) 12%, transparent);
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 12%, transparent);
}

.nv-mega > div {
	padding: 14px;
	border-radius: 18px;
	background: color-mix(in srgb, var(--nv-white) 78%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	box-shadow: 0 16px 36px -32px color-mix(in srgb, var(--nv-ink) 45%, transparent);
}

.nv-mega__kicker {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-orange-deep);
	font-weight: 600;
	margin: 0 0 9px;
}

.nv-mega a {
	display: block;
	padding: 7px 0;
	color: var(--nv-ink);
	opacity: 0.86;
	font-weight: 650;
	font-size: 0.92rem;
	text-decoration: none;
}

.nv-mega a:hover,
.nv-mega a:focus-visible {
	color: var(--nv-orange-deep);
	opacity: 1;
}

/* Hamburger toggle */
.nv-nav__toggle {
	display: none;
	width: 48px;
	height: 48px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-white) 13%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 18%, transparent);
	color: var(--nv-white);
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0;
}

.nv-hamburger {
	position: relative;
	width: 20px;
	height: 2px;
	border-radius: var(--wp--custom--radius--pill);
	background: currentColor;
	display: block;
}

.nv-hamburger::before,
.nv-hamburger::after {
	content: "";
	position: absolute;
	left: 0;
	width: 20px;
	height: 2px;
	border-radius: var(--wp--custom--radius--pill);
	background: currentColor;
	transition: transform 0.25s var(--nv-ease), top 0.25s var(--nv-ease);
}

.nv-hamburger::before {
	top: -7px;
}

.nv-hamburger::after {
	top: 7px;
}

/* Scrolled state — also applied from the top on pages whose hero is light
   (e.g. PDPs via body.nv-nav-solid), where the white-on-glass nav would be
   invisible. The homepage keeps its transparent-over-dark-hero treatment. */
.nv-nav.scrolled .nv-nav__shell,
.nv-nav-solid .nv-nav__shell {
	background: color-mix(in srgb, var(--nv-beige) 84%, transparent);
	border-color: color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-nav.scrolled .nv-nav__logo,
.nv-nav.scrolled .nv-nav__link,
.nv-nav-solid .nv-nav__logo,
.nv-nav-solid .nv-nav__link {
	color: var(--nv-ink);
}

.nv-nav.scrolled .nv-nav__link:hover,
.nv-nav.scrolled .nv-nav__item:focus-within .nv-nav__link,
.nv-nav-solid .nv-nav__link:hover,
.nv-nav-solid .nv-nav__item:focus-within .nv-nav__link {
	background: color-mix(in srgb, var(--nv-ink) 6%, transparent);
}

.nv-nav.scrolled .nv-nav__toggle,
.nv-nav-solid .nv-nav__toggle {
	background: var(--nv-white);
	border-color: color-mix(in srgb, var(--nv-ink) 10%, transparent);
	color: var(--nv-ink);
}

/* === Mobile menu (.nv-mnav) ================================================
   Left-hand drill-in drawer (artifactuprising.com pattern) on the css-drawer
   <dialog> primitive — backdrop, ESC/outside-click close and enter/exit slide
   come from the library; the theme only styles the chrome and animates the
   root ↔ subpanel swap with CSS transforms (compositor-only, no layout work).
   Wiring lives in the "Mobile menu" section of novos.js. */
.nv-mnav {
	--drawer-bg: var(--nv-paper);
	--drawer-width: min(400px, 90vw);
	--drawer-border-radius: 0 var(--nv-radius-xs) var(--nv-radius-xs) 0;
}

.nv-mnav.drawer[open] {
	display: flex;
	flex-direction: column;
}

.nv-mnav .drawer-handle {
	display: none;
}

.nv-mnav__bar {
	flex: none;
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 14px 18px;
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-mnav__close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	margin-left: -10px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--nv-ink);
	cursor: pointer;
	transition: background 0.2s var(--nv-ease);
}

.nv-mnav__close:hover {
	background: var(--nv-ink-05);
}

.nv-mnav__logo img {
	height: 18px;
	width: auto;
}

/* The viewport clips the two-panel slide; panels are stacked and moved with
   transform only, so the swap never triggers layout. */
.nv-mnav__viewport {
	position: relative;
	flex: 1;
	min-height: 0;
	overflow: hidden;
}

.nv-mnav__panel {
	position: absolute;
	inset: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: 10px 18px 22px;
	background: var(--nv-paper);
	/* Default = ahead of the stack (slides in from the right). */
	transform: translateX(100%);
	visibility: hidden;
	pointer-events: none;
	transition: transform 0.32s var(--nv-ease), visibility 0s linear 0.32s;
}

/* Parked behind the active panel — slight left peek for depth. */
.nv-mnav__panel.is-prev {
	transform: translateX(-24%);
	visibility: visible;
	transition: transform 0.32s var(--nv-ease);
}

.nv-mnav__panel.is-active {
	transform: none;
	visibility: visible;
	pointer-events: auto;
	transition: transform 0.32s var(--nv-ease);
}

.nv-mnav__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nv-mnav__list--quiet {
	margin-top: 10px;
	padding-top: 10px;
	border-top: 1px solid var(--nv-ink-10);
}

.nv-mnav__row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	width: 100%;
	min-height: 52px;
	padding: 6px 2px;
	border: 0;
	background: none;
	color: var(--nv-ink);
	font-family: var(--nv-sans);
	font-weight: 650;
	font-size: 1.06rem;
	text-align: left;
	text-decoration: none;
	cursor: pointer;
}

.nv-mnav__row svg {
	flex: none;
	color: var(--nv-ink-40);
}

.nv-mnav__list--quiet .nv-mnav__row {
	min-height: 46px;
	font-weight: 550;
	font-size: 0.98rem;
	color: var(--nv-ink-80);
}

.nv-mnav__back {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	width: 100%;
	min-height: 52px;
	margin-bottom: 4px;
	padding: 6px 2px;
	border: 0;
	border-bottom: 1px solid var(--nv-ink-10);
	background: none;
	color: var(--nv-ink);
	font-family: var(--nv-serif);
	font-weight: 600;
	font-size: 1.18rem;
	letter-spacing: -0.01em;
	text-align: left;
	cursor: pointer;
}

.nv-mnav__back svg {
	flex: none;
	color: var(--nv-ink-40);
}

.nv-mnav__all {
	display: block;
	padding: 12px 2px;
	color: var(--nv-orange-deep);
	font-weight: 700;
	font-size: 0.98rem;
	text-decoration: none;
}

.nv-mnav__kicker {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: 16px 0 2px;
}

.nv-mnav__links {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nv-mnav__links a {
	display: block;
	padding: 11px 2px;
	color: var(--nv-ink-80);
	font-weight: 550;
	font-size: 0.98rem;
	text-decoration: none;
}

.nv-mnav__links a:hover,
.nv-mnav__all:hover {
	color: var(--nv-orange-deep);
}

.nv-mnav__foot {
	flex: none;
	padding: 14px 18px calc(14px + env(safe-area-inset-bottom, 0px));
	border-top: 1px solid var(--nv-ink-10);
}

.nv-mnav__cta {
	width: 100%;
}

/* ---------- Hero ---------- */
/* Hero stops ~72px short of the viewport so the press ticker peeks above
   the fold — a scroll cue that there's content below the video box. */
.nv-hero {
	position: relative;
	min-height: calc(100vh - 72px);
	min-height: calc(100svh - 72px);
	background: var(--nv-ink);
	overflow: hidden;
	color: var(--nv-white);
	isolation: isolate;
	padding-top: var(--nv-top-stack);
}

.nv-hero__media {
	position: absolute;
	inset: 0;
	z-index: -2;
}

.nv-hero__media video,
.nv-hero__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: saturate(1.02) contrast(1.02) brightness(0.78);
}

.nv-hero__media picture,
.nv-hero__media video {
	position: absolute;
	inset: 0;
}

/* Poster stays visible until the lazy-loaded video actually renders frames */
.nv-hero__media video {
	opacity: 0;
	transition: opacity 600ms ease;
}

.nv-hero__media video.is-playing {
	opacity: 1;
}

@media (prefers-reduced-motion: reduce) {
	.nv-hero__media video {
		transition: none;
	}
}

.nv-hero__inner {
	min-height: calc(100vh - var(--nv-top-stack) - 72px);
	min-height: calc(100svh - var(--nv-top-stack) - 72px);
	display: grid;
	grid-template-columns: minmax(0, 1.08fr) minmax(280px, 0.62fr);
	gap: clamp(30px, 6vw, 90px);
	align-items: center;
	padding-block: clamp(42px, 6vw, 82px);
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-hero h1 {
	font-size: var(--nv-fs-display);
	max-width: 13.4ch;
	line-height: var(--nv-lh-hero);
	color: var(--nv-white);
	text-shadow: 0 10px 44px rgba(0, 0, 0, 0.36);
	margin: 0;
}

.nv-line-lock {
	white-space: nowrap;
}

.nv-rotator {
	display: inline-block;
	position: relative;
	color: var(--nv-orange-soft);
	border-bottom: 3px solid var(--nv-orange-soft);
}

/* Invisible widest word reserves the rotator's footprint — no layout shift */
.nv-rotator::after {
	content: "Think";
	display: inline-block;
	visibility: hidden;
	opacity: 0;
	pointer-events: none;
}

/* Words center within the reserved slot so shorter words (e.g. "Feel")
   sit balanced on the underline instead of hugging its left edge. */
.nv-rotator span {
	position: absolute;
	left: 50%;
	top: 0;
	display: inline-block;
	opacity: 0;
	visibility: hidden;
	transform: translate(-50%, 0.12em);
	transition: opacity 0.42s var(--nv-ease), transform 0.42s var(--nv-ease), visibility 0s linear 0.42s;
	white-space: nowrap;
}

.nv-rotator span.is-active {
	opacity: 1;
	visibility: visible;
	transform: translate(-50%, 0);
	transition: opacity 0.42s var(--nv-ease), transform 0.42s var(--nv-ease);
}

.nv-hero__sub {
	font-size: var(--nv-fs-lead);
	line-height: 1.4;
	letter-spacing: var(--nv-ls-btn);
	max-width: 32ch;
	color: var(--nv-white);
	margin-top: 1.1em;
	text-shadow: 0 2px 18px rgba(0, 0, 0, 0.35);
}

.nv-hero__body {
	font-size: clamp(1rem, 1.1vw, 1.2rem);
	line-height: 1.5;
	max-width: 42ch;
	color: color-mix(in srgb, var(--nv-white) 88%, transparent);
	margin-top: 0.7em;
	text-shadow: 0 2px 18px rgba(0, 0, 0, 0.35);
}

.nv-hero__actions {
	display: flex;
	gap: 14px;
	flex-wrap: wrap;
	margin-top: 1.7em;
}

.nv-hero__proof-card {
	align-self: end;
	justify-self: end;
	/* Raw HTML aside (wp:html) — no block border-box from WP, set it here.
	   410px border-box = the previous 372px content-box footprint. */
	box-sizing: border-box;
	width: min(100%, 410px);
	border: 1px solid var(--wp--custom--glass--border);
	background: var(--wp--custom--glass--light);
	backdrop-filter: var(--wp--custom--glass--blur-glass);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-glass);
	border-radius: 22px;
	padding: 18px 18px 16px;
	box-shadow: 0 26px 70px -40px rgba(0, 0, 0, 0.7);
	transform: translateY(14vh);
}

.nv-hero__kicker {
	font-family: var(--nv-mono);
	font-size: 0.85rem;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--nv-white);
	display: block;
	line-height: 1.3;
	margin-bottom: 10px;
}

.nv-proof-card__top {
	display: grid;
	grid-template-columns: 104px 1fr;
	gap: 16px;
	align-items: center;
}

.nv-proof-card__badge {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	min-height: 104px;
	border-radius: 24px;
	background: var(--nv-white);
	color: var(--nv-ink);
	box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--nv-ink) 6%, transparent);
}

.nv-proof-card__stars {
	font-size: 0.82rem;
	letter-spacing: 0.12em;
	color: var(--nv-orange);
	line-height: 1;
}

.nv-proof-card__badge strong {
	font-size: 2rem;
	line-height: 1;
	margin-top: 8px;
	letter-spacing: -0.05em;
}

.nv-proof-card__badge small {
	font-family: var(--nv-sans);
	font-weight: 600;
	font-size: 0.62rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--nv-ink);
	margin-top: 6px;
}

.nv-proof-card__copy p {
	font-size: 0.95rem;
	line-height: 1.45;
	color: color-mix(in srgb, var(--nv-white) 92%, transparent);
	margin: 0;
}

.nv-proof-card__reviews {
	margin-top: 8px;
	font-size: 0.86rem;
	line-height: 1.4;
	color: color-mix(in srgb, var(--nv-white) 84%, transparent);
}

.nv-proof-card__clinicians {
	display: flex;
	align-items: center;
	gap: 10px;
	margin-top: 14px;
}

.nv-clinician {
	width: 38px;
	height: 38px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	overflow: hidden;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 85%, transparent);
	background: var(--nv-white);
	box-shadow: 0 10px 20px -16px rgba(0, 0, 0, 0.8);
	flex: none;
}

.nv-clinician + .nv-clinician {
	margin-left: -18px;
}

.nv-clinician img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-proof-card__note {
	font-size: 0.85rem;
	line-height: 1.35;
	color: color-mix(in srgb, var(--nv-white) 92%, transparent);
	max-width: 20ch;
}

/* ---------- Press ticker ---------- */
.nv-press {
	background: var(--nv-white);
	padding: 28px 0;
	overflow: hidden;
	/* Cap height of a brand mark at scale 1 — see .nv-press__logo. */
	--nv-press-mark: clamp(19px, 2.1vw, 25px);
}

.nv-press__row {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 28px;
	align-items: center;
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-press__kicker {
	color: var(--nv-ink-60);
	white-space: nowrap;
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	margin: 0;
}

.nv-ticker {
	overflow: hidden;
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
}

/* No flex gap on marquee tracks: the loop animates translateX(-50%), and a
   gap adds (n-1) spaces for n items, so the halfway point lands half a gap
   off the second copy — a visible seam jump after the last item. Spacing
   lives on the items (margin-right) so half the track is exactly one copy. */
.nv-ticker__track {
	display: flex;
	width: max-content;
	animation: nv-ticker 34s linear infinite;
	will-change: transform;
}

.nv-ticker__track > * {
	margin-right: clamp(36px, 5vw, 72px);
}

.nv-ticker__track span {
	font-family: var(--nv-serif);
	font-size: clamp(1.05rem, 1.8vw, 1.45rem);
	font-weight: 650;
	white-space: nowrap;
	color: var(--nv-ink-40);
	filter: grayscale(1);
}

/* Logo marquee variant (About "As Featured In", brand strips): same track
   animation, image items instead of serif wordmarks. Media-library logos here
   are 200x120 boxes with their own padding, so one height suits them all. */
.nv-ticker--logos .nv-ticker__track img {
	display: block;
	height: clamp(40px, 5vw, 56px);
	width: auto;
	filter: grayscale(1);
	opacity: 0.72;
}

/* Brand-mark marquee (press strips): tight-cropped supplied SVGs, so unlike
   the padded uploads above a single height will not do — aspect ratios run
   from 1.9:1 (GQ) to 11.5:1 (WSJ), which at equal height puts an 80px GQ next
   to a 290px WSJ. Each mark trades height against length via --nv-mark so the
   marks read at comparable optical weight and land in a ~70-250px width band.
   Marks are one ink-coloured path, so opacity alone gives the muted tone the
   wordmark variant gets from --nv-ink-40. */
.nv-ticker--marks .nv-ticker__track {
	align-items: center;
}

/* Outlets named in copy before a mark is supplied keep the serif wordmark;
   size it off the same variable so it sits at the marks' cap height. */
.nv-ticker--marks .nv-ticker__track span {
	font-size: calc(var(--nv-press-mark) * 1.15);
	line-height: 1;
}

.nv-press__logo {
	display: block;
	height: calc(var(--nv-press-mark) * var(--nv-mark, 1));
	width: auto;
	opacity: 0.6;
}

/* Business Insider's extra-bold sans carries more weight per unit height than
   the serif nameplates, so it sits a shade shorter than WSJ. */
.nv-press__logo--business-insider {
	--nv-mark: 0.8;
}

.nv-press__logo--wsj {
	--nv-mark: 0.82;
}

.nv-press__logo--longevity-technology {
	--nv-mark: 0.86;
}

.nv-press__logo--equinox {
	--nv-mark: 0.95;
}

.nv-press__logo--vogue {
	--nv-mark: 1.12;
}

.nv-press__logo--forbes,
.nv-press__logo--fortune,
.nv-press__logo--mens-health {
	--nv-mark: 1.15;
}

.nv-press__logo--well-good {
	--nv-mark: 1.2;
}

.nv-press__logo--wwd {
	--nv-mark: 1.35;
}

.nv-press__logo--gq {
	--nv-mark: 1.5;
}

@keyframes nv-ticker {
	to {
		transform: translateX(-50%);
	}
}

/* ---------- Stats ---------- */
.nv-stats {
	background: var(--nv-white);
	padding: clamp(28px, 4vw, 56px) var(--nv-gutter);
}

.nv-stats__panel {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, auto));
	justify-content: space-between;
	gap: clamp(16px, 2.5vw, 40px);
	width: min(100%, var(--nv-container));
	margin-inline: auto;
}

.nv-stat {
	position: relative;
	min-width: 0;
	display: flex;
	align-items: flex-start;
	justify-content: center;
	padding: clamp(14px, 1.8vw, 24px) 0;
	background: var(--nv-white);
	min-height: 170px;
}

.nv-stat__inner {
	width: max-content;
	max-width: 230px;
	margin-inline: auto;
	display: flex;
	flex-direction: column;
	justify-content: flex-start;
	align-items: flex-start;
	gap: 10px;
}

/* Number leads, descriptor follows — sized for readability, wraps freely. */
.nv-stat__label {
	font-size: clamp(0.88rem, 1vw, 1.05rem);
	line-height: 1.3;
	color: var(--nv-ink-80);
	max-width: 18ch;
	letter-spacing: -0.01em;
	margin: 0;
}

.nv-stat__num {
	font-family: var(--nv-sans);
	font-size: clamp(3rem, 6vw, 5.4rem);
	font-weight: 500;
	line-height: 0.9;
	letter-spacing: -0.085em;
	color: var(--nv-ink);
	font-variant-numeric: tabular-nums;
}

.nv-stats__disclaimer {
	margin: clamp(18px, 2.6vw, 32px) auto 0;
	text-align: center;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.6;
	letter-spacing: 0.04em;
	color: var(--nv-ink-40);
	max-width: 80%;
}

/* Compact expandable disclosures below the stat block. */
.nv-stats__details {
	margin: clamp(14px, 2vw, 24px) auto 0;
	max-width: min(80%, 760px);
	text-align: center;
}

.nv-stats__details summary {
	display: inline-block;
	cursor: pointer;
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	text-decoration: underline;
	text-underline-offset: 3px;
	list-style: none;
}

.nv-stats__details summary::-webkit-details-marker {
	display: none;
}

.nv-stats__details summary:hover {
	color: var(--nv-ink);
}

.nv-stats__details[open] summary {
	color: var(--nv-ink);
}

.nv-stats__details p {
	margin: 12px auto 0;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.6;
	letter-spacing: 0.04em;
	color: var(--nv-ink-40);
	text-align: left;
}

/* ---------- Intro (brand promise: glass panel over full-bleed photo) ---------- */
.nv-intro {
	position: relative;
	background: var(--nv-white);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	padding: clamp(28px, 4vw, 64px) clamp(18px, 3vw, 64px);
	overflow: hidden;
	margin-top: -1px;
	isolation: isolate;
}

.nv-intro__media {
	position: absolute;
	inset: 0;
	z-index: -1;
}

.nv-intro__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-intro__panel {
	width: min(100%, 1750px);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: clamp(28px, 3.6vw, 56px);
	padding: clamp(40px, 6vw, 88px) var(--nv-gutter);
	border-radius: clamp(34px, 5vw, var(--nv-radius-panel));
	background: var(--wp--custom--glass--panel-bg);
	border: 1px solid var(--nv-white);
	backdrop-filter: var(--wp--custom--glass--blur-panel);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-panel);
}

.nv-intro__lead {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-lead-display);
	font-weight: 500;
	line-height: 1.18;
	letter-spacing: -0.035em;
	text-align: center;
	max-width: 1050px;
	margin: 0 auto;
	color: var(--nv-white);
}

.nv-intro__lead .w {
	color: color-mix(in srgb, var(--nv-white) 44%, transparent);
	transition: color 0.28s var(--nv-ease);
}

.nv-intro__lead .w.lit {
	color: var(--nv-white);
}

/* Emphasized sentence within the lead (pattern markup <em>) */
.nv-intro__lead em,
.nv-intro__lead .w--em {
	font-weight: 650;
}

.nv-intro__rule {
	width: min(100%, 1268px);
	height: 1px;
	border: 0;
	margin: 0 auto;
	background: var(--wp--preset--gradient--bulletin);
	opacity: 0.9;
}

/* ---------- Section style variants (Site Editor: Styles panel) ----------
   The design file ships glass + light treatments for the Brand Promise and
   Proof sections. Defaults: intro = glass, proof = light. Selecting the
   registered Group block style flips a section to the alternate chrome. */
.nv-intro.is-style-nv-light .nv-intro__panel {
	background: var(--nv-white);
	border-color: color-mix(in srgb, var(--nv-ink) 8%, transparent);
	backdrop-filter: none;
	-webkit-backdrop-filter: none;
}

.nv-intro.is-style-nv-light .nv-intro__lead {
	color: var(--nv-ink);
}

.nv-intro.is-style-nv-light .nv-intro__lead .w {
	color: var(--nv-ink-40);
}

.nv-intro.is-style-nv-light .nv-intro__lead .w.lit {
	color: var(--nv-ink);
}

.nv-proof.is-style-nv-glass .nv-proof__grid {
	background: var(--wp--custom--glass--panel-bg);
	border: 1px solid color-mix(in srgb, var(--nv-white) 30%, transparent);
	backdrop-filter: var(--wp--custom--glass--blur-panel);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-panel);
}

.nv-proof.is-style-nv-glass .nv-proof__title,
.nv-proof.is-style-nv-glass .nv-evidence h3 {
	color: var(--nv-white);
}

.nv-proof.is-style-nv-glass .nv-proof__orgline {
	color: color-mix(in srgb, var(--nv-white) 30%, transparent);
}

.nv-proof.is-style-nv-glass .nv-proof__intro,
.nv-proof.is-style-nv-glass .nv-evidence p {
	color: color-mix(in srgb, var(--nv-white) 85%, transparent);
}

.nv-proof.is-style-nv-glass .nv-proof__timeline::before {
	background: color-mix(in srgb, var(--nv-white) 22%, transparent);
}

.nv-proof.is-style-nv-glass .nv-evidence__label {
	color: color-mix(in srgb, var(--nv-beige) 85%, transparent);
}

.nv-proof.is-style-nv-glass .nv-evidence::after {
	background: color-mix(in srgb, var(--nv-white) 14%, transparent);
}

.nv-proof.is-style-nv-glass .nv-limitation {
	color: color-mix(in srgb, var(--nv-beige) 55%, transparent);
}

/* ---------- Proof (white floating panel over photo) ---------- */
.nv-proof {
	position: relative;
	background: var(--nv-ink-warm);
	color: var(--nv-ink);
	padding: var(--nv-section-pad) clamp(18px, 3vw, 64px);
	/* clip, not hidden: hidden makes .nv-proof a scroll container and kills
	   the sticky left column (position:sticky then tracks a box that never
	   scrolls). clip clips paint without creating a scroll container. */
	overflow: clip;
	isolation: isolate;
	display: flex;
	justify-content: center;
}

.nv-proof__media {
	position: absolute;
	inset: 0;
	z-index: -1;
}

.nv-proof__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-proof__media::after {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(90% 70% at 50% 40%, color-mix(in srgb, #857467 30%, transparent), color-mix(in srgb, var(--nv-ink-warm) 62%, transparent));
}

.nv-proof__grid {
	position: relative;
	width: min(100%, 1750px);
	background: var(--nv-white);
	border-radius: clamp(34px, 5vw, var(--nv-radius-panel));
	padding: clamp(48px, 6vw, 96px) clamp(24px, 7vw, 137px);
}

.nv-proof__title {
	font-size: var(--nv-fs-h2);
	color: var(--nv-ink);
	letter-spacing: -0.045em;
	margin: 0;
}

/* Organic line flows fully below the title — no negative pull, so the
   step-up can never strike through the text at any viewport width. */
.nv-proof__orgline {
	color: var(--nv-ink-10);
	margin-top: 0;
	margin-bottom: clamp(24px, 3.4vw, 52px);
}

.nv-proof__cols {
	display: grid;
	grid-template-columns: minmax(280px, 0.62fr) minmax(0, 1fr);
	gap: clamp(48px, 6vw, 120px);
	align-items: start;
}

.nv-proof__left {
	position: sticky;
	top: calc(var(--nv-top-stack) + 28px);
	z-index: 1;
}

.nv-proof__intro {
	font-size: clamp(1.05rem, 1.45vw, 1.28rem);
	color: var(--nv-ink-80);
	margin: 0;
	max-width: 38ch;
	line-height: 1.48;
}

.nv-proof__left .nv-btn {
	margin-top: 1.6em;
}

/* Oversized decline stat in the sticky left column (Boost studies). */
.nv-proof__bignum {
	font-family: var(--nv-serif);
	font-size: clamp(3.6rem, 7vw, 6.4rem);
	font-weight: 600;
	line-height: 1;
	letter-spacing: -0.04em;
	color: var(--nv-orange);
	margin: 0.18em 0;
}

/* Numbered study citations below the results grid (Boost studies). */
.nv-proof__refs {
	margin: clamp(28px, 3.4vw, 56px) 0 0;
	padding-left: 1.2em;
	max-width: 72ch;
	font-size: 0.78rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

.nv-proof__refs li + li {
	margin-top: 0.35em;
}

.nv-proof__note {
	margin: 0.9em 0 0;
	max-width: 72ch;
	font-size: 0.78rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

.nv-proof__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 1.6em;
}

.nv-proof__actions .nv-btn {
	margin-top: 0;
}

/* V2 "system" steps reuse the timeline circles + connector but carry no
   study link or limitation note, so tighten the trailing rhythm. */
.nv-proof__timeline--steps .nv-evidence h3 {
	margin-bottom: 0.4em;
}

.nv-proof__timeline {
	position: relative;
	display: flex;
	flex-direction: column;
	padding-top: clamp(4px, 0.8vw, 14px);
	z-index: 1;
}

.nv-proof__timeline::before {
	content: "";
	position: absolute;
	left: 18px;
	top: calc(clamp(4px, 0.8vw, 14px) + 18px);
	bottom: 18px;
	width: 1px;
	background: var(--nv-ink-20);
}

.nv-evidence {
	position: relative;
	padding: 0 0 clamp(44px, 5vw, 70px) 58px;
}

.nv-evidence:last-child {
	padding-bottom: 0;
}

.nv-evidence__num {
	position: absolute;
	left: 0;
	top: 0;
	width: 38px;
	height: 38px;
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-orange);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--nv-mono);
	font-size: 0.74rem;
	color: var(--nv-ink);
	box-shadow: 0 12px 30px -20px color-mix(in srgb, var(--nv-orange) 90%, transparent);
}

.nv-evidence__label {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--nv-ink-80);
	margin: 0 0 0.72em;
}

.nv-evidence h3 {
	font-size: clamp(1.7rem, 2.55vw, 2.35rem);
	color: var(--nv-ink);
	max-width: 24ch;
	line-height: 1.03;
	margin: 0 0 0.55em;
}

.nv-evidence p {
	color: var(--nv-ink-80);
	max-width: 62ch;
	line-height: 1.55;
	margin: 0;
}

.nv-evidence p + p {
	margin-top: 0.55em;
}

.nv-evidence ul {
	margin: 0 0 0.55em;
	padding-left: 1.2em;
	color: var(--nv-ink-80);
	line-height: 1.55;
	max-width: 62ch;
}

.nv-evidence ul li + li {
	margin-top: 0.3em;
}

/* ---------- About company timeline (reuses .nv-proof__timeline steps) ---------- */
.nv-about-timeline {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
}

.nv-about-timeline__media {
	margin: clamp(28px, 4vw, 48px) 0 0;
}

.nv-about-timeline__media img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--wp--custom--radius--card, 20px);
}

.nv-about-timeline__cta {
	margin-top: clamp(48px, 6vw, 96px);
	text-align: center;
}

.nv-about-timeline__cta h2 {
	font-size: var(--nv-fs-h2);
	max-width: 28ch;
	margin-inline: auto;
	margin-bottom: 1em;
	color: var(--nv-ink-80);
}

.nv-about-timeline__cta-actions {
	display: flex;
	justify-content: center;
	margin-bottom: 0.85em;
}

.nv-about-timeline__cta-note {
	color: var(--nv-ink-80);
	font-weight: 600;
	margin: 0;
}

/* ---------- Generic page hero (text-only intro, no media) ----------
   Shared across the evergreen inner pages (About, Scientists, etc). */
.nv-page-hero {
	max-width: 46rem;
	margin-inline: auto;
	padding: clamp(48px, 8vw, 96px) var(--nv-gutter-wide) clamp(28px, 4vw, 48px);
	text-align: center;
}

.nv-page-hero__title {
	font-size: var(--nv-fs-h2);
	max-width: 20ch;
	margin: 0 auto;
}

.nv-page-hero__sub {
	font-size: var(--nv-fs-lead);
	color: var(--nv-ink-60);
	max-width: 42ch;
	margin: 1em auto 0;
}

.nv-page-hero__actions {
	display: flex;
	justify-content: center;
	margin-top: 1.6em;
}

.nv-page-hero__media {
	max-width: var(--nv-container-wide);
	margin: clamp(28px, 4vw, 48px) auto 0;
	padding-inline: var(--nv-gutter-wide);
}

.nv-page-hero__media img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius);
}

/* Generic left-aligned button row (CTAs that aren't a centered hero
   action group). Reused wherever content used to be a wp:buttons block
   with one-off spacing. */
.nv-actions {
	display: flex;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: var(--wp--preset--spacing--60);
}

.nv-actions--center {
	justify-content: center;
	margin-bottom: 0;
}

/* ---------- Approach intro (dark page, editorial constrained-width text).
   Replaces the fake 80/20 wp:columns width hack with a real max-width. ---------- */
.nv-approach__lead {
	font-size: var(--nv-fs-h2);
	max-width: 32ch;
	margin: 0 0 var(--wp--preset--spacing--60);
}

.nv-approach__statement {
	max-width: 42ch;
	margin: var(--wp--preset--spacing--70) 0 var(--wp--preset--spacing--30);
}

/* ---------- Generic section container (max-width + gutter + vertical
   rhythm, no background). The default "no-frills" wrapper for content
   that doesn't need a hero/panel/dark-band treatment. ---------- */
.nv-section {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
}

.nv-section--tight {
	padding-block: clamp(28px, 4vw, 48px);
}

/* ---------- Generic soft panel (rounded, tinted band for an intro
   heading + lead paragraph). Reused across the evergreen inner pages
   wherever content used the undefined "is-style-rounded-corners". ---------- */
.nv-panel {
	background: radial-gradient(120% 140% at 50% 0%, var(--wp--preset--color--beige) 0%, var(--wp--preset--color--beige-dark) 100%);
	border-radius: var(--nv-radius-panel);
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
	text-align: center;
}

.nv-panel__inner {
	max-width: 44rem;
	margin-inline: auto;
}

.nv-panel__title {
	font-size: var(--nv-fs-h2);
	color: var(--wp--preset--color--ink-90);
}

.nv-panel p {
	color: var(--nv-ink-60);
	margin-top: 0.8em;
}

/* Left-aligned variant (panel wraps a two-column layout instead of a
   single centered heading + lead paragraph). Scoped to the direct
   split-banner child so nested cards can still set their own alignment. */
.nv-panel--left > .nv-split-banner {
	text-align: left;
}

/* Perks list inside a centered panel (Partners "Become a Partner").
   Left-aligned rows with brand-orange markers, box centered as a unit. */
.nv-partner-perks {
	list-style: none;
	max-width: 34rem;
	margin: 1.6em auto 0;
	padding: 0;
	text-align: left;
}

.nv-partner-perks li {
	position: relative;
	padding-left: 1.6em;
	margin-top: 0.7em;
	color: var(--nv-ink-80);
}

.nv-partner-perks li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.5em;
	width: 0.55em;
	height: 0.55em;
	border-radius: 50%;
	background: var(--nv-orange);
}

/* ---------- Generic dark inset band ----------
   Mirrors the .nv-main--dark white-text convention (approach/ingredients
   pages) for sections that are dark within an otherwise light page.
   Used across the evergreen inner pages (About: Our Story / Commitment). */
.nv-dark-band {
	background: var(--nv-ink);
}

.nv-dark-band,
.nv-dark-band :is(h1, h2, h3, h4, h5, h6, p, li) {
	color: var(--nv-white);
}

.nv-dark-band__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: clamp(48px, 7vw, 96px) var(--nv-gutter-wide);
}

.nv-dark-band__title {
	text-align: center;
	max-width: 20ch;
	margin: 0 auto clamp(28px, 4vw, 48px);
}

.nv-dark-band__actions {
	display: flex;
	justify-content: center;
	margin-top: clamp(24px, 3vw, 40px);
}

.nv-dark-band .nv-split-banner p:last-child {
	margin-bottom: 0;
}

/* ---------- About: Scientific Leadership (advisor quotes) ---------- */
.nv-about-leadership {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
	text-align: center;
}

.nv-about-leadership__title {
	max-width: 26ch;
	margin: 0.5em auto var(--wp--preset--spacing--60);
}

.nv-about-leadership__actions {
	display: flex;
	justify-content: center;
	margin-top: var(--wp--preset--spacing--70);
}

/* ---------- About: Building What Comes Next (insider signup) ---------- */
.nv-about-insider {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
}

.nv-about-insider__head {
	text-align: center;
	max-width: 44rem;
	margin-inline: auto;
}

.nv-about-insider__head h3 {
	margin-top: 0.6em;
}

.nv-about-insider__head p {
	color: var(--nv-ink-60);
	margin-top: 0.8em;
}

.nv-about-insider__form {
	max-width: 32rem;
	margin: clamp(28px, 4vw, 48px) auto 0;
}

/* Generic responsive 3-up card grid — layout only, pair with a card class
   (.nv-benefit, .nv-evd-card, .nv-bio-card, etc). Reused across the
   evergreen inner pages wherever content used to be a raw wp:columns row. */
.nv-card-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(16px, 2.4vw, 28px);
	margin-top: clamp(28px, 4vw, 48px);
}

.nv-benefit {
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
	padding: clamp(20px, 2.4vw, 32px);
	text-align: center;
}

.nv-benefit img {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: var(--nv-radius-sm);
	margin-bottom: 1em;
}

.nv-benefit h3 {
	margin: 0 0 0.4em;
}

.nv-benefit p {
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-benefit .nv-btn {
	margin-top: 1em;
}

/* Small centered glyph instead of a full-bleed photo (trust badges). */
.nv-benefit--icon img {
	width: 48px;
	aspect-ratio: 1;
	object-fit: contain;
	margin: 0 auto 1em;
}

@media (max-width: 782px) {
	.nv-card-grid {
		grid-template-columns: 1fr;
	}
}

.nv-evidence::after {
	content: "";
	display: block;
	width: 100%;
	height: 1px;
	background: color-mix(in srgb, var(--nv-ink) 14%, transparent);
	margin-top: clamp(28px, 4vw, 46px);
}

.nv-evidence:last-child::after {
	display: none;
}

.nv-proof .nv-limitation {
	color: color-mix(in srgb, var(--nv-ink) 55%, transparent);
}

/* ---------- Cover pairs ----------
   The pinned "cover scroll" effect is retired for now: sections scroll
   normally. The .nv-cover-pair wrappers remain in front-page.html as plain
   grouping containers. */

/* ---------- People ---------- */
.nv-people {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0;
}

.nv-people__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-people__head {
	display: grid;
	grid-template-columns: 1.1fr 0.9fr;
	gap: 30px;
	align-items: end;
	margin-bottom: clamp(28px, 4vw, 48px);
}

.nv-people__head h2 {
	font-size: var(--nv-fs-h2);
	max-width: 18ch;
	margin: 0;
}

.nv-people__head p {
	color: var(--nv-ink-80);
	max-width: 38ch;
	justify-self: end;
	margin: 0;
}

.nv-people__orgline {
	color: var(--nv-ink-10);
	margin-top: 0;
}

/* Spotlight carousel: shared .nv-cardrail scroll-snap track. Cards bleed
   to the right viewport edge; last card peeks to signal scrollability. */
.nv-people__carousel {
	display: flex;
	gap: 20px;
	overflow-x: auto;
	margin-right: calc(50% - 50vw);
	padding: 20px var(--nv-gutter-wide) 8px 0;
}

/* ---------- Carousel controls (shared: people + protocol) ---------- */
.nv-carousel-nav {
	display: flex;
	gap: 10px;
	justify-content: flex-end;
	margin-bottom: 4px;
}

.nv-carousel-btn {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	border: 0.5px solid color-mix(in srgb, var(--nv-ink) 20%, transparent);
	background: var(--wp--custom--glass--light);
	backdrop-filter: var(--wp--custom--glass--blur-chip);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-chip);
	color: var(--nv-ink);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0;
	transition: background 0.25s var(--nv-ease), border-color 0.25s var(--nv-ease), opacity 0.25s var(--nv-ease);
}

.nv-carousel-btn svg {
	width: 18px;
	height: 18px;
	display: block;
}

.nv-carousel-btn:hover {
	border-color: var(--nv-ink);
	background: var(--nv-white);
}

.nv-carousel-btn:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 3px;
}

.nv-carousel-btn[disabled] {
	opacity: 0.35;
	cursor: default;
	pointer-events: none;
}

.nv-carousel-nav--light .nv-carousel-btn,
.nv-protocol .nv-carousel-nav .nv-carousel-btn {
	border-color: color-mix(in srgb, var(--nv-white) 30%, transparent);
	background: color-mix(in srgb, var(--nv-white) 8%, transparent);
	color: var(--nv-beige);
}

.nv-carousel-nav--light .nv-carousel-btn:hover,
.nv-protocol .nv-carousel-nav .nv-carousel-btn:hover {
	border-color: var(--nv-white);
	background: color-mix(in srgb, var(--nv-white) 20%, transparent);
	color: var(--nv-white);
}

.nv-glass-card {
	background: var(--wp--custom--glass--card-bg);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	box-shadow: var(--nv-shadow-sm);
	border-radius: var(--nv-radius);
	overflow: hidden;
	position: relative;
}

.nv-spotlight {
	flex: none;
	width: min(602px, 84vw);
	min-height: min(520px, 112vw);
	scroll-snap-align: start;
	display: flex;
	align-items: flex-end;
	color: var(--nv-white);
}

.nv-spotlight img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-spotlight::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, color-mix(in srgb, var(--nv-ink) 0%, transparent) 35%, color-mix(in srgb, var(--nv-ink) 86%, transparent) 100%);
}

.nv-spotlight__content {
	position: relative;
	z-index: 2;
	padding: clamp(22px, 3vw, 34px);
}

.nv-spotlight h3 {
	font-size: var(--nv-fs-h3);
	color: var(--nv-white);
	margin: 0.35em 0 0;
}

.nv-spotlight p {
	color: color-mix(in srgb, var(--nv-white) 91%, transparent);
	margin: 0.6em 0 0;
	max-width: 58ch;
}

.nv-spotlight .nv-limitation {
	color: color-mix(in srgb, var(--nv-beige) 55%, transparent);
}

.nv-spotlight--kit img {
	object-fit: contain;
	padding: 12%;
	background: var(--nv-beige);
}

.nv-spotlight--kit::after {
	background: linear-gradient(180deg, transparent 45%, color-mix(in srgb, var(--nv-ink) 82%, transparent) 100%);
}

.nv-people__actions {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	margin-top: 28px;
}

.nv-bubbles {
	display: flex;
	align-items: center;
}

.nv-bubble {
	width: 26px;
	height: 26px;
	border-radius: 50%;
	margin-left: -8px;
	border: 1.5px solid var(--nv-white);
	background: var(--nv-ink-20);
	box-shadow: 0 8px 15px -11px color-mix(in srgb, var(--nv-ink) 70%, transparent);
	overflow: hidden;
}

.nv-bubble:first-child {
	margin-left: 0;
}

.nv-bubble img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-bubble--growth {
	background: var(--nv-growth);
}

.nv-bubble--energy {
	background: var(--nv-energy);
}

.nv-bubble--blue {
	background: color-mix(in srgb, var(--wp--preset--color--clinical-blue) 16%, var(--nv-white));
}

.nv-bubble--more {
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--nv-ink);
	color: var(--nv-white);
	font-family: var(--nv-mono);
	font-size: 0.5rem;
	font-weight: 600;
}

/* ---------- Compare ---------- */
.nv-compare {
	background: var(--nv-white);
	padding: var(--nv-section-pad) var(--nv-gutter);
}

.nv-compare__title {
	font-size: var(--nv-fs-h2);
	max-width: var(--nv-container-mid);
	margin: 0 auto;
	padding-inline: 0;
}

/* Title spans nearly the full container, so the line must clear it entirely
   (a negative pull strikes through the text at most widths). */
.nv-compare__orgline {
	color: var(--nv-ink-10);
	margin-top: clamp(4px, 0.8vw, 10px);
	margin-bottom: clamp(20px, 3vw, 44px);
}

.nv-compare__grid {
	display: grid;
	grid-template-columns: minmax(280px, 0.62fr) minmax(0, 1.38fr);
	gap: clamp(40px, 5vw, 80px);
	align-items: start;
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-compare__left {
	position: sticky;
	top: calc(var(--nv-top-stack) + 28px);
}

.nv-compare__left p {
	color: var(--nv-ink-60);
	margin: 0;
	max-width: 32ch;
}

/* Comparison matrix: one continuous table — rows touch and are separated
   by hairline dividers instead of gaps. --nv-row-pad is the inline padding,
   --nv-row-pad-y the block padding; the mobile frozen-column offsets below
   derive from them, so retune them in one place only. */
.nv-matrix {
	--nv-row-pad: 20px;
	--nv-row-pad-y: 8px;
	--nv-matrix-line: color-mix(in srgb, var(--nv-ink) 8%, transparent);
	display: flex;
	flex-direction: column;
	gap: 0;
	min-width: 640px;
}

.nv-compare__right {
	overflow-x: auto;
}

/* Two-column NOVOS vs Others variant: no horizontal scroll needed, and the
   feature label column gets more room since only two product columns share
   the width. */
.nv-matrix--duo {
	min-width: 0;
}

.nv-matrix--duo .nv-matrix__headers .nv-matrix__feature,
.nv-matrix--duo .nv-matrix__row .nv-matrix__feature {
	width: clamp(160px, 34%, 260px);
}

/* Cells and header product columns share the same cap so the hero-column
   stripe in the headers stays flush with the stripe in the rows at any
   container width. */
.nv-matrix--duo .nv-matrix__cell,
.nv-matrix--duo .nv-matrix__product {
	flex: 1 1 0;
	max-width: 220px;
	/* Header products carry side padding; border-box keeps their cap
	   identical to the unpadded row cells. */
	box-sizing: border-box;
}

/* Headers mirror the rows' gap/width exactly so the hero-column highlight
   below lines up pixel-perfect with the row cells. */
.nv-matrix__headers {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	padding-inline: var(--nv-row-pad);
	position: relative;
	z-index: 0;
	border-bottom: 1px solid var(--nv-matrix-line);
}

.nv-matrix__headers .nv-matrix__feature {
	flex: none;
	width: 139px;
}

.nv-matrix__product {
	flex: 1 1 0;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
	align-items: center;
	padding: 12px 8px;
	text-align: center;
}

.nv-matrix__product strong {
	font-family: var(--nv-sans);
	font-size: 0.95rem;
	font-weight: 700;
	letter-spacing: var(--nv-ls-btn);
	text-transform: uppercase;
	line-height: 1.2;
	color: var(--nv-ink);
}

.nv-matrix__tag {
	display: inline-flex;
	padding: 4px 10px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-ink) 9%, var(--nv-beige));
	color: var(--nv-ink-60);
	font-size: 0.64rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	white-space: nowrap;
}

.nv-matrix__tag--hero {
	background: var(--nv-orange);
	color: var(--nv-white);
}

.nv-matrix__row {
	display: flex;
	align-items: center;
	gap: 16px;
	padding: var(--nv-row-pad-y) var(--nv-row-pad);
	background: color-mix(in srgb, var(--nv-beige) 40%, transparent);
	/* Own stacking context so the hero-column stripe (z:-1 ::before) paints
	   above the row bed but below cell content. */
	position: relative;
	z-index: 0;
}

.nv-matrix__row + .nv-matrix__row {
	border-top: 1px solid var(--nv-matrix-line);
}

.nv-matrix__headers + .nv-matrix__row {
	border-radius: var(--nv-radius) var(--nv-radius) 0 0;
}

.nv-matrix__row:last-child {
	border-radius: 0 0 var(--nv-radius) var(--nv-radius);
}

.nv-matrix__row .nv-matrix__feature {
	flex: none;
	width: 139px;
	font-weight: 600;
	font-size: 1.02rem;
	line-height: 1.3;
	color: var(--nv-ink);
}

.nv-matrix__cell {
	flex: 1 1 0;
	min-width: 0;
	min-height: 48px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--nv-radius-sm);
	text-align: center;
}

/* Hero column highlight (timeline.com style): one continuous stripe from
   the product header down to the last row. Rows touch, so each hero cell's
   ::before only needs to cover its own row's block padding for consecutive
   segments to meet at the dividers. */
.nv-matrix__cell--yes {
	position: relative;
	align-self: stretch;
}

.nv-matrix__cell--yes::before {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	top: calc(-1 * var(--nv-row-pad-y));
	bottom: calc(-1 * var(--nv-row-pad-y));
	/* Opaque (flattened on white) so the stripe reads as one column across
	   row beds and dividers alike. */
	background: color-mix(in srgb, var(--nv-orange-soft) 40%, var(--nv-white));
	z-index: -1;
}

.nv-matrix__row:last-child .nv-matrix__cell--yes::before {
	border-radius: 0 0 var(--nv-radius-sm) var(--nv-radius-sm);
}

/* The stripe starts at the hero product header (first product column). */
.nv-matrix__headers .nv-matrix__product:nth-child(2) {
	position: relative;
}

.nv-matrix__headers .nv-matrix__product:nth-child(2)::before {
	content: "";
	position: absolute;
	inset: 0;
	background: color-mix(in srgb, var(--nv-orange-soft) 40%, var(--nv-white));
	border-radius: var(--nv-radius-sm) var(--nv-radius-sm) 0 0;
	z-index: -1;
}

.nv-matrix__check {
	width: 28px;
	height: 28px;
	border-radius: var(--nv-radius-sm);
	background: var(--nv-orange);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: none;
}

.nv-matrix__check::before {
	content: "";
	width: 12px;
	height: 7px;
	border-left: 2.5px solid var(--nv-white);
	border-bottom: 2.5px solid var(--nv-white);
	transform: rotate(-45deg) translate(1px, -1px);
}

/* Non-hero matrix checks (competitors) are gray. */
.nv-matrix__cell:not(.nv-matrix__cell--yes) .nv-matrix__check,
.nv-matrix__check--plain {
	background: color-mix(in srgb, var(--nv-ink) 28%, var(--nv-beige));
}

.nv-matrix__cell:not(.nv-matrix__cell--yes) .nv-matrix__check::before,
.nv-matrix__check--plain::before {
	border-color: var(--nv-white);
}

.nv-matrix__dash {
	width: 12px;
	height: 2px;
	background: color-mix(in srgb, var(--nv-ink) 16%, var(--nv-beige));
	display: inline-block;
}

.nv-matrix__chip {
	display: inline-flex;
	padding: 6px 12px;
	border-radius: 8px;
	background: color-mix(in srgb, var(--nv-ink) 9%, var(--nv-beige));
	color: var(--nv-ink-60);
	font-size: 0.78rem;
	font-weight: 600;
	font-style: normal;
	line-height: 1.25;
}

/* Mobile: freeze the feature column (timeline.com-style) while the product
   columns scroll behind it. Sticky needs an opaque background, so the row
   bed is flattened against the section's white background here. */
@media (max-width: 980px) {
	.nv-matrix {
		--nv-row-pad-y: 6px;
	}

	.nv-matrix__cell {
		min-height: 44px;
	}

	.nv-matrix__row {
		background: color-mix(in srgb, var(--nv-beige) 40%, var(--nv-white));
	}

	.nv-matrix__headers .nv-matrix__feature,
	.nv-matrix__row .nv-matrix__feature {
		position: sticky;
		left: 0;
		z-index: 2;
	}

	.nv-matrix__headers .nv-matrix__feature {
		align-self: stretch;
		margin-left: calc(-1 * var(--nv-row-pad));
		padding-left: var(--nv-row-pad);
		background: var(--nv-white);
	}

	/* Stretch over the row's padding so scrolling cells can't peek out
	   above/below or left of the frozen label. */
	.nv-matrix__row .nv-matrix__feature {
		align-self: stretch;
		display: flex;
		align-items: center;
		margin-block: calc(-1 * var(--nv-row-pad-y));
		margin-left: calc(-1 * var(--nv-row-pad));
		padding-block: var(--nv-row-pad-y);
		padding-left: var(--nv-row-pad);
		background: inherit;
	}

	.nv-matrix__headers + .nv-matrix__row .nv-matrix__feature {
		border-radius: var(--nv-radius) 0 0 0;
	}

	.nv-matrix__row:last-child .nv-matrix__feature {
		border-radius: 0 0 0 var(--nv-radius);
	}

	.nv-matrix__row .nv-matrix__feature::after {
		content: "";
		position: absolute;
		top: 0;
		bottom: 0;
		right: -16px;
		width: 16px;
		background: linear-gradient(to right, color-mix(in srgb, var(--nv-ink) 7%, transparent), transparent);
	}

	.nv-matrix__cell--yes::before {
		border-radius: 0;
	}
}

.nv-awards {
	display: flex;
	flex-direction: column;
	margin-top: clamp(28px, 3.4vw, 54px);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
	border-radius: var(--nv-radius);
	background: var(--nv-paper);
	overflow: hidden;
}

.nv-awards__side,
.nv-awards__col {
	padding: 22px 22px 21px;
}

.nv-awards__side {
	display: flex;
	align-items: center;
	justify-content: flex-start;
}

.nv-awards__cols {
	display: grid;
	grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.95fr);
}

.nv-awards__col {
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-awards__col + .nv-awards__col {
	border-left: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-award-badge {
	display: flex;
	align-items: center;
	gap: 12px;
}

/* Laurel branches flank the mark (Figma 391:2791): masked SVG so they follow
   the ink color; the left one is a mirror of the right. */
.nv-award-badge__inner {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	padding-inline: 28px;
	min-height: 40px;
}

.nv-award-badge__inner::before,
.nv-award-badge__inner::after {
	content: "";
	position: absolute;
	top: 50%;
	width: 24px;
	height: 39px;
	background: var(--nv-ink);
	-webkit-mask: url("../img/laurel.svg") center / 100% 100% no-repeat;
	mask: url("../img/laurel.svg") center / 100% 100% no-repeat;
}

.nv-award-badge__inner::before {
	left: 0;
	transform: translateY(-50%) scaleX(-1);
}

.nv-award-badge__inner::after {
	right: 0;
	transform: translateY(-50%);
}

.nv-award-badge__mark {
	font-family: var(--nv-sans);
	font-size: 2.5rem;
	font-weight: 400;
	letter-spacing: -0.032em;
	line-height: 1;
	color: var(--nv-ink);
}

.nv-award-badge__caption {
	font-family: var(--nv-sans);
	font-weight: 500;
	font-size: 1rem;
	letter-spacing: 0.076em;
	color: var(--nv-ink);
	text-transform: uppercase;
	text-align: center;
}

.nv-awards__col-title {
	font-family: var(--nv-sans);
	font-weight: 500;
	font-size: 0.66rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0 0 9px;
}

/* Figma renders the first column title in full ink, the second muted. */
.nv-awards__col:first-child .nv-awards__col-title {
	color: var(--nv-ink);
}

.nv-awards__col ul {
	list-style: none;
	display: grid;
	gap: 8px;
	margin: 0;
	padding: 0;
}

.nv-awards__col li {
	position: relative;
	padding-left: 14px;
	font-size: 0.72rem;
	line-height: 1.35;
	color: var(--nv-ink);
}

.nv-awards__col li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.41em;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--nv-orange);
}

/* ---------- Earth band (protocol + scientists share one gradient) ---------- */
.nv-earth-band {
	background: var(--wp--preset--gradient--earth);
	color: var(--nv-beige);
}

/* ---------- Protocol ---------- */
.nv-protocol {
	background: transparent;
	color: var(--nv-beige);
	padding: var(--nv-section-pad) 0 clamp(48px, 6vw, 96px);
}

.nv-protocol__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-protocol__head {
	display: flex;
	align-items: end;
	justify-content: space-between;
	gap: 26px;
	margin-bottom: clamp(10px, 1.6vw, 20px);
}

.nv-protocol__head h2 {
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	max-width: 18ch;
	margin: 0;
}

.nv-protocol__head p {
	max-width: 44ch;
}

.nv-protocol__head p {
	color: var(--nv-white);
	font-size: var(--nv-fs-lead);
	margin: 0;
}

.nv-protocol__orgline {
	color: color-mix(in srgb, var(--nv-white) 45%, transparent);
	margin-bottom: clamp(24px, 3.4vw, 48px);
}

/* Shared product rail (novos-blocks/product-rail): .nv-cardrail scroll-snap
   track that bleeds to the right viewport edge. Parents (protocol, shop,
   explore) supply headings/orglines; this is nav+cards only. */
.nv-product-rail {
	display: flex;
	gap: 16px;
	overflow-x: auto;
	margin-right: calc(50% - 50vw);
	padding: 4px var(--nv-gutter-wide) 10px 0;
}

/* Card width tuned so the 4th card (Bar) peeks half-visible on desktop —
   the cut-off card is the horizontal-scroll affordance. */
.nv-product {
	flex: none;
	width: min(375px, 82vw);
	scroll-snap-align: start;
	position: relative;
	background: var(--nv-beige);
	color: var(--nv-ink);
	border-radius: var(--nv-radius-lg);
	padding: 24px 0 24px;
	overflow: hidden;
	transition: transform 0.35s var(--nv-ease), box-shadow 0.35s var(--nv-ease);
	display: flex;
	flex-direction: column;
	align-items: center;
	/* Figma rhythm: tag sits 8px above the image; the 43px breath lives
	   between image and body (padding-top there), not between every child. */
	gap: 8px;
}

.nv-product:hover {
	transform: translateY(-8px);
	box-shadow: var(--nv-shadow-lg);
}

.nv-product__tag {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 240px;
	padding: 8px 24px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-ink) 12%, var(--nv-beige));
	color: var(--nv-ink);
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.1;
	flex: none;
}

.nv-product__tag--hero {
	background: var(--nv-orange);
	color: var(--nv-white);
}

/* The product shots are studio photos on a near-white ground, so the media
   area becomes its own white panel rather than bleeding onto the beige card. */
.nv-product__media {
	position: relative;
	width: auto;
	margin-inline: 24px;
	align-self: stretch;
	min-height: clamp(190px, 14vw, 255px);
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--nv-white);
	border-radius: var(--nv-radius-sm);
	overflow: hidden;
}

.nv-product__media img {
	box-sizing: border-box;
	width: 100%;
	height: 100%;
	max-height: 355px;
	object-fit: contain;
}

/* Shop All variant: full-bleed lifestyle shots that cross-fade to a second
   frame on hover/focus (opt-in via $novos_product_rail_shop_imagery). */
.nv-product__media--photo {
	background: var(--nv-ink-05);
}

.nv-product__media--photo img {
	object-fit: cover;
}

.nv-product__img-hover {
	position: absolute;
	inset: 0;
	opacity: 0;
	transition: opacity var(--wp--custom--motion--dur) var(--nv-ease);
}

.nv-product:hover .nv-product__img-hover,
.nv-product:focus-within .nv-product__img-hover {
	opacity: 1;
}

@media (prefers-reduced-motion: reduce) {
	.nv-product__img-hover {
		transition: none;
	}
}

.nv-product__body {
	box-sizing: border-box;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 16px;
	width: 100%;
	min-width: 0;
	padding-inline: 24px;
	padding-top: 32px;
	margin-top: auto;
}

.nv-product h3 {
	font-family: var(--nv-sans);
	font-size: 1.2rem;
	font-weight: 600;
	margin: 0;
}

/* "Start here" cue above the hero product's name. */
.nv-product__cue {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-orange);
	margin-bottom: -10px;
}

.nv-product p {
	font-size: 0.91rem;
	color: var(--nv-ink-60);
	line-height: 1.42;
	margin: 0;
}

.nv-product__chips {
	display: flex;
	flex-wrap: nowrap;
	gap: 6px;
	width: 100%;
	min-width: 0;
	max-width: 100%;
	overflow-x: auto;
	scrollbar-width: none;
}

.nv-product__chips::-webkit-scrollbar {
	display: none;
}

.nv-product__chips .nv-chip {
	flex: 0 0 auto;
	font-size: 0.82rem;
	padding: 5px 12px;
}

/* Overflowing chip rows become a marquee via buildChipTickers() in
   novos.js (shared product-rail + shop bundles/samples). .nv-ticker
   supplies overflow:hidden + edge fade; track can't reuse
   .nv-ticker__track (serif wordmark styles). */
.nv-product__chips.nv-ticker {
	overflow-x: hidden;
}

.nv-product__chips-track {
	display: flex;
	width: max-content;
	animation: nv-ticker 12s linear infinite;
	will-change: transform;
}

.nv-product__chips-track .nv-chip {
	margin-right: 6px;
}

.nv-product__chips.nv-ticker:hover .nv-product__chips-track {
	animation-play-state: paused;
}

.nv-chip {
	display: inline-flex;
	align-items: center;
	padding: 6px 12px;
	border: 1.2px solid var(--nv-ink);
	border-radius: var(--wp--custom--radius--pill);
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1.15;
	color: var(--nv-ink);
	white-space: nowrap;
}

.nv-product__price {
	font-family: var(--nv-mono);
	font-size: 0.86rem;
	color: var(--nv-orange);
	font-weight: 600;
	display: block;
}

.nv-product .nv-btn {
	width: 100%;
	padding-block: 0.75em;
}

/* ---------- Scientists ---------- */
.nv-scientists {
	background: transparent;
	color: var(--nv-beige);
	padding: clamp(48px, 6vw, 96px) var(--nv-gutter) var(--nv-section-pad);
}

.nv-scientists > h2 {
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	margin: 0 auto clamp(34px, 5vw, 60px);
	max-width: var(--nv-container-mid);
}

.nv-sci__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 16px;
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-sci__actions {
	display: flex;
	justify-content: center;
	margin-top: clamp(28px, 4vw, 46px);
}

.nv-sci-card {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 20px;
	background: color-mix(in srgb, var(--nv-white) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 10%, transparent);
	border-radius: 24px;
	padding: clamp(22px, 3vw, 34px);
	position: relative;
	overflow: hidden;
	margin: 0;
}

.nv-sci-card::after {
	content: "";
	position: absolute;
	right: -40px;
	bottom: -60px;
	width: 180px;
	aspect-ratio: 1;
	border-radius: 50%;
	background: radial-gradient(circle, color-mix(in srgb, var(--nv-orange) 12%, transparent), transparent 68%);
	pointer-events: none;
}

.nv-portrait {
	width: 76px;
	height: 76px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-white) 24%, transparent);
	box-shadow: 0 18px 38px -24px rgba(0, 0, 0, 0.8);
	flex: none;
}

.nv-portrait img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: saturate(0.9) contrast(1.02);
}

.nv-sci-card__quote {
	font-family: var(--nv-serif);
	font-size: clamp(1.1rem, 1.6vw, 1.36rem);
	line-height: 1.43;
	color: var(--nv-white);
	position: relative;
	z-index: 1;
	margin: 0;
	border: 0;
	padding: 0;
}

.nv-sci-card__name {
	margin-top: 1.1em;
	font-weight: 700;
	color: var(--nv-white);
}

.nv-sci-card__affil {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-orange-soft);
	margin-top: 0.25em;
}

/* ---------- Clinicians (earth band, follows Scientists) ---------- */
.nv-clin {
	background: transparent;
	color: var(--nv-beige);
	padding: 0 var(--nv-gutter) var(--nv-section-pad);
}

.nv-clin > h2 {
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	margin: 0 auto clamp(30px, 4.5vw, 54px);
	max-width: var(--nv-container-mid);
}

.nv-clin__grid {
	display: grid;
	grid-template-columns: 1.55fr 1fr;
	gap: 16px;
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-clin__quotewrap {
	margin: 0;
	display: flex;
	flex-direction: column;
	background: color-mix(in srgb, var(--nv-white) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 10%, transparent);
	border-radius: 24px;
	padding: clamp(26px, 3.4vw, 42px);
}

.nv-clin__stars {
	color: var(--nv-orange-soft);
	letter-spacing: 0.18em;
	font-size: 1.05rem;
}

.nv-clin__quote {
	font-family: var(--nv-serif);
	font-size: clamp(1.3rem, 2.2vw, 1.85rem);
	line-height: 1.4;
	color: var(--nv-white);
	margin: 0.7em 0 0;
	border: 0;
	padding: 0;
}

.nv-clin__attrib {
	margin-top: auto;
	padding-top: 1.4em;
}

.nv-clin__attrib strong {
	display: block;
	color: var(--nv-white);
}

.nv-clin__attrib em {
	display: block;
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-orange-soft);
	margin-top: 0.3em;
}

.nv-clin__badge {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	gap: 16px;
	background: color-mix(in srgb, var(--nv-white) 7%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 14%, transparent);
	border-radius: 24px;
	padding: clamp(26px, 3.4vw, 42px);
}

/* FrontrowMD "Clinicians' Choice" lockup: laurel · caduceus · title · laurel
   (replicates the FrontRow widget header). */
.nv-clin__lockup {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	color: var(--nv-white);
}

.nv-clin__lockup strong {
	font-family: var(--nv-serif);
	font-size: 1.35rem;
	line-height: 1.2;
	color: var(--nv-white);
}

.nv-clin__laurel svg,
.nv-clin__caduceus svg {
	display: block;
}

.nv-clin__laurel svg {
	width: 15px;
	height: 26px;
}

/* 320x236 viewBox — wider than tall. */
.nv-clin__caduceus svg {
	width: 36px;
	height: 26px;
}

.nv-clin__badge-copy span {
	display: block;
	color: var(--nv-beige);
	margin-top: 0.35em;
}

.nv-clin__badge-copy em {
	display: block;
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--nv-white) 55%, transparent);
	margin-top: 0.8em;
}

@media (max-width: 980px) {
	.nv-clin__grid {
		grid-template-columns: 1fr;
	}
}

/* ---------- Servings ---------- */
.nv-servings {
	position: relative;
	background: var(--nv-white);
	padding: var(--nv-section-pad) var(--nv-gutter);
	overflow: hidden;
}

.nv-servings__stage {
	position: relative;
	max-width: 960px;
	margin-inline: auto;
	min-height: clamp(420px, 54vw, 610px);
	display: flex;
	align-items: center;
	justify-content: center;
}

.nv-orbit {
	position: absolute;
	inset: 0;
	z-index: 1;
	filter: drop-shadow(0 18px 28px color-mix(in srgb, var(--nv-ink) 8%, transparent));
}

.nv-orbit__bubble {
	position: absolute;
	left: var(--ox);
	top: var(--oy);
	width: clamp(54px, 7vw, 82px);
	height: clamp(54px, 7vw, 82px);
	border-radius: 50%;
	overflow: hidden;
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 12%, transparent);
	box-shadow: 0 18px 34px -26px color-mix(in srgb, var(--nv-ink) 68%, transparent);
	transform: translate(-50%, -50%);
}

.nv-orbit__bubble img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	background: var(--nv-white);
}

.nv-orbit__bubble--product img {
	object-fit: contain;
	padding: 10px;
}

.nv-servings__core {
	text-align: center;
	position: relative;
	z-index: 3;
	margin-top: clamp(70px, 9vw, 120px);
}

.nv-servings h2 {
	font-size: var(--nv-fs-h2);
	max-width: 14ch;
	margin-inline: auto;
}

.nv-servings__core > p {
	color: var(--nv-ink-60);
	margin: 1em auto 0;
	max-width: 38ch;
}

.nv-servings__row {
	display: flex;
	gap: clamp(38px, 8vw, 112px);
	justify-content: center;
	margin-top: 26px;
	flex-wrap: wrap;
}

.nv-metric__big {
	font-family: var(--nv-sans);
	font-size: clamp(2.4rem, 4.7vw, 4.2rem);
	font-weight: 500;
	color: var(--nv-orange);
	line-height: 1;
}

.nv-metric__lbl {
	font-size: 0.92rem;
	color: var(--nv-ink-60);
	margin-top: 0.35em;
}

/* ---------- FAQ ---------- */
.nv-faq {
	background: var(--nv-beige);
	border-top: 1px solid var(--nv-ink-10);
	padding: var(--nv-section-pad) var(--nv-gutter);
}

.nv-faq__grid {
	display: grid;
	grid-template-columns: 0.82fr 1.18fr;
	gap: clamp(34px, 6vw, 80px);
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-faq__left {
	position: sticky;
	top: calc(var(--nv-top-stack) + 28px);
	align-self: start;
}

.nv-faq__left h2 {
	font-size: var(--nv-fs-h2);
	max-width: 10ch;
	margin: 0;
}

.nv-faq__left p {
	color: var(--nv-ink-60);
	max-width: 34ch;
	margin-top: 1em;
}

.nv-faq__list {
	border-top: 1px solid var(--nv-ink-10);
}

.nv-faq__more {
	margin: 1.4em 0 0;
	font-size: 0.95rem;
	color: var(--nv-ink-60);
}

.nv-faq__more a {
	color: var(--nv-orange-deep);
	font-weight: 600;
	text-decoration: underline;
	text-underline-offset: 0.2em;
}

.nv-faq__more a:hover {
	color: var(--nv-ink);
}

.nv-faq__item {
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-faq__q {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	padding: clamp(19px, 2.4vw, 28px) 0;
	text-align: left;
	font-family: var(--nv-serif);
	font-size: clamp(1.12rem, 1.7vw, 1.42rem);
	font-weight: 550;
	color: var(--nv-ink);
	cursor: pointer;
	list-style: none;
}

.nv-faq__q::-webkit-details-marker {
	display: none;
}

.nv-faq__icon {
	width: 22px;
	height: 22px;
	position: relative;
	flex: 0 0 22px;
}

.nv-faq__icon::before,
.nv-faq__icon::after {
	content: "";
	position: absolute;
	background: var(--nv-orange-deep);
	transition: transform 0.3s var(--nv-ease);
}

.nv-faq__icon::before {
	top: 50%;
	left: 0;
	width: 100%;
	height: 2px;
}

.nv-faq__icon::after {
	left: 50%;
	top: 0;
	width: 2px;
	height: 100%;
}

.nv-faq__item[open] .nv-faq__icon::after {
	transform: scaleY(0);
}

.nv-faq__a {
	padding-bottom: 26px;
	color: var(--nv-ink-80);
	max-width: 62ch;
}

/* PDP FAQ variant: tighter serif questions, small answers, FDA footer.
   White so the ink-05 clinicians above and cross-sell below alternate. */
.nv-faq--pdp {
	background: var(--nv-white);
	border-top: 0;
}

.nv-faq--pdp .nv-faq__q {
	font-size: clamp(1.05rem, 1.15vw, 1.2rem);
	padding: clamp(16px, 1.9vw, 22px) 0;
}

.nv-faq--pdp .nv-faq__icon {
	width: 18px;
	height: 18px;
	flex-basis: 18px;
}

.nv-faq--pdp .nv-faq__icon::before,
.nv-faq--pdp .nv-faq__icon::after {
	background: var(--nv-orange);
}

.nv-faq--pdp .nv-faq__a {
	font-size: 0.88rem;
	line-height: 1.6;
	padding-bottom: 22px;
	max-width: 58ch;
	color: var(--nv-ink-60);
}

.nv-faq--pdp .nv-faq__a em {
	font-style: italic;
	color: var(--nv-ink-40);
}

.nv-faq--pdp .nv-faq__a a {
	color: var(--nv-ink);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.nv-faq__disclaimer {
	margin: 22px 0 0;
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	line-height: 1.65;
	max-width: 64ch;
	color: var(--nv-ink-40);
}

/* ---------- CTA ---------- */
.nv-cta {
	background: var(--nv-orange);
	color: var(--nv-white);
	text-align: left;
	padding: clamp(38px, 5vw, 72px) var(--nv-gutter);
	position: relative;
	overflow: hidden;
}

.nv-cta::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(60% 100% at 50% 0, color-mix(in srgb, var(--nv-white) 26%, transparent), transparent 70%);
}

.nv-cta > * {
	position: relative;
	z-index: 1;
}

.nv-cta__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(320px, 0.82fr);
	align-items: center;
	gap: clamp(28px, 5vw, 90px);
	max-width: var(--nv-container);
	margin-inline: auto;
}

.nv-cta h2 {
	font-size: clamp(2.1rem, 4.8vw, 4.2rem);
	color: var(--nv-white);
	white-space: nowrap;
	margin: 0;
	text-shadow: 0 3px 24px rgba(0, 0, 0, 0.12);
}

.nv-cta__sub {
	font-size: var(--nv-fs-lead);
	color: var(--nv-white);
	max-width: 32ch;
	margin: 0.8em 0 0;
}

.nv-cta__actions {
	display: flex;
	gap: 14px;
	justify-content: flex-start;
	flex-wrap: wrap;
	margin-top: 1.25em;
}

.nv-cta__newsletter {
	justify-self: end;
	width: min(100%, 470px);
}

.nv-cta__newsletter-form {
	max-width: 100%;
}

/* Klaviyo injects forms client-side with generated classes + inline styles;
   overrides need !important. Glass treatment matches the dark CTA surface. */
.nv-cta__newsletter .klaviyo-form input[type="text"],
.nv-cta__newsletter .klaviyo-form input[type="email"] {
	height: 50px !important;
	padding: 0 18px !important;
	background: color-mix(in srgb, var(--nv-white) 17%, transparent) !important;
	border: 1px solid color-mix(in srgb, var(--nv-white) 44%, transparent) !important;
	border-radius: var(--wp--custom--radius--pill) !important;
	font-family: var(--nv-sans) !important;
	font-size: 0.95rem !important;
	color: var(--nv-white) !important;
	box-shadow: none !important;
}

.nv-cta__newsletter .klaviyo-form input::placeholder {
	color: color-mix(in srgb, var(--nv-white) 75%, transparent) !important;
}

.nv-cta__newsletter .klaviyo-form input:focus {
	border-color: var(--nv-white) !important;
	outline: 2px solid color-mix(in srgb, var(--nv-white) 40%, transparent) !important;
	outline-offset: 1px;
}

.nv-cta__newsletter .klaviyo-form [data-testid="form-row"]:not(:last-child) {
	margin-bottom: 10px !important;
}

.nv-cta__newsletter .klaviyo-form button.klaviyo-form-button {
	height: 50px !important;
	padding: 0 28px !important;
	border: 0 !important;
	border-radius: var(--wp--custom--radius--pill) !important;
	background: var(--nv-white) !important;
	color: var(--nv-orange-deep) !important;
	font-family: var(--nv-sans) !important;
	font-size: 0.95rem !important;
	font-weight: 700 !important;
	letter-spacing: var(--nv-ls-btn) !important;
	cursor: pointer;
	transition: background 0.18s var(--nv-ease);
}

.nv-cta__newsletter .klaviyo-form button.klaviyo-form-button:hover {
	background: var(--nv-beige) !important;
	color: var(--nv-orange-deep) !important;
}

.nv-cta__note {
	font-family: var(--nv-mono);
	font-size: 0.84rem;
	line-height: 1.55;
	letter-spacing: 0.04em;
	max-width: 34ch;
	color: color-mix(in srgb, var(--nv-white) 86%, transparent);
	margin: 0 0 12px;
}

/* ---------- Footer ---------- */
.nv-footer {
	background: var(--nv-ink);
	color: var(--nv-beige);
	padding: clamp(56px, 8vw, 90px) var(--nv-gutter) 40px;
}

.nv-footer__top {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: clamp(24px, 4vw, 50px);
	padding-bottom: 42px;
	border-bottom: 1px solid color-mix(in srgb, var(--nv-white) 12%, transparent);
	max-width: var(--nv-container);
	margin-inline: auto;
}

/* Core's flow blockGap margin (> * + *) still applies to a "default" layout
   group even once it's re-parented into a CSS grid here, pushing every
   column but the first down out of row alignment. The grid `gap` above
   already sets the real spacing, so that margin is neutralized. */
.nv-footer__top > * {
	margin-top: 0;
}

.woocommerce-account main .woocommerce {
	max-width: 100%;
}

.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a {
	text-decoration: none;
}

.nv-footer__heading {
	font-family: var(--nv-sans);
	font-size: 0.95rem;
	color: var(--nv-white);
	font-weight: 600;
	margin: 0 0 0.9em;
}

.nv-footer__col a {
	display: block;
	color: color-mix(in srgb, var(--nv-beige) 65%, transparent);
	padding: 0.32em 0;
	font-size: 0.9rem;
	text-decoration: none;
}

.nv-footer__col a:hover {
	color: var(--nv-white);
}

.nv-footer__store {
	margin-top: 1.6em;
}

.nv-footer__badges {
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
}

.nv-footer__badges img {
	height: 34px;
	width: auto;
}

.nv-footer__bottom {
	padding-top: 28px;
	display: flex;
	flex-direction: column;
	gap: 20px;
	max-width: var(--nv-container);
	margin-inline: auto;
}

.nv-footer__disclaimer {
	font-size: 0.86rem;
	line-height: 1.6;
	color: color-mix(in srgb, var(--nv-beige) 54%, transparent);
	max-width: 85ch;
	margin-inline: auto;
	text-align: center;
	padding-bottom: 20px;
	border-bottom: 1px solid color-mix(in srgb, var(--nv-white) 12%, transparent);
}

.nv-footer__legal-row {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 1.2em;
	flex-wrap: wrap;
}

.nv-footer__social {
	display: flex;
	gap: 0.9em;
	flex-wrap: wrap;
}

.nv-footer__social a {
	display: flex;
	color: color-mix(in srgb, var(--nv-beige) 70%, transparent);
}

.nv-footer__social a:hover,
.nv-footer__legal a:hover {
	color: var(--nv-white);
}

.nv-footer__legal {
	display: flex;
	gap: 1em;
	flex-wrap: wrap;
	color: color-mix(in srgb, var(--nv-beige) 65%, transparent);
	font-size: 0.86rem;
}

.nv-footer__legal a {
	color: inherit;
	text-decoration: none;
}

.nv-footer__colophon {
	font-size: 0.78rem;
	color: color-mix(in srgb, var(--nv-beige) 40%, transparent);
}

.nv-footer__colophon a {
	color: inherit;
}

/* ---------- Reveal ---------- */
.nv-reveal {
	opacity: 0;
	transform: translateY(28px);
	transition: opacity 0.8s var(--nv-ease), transform 0.8s var(--nv-ease);
}

.nv-reveal.in,
html.no-js .nv-reveal {
	opacity: 1;
	transform: none;
}

/* ---------- Inner pages ---------- */
.nv-main--inner {
	padding-top: calc(var(--nv-top-stack) + clamp(40px, 6vw, 80px));
	padding-bottom: var(--nv-section-pad);
}

.nv-post-item {
	border-bottom: 1px solid var(--nv-ink-10);
	padding-block: clamp(20px, 3vw, 36px);
}

/* ---------- Legacy-page rebuilds (About / Scientists / Approach) ----------
   Native replacements for the retired ACF blocks (novos-background,
   novos-slider, novos-slider-extended). Blob gradients reproduce the
   authored decorative values; orange maps to the orange-soft token. */
.nv-blobwrap {
	position: relative;
}

.nv-blob {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	z-index: -1;
	pointer-events: none;
	border-radius: 50%;
	filter: blur(150px);
}

.nv-blob--violet {
	width: min(1090px, 92vw);
	height: min(1078px, 92vw);
	opacity: 0.3;
	background: linear-gradient(86deg, #eff4ff -7.69%, #b9a2b8 40.77%, #7ea8c3 103.03%);
	transform: translate(-50%, -60%);
}

.nv-blob--orange {
	width: min(968px, 92vw);
	height: min(978px, 92vw);
	opacity: 0.15;
	background: var(--nv-orange-soft);
}

.nv-blob--violet-soft {
	width: min(1132px, 92vw);
	height: min(1010px, 92vw);
	opacity: 0.2;
	background: linear-gradient(86deg, #eff4ff -7.69%, #b9a2b8 40.77%, #7ea8c3 103.03%);
}

/* Evidence / study result cards (About, Studies rebuilds). */
.nv-evd-card {
	display: flex;
	flex-direction: column;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	overflow: hidden;
	box-shadow: var(--nv-shadow-sm);
}

.nv-evd-card img {
	display: block;
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
}

.nv-evd-card__body {
	display: flex;
	flex-direction: column;
	gap: 10px;
	padding: clamp(18px, 2.4vw, 26px);
	flex: 1;
}

.nv-evd-card__badge {
	align-self: flex-start;
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--nv-orange-deep);
	background: color-mix(in srgb, var(--nv-orange-soft) 22%, transparent);
	border-radius: var(--wp--custom--radius--pill);
	padding: 5px 12px;
}

.nv-evd-card__body p {
	margin: 0;
	color: var(--nv-ink-80);
	font-size: 0.98rem;
	flex: 1;
}

.nv-evd-card__body a {
	color: var(--nv-orange-deep);
	font-weight: 600;
	text-decoration: none;
}

.nv-evd-card__body a:hover {
	text-decoration: underline;
}

/* Mobile table-of-contents accordion (Ingredients / Causes rebuilds):
   native <details> replacing the legacy ACF accordion. Inherits color so
   it works on the dark page backgrounds these TOCs live on. */
.nv-toc {
	border: 1px solid color-mix(in srgb, currentColor 25%, transparent);
	border-radius: var(--nv-radius);
	margin-bottom: 24px;
}

.nv-toc summary {
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 14px 18px;
	font-weight: 600;
}

.nv-toc summary::-webkit-details-marker {
	display: none;
}

.nv-toc summary::after {
	content: "+";
	font-size: 1.3em;
	line-height: 1;
	transition: transform 0.25s var(--nv-ease);
}

.nv-toc[open] summary::after {
	transform: rotate(45deg);
}

.nv-toc__body {
	padding: 0 18px 16px;
}

.nv-toc__body p {
	margin: 0 0 10px;
}

.nv-toc__body a {
	color: inherit;
}

/* Legacy TOC content sometimes uses bare anchors (no <p> wrappers). */
.nv-toc__body > a {
	display: block;
	margin-bottom: 10px;
}

/* Rich content card: generic slide wrapper for rebuilt legacy sliders
   whose slides carry arbitrary authored HTML (testimonials, reviews). */
.nv-rich-card {
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
	padding: clamp(20px, 2.6vw, 32px);
	height: 100%;
	/* height:100% must include the padding or the card overflows its slide
	   and the rail's overflow-y:hidden crops it (staging QA 2026-07-31). */
	box-sizing: border-box;
}

.nv-rich-card img {
	max-width: 100%;
	height: auto;
}

.nv-rich-card img.aligncenter {
	display: block;
	margin-inline: auto;
}

.nv-rich-card blockquote {
	margin: 0;
	font-size: 0.98rem;
	color: var(--nv-ink-80);
}

/* Bare media slide (single image / linked image): no card chrome. */
.nv-media-slide img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius);
}

/* Standalone product card outside a carousel (rebuilt novos-product
   blocks living in columns): fill the column instead of fixed rail width. */
.nv-product-standalone > .nv-product {
	width: 100%;
	max-width: 460px;
	margin-inline: auto;
}

/* Image mosaic band (rebuilt product-banner-mosaic): intro text + CTA,
   then a staggered image grid. */
.nv-mosaic {
	padding: clamp(28px, 4vw, 56px) 0;
}

.nv-mosaic__intro {
	max-width: 640px;
	margin: 0 auto clamp(20px, 3vw, 36px);
	text-align: center;
}

.nv-mosaic__cta {
	display: inline-block;
	margin-top: 12px;
	font-weight: 600;
	color: var(--nv-orange-deep);
	text-decoration: none;
}

.nv-mosaic__cta:hover {
	text-decoration: underline;
}

.nv-mosaic__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: clamp(10px, 1.6vw, 18px);
}

.nv-mosaic__grid > div:nth-child(3n + 2) {
	margin-top: clamp(16px, 2.4vw, 32px);
}

.nv-mosaic__grid img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: var(--nv-radius);
	aspect-ratio: 4 / 3;
}

@media (max-width: 620px) {
	.nv-mosaic__grid {
		grid-template-columns: repeat(2, 1fr);
	}

	.nv-mosaic__grid > div:nth-child(3n + 2) {
		margin-top: 0;
	}

	.nv-mosaic__grid > div:nth-child(2n) {
		margin-top: clamp(12px, 3vw, 24px);
	}
}

/* Split banner (rebuilt product-banner-split): side image(s) + content. */
.nv-split-banner {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(16px, 2.4vw, 28px);
	align-items: center;
	padding: clamp(20px, 3vw, 40px) 0;
}

.nv-split-banner.has-left {
	grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
}

.nv-split-banner.has-right {
	grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
}

.nv-split-banner.has-left.has-right {
	grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.4fr) minmax(0, 0.8fr);
}

.nv-split-banner img,
.nv-split-banner video {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius);
}

@media (max-width: 620px) {
	.nv-split-banner,
	.nv-split-banner.has-left,
	.nv-split-banner.has-right,
	.nv-split-banner.has-left.has-right {
		grid-template-columns: 1fr;
	}
}

/* Linked promo image with optional label chip (rebuilt
   image-with-hover-and-label, quiz results page). */
.nv-hover-card {
	position: relative;
	display: block;
	border-radius: var(--nv-radius);
	overflow: hidden;
	transition: transform 0.3s var(--nv-ease), box-shadow 0.3s var(--nv-ease);
}

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

.nv-hover-card img {
	display: block;
	width: 100%;
	height: auto;
}

.nv-hover-card__label {
	position: absolute;
	top: 14px;
	left: 14px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: var(--nv-white);
	color: var(--nv-ink);
	font-family: var(--nv-mono);
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	border-radius: var(--wp--custom--radius--pill);
	padding: 6px 12px;
	box-shadow: var(--nv-shadow-sm);
}

.nv-hover-card__label img {
	width: 14px;
	height: 14px;
}

/* Static hero banner (rebuilt novos-video-banner without video sources):
   background image + centered overlay content. */
.nv-image-banner {
	position: relative;
	border-radius: var(--nv-radius-lg);
	overflow: hidden;
	min-height: min(520px, 70vw);
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	color: var(--nv-white);
}

.nv-image-banner > img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-image-banner__content {
	position: relative;
	z-index: 1;
	max-width: 680px;
	padding: clamp(24px, 5vw, 60px);
	background: color-mix(in srgb, var(--nv-ink) 35%, transparent);
	border-radius: var(--nv-radius);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
}

.nv-image-banner__content a.banner-link {
	display: inline-block;
	margin-top: 16px;
	background: var(--nv-orange);
	color: var(--nv-white);
	font-weight: 600;
	text-decoration: none;
	border-radius: var(--wp--custom--radius--pill);
	padding: 14px 28px;
}

/* Icon heading strip (rebuilt novos-icon-heading-bar). */
.nv-icon-bar {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: clamp(16px, 3vw, 48px);
	padding: clamp(14px, 2vw, 24px) 0;
}

.nv-icon-bar > div {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	font-weight: 300;
	font-size: clamp(0.95rem, 1.4vw, 1.15rem);
}

.nv-icon-bar img {
	width: 22px;
	height: auto;
}

/* Left-align instead of the default centered row (icon bar sitting inside
   a narrower copy column, e.g. NOVOS Life hero, instead of a full-width
   band) — fixes it wrapping/centering awkwardly at in-between widths. */
.nv-icon-bar--start {
	justify-content: flex-start;
}

/* App Store / Google Play badge row. */
.nv-app-stores {
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
}

.nv-app-stores img {
	display: block;
	height: 48px;
	width: auto;
}

/* Nested tinted card (NOVOS Life quiz CTA). */
.nv-quiz-card {
	background: var(--wp--preset--color--beige-dark);
	border-radius: var(--nv-radius);
	padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--50);
	text-align: center;
}

.nv-quiz-card img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius-sm);
	margin-top: 1em;
}

.nv-panel .nv-quiz-card p {
	color: var(--wp--preset--color--ink-90);
	margin-top: 0;
}

/* Generic "actually rounded" utility — replaces the undefined
   is-style-rounded-corners wherever a section just needs real corners on
   its own background color (no gradient/panel treatment). */
.nv-rounded {
	border-radius: var(--nv-radius-panel);
}

/* Same, plus a card shadow — replaces the undefined
   is-style-rounded-corners-shadow (Reviews ratings panel, NOVOS Life). */
.nv-rounded-shadow {
	border-radius: var(--nv-radius-panel);
	box-shadow: var(--nv-shadow-sm);
}

/* Constrains hero copy sitting inside a wp:cover's inner container, where
   there's no column to fake a width with (Reviews hero/CTA covers). */
.nv-cover-copy {
	max-width: 34rem;
}

/* Icon + one-line stat row (Reviews "results speak for themselves"). */
.nv-stat-row {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: clamp(20px, 3vw, 40px);
	margin-top: clamp(28px, 4vw, 48px);
}

.nv-stat {
	display: flex;
	align-items: center;
	gap: 14px;
	max-width: 260px;
}

.nv-stat img {
	width: 70px;
	height: auto;
	flex-shrink: 0;
}

.nv-stat p {
	margin: 0;
	color: var(--wp--preset--color--ink-90);
}

/* Avatar + quote pairs, 2-up (Reviews "Backed by Experts"). Replaces the
   undefined is-style-circular (avatars weren't actually round) and
   stack-md/stack-xs (columns weren't actually stacking on mobile). */
.nv-quote-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(24px, 3vw, 40px);
	margin-top: clamp(28px, 4vw, 48px);
}

.nv-quote {
	display: flex;
	align-items: center;
	gap: 18px;
}

.nv-quote img {
	width: 84px;
	height: 84px;
	border-radius: 50%;
	object-fit: cover;
	flex-shrink: 0;
}

.nv-quote p {
	margin: 0 0 0.4em;
}

.nv-quote p:last-child {
	margin-bottom: 0;
}

@media (max-width: 700px) {
	.nv-quote-grid {
		grid-template-columns: 1fr;
	}

	.nv-quote {
		flex-direction: column;
		text-align: center;
	}
}

/* ---------- Customer Spotlight page ----------
   Every section heading/lead here was a raw wp:columns row using an empty
   ~33%-width spacer column as a width hack, plus the undefined
   "is-style-no-margin". Replaces both with a plain element + max-width. */
.nv-spotlight-head {
	max-width: 46ch;
}

/* Generic gradient-clip text accent (short headline only — gradient-clip
   on multi-line body copy reads muddy). Descender padding fix: clipped text
   only paints inside the element box, so tight line-heights swallow g/y.
   Safe on both light and dark backgrounds. Replaces undefined
   is-style-story-gradient/pink-gradient. */
.nv-text-gradient {
	background: linear-gradient(90deg, var(--nv-orange) 0%, var(--nv-orange-soft) 100%);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: var(--nv-orange);
	padding-block: 0.1em 0.18em;
	margin-block: -0.1em -0.18em;
}

/* Extra decorative blob variants (per-page authored values). */
.nv-blob--orange-offset {
	width: min(1235px, 92vw);
	height: min(1248px, 92vw);
	opacity: 0.2;
	background: var(--nv-orange-soft);
	filter: blur(200px);
	transform: translate(-20%, -20%);
}

/* Leadership + advisor bio cards (Scientists rebuild). */
.nv-bio-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 6px;
	box-sizing: border-box;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
	padding: clamp(24px, 3vw, 40px);
	height: 100%;
}

.nv-bio-card img {
	width: clamp(160px, 18vw, 220px);
	height: auto;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 50%;
	margin-bottom: 12px;
}

.nv-bio-card h3 {
	margin: 0;
	font-size: clamp(1.3rem, 2vw, 1.6rem);
}

.nv-bio-card em {
	font-style: normal;
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--nv-orange-deep);
}

.nv-bio-card p {
	margin: 10px 0 0;
	color: var(--nv-ink-80);
	font-size: 0.95rem;
	text-align: left;
}

/* Advisor press quote (between the affiliation and the bio). */
.nv-bio-card .nv-bio-card__quote {
	font-family: var(--nv-serif);
	font-style: italic;
	font-size: 1.02rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-bio-card__quote cite {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

/* Spotlight card variant used on rebuilt pages: whole card is the link,
   and the slide wrapper (not the card) controls the width. */
a.nv-spotlight {
	text-decoration: none;
	color: var(--nv-white);
}

.nv-carousel__slide > .nv-spotlight {
	width: 100%;
	min-height: 420px;
}

/* ---------- Dark inner pages (Page (Dark) template) ----------
   Parity with the classic theme's page-dark.php: black canvas,
   light text (Ingredients, Approach). */
body:has(.nv-main--dark) {
	background-color: var(--nv-ink);
}

.nv-main--dark,
.nv-main--dark :is(h1, h2, h3, h4, h5, h6, p, li, figcaption) {
	color: var(--nv-white);
}

.nv-main--dark a:not(.nv-btn) {
	color: var(--nv-orange-soft);
}

/* Muted body copy on a dark page (Approach) — theme.json already defines
   textOnDarkMuted; it just never had a class wired to it (content used
   the undefined "seventy-white"). Scoped so it only ever applies on dark
   canvases, and specificity naturally beats the white-text rule above. */
.nv-main--dark .nv-text-muted {
	color: var(--nv-on-dark-muted);
}

/* ---------- Newsletter (Klaviyo signup, appended to inner pages) ---------- */
/* Speaks the homepage-CTA language: primary orange panel with the same
   top radial glow, white serif title, mono eyebrow, glass pill fields. */
.nv-newsletter-band {
	position: relative;
	overflow: hidden;
	background-color: var(--nv-orange);
	border-radius: var(--nv-radius-lg);
	max-width: min(var(--nv-container), calc(100% - 2 * var(--nv-gutter)));
	margin-inline: auto;
	margin-block: var(--nv-section-pad);
	padding: clamp(44px, 6vw, 84px) clamp(22px, 4vw, 64px);
}

.nv-newsletter-band::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(60% 100% at 50% 0, color-mix(in srgb, var(--nv-white) 26%, transparent), transparent 70%);
	pointer-events: none;
}

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

.nv-newsletter-band__eyebrow {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--nv-white) 85%, transparent);
	margin-bottom: 14px;
}

.nv-newsletter-band__title {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	text-shadow: 0 3px 24px rgba(0, 0, 0, 0.12);
	margin-bottom: 0.5em;
}

.nv-newsletter-band__lead {
	color: color-mix(in srgb, var(--nv-white) 88%, transparent);
	max-width: 62ch;
	margin-inline: auto;
}

.nv-newsletter-band__form {
	max-width: 640px;
	margin: clamp(20px, 3vw, 32px) auto 0;
}

/* Klaviyo injects its forms client-side with generated (go-prefixed) classes
   and inline styles on the wrappers, so overrides need !important. Shared by
   the newsletter band and the legacy in-post lead-capture blocks. */
.nv-newsletter-band__form .klaviyo-form input[type="text"],
.nv-newsletter-band__form .klaviyo-form input[type="email"],
.nv-prose .post-lead-capture .klaviyo-form input[type="text"],
.nv-prose .post-lead-capture .klaviyo-form input[type="email"] {
	height: 50px !important;
	padding: 0 18px !important;
	border: 1px solid var(--nv-ink-20) !important;
	border-radius: var(--nv-radius-btn) !important;
	background: var(--nv-white) !important;
	font-family: var(--nv-sans) !important;
	font-size: 0.95rem !important;
	color: var(--nv-ink) !important;
	box-shadow: none !important;
}

.nv-newsletter-band__form .klaviyo-form input:focus,
.nv-prose .post-lead-capture .klaviyo-form input:focus {
	border-color: var(--nv-orange-deep) !important;
	outline: 2px solid var(--nv-orange-soft) !important;
	outline-offset: 1px;
}

.nv-newsletter-band__form .klaviyo-form [data-testid="form-row"]:not(:last-child),
.nv-prose .post-lead-capture .klaviyo-form [data-testid="form-row"]:not(:last-child) {
	margin-bottom: 10px !important;
}

.nv-newsletter-band__form .klaviyo-form button.klaviyo-form-button,
.nv-prose .post-lead-capture .klaviyo-form button.klaviyo-form-button {
	height: 50px !important;
	padding: 0 32px !important;
	border: 0 !important;
	border-radius: var(--nv-radius-btn) !important;
	background: var(--nv-ink) !important;
	color: var(--nv-white) !important;
	font-family: var(--nv-sans) !important;
	font-size: 0.95rem !important;
	font-weight: 600 !important;
	letter-spacing: var(--nv-ls-btn) !important;
	cursor: pointer;
	transition: background 0.18s var(--nv-ease);
}

.nv-newsletter-band__form .klaviyo-form button.klaviyo-form-button:hover,
.nv-prose .post-lead-capture .klaviyo-form button.klaviyo-form-button:hover {
	background: var(--nv-orange-deep) !important;
}

/* Band-only overrides: the band sits on the primary orange, so its fields
   go glass (translucent white pills) like the homepage CTA newsletter,
   while the in-post lead-capture blocks keep the white-input treatment
   from the shared rules above. Same selectors, later in the sheet wins. */
.nv-newsletter-band__form .klaviyo-form input[type="text"],
.nv-newsletter-band__form .klaviyo-form input[type="email"] {
	background: color-mix(in srgb, var(--nv-white) 17%, transparent) !important;
	border: 1px solid color-mix(in srgb, var(--nv-white) 44%, transparent) !important;
	border-radius: var(--wp--custom--radius--pill) !important;
	color: var(--nv-white) !important;
}

.nv-newsletter-band__form .klaviyo-form input::placeholder {
	color: color-mix(in srgb, var(--nv-white) 75%, transparent) !important;
}

.nv-newsletter-band__form .klaviyo-form input:focus {
	border-color: var(--nv-white) !important;
	outline: 2px solid color-mix(in srgb, var(--nv-white) 40%, transparent) !important;
	outline-offset: 1px;
}

.nv-newsletter-band__form .klaviyo-form button.klaviyo-form-button {
	background: var(--nv-white) !important;
	color: var(--nv-orange-deep) !important;
	border-radius: var(--wp--custom--radius--pill) !important;
	font-weight: 700 !important;
	padding: 0 44px !important;
}

.nv-newsletter-band__form .klaviyo-form button.klaviyo-form-button:hover {
	background: var(--nv-beige) !important;
	color: var(--nv-orange-deep) !important;
}

/* Legacy in-post lead-capture reusable blocks (gradient card + Klaviyo form) */
.nv-prose .post-lead-capture {
	border-radius: var(--nv-radius);
	overflow: hidden;
	padding: clamp(20px, 3vw, 32px);
	margin: 2.5rem 0;
}

.nv-prose .post-lead-capture img {
	border-radius: var(--nv-radius-sm);
}

/* ---------- FAQ hub (reamaze-faq archive) ---------- */
.nv-faq-hub__title {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h2);
}

.nv-faq-hub__lead {
	color: var(--nv-ink-60);
}

.nv-faq-hub__search {
	display: flex;
	gap: 10px;
	max-width: 640px;
	margin: clamp(20px, 3vw, 32px) auto clamp(32px, 5vw, 56px);
}

.nv-faq-hub__search input[type="search"] {
	flex: 1;
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--nv-radius-btn);
	background: var(--nv-white);
	padding: 12px 18px;
	font: inherit;
	color: var(--nv-ink);
}

.nv-faq-hub__search button {
	border: 0;
	border-radius: var(--nv-radius-btn);
	background: var(--nv-ink);
	color: var(--nv-white);
	padding: 12px 22px;
	font: inherit;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	cursor: pointer;
}

.nv-faq-hub__topics {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
	gap: clamp(20px, 3vw, 36px);
}

.nv-faq-hub__topic {
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: clamp(20px, 3vw, 32px);
}

.nv-faq-hub__topic-title {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h3);
	margin: 0 0 4px;
}

.nv-faq-hub__topic-title a {
	color: var(--nv-ink);
	text-decoration: none;
}

.nv-faq-hub__topic-title a:hover {
	color: var(--nv-orange);
}

.nv-faq-hub__topic-count {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	color: var(--nv-ink-40);
	margin: 0 0 14px;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.nv-faq-hub__articles {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nv-faq-hub__articles li {
	border-top: 1px solid var(--nv-ink-05);
	padding-block: 9px;
}

.nv-faq-hub__articles a {
	color: var(--nv-ink-80);
	text-decoration: none;
}

.nv-faq-hub__articles a:hover {
	color: var(--nv-orange);
	text-decoration: underline;
}

.nv-faq-hub__more {
	margin: 12px 0 0;
}

.nv-faq-hub__more a {
	color: var(--nv-orange);
	font-weight: 600;
	text-decoration: none;
}

.nv-faq-hub__more a:hover {
	text-decoration: underline;
}

/* FAQ single (single-reamaze-faq.html): article chrome without blog meta. */
.nv-faq-article__footer {
	margin-top: clamp(32px, 4vw, 48px);
}

/* ---------- Responsive ---------- */
@media (max-width: 980px) {
	.nv-nav__links {
		display: none;
	}

	.nv-nav__toggle {
		display: flex;
	}

	.nv-btn--nav-cta {
		display: none;
	}

	/* Burger left, logo centered, cart right — equal side chrome. */
	.nv-nav__shell {
		display: flex;
		justify-content: space-between;
		align-items: center;
		gap: 12px;
		padding: 7px 8px;
		position: relative;
	}

	.nv-nav__logo {
		position: absolute;
		left: 50%;
		top: 50%;
		transform: translate(-50%, -50%);
	}

	.nv-nav__actions {
		margin-left: auto;
	}

	.nv-hero__inner,
	.nv-proof__cols,
	.nv-compare__grid,
	.nv-faq__grid {
		grid-template-columns: 1fr;
	}

	.nv-hero h1 {
		max-width: 12.2ch;
	}

	.nv-hero__proof-card {
		justify-self: start;
		align-self: start;
		transform: none;
		margin-top: 10px;
	}

	.nv-proof-card__top {
		grid-template-columns: 94px 1fr;
	}

	.nv-proof__left,
	.nv-compare__left,
	.nv-faq__left {
		position: static;
	}

	.nv-proof__title {
		max-width: 12ch;
	}

	.nv-proof__orgline {
		display: none;
	}

	/* Orgline (the title/intro spacer) is hidden here. */
	.nv-proof__intro {
		margin-top: 0.9em;
	}

	.nv-proof__timeline {
		padding-top: 0;
	}

	.nv-proof__timeline::before {
		top: 18px;
	}

	.nv-sci__grid {
		grid-template-columns: 1fr;
	}

	.nv-people__head {
		grid-template-columns: 1fr;
	}

	.nv-people__head p {
		justify-self: start;
	}

	.nv-press__row {
		grid-template-columns: 1fr;
	}

	.nv-protocol__head {
		display: block;
	}

	.nv-protocol__head p {
		margin-top: 0.7em;
	}

	.nv-footer__top {
		grid-template-columns: repeat(2, 1fr);
	}

	.nv-stats__panel {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 8px 16px;
		width: 100%;
	}

	.nv-stat {
		min-height: 0;
		padding: 16px 0;
		justify-content: flex-start;
	}

	.nv-stat__inner {
		width: 100%;
		max-width: none;
		margin: 0;
		gap: 12px;
	}

	.nv-stat__num {
		font-size: clamp(2.1rem, 7vw, 3rem);
	}

	.nv-stat__label {
		font-size: 0.85rem;
	}
}

@media (max-width: 820px) {
	.nv-cta {
		text-align: center;
	}

	.nv-cta__grid {
		grid-template-columns: 1fr;
	}

	.nv-cta h2,
	.nv-cta__sub {
		margin-inline: auto;
	}

	.nv-cta__sub {
		margin-top: 0.8em;
	}

	.nv-cta__actions {
		justify-content: center;
		flex-wrap: nowrap;
	}

	/* Both CTAs share one row at equal widths; tighter padding + a slightly
	   smaller size so "Discover the science" fits without wrapping. */
	.nv-cta__actions .nv-btn {
		flex: 1 1 0;
		min-width: 0;
		padding-inline: 0.6em;
		font-size: 0.95rem;
		white-space: nowrap;
	}

	.nv-cta__newsletter {
		justify-self: center;
	}

	.nv-cta__note {
		margin-inline: auto;
	}
}

@media (max-width: 760px) {
	.nv-awards__cols {
		grid-template-columns: 1fr;
	}

	.nv-awards__col + .nv-awards__col {
		border-left: 0;
	}
}

@media (max-width: 620px) {
	:root {
		--nv-bulletin-h: 32px;
	}

	.nv-nav__shell {
		padding-left: 18px;
	}

	.nv-nav__logo img {
		height: 18px;
	}

	.nv-hero__inner {
		padding-block: 26px 30px;
		gap: 18px;
	}

	/* Center the hero copy on mobile (single-column layout). */
	.nv-hero__copy {
		text-align: center;
	}

	.nv-hero h1,
	.nv-hero__sub,
	.nv-hero__body {
		margin-inline: auto;
	}

	.nv-hero__actions {
		justify-content: center;
	}

	.nv-chip {
		font-size: 0.75rem;
		padding: 5px 9px;
	}

	.nv-proof-card__top {
		grid-template-columns: 1fr;
	}

	.nv-hero__proof-card {
		padding: 14px 16px 12px;
		margin-top: 2px;
	}

	.nv-hero__actions {
		margin-top: 1.2em;
	}

	.nv-proof-card__badge {
		min-height: 80px;
	}

	.nv-proof-card__clinicians {
		flex-wrap: wrap;
	}

	.nv-proof__timeline::before {
		left: 16px;
	}

	.nv-evidence {
		padding-left: 52px;
	}

	.nv-evidence__num {
		width: 34px;
		height: 34px;
	}

	.nv-evidence h3 {
		font-size: clamp(1.38rem, 5.6vw, 1.68rem);
		max-width: 14ch;
		line-height: 1.06;
	}

	.nv-people__actions {
		align-items: flex-start;
		flex-direction: column;
	}

	.nv-sci-card {
		grid-template-columns: 1fr;
	}

	.nv-portrait {
		width: 60px;
		height: 60px;
	}

	.nv-servings__stage {
		min-height: 500px;
	}

	.nv-orbit {
		inset: -8px 0 auto;
		height: 210px;
	}

	.nv-orbit__bubble {
		width: 66px;
		height: 66px;
	}

	.nv-orbit__bubble:nth-child(n + 6) {
		display: none;
	}

	/* Re-spread the five visible bubbles across the top strip.
	   Override left/top directly: inline style only sets --ox/--oy. */
	.nv-orbit__bubble:nth-child(1) {
		left: 8%;
		top: 75%;
	}

	.nv-orbit__bubble:nth-child(2) {
		left: 28%;
		top: 40%;
	}

	.nv-orbit__bubble:nth-child(3) {
		left: 50%;
		top: 25%;
	}

	.nv-orbit__bubble:nth-child(4) {
		left: 72%;
		top: 40%;
	}

	.nv-orbit__bubble:nth-child(5) {
		left: 92%;
		top: 75%;
	}

	.nv-servings__core {
		margin-top: 170px;
	}

	.nv-servings__row {
		gap: 20px;
	}

	.nv-footer__top {
		grid-template-columns: 1fr;
	}

	.nv-footer__legal-row {
		flex-direction: column;
		align-items: flex-start;
	}

	.nv-ticker__track {
		animation-duration: 24s;
	}
}

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

	.nv-bulletin__track,
	.nv-ticker__track,
	.nv-shop-card__chips-track,
	.nv-product__chips-track {
		animation: none;
	}

	/* Static marquee would clip the advisor chips — fall back to a swipeable rail. */
	.nv-ticker--trust {
		overflow-x: auto;
		-webkit-mask-image: none;
		mask-image: none;
	}

	.nv-intro__lead .w {
		color: var(--nv-white);
	}

	.nv-intro.is-style-nv-light .nv-intro__lead .w {
		color: var(--nv-ink);
	}

	.nv-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}

	.nv-btn,
	.nv-product,
	.nv-mega,
	.nv-nav,
	.nv-mnav__panel {
		transition: none;
	}
}

/* ============================================================
   BLOG — Single Post, Archive, Index
   ============================================================ */

/* ---------- Shared blog layout shell ---------- */
.nv-article,
.nv-archive-grid-wrap,
.nv-blog-grid-wrap,
.nv-blog-index,
.nv-related {
	background: var(--nv-beige);
}

/* ---------- Article Hero ---------- */
.nv-article-hero {
	padding: clamp(60px, 8vw, 62px) var(--nv-gutter) clamp(40px, 5vw, 72px);
	text-align: center;
	background: var(--nv-beige);
}

.nv-article-hero__cats {
	display: block;
	margin-bottom: 1rem;
}

.nv-article-hero__cats a {
	color: var(--nv-orange-deep);
	text-decoration: none;
}

.nv-article-hero__cats a:hover {
	text-decoration: underline;
}

.nv-article-hero__byline {
	align-items: center;
	margin-bottom: 0.75rem;
	font-family: var(--nv-sans);
	font-size: 0.85rem;
	color: var(--nv-ink-60);
}

.nv-article-hero__byline p {
	margin: 0;
}

.nv-article-hero__byline .wp-block-post-author__name {
	font-weight: 600;
	color: var(--nv-ink-80);
}

.nv-article-hero__crumbs {
	display: block;
	margin-bottom: 1rem;
	font-family: var(--nv-sans);
	font-size: 0.85rem;
	color: var(--nv-ink-60);
}

.nv-article-hero__crumbs a {
	color: var(--nv-orange-deep);
	text-decoration: none;
}

.nv-article-hero__crumbs a:hover {
	text-decoration: underline;
}

.nv-article-hero__meta-label {
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	color: var(--nv-ink-60);
}

.nv-article-hero__title {
	font-family: var(--nv-serif);
	font-size: clamp(2rem, 5vw, 3.8rem);
	font-weight: 600;
	line-height: 1.06;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	margin: 0 0 1.25rem;
}

.nv-article-hero__meta {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0.75rem;
	flex-wrap: wrap;
}

.nv-article-hero__date,
.nv-article-hero__author,
.nv-article-hero__meta .wp-block-post-date,
.nv-article-hero__meta .wp-block-post-author {
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	color: var(--nv-ink-60);
}

.nv-article-hero__meta .wp-block-post-author__name {
	font-weight: 600;
	color: var(--nv-ink-80);
}

.nv-article-hero__sep {
	color: var(--nv-ink-40);
	font-size: 0.9rem;
	user-select: none;
}

/* core/post-date renders nothing in "modified" mode until a post is actually
   edited, which would leave a bare "Last Updated" label and its separator. */
.nv-article-hero__meta-item:not(:has(time)),
.nv-article-hero__meta-item:not(:has(time)) + .nv-article-hero__sep {
	display: none;
}

/* ---------- Article Featured Image ---------- */
.nv-article-image {
	display: block;
	overflow: hidden;
	width: calc(100% - 2 * var(--nv-gutter));
	max-width: 1100px;
	margin-inline: auto;
	border-radius: var(--nv-radius);
}

.nv-article-image img {
	width: 100%;
	height: auto;
	display: block;
}

/* ---------- Article Body / Prose ---------- */
.nv-article-body {
	padding: clamp(40px, 6vw, 80px) var(--nv-gutter);
	background: var(--nv-paper);
}

.nv-prose {
	font-family: var(--nv-sans);
	font-size: clamp(1rem, 1.15vw, 1.13rem);
	line-height: 1.7;
	color: var(--nv-ink-80);
}

.nv-prose p {
	margin-bottom: 1.5em;
}

.nv-prose h2 {
	font-family: var(--nv-serif);
	font-size: clamp(1.5rem, 3vw, 2.1rem);
	font-weight: 600;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
	line-height: 1.18;
	margin: 2.25em 0 0.75em;
}

.nv-prose h3 {
	font-family: var(--nv-serif);
	font-size: clamp(1.2rem, 2vw, 1.55rem);
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
	line-height: 1.22;
	margin: 2em 0 0.65em;
}

.nv-prose h4 {
	font-family: var(--nv-sans);
	font-size: 1rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--nv-ink);
	margin: 1.75em 0 0.5em;
}

.nv-prose a {
	color: var(--nv-orange-deep);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 3px;
}

.nv-prose a:hover {
	color: var(--nv-orange);
}

.nv-prose blockquote {
	border-left: 3px solid var(--nv-orange);
	margin: 2em 0;
	padding: 0.5em 0 0.5em 1.5em;
	font-style: italic;
	color: var(--nv-ink-80);
}

.nv-prose blockquote p {
	font-size: 1.1em;
	margin-bottom: 0;
}

.nv-prose ul,
.nv-prose ol {
	padding-left: 1.5em;
	margin-bottom: 1.5em;
}

.nv-prose li {
	margin-bottom: 0.5em;
}

.nv-prose img {
	border-radius: var(--nv-radius);
	margin: 2em auto;
}

.nv-prose figure {
	margin: 2em 0;
}

.nv-prose figcaption {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	color: var(--nv-ink-60);
	text-align: center;
	margin-top: 0.6em;
}

.nv-prose hr {
	border: none;
	border-top: 1px solid var(--nv-ink-10);
	margin: 3em 0;
}

.nv-prose sup {
	font-size: 0.72em;
	vertical-align: super;
	line-height: 0;
	color: var(--nv-ink-60);
}

/* ---------- Author Card ---------- */
.nv-author-card {
	padding: clamp(32px, 4vw, 56px) var(--nv-gutter);
	background: var(--nv-paper);
	border-top: 1px solid var(--nv-ink-10);
}

.nv-author-card__block.wp-block-post-author {
	display: flex;
	gap: 1.25rem;
	align-items: flex-start;
	padding: 1.5rem;
	background: var(--nv-beige);
	border-radius: var(--nv-radius);
}

.nv-author-card__block .wp-block-post-author__avatar {
	flex-shrink: 0;
}

.nv-author-card__block .wp-block-post-author__avatar img {
	border-radius: 50%;
}

.nv-author-card__block .wp-block-post-author__content {
	flex: 1;
}

.nv-author-card__block .wp-block-post-author__name {
	font-family: var(--nv-sans);
	font-size: 1rem;
	font-weight: 700;
	color: var(--nv-ink);
	margin: 0 0 0.35rem;
}

.nv-author-card__block .wp-block-post-author__bio {
	font-size: 0.92rem;
	color: var(--nv-ink-60);
	line-height: 1.55;
}

/* ---------- Related / Post Grid Shared ---------- */
.nv-related {
	padding: clamp(56px, 7vw, 96px) var(--nv-gutter);
	border-top: 1px solid var(--nv-ink-10);
}

.nv-related__heading {
	font-family: var(--nv-serif);
	font-size: clamp(1.6rem, 3vw, 2.4rem);
	font-weight: 600;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
	text-align: center;
	margin: 0 0 clamp(32px, 4vw, 56px);
}

.nv-related__footer {
	margin-top: clamp(32px, 4vw, 48px);
	display: flex;
	justify-content: center;
}

/* ---------- Post Grid ---------- */
.nv-post-grid--3 .wp-block-post-template {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: clamp(20px, 2.5vw, 32px);
	list-style: none;
	padding: 0;
	margin: 0;
}

/* ---------- Post Card ---------- */
.nv-post-card {
	background: var(--nv-paper);
	border-radius: var(--nv-radius);
	overflow: hidden;
	display: flex;
	flex-direction: column;
	box-shadow: 0 1px 3px color-mix(in srgb, var(--nv-ink) 8%, transparent);
	transition: box-shadow 0.22s var(--nv-ease), transform 0.22s var(--nv-ease);
}

.nv-post-card:hover {
	transform: translateY(-3px);
	box-shadow: var(--nv-shadow);
}

.nv-post-card__img {
	display: block;
	overflow: hidden;
	background: var(--nv-beige-dark);
}

.nv-post-card__img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.38s var(--nv-ease);
}

.nv-post-card:hover .nv-post-card__img img {
	transform: scale(1.04);
}

.nv-post-card__body {
	padding: 1.25rem 1.4rem 1.4rem;
	display: flex;
	flex-direction: column;
	flex: 1;
	gap: 0.5rem;
}

.nv-post-card__cat {
	display: block;
	margin-bottom: 0.1rem;
}

.nv-post-card__cat a {
	color: var(--nv-orange-deep);
	text-decoration: none;
}

.nv-post-card__cat a:hover {
	text-decoration: underline;
}

.nv-post-card__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.05rem, 1.5vw, 1.3rem);
	font-weight: 600;
	line-height: 1.25;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
	margin: 0;
}

.nv-post-card__title a {
	color: inherit;
	text-decoration: none;
}

.nv-post-card__title a:hover {
	color: var(--nv-orange-deep);
}

.nv-post-card__excerpt {
	font-size: 0.9rem;
	color: var(--nv-ink-60);
	line-height: 1.55;
	flex: 1;
	margin: 0;
}

.nv-post-card__meta {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	flex-wrap: wrap;
	margin-top: auto;
	padding-top: 0.75rem;
	border-top: 1px solid var(--nv-ink-10);
}

.nv-post-card__meta .wp-block-post-date,
.nv-post-card__meta .wp-block-post-author {
	font-family: var(--nv-sans);
	font-size: 0.82rem;
	color: var(--nv-ink-60);
}

.nv-post-card__meta .wp-block-post-date::after {
	content: "·";
	margin-left: 0.4rem;
	color: var(--nv-ink-40);
}

/* ---------- Blog Filter Bar (index + archive) ---------- */
.nv-blogbar-wrap {
	padding: 0 var(--nv-gutter);
	background: var(--nv-beige);
}

/* First section on the blog index: clear the overlaying nav stack. */
.nv-blog-index > .nv-blogbar-wrap {
	padding-top: calc(var(--nv-top-stack) + clamp(16px, 2vw, 28px));
}

.nv-archive-hero .nv-blogbar-wrap {
	padding: clamp(20px, 2.5vw, 32px) 0 0;
}

.nv-blogbar__inner {
	display: flex;
	align-items: center;
	gap: clamp(10px, 1.4vw, 18px);
	padding: clamp(12px, 1.6vw, 18px) clamp(14px, 2vw, 24px);
	border-radius: var(--wp--custom--radius--pill, 999px);
	background:
		radial-gradient(80% 140% at 50% 0, color-mix(in srgb, var(--nv-white) 22%, transparent), transparent 70%),
		linear-gradient(135deg, var(--nv-orange-soft), color-mix(in srgb, var(--nv-orange) 62%, var(--nv-orange-soft)));
	box-shadow: var(--nv-shadow-sm);
}

.nv-blogbar__menu {
	position: relative;
	flex: none;
}

.nv-blogbar__menu-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 46px;
	height: 46px;
	border-radius: 50%;
	background: var(--nv-white);
	color: var(--nv-ink);
	cursor: pointer;
	list-style: none;
	transition: background 0.18s var(--nv-ease), color 0.18s var(--nv-ease);
}

.nv-blogbar__menu-btn::-webkit-details-marker {
	display: none;
}

.nv-blogbar__menu-btn:hover,
.nv-blogbar__menu[open] .nv-blogbar__menu-btn {
	background: var(--nv-ink);
	color: var(--nv-white);
}

.nv-blogbar__panel {
	position: absolute;
	top: calc(100% + 12px);
	left: 0;
	z-index: 30;
	min-width: min(360px, 80vw);
	padding: 1.25rem;
	border-radius: var(--nv-radius);
	background: var(--nv-paper);
	border: 1px solid var(--nv-ink-10);
	box-shadow: var(--nv-shadow-lg);
}

.nv-blogbar__panel-title {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: 0 0 0.75rem;
}

.nv-blogbar__panel-list {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0;
	padding: 0;
}

.nv-blogbar__panel-list li {
	margin: 0;
}

.nv-blogbar__panel-list .nv-blogbar__pill {
	background: var(--nv-beige);
	color: var(--nv-ink-80);
}

.nv-blogbar__panel-list .nv-blogbar__pill:hover {
	background: var(--nv-ink);
	color: var(--nv-white);
}

.nv-blogbar__panel-list .nv-blogbar__pill.is-current {
	background: var(--nv-orange);
	color: var(--nv-white);
}

.nv-blogbar__cats {
	list-style: none;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	flex: 1 1 auto;
	min-width: 0;
	margin: 0;
	padding: 2px 0;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}

.nv-blogbar__cats::-webkit-scrollbar {
	display: none;
}

.nv-blogbar__cats li {
	margin: 0;
	flex: none;
}

.nv-blogbar__pill {
	display: inline-flex;
	align-items: center;
	padding: 0.55rem 1.1rem;
	border-radius: 999px;
	font-family: var(--nv-sans);
	font-size: 0.88rem;
	font-weight: 500;
	white-space: nowrap;
	text-decoration: none;
	background: color-mix(in srgb, var(--nv-white) 42%, transparent);
	color: var(--nv-ink-80);
	transition: background 0.18s var(--nv-ease), color 0.18s var(--nv-ease);
}

.nv-blogbar__pill:hover {
	background: color-mix(in srgb, var(--nv-white) 70%, transparent);
	color: var(--nv-ink);
}

.nv-blogbar__pill.is-current {
	background: var(--nv-white);
	color: var(--nv-ink);
	font-weight: 600;
}

.nv-blogbar__search {
	flex: none;
	display: flex;
	align-items: center;
	gap: 0.25rem;
	padding: 0 0.4rem 0 1.1rem;
	height: 46px;
	border-radius: 999px;
	border: 1px solid color-mix(in srgb, var(--nv-white) 65%, transparent);
	background: color-mix(in srgb, var(--nv-white) 16%, transparent);
	transition: background 0.18s var(--nv-ease), border-color 0.18s var(--nv-ease);
}

.nv-blogbar__search:focus-within {
	background: var(--nv-white);
	border-color: var(--nv-white);
}

.nv-blogbar__search input {
	width: clamp(90px, 10vw, 150px);
	border: 0;
	background: transparent;
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	color: var(--nv-white);
	outline: none;
}

.nv-blogbar__search input::placeholder {
	color: color-mix(in srgb, var(--nv-white) 85%, transparent);
}

.nv-blogbar__search:focus-within input {
	color: var(--nv-ink);
}

.nv-blogbar__search:focus-within input::placeholder {
	color: var(--nv-ink-40);
}

.nv-blogbar__search button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--nv-white);
	cursor: pointer;
	transition: background 0.18s var(--nv-ease), color 0.18s var(--nv-ease);
}

.nv-blogbar__search:focus-within button,
.nv-blogbar__search button:hover {
	background: var(--nv-orange);
	color: var(--nv-white);
}

/* ---------- Curated columns: Featured / Latest / Popular (index.html) ---------- */
.nv-curated-wrap {
	padding: clamp(28px, 4vw, 48px) var(--nv-gutter) clamp(32px, 4vw, 56px);
}

.nv-curated__grid {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
	gap: clamp(24px, 3.5vw, 56px);
	align-items: start;
}

.nv-curated__label {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: 0 0 1rem;
}

.nv-curated__side {
	display: flex;
	flex-direction: column;
	gap: clamp(24px, 3vw, 40px);
}

.nv-curated__group {
	display: flex;
	flex-direction: column;
}

.nv-curated__chip {
	display: inline-flex;
	align-items: center;
	padding: 0.32rem 0.85rem;
	border-radius: 999px;
	background: color-mix(in srgb, var(--nv-ink) 72%, transparent);
	backdrop-filter: blur(4px);
	font-family: var(--nv-sans);
	font-size: 0.78rem;
	font-weight: 500;
	color: var(--nv-white);
	text-decoration: none;
	transition: background 0.18s var(--nv-ease);
}

.nv-curated__chip:hover {
	background: var(--nv-orange);
}

.nv-featstory {
	background: var(--nv-paper);
	border-radius: var(--nv-radius-lg);
	overflow: hidden;
	box-shadow: var(--nv-shadow);
}

.nv-featstory__media {
	position: relative;
	display: block;
}

.nv-featstory__media img {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

.nv-featstory__chips {
	position: absolute;
	left: 1rem;
	bottom: 1rem;
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	max-width: calc(100% - 2rem);
}

.nv-featstory__body {
	display: flex;
	flex-direction: column;
	gap: 0.65rem;
	padding: clamp(20px, 2.5vw, 32px);
}

.nv-featstory__meta,
.nv-sidestory__meta {
	font-family: var(--nv-sans);
	font-size: 0.85rem;
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-featstory__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.5rem, 2.6vw, 2.2rem);
	font-weight: 600;
	letter-spacing: -0.025em;
	line-height: 1.12;
	color: var(--nv-ink);
	margin: 0;
}

.nv-featstory__title a,
.nv-sidestory__title a {
	color: inherit;
	text-decoration: none;
}

.nv-featstory__title a:hover,
.nv-sidestory__title a:hover {
	color: var(--nv-orange-deep);
}

.nv-featstory__excerpt {
	font-size: clamp(0.95rem, 1.2vw, 1.02rem);
	line-height: 1.6;
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-featstory__cta {
	align-self: flex-start;
	margin-top: 0.5rem;
}

.nv-sidestory {
	display: grid;
	grid-template-columns: minmax(0, 150px) minmax(0, 1fr);
	gap: clamp(14px, 1.6vw, 22px);
	background: var(--nv-paper);
	border-radius: var(--nv-radius);
	overflow: hidden;
	box-shadow: var(--nv-shadow-sm);
}

.nv-sidestory + .nv-sidestory {
	margin-top: 1rem;
}

.nv-sidestory--nomedia {
	grid-template-columns: minmax(0, 1fr);
}

.nv-sidestory--nomedia .nv-sidestory__body {
	padding-left: clamp(14px, 1.8vw, 20px);
}

.nv-sidestory__media {
	min-height: 100%;
}

.nv-sidestory__media a {
	display: block;
	height: 100%;
}

.nv-sidestory__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-sidestory__media--rank {
	background: color-mix(in srgb, var(--nv-orange-soft) 26%, var(--nv-beige));
}

.nv-sidestory__media--rank a {
	display: flex;
	align-items: center;
	justify-content: center;
	text-decoration: none;
}

.nv-sidestory__rank {
	font-family: var(--nv-serif);
	font-size: clamp(1.8rem, 2.6vw, 2.4rem);
	font-weight: 600;
	color: var(--nv-orange-deep);
}

.nv-sidestory__body {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	padding: clamp(14px, 1.8vw, 20px) clamp(14px, 1.8vw, 20px) clamp(14px, 1.8vw, 20px) 0;
}

.nv-sidestory__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.1rem, 1.6vw, 1.35rem);
	font-weight: 600;
	letter-spacing: -0.015em;
	line-height: 1.2;
	color: var(--nv-ink);
	margin: 0;
}

.nv-sidestory__excerpt {
	font-size: 0.9rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
	margin: 0;
}

/* ---------- Product Finder band (blog index) ---------- */
.nv-finder-band {
	position: relative;
	overflow: hidden;
	background-color: var(--nv-ink);
	border-radius: var(--nv-radius-panel);
	max-width: min(var(--nv-container), calc(100% - 2 * var(--nv-gutter)));
	margin-inline: auto;
	margin-block: clamp(24px, 3vw, 40px) clamp(40px, 5vw, 64px);
	padding: clamp(40px, 5vw, 72px) clamp(22px, 4vw, 64px);
}

.nv-finder-band::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(60% 100% at 50% 0, color-mix(in srgb, var(--nv-orange) 24%, transparent), transparent 70%);
	pointer-events: none;
}

.nv-finder-band > * {
	position: relative;
	z-index: 1;
}

.nv-finder-band__title {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	margin-bottom: 0.75em;
}

.nv-finder-band__actions {
	display: flex;
	justify-content: center;
	margin-bottom: clamp(20px, 2.5vw, 32px);
}

.nv-finder-band__disclaimer {
	font-size: 0.78rem;
	line-height: 1.5;
	color: var(--nv-on-dark-muted, color-mix(in srgb, var(--nv-white) 55%, transparent));
	max-width: 72ch;
	margin-inline: auto;
}

/* ---------- Blog Grid Wrap (index.html) ---------- */
.nv-blog-grid-wrap {
	padding: 0 var(--nv-gutter) clamp(56px, 7vw, 96px);
}

.nv-blog-grid-wrap__heading {
	font-family: var(--nv-sans);
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0 0 1.5rem;
}

/* ---------- Archive Hero ---------- */
.nv-archive-hero {
	padding: clamp(60px, 8vw, 112px) var(--nv-gutter) clamp(40px, 5vw, 64px);
	text-align: center;
	background: var(--nv-beige);
}

.nv-archive-hero__eyebrow {
	display: block;
	margin-bottom: 0.75rem;
}

.nv-archive-hero__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.8rem, 4.5vw, 3.4rem);
	font-weight: 600;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	line-height: 1.08;
	margin: 0 0 1rem;
}

.nv-archive-hero__desc {
	font-size: clamp(0.95rem, 1.3vw, 1.1rem);
	color: var(--nv-ink-60);
	line-height: 1.55;
	max-width: 56ch;
	margin: 0 auto;
}

/* ---------- Archive Grid Wrap ---------- */
.nv-archive-grid-wrap {
	padding: clamp(32px, 4vw, 56px) var(--nv-gutter) clamp(56px, 7vw, 96px);
}

/* ---------- Archive Empty ---------- */
.nv-archive-empty {
	padding: clamp(40px, 6vw, 80px) 0;
	text-align: center;
}

.nv-archive-empty__text {
	font-size: 1rem;
	color: var(--nv-ink-60);
}

/* ---------- Pagination ---------- */
.nv-pagination {
	margin-top: clamp(32px, 4vw, 56px);
	display: flex;
	justify-content: center;
	gap: 0.5rem;
	flex-wrap: wrap;
}

.nv-pagination .wp-block-query-pagination-previous,
.nv-pagination .wp-block-query-pagination-next,
.nv-pagination .wp-block-query-pagination-numbers a,
.nv-pagination .wp-block-query-pagination-numbers span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.5rem;
	height: 2.5rem;
	padding: 0 0.75rem;
	border-radius: var(--nv-radius-sm);
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	font-weight: 500;
	color: var(--nv-ink-80);
	background: var(--nv-paper);
	border: 1px solid var(--nv-ink-20);
	text-decoration: none;
	transition: background 0.18s var(--nv-ease), color 0.18s var(--nv-ease), border-color 0.18s var(--nv-ease);
}

.nv-pagination .wp-block-query-pagination-previous:hover,
.nv-pagination .wp-block-query-pagination-next:hover,
.nv-pagination .wp-block-query-pagination-numbers a:hover {
	background: var(--nv-ink);
	color: var(--nv-white);
	border-color: var(--nv-ink);
}

.nv-pagination .wp-block-query-pagination-numbers .current {
	background: var(--nv-orange);
	color: var(--nv-white);
	border-color: var(--nv-orange);
	font-weight: 700;
}

/* ---------- Ghost button (used in related footer) ---------- */
.nv-btn--ghost {
	background: transparent;
	border: 1.5px solid var(--nv-ink-20);
	color: var(--nv-ink);
}

.nv-btn--ghost:hover {
	background: var(--nv-ink);
	border-color: var(--nv-ink);
	color: var(--nv-white);
}

/* ---------- Blog responsive ---------- */
@media (max-width: 980px) {
	.nv-post-grid--3 .wp-block-post-template {
		grid-template-columns: repeat(2, 1fr);
	}

	.nv-curated__grid {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 620px) {
	.nv-post-grid--3 .wp-block-post-template {
		grid-template-columns: 1fr;
	}

	.nv-article-hero {
		padding-top: calc(var(--nv-top-stack) + 32px);
	}

	.single.single-post .nv-article-hero {
		padding-top: 0;
	}

	.nv-archive-hero {
		padding-top: calc(var(--nv-top-stack) + 32px);
	}

	/* The pill row scrolls; keep the bar itself on one line. */
	.nv-blogbar__inner {
		flex-wrap: nowrap;
		border-radius: var(--nv-radius-lg);
	}

	.nv-blogbar__search input {
		width: 0;
		padding: 0;
	}

	.nv-blogbar__search {
		padding-left: 0.4rem;
	}

	.nv-blogbar__search:focus-within input {
		width: clamp(110px, 40vw, 180px);
	}

	.nv-sidestory:not(.nv-sidestory--nomedia) {
		grid-template-columns: minmax(0, 110px) minmax(0, 1fr);
	}

	.nv-author-card__block.wp-block-post-author {
		flex-direction: column;
	}
}

/* ---------- Article body grid: left sidebar + prose ---------- */
.nv-article-body__grid {
	display: grid;
	grid-template-columns: minmax(0, 280px) minmax(0, 1fr);
	gap: clamp(32px, 4vw, 64px);
	align-items: stretch;
}

.nv-article-body__main {
	min-width: 0;
}

/* Production parity (ageless entry-sidebar): items share the column height
   and each box sticks under the fixed nav while its slot lasts. */
.nv-article-side {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	gap: 2rem;
	min-width: 0;
}

.nv-article-side__item {
	flex-grow: 1;
}

.nv-article-side__sticky {
	position: sticky;
	top: calc(var(--nv-top-stack, 90px) + 16px);
}

/* Scoped to the sticky wrapper (always the parent) so these keep winning
   over the `.nv-prose h2/p/ul/a` element rules when a box is re-homed into
   the article copy on narrow screens. */
.nv-article-side__sticky .nv-article-side__heading {
	font-family: var(--nv-sans);
	font-size: 0.8rem;
	font-weight: 600;
	line-height: 1.3;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0 0 0.9rem;
}

.nv-article-side__sticky .nv-article-side__list {
	list-style: none;
	margin: 0;
	padding: 1.1rem 1.2rem;
	background: var(--nv-beige);
	border-radius: var(--nv-radius);
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
}

.nv-article-side__list li {
	position: relative;
	padding-left: 1.1rem;
	margin: 0 0 0.8rem;
}

.nv-article-side__list li:last-child {
	margin-bottom: 0;
}

.nv-article-side__list li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.55em;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--nv-orange);
}

.nv-article-side__card {
	position: relative;
	padding: 1.4rem 1.2rem 1.3rem;
	background: var(--nv-paper);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
	text-align: center;
}

.nv-article-side__badge {
	position: absolute;
	top: 0.8rem;
	left: 0.8rem;
	display: inline-flex;
	align-items: center;
	padding: 0.25rem 0.65rem;
	border-radius: 999px;
	background: var(--nv-orange);
	color: var(--nv-white);
	font-family: var(--nv-sans);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.nv-article-side__card img {
	width: 100%;
	max-width: 200px;
	height: auto;
	margin: 0.5rem auto 0.75rem;
}

.nv-article-side__card .nv-article-side__product-title {
	font-family: var(--nv-serif);
	font-size: 1.15rem;
	font-weight: 600;
	color: var(--nv-ink);
	margin: 0 0 0.25rem;
}

.nv-article-side__card .nv-article-side__product-subtitle {
	font-family: var(--nv-sans);
	font-size: 0.85rem;
	color: var(--nv-ink-60);
	margin: 0 0 0.5rem;
}

.nv-article-side__card .nv-article-side__product-price {
	font-family: var(--nv-mono);
	font-size: 0.82rem;
	color: var(--nv-ink-80);
	margin: 0 0 1rem;
}

.nv-article-side__cta {
	width: 100%;
	justify-content: center;
}

/* Buttons placed in article copy keep button chrome, not link chrome. */
.nv-prose a.nv-btn {
	text-decoration: none;
}

.nv-prose a.nv-btn--primary {
	color: var(--nv-white);
}

/* Boxes re-homed into the copy by novos.js on narrow screens: no rail, no
   sticking, and the product card stays card-width instead of stretching. */
.nv-prose > .nv-article-side__item--inflow {
	margin: clamp(28px, 6vw, 44px) 0;
	flex-grow: 0;
}

.nv-prose > .nv-article-side__item--inflow .nv-article-side__sticky {
	position: static;
}

.nv-prose > .nv-article-side__product {
	max-width: 420px;
	margin-inline: auto;
}

@media (max-width: 980px) {
	.nv-article-body__grid {
		grid-template-columns: 1fr;
	}

	/* No-JS fallback: the rail becomes a stack above the article (what
	   production does) rather than disappearing. */
	.nv-article-side__sticky {
		position: static;
	}

	.nv-article-side__item {
		flex-grow: 0;
	}

	.nv-article-side__product {
		max-width: 420px;
		margin-inline: auto;
	}

	.nv-article-side[hidden] {
		display: none;
	}
}

/* ---------- FDA disclaimer (appended by novos-extended) ---------- */
.nv-prose .fda-disclaimer-wrap {
	margin: 2.5rem 0 0;
	padding-top: 1.25rem;
	border-top: 1px solid var(--nv-ink-10);
	font-size: 0.85rem;
	font-style: italic;
	color: var(--nv-ink-60);
}

/* ---------- Load more (blog index + archives) ---------- */
.nv-loadmore__btn {
	display: inline-flex;
	align-items: center;
	gap: 0.6rem;
	margin: clamp(32px, 4vw, 56px) auto 0;
}

.wp-block-query.nv-loadmore {
	text-align: center;
}

.wp-block-query.nv-loadmore .wp-block-post-template {
	text-align: initial;
}

.nv-loadmore__spinner {
	display: none;
	width: 1em;
	height: 1em;
	border: 2px solid currentColor;
	border-top-color: transparent;
	border-radius: 50%;
	animation: nv-loadmore-spin 0.7s linear infinite;
}

.nv-loadmore__btn.is-loading .nv-loadmore__spinner {
	display: inline-block;
}

@keyframes nv-loadmore-spin {
	to {
		transform: rotate(360deg);
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-loadmore__spinner {
		animation-duration: 2s;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-post-card,
	.nv-post-card__img img,
	.nv-blogbar__pill,
	.nv-curated__chip {
		transition: none;
	}
}

/* ==========================================================================
   Product page — Above the Fold
   ========================================================================== */

.nv-pdp {
	padding-top: calc(var(--nv-top-stack) + clamp(10px, 1.4vw, 18px));
	padding-bottom: var(--nv-section-pad);
}

.nv-pdp__breadcrumbs {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	letter-spacing: 0.04em;
	color: var(--nv-ink-60);
	margin-bottom: clamp(12px, 1.6vw, 20px);
}

.nv-pdp__breadcrumbs a {
	color: var(--nv-ink-60);
	text-decoration: none;
}

.nv-pdp__breadcrumbs a:hover {
	color: var(--nv-orange-deep);
}

.nv-pdp__notices:empty {
	display: none;
}

.nv-pdp__atf {
	gap: clamp(28px, 4vw, 64px);
	align-items: flex-start;
}

/* Tablet matches mobile: core columns only stack below 782px, but the rest
   of the PDP (gallery swipe rail, non-sticky summary) flips at the theme's
   980px breakpoint — stack the above-the-fold columns there too. */
@media (max-width: 980px) {
	.nv-pdp__atf.wp-block-columns:not(.is-not-stacked-on-mobile) {
		flex-wrap: wrap !important;
	}

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

/* --- Gallery --------------------------------------------------------------- */

.nv-pdp__media {
	position: sticky;
	top: calc(var(--nv-top-stack) + 18px);
}

.nv-pdp-gallery__flavor[hidden] {
	display: none;
}

.nv-pdp-gallery__stage {
	position: relative;
	aspect-ratio: 1 / 1;
	border-radius: var(--nv-radius-lg);
	overflow: hidden;
	background: var(--nv-beige);
	box-shadow: var(--nv-shadow-sm);
}

.nv-pdp-gallery__slide {
	position: absolute;
	inset: 0;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.3s var(--nv-ease);
}

.nv-pdp-gallery__slide.is-active {
	opacity: 1;
	visibility: visible;
}

.nv-pdp-gallery__slide img,
.nv-pdp-gallery__video {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.nv-pdp-gallery__thumbs {
	display: flex;
	gap: 12px;
	margin-top: 14px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	padding-bottom: 4px;
}

.nv-pdp-gallery__thumb {
	flex: 0 0 auto;
	width: clamp(56px, 8vw, 78px);
	aspect-ratio: 1 / 1;
	border-radius: var(--nv-radius-sm);
	overflow: hidden;
	padding: 0;
	border: 2px solid transparent;
	background: var(--nv-beige);
	cursor: pointer;
	scroll-snap-align: start;
	position: relative;
	transition: border-color 0.2s var(--nv-ease);
}

.nv-pdp-gallery__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.nv-pdp-gallery__thumb.is-active {
	border-color: var(--nv-orange);
}

.nv-pdp-gallery__thumb:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

.nv-pdp-gallery__video-thumb {
	display: block;
	width: 100%;
	height: 100%;
}

.nv-pdp-gallery__play {
	position: absolute;
	inset: 0;
	margin: auto;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nv-ink) 64%, transparent);
}

.nv-pdp-gallery__play::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 54%;
	transform: translate(-50%, -50%);
	border-style: solid;
	border-width: 5px 0 5px 8px;
	border-color: transparent transparent transparent var(--nv-white);
}

/* --- Gallery: grid / Timeline mosaic (experimental) ------------------------ */

.nv-pdp-grid__flavor[hidden] {
	display: none;
}

.nv-pdp-grid__mosaic {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 8px;
	align-items: start;
}

.nv-pdp-grid__tile {
	position: relative;
	overflow: hidden;
	margin: 0;
	border-radius: var(--nv-radius-tile);
	background: var(--nv-ink-05);
	aspect-ratio: 4 / 5;
}

.nv-pdp-grid__tile img,
.nv-pdp-grid__video {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.55s var(--nv-ease);
}

.nv-pdp-grid__tile:hover img {
	transform: scale(1.025);
}

/* Video tile: poster <img> paints with the other tiles; the video sits on top
   and only becomes visible once playback has actually started. */

.nv-pdp-grid__tile--video .nv-pdp-grid__poster {
	position: absolute;
	inset: 0;
}

.nv-pdp-grid__tile--video .nv-pdp-grid__video {
	position: absolute;
	inset: 0;
	opacity: 0;
	transition: opacity 0.4s var(--nv-ease);
}

.nv-pdp-grid__tile--video .nv-pdp-grid__video.is-playing {
	opacity: 1;
}

.nv-pdp-grid__tile--video:hover img {
	transform: none;
}

/* Corner play/pause toggle (timeline.com-style) */

.nv-pdp-grid__vtoggle {
	position: absolute;
	right: 12px;
	bottom: 12px;
	width: 40px;
	height: 40px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nv-ink) 55%, transparent);
	backdrop-filter: var(--wp--custom--glass--blur-chip);
	-webkit-backdrop-filter: var(--wp--custom--glass--blur-chip);
	cursor: pointer;
	transition: background 0.2s var(--nv-ease);
}

.nv-pdp-grid__vtoggle:hover {
	background: color-mix(in srgb, var(--nv-ink) 78%, transparent);
}

.nv-pdp-grid__vtoggle:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

/* Play triangle by default … */
.nv-pdp-grid__vicon {
	display: block;
	width: 0;
	height: 0;
	margin-left: 3px;
	border-style: solid;
	border-width: 7px 0 7px 11px;
	border-color: transparent transparent transparent var(--nv-white);
}

/* … pause bars while playing. */
.nv-pdp-grid__vtoggle.is-playing .nv-pdp-grid__vicon {
	width: 10px;
	height: 13px;
	margin-left: 0;
	border-width: 0;
	border-left: 3.5px solid var(--nv-white);
	border-right: 3.5px solid var(--nv-white);
}

/* Lightbox triggers: image tiles are full-bleed anchors to the full-size
   file; the video tile carries a stretched, invisible expand button that
   sits beneath the corner play/pause toggle (DOM order stacking). */

.nv-pdp-grid__zoom {
	display: block;
	width: 100%;
	height: 100%;
	cursor: zoom-in;
}

.nv-pdp-grid__expand {
	position: absolute;
	inset: 0;
	padding: 0;
	border: 0;
	background: transparent;
	cursor: zoom-in;
}

.nv-pdp-grid__zoom:focus-visible,
.nv-pdp-grid__expand:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: -2px;
}

/* Above the theme's fixed chrome (tooltips/skip-link sit at 1200). */
:root {
	--fancybox-zIndex: 1300;
}

/* Fancybox's scroll lock vs. the theme's stable scrollbar gutter (html rule
   at the top of this file). Fancybox sets html { overflow: visible } and
   compensates the vanished scrollbar with a margin-right on <body> — which
   collapses the gutter the theme keeps permanently reserved and re-adds its
   width as margin, so the page jumps sideways on open and back on close.
   Re-assert the theme's gutter while the lightbox is open and zero out
   Fancybox's own compensation: geometry stays identical, scroll stays
   locked (body overflow:hidden still applies). !important is required —
   fancybox.css enqueues at render time and prints after this sheet, so it
   wins the equal-specificity race otherwise. */
html.with-fancybox {
	overflow-x: hidden !important;
	scrollbar-gutter: stable !important;
}

html.with-fancybox body.hide-scrollbar {
	margin-right: 0 !important;
}

/* Compact / mobile: keep a dark tappable rim around the media so letterbox
   taps can dismiss (contentClick → close). Fancybox's compact mode otherwise
   stretches the slide edge-to-edge with nowhere to tap outside the image. */
@media (max-width: 578px) {
	.fancybox__carousel .fancybox__slide {
		padding: 12px;
		box-sizing: border-box;
	}
}

.nv-pdp-grid__caption {
	position: absolute;
	left: 14px;
	right: 14px;
	bottom: 13px;
	width: max-content;
	max-width: calc(100% - 28px);
	padding: 0.45em 0.7em;
	border: 1px solid var(--nv-ink-10);
	border-radius: 999px;
	background: color-mix(in srgb, var(--nv-paper) 86%, transparent);
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	line-height: 1.1;
	letter-spacing: 0.02em;
	color: var(--nv-ink-80);
	backdrop-filter: blur(4px);
}

@media (max-width: 980px) {
	/* Timeline-style mobile gallery: one horizontal swipe rail instead of a
	   vertically stacked mosaic. Full-bleed via the negative-gutter idiom
	   used by the other mobile rails; snap keeps one tile centered. */
	.nv-pdp-grid__mosaic {
		display: flex;
		gap: 8px;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		scroll-padding-inline: var(--nv-gutter);
		-webkit-overflow-scrolling: touch;
		margin-inline: calc(-1 * var(--nv-gutter));
		padding-inline: var(--nv-gutter);
	}

	.nv-pdp-grid__tile {
		flex: 0 0 min(84vw, 420px);
		aspect-ratio: 1 / 1;
		scroll-snap-align: center;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-pdp-grid__tile img,
	.nv-pdp-grid__video {
		transition: none;
	}

	.nv-pdp-grid__tile:hover img {
		transform: none;
	}
}

/* Grid PDP: tall mosaic scrolls, buy panel sticks (scoped to the test template). */
.nv-pdp--grid .nv-pdp__media {
	position: static;
	top: auto;
}

@media (min-width: 981px) {
	.nv-pdp--grid .nv-pdp__summary {
		position: sticky;
		top: calc(var(--nv-top-stack) + 18px);
		align-self: start;
	}
}

/* --- Summary --------------------------------------------------------------- */

.nv-pdp__eyebrow {
	display: block;
	margin: 0 0 0.65rem;
}

.nv-pdp__title {
	font-family: var(--nv-serif);
	font-weight: 600;
	font-size: var(--nv-fs-h2);
	line-height: 0.92;
	letter-spacing: -0.01em;
	margin: 0 0 0.35em;
}

.nv-pdp__rating {
	margin-bottom: 0.9rem;
}

.nv-rating {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	text-decoration: none;
	color: inherit;
}

.nv-rating.is-center {
	justify-content: center;
}

.nv-rating__stars {
	--nv-rating: 0%;
	position: relative;
	display: inline-block;
	font-size: 1.05rem;
	line-height: 1;
	letter-spacing: 2px;
}

.nv-rating__stars::before {
	content: "\2605\2605\2605\2605\2605";
	color: var(--nv-ink-20);
}

.nv-rating__stars::after {
	content: "\2605\2605\2605\2605\2605";
	color: var(--nv-orange);
	position: absolute;
	inset: 0;
	width: var(--nv-rating);
	overflow: hidden;
	white-space: nowrap;
}

.nv-rating__value {
	font-family: var(--nv-sans);
	font-weight: 700;
	font-size: 0.92rem;
	color: var(--nv-ink);
}

.nv-rating__count {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	color: var(--nv-ink-60);
}

a.nv-rating:hover .nv-rating__count {
	color: var(--nv-orange-deep);
}

.nv-pdp__excerpt {
	color: var(--nv-ink);
	font-size: var(--wp--preset--font-size--body);
	line-height: 1.46;
	letter-spacing: 0.016em;
	margin-bottom: clamp(18px, 2vw, 26px);
	margin-top: 0;
}

/* --- Copy-doc ATF lockup (Boost): headline / sub-line / "Product
   description" label / static proof line ------------------------------- */
.nv-pdp__headline {
	font-family: var(--nv-serif);
	font-size: clamp(1.2rem, 1.5vw, 1.5rem);
	font-weight: 600;
	line-height: 1.28;
	letter-spacing: -0.015em;
	color: var(--nv-ink);
	margin: 0.45em 0 0.45em;
}

.nv-pdp__subline {
	font-size: var(--wp--preset--font-size--body);
	line-height: 1.46;
	letter-spacing: 0.016em;
	color: var(--nv-ink-80);
	margin: 0 0 clamp(16px, 1.8vw, 24px);
}

.nv-pdp__desc-label {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0 0 8px;
}

/* FDA fine print at the bottom of the buy column. */
.nv-pdp__disclaimer {
	margin: clamp(14px, 1.6vw, 22px) 0 0;
	font-size: 0.74rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

/* --- Benefit list + proof line ---------------------------------------------
   Compact icon-bullet list (bolded) instead of the old outlined chips —
   reads faster and saves vertical space in the buy column. */

.nv-pdp__benefits {
	list-style: none;
	display: grid;
	gap: 7px;
	margin: 0 0 clamp(16px, 2vw, 24px);
	padding: 0;
}

.nv-pdp__benefit {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	font-family: var(--nv-sans);
	font-weight: 650;
	font-size: 0.9375rem;
	line-height: 1.3;
	letter-spacing: 0.012em;
	color: color-mix(in srgb, var(--nv-ink) 88%, transparent);
}

.nv-pdp__benefit-icon {
	flex: none;
	margin-top: 0.14em;
	color: var(--nv-orange);
}

.nv-pdp__proof {
	font-size: 0.9375rem;
	line-height: 1.45;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
	margin: 0 0 clamp(20px, 2.4vw, 30px);
}

.nv-pdp__proof strong,
.nv-pdp__proof b {
	font-weight: 700;
	color: var(--nv-ink);
}

.nv-pdp__proof a {
	color: var(--nv-ink);
	font-weight: 700;
	text-decoration: underline;
}

/* Divider between the benefit-claims list and the proof ticker — separates
   the per-product claims (which carry footnote markers) from the brand-level
   trust marquee below. */
.nv-pdp__divider {
	display: block;
	margin: 0 0 clamp(12px, 1.4vw, 18px);
	color: var(--nv-orange);
	font-weight: 700;
	line-height: 1;
}

/* PDP proof marquee — brand-level claims hardcoded in the product templates
   (replaces the pdp_proof ACF line so copy ships with the theme, no meta). */
.nv-ticker--pdp-proof {
	margin: 0 0 clamp(20px, 2.4vw, 30px);
}

.nv-ticker--pdp-proof .nv-ticker__track {
	animation-duration: 26s;
}

.nv-ticker--pdp-proof .nv-ticker__track > span {
	margin-right: 14px;
}

.nv-ticker--pdp-proof .nv-ticker__track span {
	font-family: inherit;
	font-size: 0.9375rem;
	font-weight: 400;
	line-height: 1.45;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
	filter: none;
}

.nv-ticker--pdp-proof .nv-ticker__track strong {
	font-weight: 700;
	color: var(--nv-ink);
}

/* Frozen marquee would clip the claims — show one copy as wrapped static text. */
@media (prefers-reduced-motion: reduce) {
	.nv-ticker--pdp-proof {
		-webkit-mask-image: none;
		mask-image: none;
	}

	.nv-ticker--pdp-proof .nv-ticker__track {
		flex-wrap: wrap;
		width: auto;
		row-gap: 4px;
	}

	.nv-ticker--pdp-proof .nv-ticker__track > span:nth-child(n + 4) {
		display: none;
	}

	.nv-ticker--pdp-proof .nv-ticker__track > span:nth-child(3)::after {
		content: none;
	}
}

/* --- Flavors --------------------------------------------------------------- */

.nv-pdp-flavors {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-bottom: clamp(18px, 2.2vw, 26px);
}

.nv-pdp-flavor {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 8px 16px 8px 8px;
	border-radius: var(--wp--custom--radius--pill);
	border: 1.5px solid var(--nv-ink-40);
	background: var(--nv-white);
	color: var(--nv-ink);
	font-family: var(--nv-sans);
	font-weight: 600;
	/* Match .nv-pdp-plan__label so flavor isn't visually secondary. */
	font-size: 1.125rem;
	line-height: 1.42;
	letter-spacing: 0.016em;
	cursor: pointer;
	transition: border-color 0.2s var(--nv-ease), background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-pdp-flavor__swatch {
	display: inline-flex;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--nv-beige);
}

.nv-pdp-flavor__swatch img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-pdp-flavor.is-active {
	border-color: var(--nv-orange);
	background: color-mix(in srgb, var(--nv-orange) 14%, var(--nv-white));
	color: var(--nv-orange-deep);
}

.nv-pdp-flavor:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

/* --- Buy card (Figma "purchase details": white card, radio plans, dark CTA) - */

.nv-pdp-buy__card {
	box-sizing: border-box;
	display: flex;
	flex-direction: column;
	gap: 12px;
	width: 100%;
	padding: 20px;
	background: var(--nv-white);
	border: 1px solid var(--nv-beige);
	border-radius: var(--nv-radius-tile);
}

.nv-pdp-buy__badges {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.nv-pdp-chip {
	display: inline-flex;
	align-items: center;
	padding: 6px 11px;
	border-radius: var(--wp--custom--radius--pill);
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: 0.75rem;
	line-height: 0.92;
	letter-spacing: 0.073em;
	text-transform: uppercase;
}

.nv-pdp-chip--dark {
	background: var(--nv-ink);
	color: var(--nv-paper);
}

.nv-pdp-chip--save {
	border: 1px solid var(--nv-orange);
	color: var(--nv-orange);
}

/* --- Plans ----------------------------------------------------------------- */

.nv-pdp-plans {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nv-pdp-plan {
	box-sizing: border-box;
	display: flex;
	align-items: flex-start;
	gap: 16px;
	width: 100%;
	text-align: left;
	padding: 14px 20px 14px 15px;
	border-radius: var(--nv-radius-sm);
	border: 1px solid var(--nv-ink-20);
	background: color-mix(in srgb, var(--nv-beige) 20%, transparent);
	cursor: pointer;
	position: relative;
	transition: border-color 0.2s var(--nv-ease), background 0.2s var(--nv-ease);
}

.nv-pdp-plan[hidden] {
	display: none;
}

.nv-pdp-plan:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

.nv-pdp-plan:hover {
	border-color: var(--nv-ink-40);
}

.nv-pdp-plan.is-active {
	border-color: var(--nv-ink);
	background: var(--wp--preset--gradient--plan);
}

.nv-pdp-plan__radio {
	flex: 0 0 auto;
	width: 16px;
	height: 16px;
	margin-top: 4px;
	border-radius: 50%;
	border: 1px solid var(--nv-ink-20);
	position: relative;
	transition: border-color 0.2s var(--nv-ease);
}

.nv-pdp-plan.is-active .nv-pdp-plan__radio {
	border-color: var(--nv-white);
}

.nv-pdp-plan.is-active .nv-pdp-plan__radio::after {
	content: "";
	position: absolute;
	inset: 4px;
	border-radius: 50%;
	background: var(--nv-white);
}

.nv-pdp-plan__body {
	display: flex;
	flex-direction: column;
	gap: 2px;
	flex: 1 1 auto;
}

.nv-pdp-plan__label {
	font-family: var(--nv-sans);
	font-weight: 500;
	font-size: 1.125rem;
	line-height: 1.42;
	letter-spacing: 0.016em;
	color: var(--nv-ink);
}

.nv-pdp-plan.is-active .nv-pdp-plan__label {
	font-weight: 700;
	color: var(--nv-white);
}

.nv-pdp-plan__save {
	font-family: var(--nv-sans);
	font-weight: 600;
	font-size: 0.875rem;
	line-height: 1.4;
	letter-spacing: 0.016em;
	color: var(--nv-orange);
}

.nv-pdp-plan.is-active .nv-pdp-plan__save {
	color: var(--nv-white);
}

.nv-pdp-plan__info {
	font-size: 0.8875rem;
	line-height: 1.5;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
}

.nv-pdp-plan.is-active .nv-pdp-plan__info {
	color: color-mix(in srgb, var(--nv-white) 80%, transparent);
}

.nv-pdp-plan__pricing {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 2px;
	text-align: right;
}

.nv-pdp-plan__price {
	display: inline-flex;
	align-items: baseline;
	gap: 6px;
}

.nv-pdp-plan__price del,
.nv-pdp-plan__price strong {
	white-space: nowrap;
}

.nv-pdp-plan__price del {
	color: var(--nv-ink-40);
	font-size: 0.85rem;
}

.nv-pdp-plan.is-active .nv-pdp-plan__price del {
	color: color-mix(in srgb, var(--nv-white) 64%, transparent);
}

.nv-pdp-plan__price strong {
	font-family: var(--nv-sans);
	font-weight: 700;
	font-size: 1.0625rem;
	line-height: 1.5;
	color: var(--nv-ink);
}

.nv-pdp-plan.is-active .nv-pdp-plan__price strong {
	color: var(--nv-white);
}

/* --- Delivery frequency picker ("Deliver every" pills, Bar-style buy box) -- */

.nv-pdp-freq {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nv-pdp-freq[hidden] {
	display: none;
}

.nv-pdp-freq__label {
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
}

.nv-pdp-freq__options {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(62px, 1fr));
	gap: 8px;
}

.nv-pdp-freq__opt {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 1px;
	padding: 10px 8px;
	border-radius: var(--nv-radius-sm);
	border: 1px solid var(--nv-ink-20);
	background: color-mix(in srgb, var(--nv-beige) 20%, transparent);
	color: var(--nv-ink);
	cursor: pointer;
	transition: border-color 0.2s var(--nv-ease), background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-pdp-freq__opt:hover {
	border-color: var(--nv-ink-40);
}

.nv-pdp-freq__opt:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

.nv-pdp-freq__opt strong {
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: 1rem;
	line-height: 1.2;
}

.nv-pdp-freq__opt span {
	font-size: 0.75rem;
	line-height: 1.3;
	color: var(--nv-ink-60);
}

.nv-pdp-freq__opt.is-active {
	border-color: var(--nv-ink);
	background: var(--nv-ink);
	color: var(--nv-paper);
}

.nv-pdp-freq__opt.is-active span {
	color: color-mix(in srgb, var(--nv-paper) 80%, transparent);
}

.nv-pdp-freq__note {
	margin: 0;
	font-size: 0.8875rem;
	line-height: 1.5;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
}

.nv-pdp-freq__note[hidden] {
	display: none;
}

/* --- Boost upsell (from novos-extended PDP_Upsell) ------------------------- */

.novos-pdp-upsell {
	margin-bottom: clamp(16px, 2vw, 22px);
}

.novos-upsell-card {
	display: block;
	cursor: pointer;
}

.novos-upsell-card-inner {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 14px 16px;
	border-radius: var(--nv-radius);
	border: 1.5px dashed var(--nv-ink-20);
	background: color-mix(in srgb, var(--nv-beige) 60%, var(--nv-white));
	transition: border-color 0.2s var(--nv-ease), background 0.2s var(--nv-ease);
}

.novos-upsell-checkbox {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.novos-upsell-checkbox:checked + .novos-upsell-card-inner {
	border-style: solid;
	border-color: var(--nv-orange);
	background: color-mix(in srgb, var(--nv-orange) 7%, var(--nv-white));
}

.novos-upsell-card-media img {
	width: 48px;
	height: 48px;
	object-fit: contain;
	border-radius: var(--nv-radius-sm);
}

.novos-upsell-card-content {
	flex: 1 1 auto;
}

.novos-upsell-card-title {
	font-weight: 700;
	font-size: 0.95rem;
	color: var(--nv-ink);
}

.novos-upsell-card-description {
	font-size: 0.82rem;
	color: var(--nv-ink-60);
}

.novos-upsell-card-action-label {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	font-weight: 700;
	color: var(--nv-orange-deep);
	white-space: nowrap;
}

.novos-upsell-label-remove {
	display: none;
}

.novos-upsell-checkbox:checked ~ .novos-upsell-card-inner .novos-upsell-label-add,
.novos-upsell-card-inner:has(.novos-upsell-checkbox:checked) .novos-upsell-label-add {
	display: none;
}

.novos-upsell-checkbox:checked ~ .novos-upsell-card-inner .novos-upsell-label-remove,
.novos-upsell-card-inner:has(.novos-upsell-checkbox:checked) .novos-upsell-label-remove {
	display: inline;
}

/* --- Actions: quantity + add to cart + one-time link + note ---------------- */

.nv-pdp-actions {
	display: flex;
	gap: 12px;
	align-items: stretch;
	padding-top: 2px;
}

.nv-pdp-qty {
	display: inline-flex;
	align-items: center;
	border: 1.5px solid var(--nv-ink-20);
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-white);
	overflow: hidden;
	flex: 0 0 auto;
}

.nv-pdp-qty__btn {
	width: 42px;
	height: 100%;
	min-height: 48px;
	border: 0;
	background: transparent;
	font-size: 1.25rem;
	color: var(--nv-ink);
	cursor: pointer;
	line-height: 1;
}

.nv-pdp-qty__btn:hover {
	color: var(--nv-orange-deep);
}

.nv-pdp-qty__input {
	width: 40px;
	border: 0;
	text-align: center;
	font-family: var(--nv-sans);
	font-weight: 700;
	font-size: 1rem;
	background: transparent;
	color: var(--nv-ink);
	-moz-appearance: textfield;
}

.nv-pdp-qty__input::-webkit-outer-spin-button,
.nv-pdp-qty__input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

.nv-pdp-add {
	flex: 1 1 auto;
	min-height: 48px;
	border-radius: var(--nv-radius-btn);
	font-weight: 700;
	font-size: 1.125rem;
	padding: 14px 18px;
}

.nv-pdp-onetime {
	align-self: center;
	border: 0;
	background: transparent;
	padding: 0;
	cursor: pointer;
	font-family: var(--nv-sans);
	font-size: 0.875rem;
	line-height: 1.5;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
	text-decoration: underline;
	text-underline-position: from-font;
	transition: color 0.2s var(--nv-ease);
}

.nv-pdp-onetime[hidden] {
	display: none;
}

.nv-pdp-onetime:hover {
	color: var(--nv-ink);
}

.nv-pdp-onetime.is-active {
	color: var(--nv-orange-deep);
	font-weight: 600;
}

.nv-pdp-onetime:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

.nv-pdp-buy__note {
	margin: 0;
	font-size: 0.8125rem;
	line-height: 1.42;
	text-align: center;
	color: color-mix(in srgb, var(--nv-ink) 64%, transparent);
}

.nv-pdp-buy__after {
	margin-top: 14px;
	text-align: center;
}

/* ACF "before_add_to_cart_text" trust line + HSA/FSA + Frontrow under buy card.
   Keep every row centered with the plan card / ATC button above. */

.nv-pdp-buy__after .after-cart-text {
	padding: 12px 4px 0;
	border-top: 1px solid var(--nv-ink-10);
	text-align: center;
	font-size: 0.8125rem;
	line-height: 1.42;
	color: color-mix(in srgb, var(--nv-ink) 72%, transparent);
}

.nv-pdp-buy__after #truemed-instructions {
	padding: 12px 4px;
	border-top: 1px solid var(--nv-ink-10);
	text-align: center;
	color: color-mix(in srgb, var(--nv-ink) 72%, transparent);
}

/* Truemed's injected "HSA/FSA eligible - Save an average of 30%" widget
   renders its own flex row with `justify-content: flex-start`, which left-
   aligns it inside our centered container regardless of our text-align.
   Force the widget's own layout to center too (Chris PDP feedback). */
.nv-pdp-buy__after #truemed-instructions .truemed-entry-box {
	justify-content: center !important;
}

.nv-pdp-buy__after #frontrow-badge {
	justify-content: center;
	padding: 12px 4px 0;
	border-top: 1px solid var(--nv-ink-10);
	/* Anchor target for "See clinician endorsements" (homepage clinicians
	   badge) — keep it clear of the sticky nav stack when jumped to. */
	scroll-margin-top: calc(var(--nv-top-stack) + 24px);
}

.nv-pdp-buy__after #frontrow-badge iframe {
	max-width: 420px;
	margin-inline: auto;
}

/* --- "Try it first" sample row (direct add to cart) ------------------------ */

.nv-pdp-sample {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	/* Extra air above the "Still unsure" bubble (Chris PDP feedback). */
	margin-top: clamp(28px, 3.2vw, 40px);
	padding: 14px 16px;
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
	background: color-mix(in srgb, var(--nv-beige) 60%, var(--nv-white));
	margin-bottom: 30px !important;
}

.nv-pdp-sample__copy {
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
}

.nv-pdp-sample__copy strong {
	font-size: 0.9375rem;
	font-weight: 700;
	color: var(--nv-ink);
}

.nv-pdp-sample__sub {
	font-size: 0.8125rem;
	line-height: 1.4;
	color: color-mix(in srgb, var(--nv-ink) 72%, transparent);
}

.nv-pdp-sample__copy em {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.72rem;
	letter-spacing: 0.04em;
	color: var(--nv-ink-60);
}

.nv-pdp-sample__add {
	flex: none;
	padding: 0.7em 1.2em;
	font-size: 0.82rem;
	white-space: nowrap;
}

.nv-pdp-sample__add.is-loading {
	opacity: 0.55;
	pointer-events: none;
}

/* --- Details accordion (native <details>, zero JS) ---------------------------
   Same recipe as the PDP FAQ rows (nv-faq--pdp): hairline separators, serif
   questions, orange plus icon that collapses its vertical bar when open. */

.nv-pdp-details {
	margin-top: clamp(20px, 2.4vw, 32px);
	border-top: 1px solid var(--nv-ink-10);
}

.nv-pdp-details__item {
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-pdp-details__summary {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	padding: clamp(16px, 1.9vw, 22px) 0;
	cursor: pointer;
	list-style: none;
	text-align: left;
	font-family: var(--nv-serif);
	font-size: clamp(1.05rem, 1.15vw, 1.2rem);
	font-weight: 550;
	line-height: 1.3;
	letter-spacing: 0;
	color: var(--nv-ink);
}

.nv-pdp-details__summary::-webkit-details-marker {
	display: none;
}

.nv-pdp-details__summary > span:first-child {
	flex: 1 1 auto;
}

.nv-pdp-details__marker {
	position: relative;
	width: 18px;
	height: 18px;
	flex: 0 0 18px;
}

.nv-pdp-details__marker::before,
.nv-pdp-details__marker::after {
	content: "";
	position: absolute;
	background: var(--nv-orange);
	transition: transform 0.3s var(--nv-ease);
}

.nv-pdp-details__marker::before {
	top: 50%;
	left: 0;
	width: 100%;
	height: 2px;
}

.nv-pdp-details__marker::after {
	left: 50%;
	top: 0;
	width: 2px;
	height: 100%;
}

.nv-pdp-details__item[open] .nv-pdp-details__marker::after {
	transform: scaleY(0);
}

.nv-pdp-details__summary:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: -2px;
}

.nv-pdp-details__content {
	padding: 0 0 22px;
	font-size: 0.88rem;
	line-height: 1.6;
	color: var(--nv-ink-60);
}

.nv-pdp-details__content p {
	margin: 0 0 0.7em;
}

.nv-pdp-details__content p:last-child {
	margin-bottom: 0;
}

/* Supplement-facts label photo inside the Key ingredients row. */
.nv-pdp-details__facts {
	display: block;
	width: 100%;
	height: auto;
	margin-top: 14px;
	border-radius: var(--nv-radius-sm);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

/* --- Assurances ------------------------------------------------------------ */

.nv-pdp__assurances {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 18px;
	margin-top: clamp(16px, 2vw, 22px);
}

.nv-pdp__assurance {
	font-family: var(--nv-mono);
	font-size: 0.74rem;
	letter-spacing: 0.03em;
	color: var(--nv-ink-60);
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.nv-pdp__assurance::before {
	content: "";
	width: 14px;
	height: 14px;
	border-radius: 50%;
	background: var(--nv-growth);
	flex: 0 0 auto;
}

@media (max-width: 980px) {
	.nv-pdp__media {
		position: static;
	}
}

@media (max-width: 620px) {
	.nv-pdp-actions {
		flex-wrap: wrap;
	}

	.nv-pdp-plan {
		padding-right: 14px;
	}

	.nv-pdp-plan__label,
	.nv-pdp-flavor {
		font-size: 1rem;
	}

	.nv-pdp-plan__price strong {
		font-size: 1rem;
	}

	.nv-pdp-plan__pricing {
		align-items: flex-end;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-pdp-gallery__slide,
	.nv-pdp-flavor,
	.nv-pdp-plan,
	.nv-pdp-plan__radio,
	.nv-pdp-freq__opt,
	.nv-pdp-gallery__thumb {
		transition: none;
	}
}

/* === PDP · Ingredient explorer ============================================ */

.nv-ingredients {
	padding-block: var(--nv-section-pad);
	background: var(--nv-beige);
}

.nv-ingredients__head {
	max-width: var(--wp--style--global--content-size, 1220px);
	margin: 0 auto clamp(28px, 4vw, 48px);
	padding-inline: clamp(20px, 5vw, 40px);
	text-align: center;
}

.nv-ingredients__title {
	font-family: var(--nv-serif);
	margin: 8px 0 0;
}

.nv-ingredients__layout {
	max-width: var(--wp--style--global--content-size, 1220px);
	margin-inline: auto;
	padding-inline: clamp(20px, 5vw, 40px);
	display: grid;
	grid-template-columns: minmax(220px, 300px) 1fr;
	gap: clamp(20px, 3vw, 44px);
	align-items: start;
}

.nv-ingredients__tabs {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 4px;
	max-height: 520px;
	overflow-y: auto;
}

.nv-ingredients__tab {
	width: 100%;
	text-align: left;
	border: 0;
	border-left: 2px solid transparent;
	background: transparent;
	font-family: var(--nv-sans);
	font-size: 1rem;
	font-weight: 600;
	color: var(--nv-ink-60);
	padding: 12px 16px;
	border-radius: var(--nv-radius-sm);
	cursor: pointer;
	transition:
		background 0.2s var(--nv-ease),
		color 0.2s var(--nv-ease);
}

.nv-ingredients__tab:hover {
	color: var(--nv-ink);
	background: var(--nv-white);
}

.nv-ingredients__tab.is-active {
	color: var(--nv-ink);
	background: var(--nv-white);
	border-left-color: var(--nv-orange);
	box-shadow: var(--nv-shadow-sm);
}

.nv-ingredients__tab:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 2px;
}

.nv-ingredients__panels {
	position: relative;
	background: var(--nv-white);
	border-radius: var(--nv-radius-lg);
	box-shadow: var(--nv-shadow-sm);
	padding: clamp(22px, 3vw, 40px);
	min-height: 340px;
}

.nv-ingredients__panel[hidden] {
	display: none;
}

.nv-ingredients__panel {
	display: grid;
	grid-template-columns: minmax(140px, 230px) 1fr;
	gap: clamp(20px, 3vw, 40px);
	align-items: center;
}

.nv-ingredients__media img {
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius-lg);
	display: block;
}

.nv-ingredients__name {
	font-family: var(--nv-serif);
	margin: 0;
}

.nv-ingredients__dose {
	font-family: var(--nv-mono);
	font-size: 0.82rem;
	letter-spacing: 0.03em;
	color: var(--nv-orange-deep);
	margin: 6px 0 0;
}

.nv-ingredients__how {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: clamp(16px, 2vw, 22px) 0 8px;
}

.nv-ingredients__benefits {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.nv-ingredients__benefits li {
	position: relative;
	padding-left: 22px;
	color: var(--nv-ink-80);
}

.nv-ingredients__benefits li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.5em;
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: var(--nv-growth);
}

@media (max-width: 980px) {
	.nv-ingredients__layout {
		grid-template-columns: 1fr;
	}

	.nv-ingredients__tabs {
		flex-direction: row;
		flex-wrap: nowrap;
		max-height: none;
		gap: 8px;
		padding-bottom: 6px;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
	}

	.nv-ingredients__tab {
		flex: 0 0 auto;
		border-left: 0;
		border-bottom: 2px solid transparent;
		scroll-snap-align: start;
	}

	.nv-ingredients__tab.is-active {
		border-left: 0;
		border-bottom-color: var(--nv-orange);
	}
}

@media (max-width: 620px) {
	.nv-ingredients__panel {
		grid-template-columns: 1fr;
	}

	.nv-ingredients__media {
		max-width: 220px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-ingredients__tab {
		transition: none;
	}
}

/* === PDP · Science & Quality cards ======================================== */

.nv-quality {
	padding-block: var(--nv-section-pad);
}

.nv-quality__head {
	margin-bottom: clamp(28px, 4vw, 52px);
	text-align: center;
}

.nv-quality__title {
	font-family: var(--nv-serif);
	margin: 8px 0 0;
}

.nv-quality__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: clamp(16px, 2vw, 28px);
}

.nv-quality__card {
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: clamp(24px, 2.5vw, 36px);
	background: var(--nv-white);
	border-radius: var(--nv-radius-lg);
	box-shadow: var(--nv-shadow-sm);
}

.nv-quality__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nv-orange) 12%, transparent);
	color: var(--nv-orange-deep);
}

.nv-quality__icon svg {
	width: 26px;
	height: 26px;
}

.nv-quality__label {
	font-family: var(--nv-serif);
	font-size: 1.25rem;
	margin: 0;
}

.nv-quality__text {
	margin: 0;
	color: var(--nv-ink-60);
}

@media (max-width: 980px) {
	.nv-quality__grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 620px) {
	.nv-quality__grid {
		grid-template-columns: 1fr;
	}
}

/* === PDP · Reviews (native display over Site Reviews data) ================ */

.nv-reviews {
	background: var(--nv-white);
	padding-block: var(--nv-section-pad);
}

/* The core/shortcode block wpautop()s before [novos_reviews] expands, which
   leaves a stray empty <p> ahead of the section markup — hide it. */
.nv-reviews > p:empty {
	display: none;
	margin: 0;
}

.nv-reviews__inner {
	max-width: var(--nv-container);
	margin-inline: auto;
	padding-inline: var(--nv-gutter);
	box-sizing: border-box;
}

.nv-reviews__head {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: clamp(20px, 3vw, 40px);
}

.nv-reviews__title {
	font-size: var(--nv-fs-h2);
	letter-spacing: -0.04em;
	line-height: 0.98;
	max-width: 14ch;
	margin: 0;
	text-wrap: balance;
}

.nv-reviews__orgline {
	color: var(--nv-ink);
	margin-top: clamp(-18px, -1vw, -8px);
}

.nv-reviews__thanks {
	margin: clamp(18px, 2vw, 26px) 0 0;
	padding: 14px 18px;
	font-size: 0.9rem;
	color: var(--nv-ink);
	background: color-mix(in srgb, var(--nv-growth) 14%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-growth) 36%, transparent);
	border-radius: var(--nv-radius-sm);
}

/* Aggregate score: big mono value with stars + count stacked beside it. */
.nv-reviews__score {
	display: flex;
	align-items: center;
	gap: 18px;
	flex-wrap: wrap;
}

.nv-reviews__score-value {
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: clamp(2.75rem, 3.9vw, 3.5rem);
	line-height: 1;
	letter-spacing: -0.04em;
	color: var(--nv-ink);
}

.nv-reviews__score .nv-rating__stars {
	font-size: 0.95rem;
	letter-spacing: 3px;
}

.nv-reviews__score-count {
	margin: 6px 0 0;
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	letter-spacing: 0.02em;
	color: var(--nv-ink-60);
}

/* "Write a review" CTA (renders only once novos_reviews_form_url is hooked). */
.nv-reviews__write {
	display: inline-block;
	margin-top: clamp(16px, 1.8vw, 24px);
	padding: 10px 18px;
	font-size: 0.8rem;
}

.nv-reviews__main {
	display: grid;
	margin-top: clamp(24px, 2.6vw, 40px);
}

.nv-reviews__tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-bottom: clamp(20px, 2.4vw, 30px);
}

.nv-reviews__tab {
	padding: 9px 17px;
	font-family: var(--nv-sans);
	font-weight: 600;
	font-size: 0.84rem;
	color: var(--nv-ink-80);
	background: var(--nv-beige);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--wp--custom--radius--pill, 999px);
	cursor: pointer;
	transition: border-color 0.2s var(--nv-ease), background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-reviews__tab:hover {
	border-color: var(--nv-ink-40);
}

.nv-reviews__tab.is-active {
	color: var(--nv-white);
	background: var(--nv-ink);
	border-color: var(--nv-ink);
}

/* Two cards per row on desktop; single column below 980px. Equal-height
   cards so a short review still fills the same slot as a clamped 3-liner. */
.nv-reviews__list {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 14px;
	align-items: stretch;
	transition: opacity 0.18s ease;
}

/* Fetch in flight: dim the stale cards so the tab click reads as acted-on. */
.nv-reviews__list.is-loading {
	opacity: 0.45;
	pointer-events: none;
}

.nv-review-card {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 11px;
	height: 100%;
	padding: 24px;
	background: var(--nv-beige);
	border-radius: var(--nv-radius-sm);
	box-sizing: border-box;
}

.nv-review-card__meta {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	width: 100%;
}

.nv-review-card__who {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	min-width: 0;
}

.nv-review-card .nv-rating__stars {
	font-size: 0.82rem;
	letter-spacing: 2px;
}

/* Figma: card meta stars are muted (orange is reserved for the aggregate). */
.nv-review-card .nv-rating__stars::after {
	color: var(--nv-ink-60);
}

.nv-review-card__name {
	font-family: var(--nv-mono);
	font-size: 0.82rem;
	letter-spacing: 0.02em;
	color: var(--nv-ink-60);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.nv-review-card__badge {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	flex: 0 0 auto;
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: 0.7rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--wp--preset--color--clinical-green);
}

.nv-review-card__badge--unverified {
	color: var(--nv-ink-40);
}

.nv-review-card__topics {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.nv-review-card__topic {
	display: inline-block;
	padding: 4px 12px;
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: 0.66rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-orange-deep);
	background: color-mix(in srgb, var(--nv-orange) 12%, transparent);
	border-radius: var(--wp--custom--radius--pill, 999px);
}

.nv-review-card__title {
	margin: 0;
	font-family: var(--nv-serif);
	font-weight: 600;
	font-size: 1.1rem;
	line-height: 1.2;
	letter-spacing: -0.015em;
	color: var(--nv-ink);
}

/* Always reserve 3 lines so short reviews match long ones; JS appends
   Read more only when the text actually overflows the clamp. */
.nv-review-card__text {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	min-height: calc(1.55em * 3);
	margin: 0;
	overflow: hidden;
	font-size: 0.9rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
}

.nv-review-card__text.is-expanded {
	display: block;
	-webkit-line-clamp: none;
	line-clamp: none;
	overflow: visible;
}

.nv-review-card__toggle {
	margin: auto 0 0;
	padding: 0;
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-orange-deep);
	background: none;
	border: 0;
	text-decoration: underline;
	text-underline-offset: 3px;
	cursor: pointer;
}

.nv-review-card__toggle:hover {
	color: var(--nv-ink);
}

.nv-reviews__empty {
	grid-column: 1 / -1;
	margin: 0;
	padding: clamp(22px, 2.6vw, 34px);
	font-size: 0.9rem;
	color: var(--nv-ink-60);
	background: var(--nv-beige);
	border-radius: var(--nv-radius-sm);
}

.nv-reviews__more {
	justify-self: center;
	margin-top: clamp(24px, 2.8vw, 44px);
	padding: 13px 28px;
	font-size: 0.9rem;
	cursor: pointer;
}

.nv-reviews__more.is-loading {
	opacity: 0.55;
	pointer-events: none;
}

.nv-reviews__disclaimer {
	max-width: 64ch;
	margin: clamp(32px, 4vw, 52px) 0 0;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.6;
	letter-spacing: 0.01em;
	color: var(--nv-ink-60);
}

@media (max-width: 980px) {
	.nv-reviews__head {
		flex-direction: column;
		align-items: flex-start;
	}

	.nv-reviews__tabs {
		flex-wrap: nowrap;
		overflow-x: auto;
		margin-inline: calc(-1 * var(--nv-gutter));
		padding-inline: var(--nv-gutter);
	}

	.nv-reviews__tab {
		flex: 0 0 auto;
	}

	.nv-reviews__list {
		grid-template-columns: 1fr;
	}
}

/* === PDP · Shop Other Products (cross-sell) =============================== */

.nv-cross {
	background: var(--nv-ink-05);
	padding-block: var(--nv-section-pad);
}

.nv-cross__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-cross__grid {
	list-style: none;
	margin: clamp(28px, 3vw, 44px) 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: clamp(16px, 1.67vw, 32px);
}

.nv-cross__card {
	display: grid;
	grid-template-columns: minmax(180px, 42%) 1fr;
	overflow: hidden;
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 5%, transparent);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
	transition: transform 0.3s var(--nv-ease), box-shadow 0.3s var(--nv-ease);
}

.nv-cross__card:hover {
	transform: translateY(-4px);
	box-shadow: var(--nv-shadow-lg);
}

.nv-cross__media {
	position: relative;
	display: grid;
	place-items: center;
	padding: clamp(18px, 2vw, 30px);
	min-height: 240px;
}

.nv-cross__media img {
	width: 100%;
	height: 100%;
	max-height: 240px;
	object-fit: contain;
	filter: drop-shadow(0 18px 22px color-mix(in srgb, var(--nv-ink) 22%, transparent));
}

.nv-cross__badge {
	position: absolute;
	top: 14px;
	left: 14px;
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-white);
	background: var(--nv-orange);
	padding: 0.4em 0.7em;
	border-radius: var(--wp--custom--radius--pill);
}

.nv-cross__body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 12px;
	padding: clamp(22px, 1.9vw, 36px) clamp(20px, 1.7vw, 32px) clamp(22px, 1.9vw, 36px) 0;
}

.nv-cross__name {
	font-family: var(--nv-sans);
	font-size: 1.02rem;
	font-weight: 700;
	line-height: 1.2;
	margin: 0;
}

.nv-cross__name a {
	color: var(--nv-ink);
	text-decoration: none;
	transition: color 0.2s var(--nv-ease);
}

.nv-cross__name a:hover {
	color: var(--nv-orange-deep);
}

.nv-cross__desc {
	margin: 0;
	font-size: 0.85rem;
	line-height: 1.5;
	max-width: 40ch;
	color: var(--nv-ink-60);
}

.nv-cross__chips {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 2px 0 0;
	padding: 0;
}

.nv-cross__chips li {
	font-size: 0.72rem;
	font-weight: 500;
	line-height: 1;
	padding: 0.65em 1em;
	color: var(--nv-ink-80);
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-white);
}

.nv-cross__cta {
	display: inline-flex;
	align-items: center;
	gap: 0.6em;
	margin-top: auto;
	padding: 0.75em 1.2em;
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	text-decoration: none;
	border-radius: var(--wp--custom--radius--thumb);
	color: var(--nv-white);
	background: var(--nv-ink);
	transition: background 0.2s var(--nv-ease);
}

.nv-cross__cta:hover {
	background: var(--nv-orange-deep);
	color: var(--nv-white);
}

.nv-cross__cta-price del {
	display: none;
}

.nv-cross__cta-price ins {
	text-decoration: none;
}

@media (max-width: 980px) {
	.nv-cross__grid {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 620px) {
	.nv-cross__card {
		grid-template-columns: 1fr;
	}

	.nv-cross__body {
		padding: 0 clamp(20px, 5vw, 32px) 24px;
	}
}

/* === PDP · Shared section head (serif h2 + note + swoosh) ================= */

.nv-sechead {
	display: grid;
	grid-template-columns: 1.1fr 0.9fr;
	gap: 30px;
	align-items: start;
}

.nv-sechead h2 {
	font-size: var(--nv-fs-h2);
	letter-spacing: -0.04em;
	line-height: 0.95;
	max-width: 14ch;
	margin: 0;
	text-wrap: balance;
}

.nv-sechead p {
	color: var(--nv-ink-80);
	font-size: clamp(1rem, 1.125vw, 1.35rem);
	line-height: 1.35;
	max-width: 48ch;
	justify-self: end;
	align-self: center;
	margin: 0;
}

.nv-sechead__orgline {
	color: var(--nv-ink-10);
}

@media (max-width: 980px) {
	.nv-sechead {
		grid-template-columns: 1fr;
		gap: 14px;
	}

	.nv-sechead p {
		justify-self: start;
	}
}

/* === PDP · Timeline of change (uniform card carousel) =====================
   One scroll-snap card rail at every breakpoint: square visual, metric chip,
   rule, label, copy. Arrows/drag/drift are the shared carousel behaviours in
   novos.js keyed off #nvTimelineRail. */

.nv-timeline {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0;
}

.nv-timeline__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-tl {
	margin-top: clamp(20px, 2.2vw, 36px);
}

.nv-tl__nav {
	margin-bottom: clamp(18px, 2vw, 30px);
}

.nv-tl__rail {
	display: flex;
	gap: 16px;
	align-items: stretch;
	overflow-x: auto;
	margin-right: calc(50% - 50vw);
	padding-right: var(--nv-gutter-wide);
}

.nv-tl__step {
	flex: 0 0 min(74vw, 300px);
	scroll-snap-align: start;
	display: flex;
	flex-direction: column;
}

.nv-tl__media {
	position: relative;
	aspect-ratio: 1 / 1;
	border-radius: var(--nv-radius-tile);
}

/* Scoped under .nv-tl__media so the explicit height outranks WooCommerce's
   `.woocommerce-page img { height: auto }` on product pages. */
.nv-tl__media .nv-tl__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: var(--nv-radius-tile);
	background: var(--nv-ink-05);
}

.nv-tl__metric {
	position: absolute;
	left: 18px;
	bottom: 16px;
	padding: 0.63em 0.9em;
	font-family: var(--nv-mono);
	font-size: 0.75rem;
	line-height: 1;
	color: var(--nv-ink);
	background: color-mix(in srgb, var(--nv-white) 88%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--wp--custom--radius--pill);
}

.nv-tl__rule {
	display: block;
	margin-top: 16px;
	border-top: 2px solid var(--nv-ink);
}

.nv-tl__label {
	margin-top: 12px;
	font-size: 1.35rem;
	font-weight: 500;
	line-height: 1.3;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
}

.nv-tl__body {
	margin-top: 14px;
}

.nv-tl__body h3 {
	font-family: var(--nv-sans);
	font-size: 1.02rem;
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.01em;
	margin: 0 0 9px;
	color: var(--nv-ink);
}

.nv-tl__body p {
	font-size: 0.96rem;
	line-height: 1.5;
	margin: 0;
	color: var(--nv-ink-60);
}

.nv-tl__tags {
	display: block;
	margin-top: 12px;
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--nv-orange);
}

.nv-tl__tags + .nv-tl__detail {
	margin-top: 8px;
}

.nv-tl__detail {
	display: inline-block;
	margin-top: 12px;
	padding-bottom: 4px;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.016em;
	text-decoration: none;
	color: var(--nv-ink);
	border-bottom: 1px solid var(--nv-ink);
	transition: color 0.2s var(--nv-ease), border-color 0.2s var(--nv-ease);
}

.nv-tl__detail:hover {
	color: var(--nv-orange-deep);
	border-color: var(--nv-orange-deep);
}

@media (max-width: 980px) {
	.nv-tl__nav {
		display: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-tl__detail {
		transition: none;
	}
}

/* === PDP · What sets NOVOS Core apart (comparison cards) ================== */

/* PDP sections alternate white / ink-05 so boundaries read without gaps. */
.nv-vs {
	background: var(--nv-ink-05);
	padding: var(--nv-section-pad) 0;
}

.nv-vs__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-vs__scroll {
	margin-top: clamp(24px, 3.4vw, 56px);
	overflow-x: auto;
}

/* One continuous, compressed card (timeline.com style): header row and
   benefit rows share a single white surface with hairline dividers — no
   gaps — and the hero column is a continuous soft-orange stripe painted by
   the touching cell backgrounds. --nv-row-pad drives the frozen-column
   offsets on mobile; retune it in one place only. */
.nv-vs__table {
	--nv-row-pad: 14px;
	--nv-vs-stripe: color-mix(in srgb, var(--nv-orange-soft) 40%, var(--nv-white));
	min-width: 880px;
	display: flex;
	flex-direction: column;
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	box-shadow: 0 4px 10px color-mix(in srgb, var(--nv-ink) 4%, transparent);
}

/* minmax(0, 1fr) everywhere: bare 1fr has an auto minimum, so the header
   grid and each row grid would resolve different track widths from their
   own content and the hero stripe would drift off-column. */
.nv-vs__headers {
	display: grid;
	grid-template-columns: minmax(200px, 320px) repeat(5, minmax(0, 1fr));
	gap: 0;
	padding-inline: var(--nv-row-pad);
	background: var(--nv-white);
	border-bottom: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius) var(--nv-radius) 0 0;
}

/* Hero column highlight starts in the header and runs into the rows. */
.nv-vs__headers .nv-vs__product:nth-child(2) {
	background: var(--nv-vs-stripe);
	border-radius: var(--nv-radius-sm) var(--nv-radius-sm) 0 0;
}

.nv-vs__product {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: flex-start;
	gap: 8px;
	padding: 12px 8px;
}

.nv-vs__product strong {
	font-size: clamp(0.78rem, 0.86vw, 1rem);
	font-weight: 700;
	letter-spacing: 0.016em;
	line-height: 1.2;
	text-transform: uppercase;
	text-align: center;
	color: var(--wp--preset--color--ink-90);
}

.nv-vs__tag {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.6rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	line-height: 1;
	text-transform: uppercase;
	white-space: nowrap;
	padding: 0.42em 0.9em;
	border-radius: var(--wp--custom--radius--pill);
	color: var(--nv-ink-80);
	background: color-mix(in srgb, var(--nv-ink-warm) 10%, var(--nv-beige));
}

.nv-vs__tag--hero {
	color: var(--nv-white);
	background: var(--nv-orange);
}

.nv-vs__row {
	display: grid;
	grid-template-columns: minmax(200px, 320px) repeat(5, minmax(0, 1fr));
	align-items: stretch;
	padding-inline: var(--nv-row-pad);
	background: var(--nv-white);
}

.nv-vs__row + .nv-vs__row {
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
}

.nv-vs__row:last-child {
	border-radius: 0 0 var(--nv-radius) var(--nv-radius);
}

.nv-vs__row:last-child .nv-vs__cell--hero {
	border-radius: 0 0 var(--nv-radius-sm) var(--nv-radius-sm);
}

.nv-vs__feature {
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: flex-start;
	gap: 2px;
	font-size: clamp(0.9rem, 0.86vw, 1.03rem);
	font-weight: 500;
	line-height: 1.3;
	color: var(--wp--preset--color--ink-90);
	max-width: 275px;
	padding-block: 6px;
	padding-right: 40px;
}

/* Sub-note under a feature label, e.g. "(Clinically studied)". */
.nv-vs__featnote {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.66rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	color: var(--nv-orange-deep);
}

.nv-vs__cell {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding-block: 4px;
}

.nv-vs__cell--hero {
	background: var(--nv-vs-stripe);
}

.nv-vs__check {
	position: relative;
	width: 28px;
	height: 28px;
	border-radius: var(--nv-radius-sm);
	background: var(--nv-orange);
}

.nv-vs__check::before {
	content: "";
	position: absolute;
	left: 50%;
	top: 50%;
	width: 11px;
	height: 6px;
	border-left: 2px solid var(--nv-white);
	border-bottom: 2px solid var(--nv-white);
	transform: translate(-50%, -62%) rotate(-45deg);
}

/* Competitor / non-hero checks stay gray; only the highlighted column is orange. */
.nv-vs__cell:not(.nv-vs__cell--hero) .nv-vs__check,
.nv-vs__check--plain {
	background: color-mix(in srgb, var(--nv-ink) 28%, var(--nv-beige));
}

.nv-vs__cell:not(.nv-vs__cell--hero) .nv-vs__check::before,
.nv-vs__check--plain::before {
	border-color: var(--nv-white);
}

.nv-vs__chip {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.68rem;
	font-weight: 600;
	line-height: 1.35;
	text-align: center;
	padding: 0.4em 0.9em;
	border-radius: var(--wp--custom--radius--thumb);
	color: var(--nv-ink-80);
	background: color-mix(in srgb, var(--nv-ink-warm) 10%, var(--nv-beige));
}

.nv-vs__dash {
	width: 12px;
	height: 2px;
	background: color-mix(in srgb, var(--nv-ink-warm) 16%, var(--nv-beige));
}

/* Hero value chip (Bar nutrition compare): every cell is a measured figure
   rather than a yes/no flag, so the NOVOS column is called out with the
   brand orange instead of a checkmark. */
.nv-vs__chip--hero {
	color: var(--nv-white);
	background: var(--nv-orange);
	font-size: 0.74rem;
}

/* Six-column variant (copy-doc Option 2): one extra competitor column. */
.nv-vs__table--six {
	min-width: 940px;
}

.nv-vs__table--six .nv-vs__headers,
.nv-vs__table--six .nv-vs__row {
	grid-template-columns: minmax(180px, 280px) repeat(6, minmax(0, 1fr));
}

/* Two-product variant (Boost vs NR): fits without horizontal scrolling.
   Doubled class: the mobile .nv-vs__table { min-width: 720px } rule sits
   later in the file at equal single-class specificity. */
.nv-vs__table.nv-vs__table--two {
	min-width: 0;
}

.nv-vs__table--two .nv-vs__headers,
.nv-vs__table--two .nv-vs__row {
	grid-template-columns: minmax(180px, 1.2fr) repeat(2, minmax(0, 1fr));
}

@media (max-width: 980px) {
	.nv-vs__table--two .nv-vs__headers,
	.nv-vs__table--two .nv-vs__row {
		grid-template-columns: minmax(110px, 1fr) repeat(2, minmax(92px, 1fr));
	}
}

/* Four-product variant (Vital vs other gummies): one product column fewer
   than the default five-competitor grid. Doubled class for the min-width,
   same reason as --two. */
.nv-vs__table.nv-vs__table--four {
	min-width: 780px;
}

.nv-vs__table--four .nv-vs__headers,
.nv-vs__table--four .nv-vs__row {
	grid-template-columns: minmax(200px, 320px) repeat(4, minmax(0, 1fr));
}

@media (max-width: 980px) {
	.nv-vs__table.nv-vs__table--four {
		min-width: 620px;
	}

	.nv-vs__table--four .nv-vs__headers,
	.nv-vs__table--four .nv-vs__row {
		grid-template-columns: minmax(136px, 190px) repeat(4, minmax(104px, 1fr));
	}
}

/* Five-product variant (Bar vs four bar categories): one product column
   more than --four, same treatment. */
.nv-vs__table.nv-vs__table--five {
	min-width: 880px;
}

.nv-vs__table--five .nv-vs__headers,
.nv-vs__table--five .nv-vs__row {
	grid-template-columns: minmax(200px, 300px) repeat(5, minmax(0, 1fr));
}

@media (max-width: 980px) {
	.nv-vs__table.nv-vs__table--five {
		min-width: 700px;
	}

	.nv-vs__table--five .nv-vs__headers,
	.nv-vs__table--five .nv-vs__row {
		grid-template-columns: minmax(130px, 180px) repeat(5, minmax(96px, 1fr));
	}
}

/* Three-product variant (Core+Boost bundle vs two categories): fits
   without horizontal scrolling, same treatment as --two. */
.nv-vs__table.nv-vs__table--three {
	min-width: 0;
}

.nv-vs__table--three .nv-vs__headers,
.nv-vs__table--three .nv-vs__row {
	grid-template-columns: minmax(200px, 1.4fr) repeat(3, minmax(0, 1fr));
}

@media (max-width: 980px) {
	.nv-vs__table--three .nv-vs__headers,
	.nv-vs__table--three .nv-vs__row {
		grid-template-columns: minmax(120px, 1fr) repeat(3, minmax(92px, 1fr));
	}
}

/* Sentence-length cells (Boost "stack" ledger): left-aligned prose instead
   of centered check/chip glyphs. */
.nv-vs__cell--text {
	justify-content: flex-start;
	text-align: left;
	font-size: clamp(0.86rem, 0.9vw, 0.98rem);
	line-height: 1.45;
	color: var(--nv-ink-80);
	padding: 14px 16px;
}

/* Stack section: the highlighted stripe moves to the Core column (the
   product being cross-sold), not the first product column. */
.nv-vs--stack .nv-vs__headers .nv-vs__product:nth-child(2) {
	background: transparent;
	border-radius: 0;
}

.nv-vs--stack .nv-vs__headers .nv-vs__product--hero {
	background: var(--nv-vs-stripe);
	border-radius: var(--nv-radius-sm) var(--nv-radius-sm) 0 0;
}

.nv-vs__foot {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 18px;
	margin-top: clamp(22px, 2.6vw, 40px);
}

.nv-vs__disclaimer {
	margin: 0;
	max-width: 72ch;
	font-size: 0.78rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

/* Where the table fits without horizontal scrolling, the wrapper stops
   clipping and the header row freezes against the page scroll (a sticky
   top row inside an overflow wrapper would instead be pushed down over the
   first data row, so it only applies here). */
@media (min-width: 1080px) {
	.nv-vs__scroll {
		overflow: visible;
	}

	.nv-vs__headers {
		top: calc(var(--nv-nav-h) + 12px);
		z-index: 3;
	}
}

@media (max-width: 980px) {
	.nv-vs__table--six {
		min-width: 820px;
	}

	.nv-vs__table--six .nv-vs__headers,
	.nv-vs__table--six .nv-vs__row {
		grid-template-columns: minmax(128px, 170px) repeat(6, minmax(96px, 1fr));
	}
}

@media (max-width: 980px) {
	.nv-vs__cell {
		min-height: 38px;
	}

	.nv-vs__chip {
		white-space: normal;
		text-align: center;
	}

	/* Header tags ("The #1 Standard", etc.) overflow the narrow product
	   columns on mobile; product names alone are enough at this width. */
	.nv-vs__tag {
		display: none;
	}

	.nv-vs__product {
		gap: 0;
		padding-block: 14px 10px;
	}

	/* Freeze the feature column (timeline.com-style): the product columns
	   scroll horizontally behind a sticky, opaque first column. */
	.nv-vs__headers,
	.nv-vs__row {
		grid-template-columns: minmax(136px, 190px) repeat(5, minmax(104px, 1fr));
	}

	/* The frozen column's rounded corners leave notches the scrolling cells
	   would peek through; rounding the scroll clip itself trims them. */
	.nv-vs__scroll {
		border-radius: var(--nv-radius);
	}

	.nv-vs__table {
		min-width: 720px;
	}

	.nv-vs__spacer,
	.nv-vs__feature {
		position: sticky;
		left: 0;
		z-index: 2;
	}

	/* Stretch over the shared inline padding so scrolling cells can't peek
	   out left of the frozen column. */
	.nv-vs__spacer,
	.nv-vs__row .nv-vs__feature {
		margin-left: calc(-1 * var(--nv-row-pad));
		padding-left: var(--nv-row-pad);
		background: var(--nv-white);
	}

	.nv-vs__spacer {
		border-radius: var(--nv-radius) 0 0 0;
	}

	.nv-vs__row:last-child .nv-vs__feature {
		border-radius: 0 0 0 var(--nv-radius);
	}

	.nv-vs__row .nv-vs__feature::after {
		content: "";
		position: absolute;
		top: 0;
		bottom: 0;
		right: -14px;
		width: 14px;
		background: linear-gradient(to right, color-mix(in srgb, var(--nv-ink) 7%, transparent), transparent);
	}
}

/* === PDP · The gold standard (RCT markers) ================================
   Simple statement section: headline + lead, then the three vascular-aging
   markers measured in the randomized human trial (FMD / PWV / SBP). */

/* --- Benchmark statement (PDP transition band) ------------------------------
   Single legal-approved line bridging the comparison table and the clinical
   trial section: the claim, then the proof. */

.nv-benchline {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0 0;
}

.nv-benchline__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
	text-align: center;
}

.nv-benchline__text {
	font-family: var(--nv-serif);
	font-weight: 500;
	font-size: clamp(1.55rem, 3vw, 2.5rem);
	line-height: 1.14;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
	max-width: 26ch;
	margin: 0 auto;
	text-wrap: balance;
}

.nv-gold {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0;
}

.nv-gold__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-gold__head {
	display: grid;
	grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
	gap: clamp(28px, 4vw, 72px);
	align-items: start;
}

.nv-gold__copy {
	min-width: 0;
}

.nv-gold__eyebrow {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	margin: 0 0 14px;
	color: var(--nv-orange-deep);
}

.nv-gold__copy h2 {
	font-size: var(--nv-fs-h2);
	letter-spacing: -0.04em;
	line-height: 1.02;
	margin: 0;
	max-width: 18ch;
	text-wrap: balance;
}

.nv-gold__lead {
	font-size: clamp(1.02rem, 1.15vw, 1.25rem);
	line-height: 1.5;
	letter-spacing: 0.012em;
	margin: clamp(16px, 1.8vw, 26px) 0 0;
	color: color-mix(in srgb, var(--nv-ink) 78%, transparent);
	max-width: 62ch;
}

.nv-gold__pull {
	margin: 0;
	padding-top: clamp(28px, 3.2vw, 52px);
	flex-wrap: wrap;
}

.nv-gold__quote {
	font-family: var(--nv-serif);
	font-size: clamp(1.15rem, 1.35vw, 1.45rem);
	font-weight: 600;
	line-height: 1.35;
	letter-spacing: -0.015em;
	margin: 0 0 clamp(16px, 1.5vw, 24px);
	color: var(--nv-ink);
	text-wrap: pretty;
}

.nv-gold__cite {
	display: flex;
	flex-direction: column;
	gap: 3px;
	margin: 0;
	padding-left: 18px;
	border-left: 2px solid var(--nv-orange);
}

.nv-gold__cite strong {
	display: block;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--nv-ink);
}

.nv-gold__cite em {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.64rem;
	letter-spacing: 0.04em;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-gold__markers {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(14px, 1.4vw, 24px);
	margin: clamp(24px, 2.8vw, 48px) 0;
}

.nv-gold__marker {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: clamp(20px, 1.8vw, 30px) clamp(18px, 1.6vw, 26px);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	background: linear-gradient(148deg, var(--nv-beige) 0%, color-mix(in srgb, var(--nv-beige) 92%, var(--nv-ink-warm)) 100%);
}

.nv-gold__abbr {
	align-self: flex-start;
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	padding: 0.45em 0.95em;
	border-radius: var(--wp--custom--radius--pill);
	color: var(--nv-white);
	background: var(--nv-orange);
	margin-bottom: 8px;
}

.nv-gold__marker h3 {
	font-family: var(--nv-serif);
	font-size: clamp(1.25rem, 1.35vw, 1.6rem);
	font-weight: 600;
	line-height: 1.1;
	letter-spacing: -0.02em;
	margin: 0;
	color: var(--nv-ink);
}

.nv-gold__sub {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	margin: 0;
	color: var(--nv-ink-60);
}

.nv-gold__desc {
	font-size: 0.9rem;
	line-height: 1.45;
	letter-spacing: 0.012em;
	margin: 6px 0 0;
	color: color-mix(in srgb, var(--nv-ink) 72%, transparent);
}

.nv-gold__note {
	font-size: 0.82rem;
	line-height: 1.5;
	margin: clamp(18px, 2vw, 30px) 0 0;
	color: var(--nv-ink-60);
}

.nv-gold__note a {
	color: var(--nv-orange-deep);
	font-weight: 650;
	text-decoration: underline;
	text-underline-offset: 2px;
}

@media (max-width: 980px) {
	.nv-gold__head {
		grid-template-columns: 1fr;
		gap: clamp(22px, 3vw, 36px);
	}

	.nv-gold__pull {
		padding-top: 0;
	}

	.nv-gold__markers {
		grid-template-columns: 1fr;
	}
}

/* === PDP · Daily ritual + ingredient ledger =============================== */

.nv-ritual {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0;
}

.nv-ritual__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-ritual__row {
	display: grid;
	grid-template-columns: 1fr minmax(300px, 397px);
	gap: 24px;
	align-items: stretch;
	margin-block: clamp(28px, 3.3vw, 64px);
}

.nv-ritual__video {
	position: relative;
	overflow: hidden;
	border-radius: clamp(24px, 2.08vw, 40px);
	background: var(--nv-ink-05);
	min-height: 320px;
}

.nv-ritual__video video,
.nv-ritual__video img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* Footer note lines under the ritual steps (Boost storage/energy notes). */
.nv-ritual__foot {
	margin: 10px 0 0;
	font-size: 0.86rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-ritual__foot:first-of-type {
	margin-top: auto;
	padding-top: 14px;
}

.nv-ritual__card {
	display: flex;
	flex-direction: column;
	padding: 29px;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	background: linear-gradient(148deg, var(--nv-beige) 0%, color-mix(in srgb, var(--nv-beige) 92%, var(--nv-ink-warm)) 100%);
}

.nv-ritual__card h3 {
	font-family: var(--nv-serif);
	font-size: 1.45rem;
	font-weight: 600;
	line-height: 0.98;
	letter-spacing: -0.02em;
	margin: 0 0 5px;
	color: var(--nv-ink);
}

.nv-ritual__sub {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	line-height: 1.58;
	margin: 0;
	color: var(--nv-ink-60);
}

/* Body copy inside the ritual card (Bar's story section): a full sentence
   rather than the short mono eyebrow, so it gets normal sentence case. */
.nv-ritual__body {
	font-size: 0.92rem;
	line-height: 1.6;
	margin: 0 0 16px;
	color: var(--nv-ink-80);
}

/* Developer/scientist credit row under the Bar story split module: plain
   name + credential pairs, reusing the trust-rail meta typography without
   the marquee/portrait chrome. */
.nv-story__credits {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: clamp(20px, 3vw, 56px);
	list-style: none;
	margin: clamp(28px, 3vw, 48px) 0 0;
	padding: clamp(24px, 2.4vw, 36px) 0 0;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	text-align: center;
}

.nv-story__credits .nv-trust__advisor-meta {
	align-items: center;
}

.nv-ritual__steps {
	list-style: none;
	margin: 0;
	padding: 0;
	counter-reset: nv-step;
}

.nv-ritual__steps li {
	counter-increment: nv-step;
	display: grid;
	grid-template-columns: 28px 1fr;
	gap: 0 14px;
	padding-top: clamp(12px, 0.9vw, 17px);
}

.nv-ritual__steps li::before {
	content: counter(nv-step);
	grid-row: 1 / span 2;
	font-family: var(--nv-serif);
	font-size: 1.7rem;
	font-weight: 600;
	line-height: 1;
	color: var(--nv-orange);
}

.nv-ritual__steps strong {
	font-size: 1.08rem;
	font-weight: 700;
	line-height: 1.45;
	color: var(--nv-ink);
}

.nv-ritual__steps span {
	grid-column: 2;
	font-size: 0.88rem;
	line-height: 1.58;
	color: var(--nv-ink-60);
}

/* --- Ingredient ledger panel --- */
.nv-ledger {
	display: grid;
	grid-template-columns: minmax(320px, 41.5%) 1fr;
	overflow: hidden;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
	border-radius: var(--nv-radius-sm);
	background: var(--nv-paper);
}

.nv-ledger__media {
	position: relative;
	min-height: 620px;
	background: var(--nv-ink-05);
}

/* Natural aspect, pinned top: the photo carries baked-in copy that a
   full-height cover crop would cut; the panel bg fills the remainder. */
.nv-ledger__media img {
	position: absolute;
	inset: 0 0 auto;
	width: 100%;
	height: auto;
	display: block;
}

.nv-ledger__chips {
	position: absolute;
	left: 28px;
	right: clamp(28px, 9vw, 144px);
	bottom: 44px;
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.nv-ledger__chips span {
	padding: 13px 19px;
	font-size: 0.92rem;
	font-weight: 700;
	letter-spacing: -0.01em;
	line-height: 1.1;
	color: var(--nv-ink);
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
}

.nv-ledger__body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 18px;
	padding: clamp(28px, 3.3vw, 64px) clamp(24px, 3.2vw, 62px);
	background: color-mix(in srgb, var(--nv-beige) 60%, var(--nv-white));
}

.nv-ledger__pill {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	line-height: 1.5;
	padding: 0.42em 0.85em;
	border-radius: var(--wp--custom--radius--pill);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	color: color-mix(in srgb, var(--nv-growth) 62%, var(--nv-ink));
	background: color-mix(in srgb, var(--nv-growth) 28%, var(--nv-white));
}

/* Two-line lockup (manual <br>); sized so the longer second line fits the
   panel without rewrapping. */
.nv-ledger__body h2 {
	font-size: clamp(1.9rem, 3vw, 3.6rem);
	font-weight: 600;
	line-height: 1.02;
	letter-spacing: -0.04em;
	margin: 0;
	color: var(--nv-ink);
}

.nv-ledger__sub {
	font-size: clamp(1rem, 1.125vw, 1.35rem);
	line-height: 1.34;
	margin: 0;
	color: var(--nv-ink-80);
}

/* Names-only ingredient chips (full details live in the drawer). */
.nv-ledger__names {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 6px 0 0;
	padding: 0;
}

.nv-ledger__names li {
	padding: 0.55em 1em;
	font-size: 0.86rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	line-height: 1.1;
	color: var(--nv-ink-80);
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--wp--custom--radius--pill);
}

.nv-ledger__rows {
	list-style: none;
	margin: 0;
	padding: 11px 0 0;
	width: 100%;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-ledger__row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	padding: 18px 0 19px;
	border-bottom: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-ledger__row strong {
	font-size: 1.03rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	line-height: 1.5;
	color: var(--nv-ink);
}

.nv-ledger__row span {
	font-family: var(--nv-mono);
	font-size: 0.76rem;
	line-height: 1.5;
	white-space: nowrap;
	color: var(--nv-ink-40);
}

/* Bundle-only: the standalone "NOVOS Boost" callout beneath the Core
   ingredient chips (Core+Boost is two formulas, not one drink mix). */
.nv-ledger__boost {
	width: 100%;
	padding: clamp(16px, 1.6vw, 22px) clamp(18px, 1.8vw, 26px);
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--nv-radius-sm);
}

.nv-ledger__boost strong {
	display: block;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-orange);
	margin-bottom: 6px;
}

.nv-ledger__boost p {
	margin: 0;
	font-size: 0.94rem;
	line-height: 1.4;
	color: var(--nv-ink-80);
}

.nv-ledger__bottom {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	width: 100%;
	/* With the inline ingredient list removed (drawer covers it), anchor the
	   note + CTA to the panel bottom instead of floating mid-panel. */
	margin-top: auto;
	padding-top: 10px;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-ledger__note {
	font-family: var(--nv-mono);
	font-size: 0.76rem;
	line-height: 1.35;
	color: var(--nv-ink-60);
}

.nv-ledger__cta {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	line-height: 1.35;
	padding-bottom: 5px;
	text-decoration: none;
	white-space: nowrap;
	color: var(--nv-ink);
	border-bottom: 1px solid var(--nv-ink);
	transition: color 0.2s var(--nv-ease), border-color 0.2s var(--nv-ease);
}

.nv-ledger__cta:hover {
	color: var(--nv-orange-deep);
	border-color: var(--nv-orange-deep);
}

@media (max-width: 980px) {
	.nv-ritual__row {
		grid-template-columns: 1fr;
	}

	.nv-ritual__video {
		aspect-ratio: 16 / 10;
		min-height: 0;
	}

	.nv-ledger {
		grid-template-columns: 1fr;
	}

	.nv-ledger__media {
		min-height: 0;
		aspect-ratio: 1 / 1;
	}

	.nv-ledger__chips {
		right: 28px;
		bottom: 24px;
	}

	.nv-ledger__bottom {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* === PDP · Brand promise (nv-intro shell, white panel) ====================
   Tighter vertical rhythm than the homepage intro (PDP feedback 2026-07). */

.nv-intro--pdp {
	padding-block: clamp(20px, 2.4vw, 40px);
}

.nv-intro--pdp .nv-intro__panel {
	width: min(100%, 1600px);
	gap: clamp(28px, 3.2vw, 56px);
	padding-block: clamp(30px, 4vw, 60px);
}

.nv-intro--pdp .nv-intro__copy {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(16px, 1.6vw, 28px);
}

.nv-intro__headline {
	font-family: var(--nv-serif);
	font-size: var(--wp--preset--font-size--panel-display);
	font-weight: 500;
	line-height: 1.2;
	letter-spacing: -0.027em;
	text-align: center;
	max-width: 1050px;
	margin: 0;
	color: var(--nv-ink);
}

.nv-intro__sub {
	font-size: clamp(1.1rem, 1.67vw, 2rem);
	line-height: 1.25;
	letter-spacing: 0.016em;
	text-align: center;
	margin: 0;
	color: var(--nv-ink-60);
}

.nv-intro__headline-ref {
	font-size: 0.45em;
	color: var(--nv-ink-60);
}

.nv-intro__note {
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	letter-spacing: 0.04em;
	line-height: 1.5;
	text-align: center;
	margin: 0;
	color: var(--nv-ink-40);
}

/* Closing coda (all PDPs): the benefit cards lead the section, so the
   headline/stat punctuates it at a step down from the panel display size. */
.nv-intro__copy--coda {
	gap: clamp(10px, 1vw, 18px);
}

.nv-intro__copy--coda .nv-intro__headline {
	font-size: clamp(1.5rem, 2.2vw, 2.6rem);
}

.nv-intro__copy--coda .nv-intro__sub {
	font-size: clamp(1rem, 1.25vw, 1.4rem);
}

.nv-benefit-points {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: clamp(20px, 2vw, 38px);
	width: 100%;
}

.nv-benefit-point {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(10px, 0.83vw, 16px);
}

.nv-benefit-point__rule {
	width: 100%;
	height: 1px;
	background: linear-gradient(90deg, var(--nv-orange) 0%, var(--nv-orange-soft) 100%);
}

.nv-benefit-point h3 {
	font-family: var(--nv-sans);
	font-size: clamp(1rem, 1.125vw, 1.35rem);
	font-weight: 600;
	line-height: 1.12;
	margin: 0;
	text-align: center;
	color: var(--nv-orange);
}

.nv-benefit-point p {
	font-size: clamp(0.875rem, 0.83vw, 1rem);
	line-height: 1.35;
	letter-spacing: 0.016em;
	margin: 0;
	text-align: center;
	color: color-mix(in srgb, var(--nv-ink) 84%, transparent);
}

@media (max-width: 980px) {
	.nv-benefit-points {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 24px 20px;
	}

	.nv-benefit-points .nv-benefit-point:last-child {
		grid-column: 1 / -1;
	}
}

/* ---------- Benefit cards (individual cards with evidence drawers) -------- */

.nv-benefit-points--cards {
	align-items: stretch;
}

/* Three-card layout (Boost benefits): fill the panel width. Mobile keeps
   the shared two-column stacking from the base rules. */
@media (min-width: 981px) {
	.nv-benefit-points--three {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/* Boost's three cards are the section hero (design feedback 2026-07):
   roughly double the five-card scale, with the NAD+ line demoted to a
   supporting statement below them. */
.nv-benefit-points--three .nv-benefit-point--card {
	gap: clamp(14px, 1.2vw, 22px);
	padding: clamp(32px, 3vw, 60px) clamp(28px, 2.6vw, 52px);
}

.nv-benefit-points--three .nv-benefit-point--card .nv-benefit-point__num {
	font-size: 0.95rem;
}

.nv-benefit-points--three .nv-benefit-point--card .nv-benefit-point__rule {
	width: 52px;
	margin-block: 4px 8px;
}

.nv-benefit-points--three .nv-benefit-point--card h3 {
	font-size: clamp(1.6rem, 2.2vw, 2.7rem);
	line-height: 1.08;
}

.nv-benefit-points--three .nv-benefit-point--card p {
	font-size: clamp(1.05rem, 1.3vw, 1.55rem);
	line-height: 1.42;
}

.nv-benefit-points--three .nv-benefit-point__more {
	margin-top: clamp(18px, 1.8vw, 30px);
	padding-top: clamp(16px, 1.4vw, 22px);
	font-size: 0.92rem;
}

/* At the hero scale the two-column mobile stack wraps titles onto three
   lines — stack the three cards full-width instead. */
@media (max-width: 980px) {
	.nv-benefit-points--three {
		grid-template-columns: 1fr;
	}
}

/* Seven-card layout (Vital organ systems): 4 + 3 on desktop. Mobile keeps
   the shared two-column stacking (3 × 2 + last card full-width). */
@media (min-width: 981px) {
	.nv-benefit-points--vital {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

/* Six-card layout (Core+Boost bundle benefits): 3 × 2 on desktop, default
   card scale (same size as the five-card promise layout). Mobile keeps the
   shared two-column stacking. */
@media (min-width: 981px) {
	.nv-benefit-points--six {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.nv-benefit-point--card {
	position: relative;
	align-items: flex-start;
	gap: 12px;
	padding: clamp(22px, 2vw, 36px) clamp(20px, 1.8vw, 30px);
	border-radius: var(--nv-radius);
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	box-shadow: 0 4px 10px color-mix(in srgb, var(--nv-ink) 4%, transparent);
	text-align: left;
	transition: transform 0.2s var(--nv-ease), border-color 0.2s var(--nv-ease), box-shadow 0.2s var(--nv-ease);
}

/* Photo variant (Core PDP): the band bleeds to the card edges, so the card
   clips to its own radius and drops its top padding. `max-height` keeps the
   band shallow when a card goes full-width — the last card spans both columns
   below 980px, where a straight 3/2 would be enormous. */
.nv-benefit-point--photo {
	overflow: hidden;
	padding-top: 0;
}

.nv-benefit-point__media {
	align-self: stretch;
	margin-inline: calc(-1 * clamp(20px, 1.8vw, 30px));
	margin-bottom: clamp(6px, 0.6vw, 12px);
	aspect-ratio: 3 / 2;
	overflow: hidden;
	background: var(--nv-ink-05);
}

.nv-benefit-point__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center var(--nv-benefit-focus, 30%);
}

/* The photos ship uncropped and square, so the band chooses its own window.
   Every subject's head sits within the top ~10% of the frame, which a centred
   window cuts off — these pull each one up to the point where the face clears
   the top edge, and they hold at the shallower band the wider cards get. */
.nv-benefit-point__media--cardiovascular,
.nv-benefit-point__media--healthy-aging,
.nv-benefit-point__media--energy {
	--nv-benefit-focus: 5%;
}

.nv-benefit-point__media--sleep {
	--nv-benefit-focus: 40%;
}

/* Below 980px the grid drops to 2-up and the fifth card spans both columns,
   where a 3/2 band would stand ~550px tall. A wider ratio keeps it in step
   with the paired cards above it (~276px against their ~269px). */
@media (max-width: 980px) {
	.nv-benefit-points--cards .nv-benefit-point:last-child .nv-benefit-point__media {
		aspect-ratio: 3 / 1;
	}
}

.nv-benefit-point--card:hover {
	transform: translateY(-3px);
	border-color: color-mix(in srgb, var(--nv-orange) 35%, transparent);
	box-shadow: 0 10px 24px color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-benefit-point--card .nv-benefit-point__num {
	font-family: var(--nv-mono);
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	color: var(--nv-orange);
}

/* Checkmark glyph in place of a numbered pill (Bar's quality checklist:
   independent, non-sequential claims). */
.nv-benefit-point__check {
	color: var(--nv-orange);
}

.nv-benefit-point--card .nv-benefit-point__rule {
	width: 32px;
	margin-block: 2px 4px;
}

.nv-benefit-point--card h3 {
	text-align: left;
	font-size: clamp(1.2rem, 1.45vw, 1.75rem);
}

.nv-benefit-point--card p {
	text-align: left;
	flex: 1 1 auto;
	font-size: clamp(0.95rem, 1vw, 1.2rem);
	line-height: 1.4;
}

/* The link renders as a full-width footer row inside the card, and its
   ::after stretches over the whole card so the entire card is the click
   target (drawer.js delegates on the anchor; href stays the no-JS fallback). */
.nv-benefit-point__more {
	margin-top: 14px;
	align-self: stretch;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	padding-top: clamp(12px, 1vw, 16px);
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	font-family: var(--nv-mono);
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--nv-ink-80);
	text-decoration: none;
	transition: color 0.2s var(--nv-ease);
}

.nv-benefit-point__more::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: var(--nv-radius);
}

.nv-benefit-point__more:focus-visible {
	outline: none;
}

.nv-benefit-point__more:focus-visible::after {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

.nv-benefit-point__arrow {
	transition: transform 0.2s var(--nv-ease);
	display: inline-block;
}

.nv-benefit-point--card:hover .nv-benefit-point__more {
	color: var(--nv-orange);
}

.nv-benefit-point--card:hover .nv-benefit-point__arrow {
	transform: translateX(4px);
}

@media (prefers-reduced-motion: reduce) {
	.nv-benefit-point--card,
	.nv-benefit-point__arrow {
		transition: none;
	}

	.nv-benefit-point--card:hover {
		transform: none;
	}
}

/* ---------- Studies grid: evidence card "see the study" link ------------- */

.nv-evidence--link {
	position: relative;
}

.nv-evidence__more {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: 12px;
	font-family: var(--nv-mono);
	font-size: 0.74rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--nv-orange);
	text-decoration: none;
	transition: color 0.2s var(--nv-ease);
}

.nv-evidence__more span {
	transition: transform 0.2s var(--nv-ease);
}

.nv-evidence__more:hover span {
	transform: translateX(3px);
}

/* ---------- Customer quote ticker (Section 2) ---------------------------- */

.nv-press--quotes {
	background: var(--nv-beige);
	border-block: 1px solid color-mix(in srgb, var(--nv-ink) 7%, transparent);
}

.nv-press--quotes .nv-press__kicker {
	display: flex;
	flex-direction: column;
	gap: 3px;
}

.nv-press__kicker-note {
	font-size: 0.64rem;
	letter-spacing: 0.04em;
	color: var(--nv-ink-40);
	text-transform: none;
}

.nv-press--quotes .nv-ticker__track {
	animation-duration: 46s;
}

.nv-press--quotes .nv-ticker__track > * {
	margin-right: clamp(28px, 4vw, 56px);
}

.nv-press--quotes .nv-ticker__track span {
	display: inline-flex;
	align-items: baseline;
	gap: 10px;
	font-size: clamp(1rem, 1.5vw, 1.3rem);
	font-weight: 600;
	color: var(--nv-ink-80);
	filter: none;
}

.nv-press--quotes .nv-ticker__track span em {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	white-space: nowrap;
}

/* === PDP · Clinically proven benefits (nv-intro shell, clinical cards) ==== */

.nv-intro--clinical .nv-intro__panel {
	width: min(100%, 1352px);
	gap: clamp(28px, 2.9vw, 56px);
}

.nv-intro--clinical .nv-intro__copy {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(16px, 1.6vw, 30px);
}

.nv-intro__sub--narrow {
	font-size: clamp(1.05rem, 1.25vw, 1.5rem);
	line-height: 1.4;
	max-width: 46ch;
}

.nv-clinical__connect {
	font-size: 0.85rem;
	font-weight: 600;
	letter-spacing: 0.016em;
	text-decoration: none;
	color: var(--nv-orange);
	transition: color 0.2s var(--nv-ease);
}

.nv-clinical__connect:hover {
	color: var(--nv-orange-deep);
}

.nv-clinical__cards {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(14px, 1vw, 20px);
	width: min(100%, 1192px);
}

.nv-clinical-card {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	padding: clamp(18px, 1.35vw, 26px);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 14%, transparent);
	border-radius: var(--nv-radius);
	background: var(--nv-white);
}

.nv-clinical-card__eyebrow {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	margin: 0 0 14px;
	color: var(--nv-ink-60);
}

.nv-clinical-card__stat {
	font-family: var(--nv-mono);
	font-size: clamp(1.9rem, 1.98vw, 2.38rem);
	font-weight: 500;
	line-height: 1;
	margin: 0 0 10px;
	color: var(--nv-orange);
}

.nv-clinical-card__stat span {
	font-size: 0.42em;
	margin-left: 0.5em;
	color: var(--nv-ink-60);
}

.nv-clinical-card__label {
	font-size: 0.9rem;
	line-height: 1.35;
	margin: 0 0 16px;
	color: var(--nv-ink-80);
}

.nv-clinical-card__rule {
	width: 100%;
	height: 1px;
	border: 0;
	margin: 0 0 14px;
	background: color-mix(in srgb, var(--nv-ink) 12%, transparent);
}

.nv-clinical-card__chart {
	width: 100%;
	margin-bottom: 16px;
}

.nv-clinical-card__chart svg {
	width: 100%;
	height: 34px;
	display: block;
	color: var(--nv-ink-40);
}

.nv-clinical-card__axis {
	display: flex;
	justify-content: space-between;
	margin-top: 6px;
	font-family: var(--nv-mono);
	font-size: 0.62rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

.nv-clinical-card__desc {
	font-size: 0.86rem;
	line-height: 1.5;
	margin: 0 0 16px;
	color: var(--nv-ink-60);
}

.nv-clinical-card__link {
	margin-top: auto;
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.01em;
	text-decoration: underline;
	text-underline-offset: 4px;
	color: var(--nv-orange);
	transition: color 0.2s var(--nv-ease);
}

.nv-clinical-card__link:hover {
	color: var(--nv-orange-deep);
}

.nv-clinical__footnote {
	width: min(100%, 1192px);
}

.nv-clinical__footnote p {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.6;
	margin: 0 0 0.8em;
	color: var(--nv-ink-40);
}

.nv-clinical__footnote strong {
	font-weight: 600;
	color: var(--nv-ink-60);
}

.nv-clinical__footnote a {
	color: var(--nv-orange);
	text-decoration: underline;
	text-underline-offset: 3px;
}

@media (max-width: 980px) {
	.nv-clinical__cards {
		grid-template-columns: 1fr;
	}
}

/* === PDP · Clinician reviews (FrontrowMD) ================================= */

.nv-clinicians {
	background: var(--nv-ink-05);
	padding: var(--nv-section-pad) var(--nv-gutter-wide);
}

.nv-clinicians__panel {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
	padding: clamp(28px, 3.3vw, 64px) clamp(20px, 5vw, 96px);
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	box-shadow: var(--nv-shadow-sm);
}

.nv-clinicians .fr-testimonials iframe.iframe-frontrow-testimonials {
	width: 100%;
}

/* Practitioner-program bar (moved here from the scientists section). */
.nv-clinicians__program {
	margin-bottom: clamp(20px, 2.2vw, 36px);
	background: color-mix(in srgb, var(--nv-beige) 60%, var(--nv-white));
}

/* === PDP · Real scientists. Real doctors. ================================= */

.nv-trust {
	background: var(--nv-white);
	padding: var(--nv-section-pad) 0;
	overflow: hidden;
}

.nv-trust__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-trust .nv-sechead p strong {
	font-weight: 700;
	color: var(--nv-ink);
}

.nv-trust__rail-wrap {
	margin-block: clamp(24px, 2.6vw, 48px);
}

/* Advisor chips ride the shared nv-ticker marquee ("As featured in" recipe):
   the chip set renders twice and the track animates -50% for a seamless
   loop. Slower than the press ticker — the track is much wider. */
.nv-ticker--trust .nv-ticker__track {
	padding-block: 4px;
	animation-duration: 64s;
}

.nv-ticker--trust .nv-ticker__track > * {
	margin-right: clamp(10px, 0.75vw, 14px);
}

.nv-trust__rail {
	margin: 0;
}

.nv-trust__advisor {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 12px 22px 12px 12px;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
	box-shadow: var(--nv-shadow-sm);
}

.nv-trust__advisor .nv-portrait {
	width: 48px;
	height: 48px;
	flex: none;
}

.nv-trust__advisor-meta {
	display: flex;
	flex-direction: column;
	gap: 3px;
}

.nv-trust__advisor-meta strong {
	font-size: 0.86rem;
	font-weight: 600;
	line-height: 1.15;
	color: var(--nv-ink);
}

.nv-trust__advisor-meta em {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.62rem;
	letter-spacing: 0.04em;
	color: var(--nv-ink-60);
}

.nv-trust__grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(28px, 4vw, 72px);
	align-items: start;
	margin-top: clamp(20px, 2.2vw, 40px);
}

.nv-trust__stats {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(12px, 0.9vw, 18px);
}

.nv-trust__stat {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: clamp(16px, 1.35vw, 26px);
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
}

.nv-trust__num {
	font-family: var(--nv-mono);
	font-size: clamp(1.6rem, 1.67vw, 2rem);
	font-weight: 500;
	line-height: 1;
	color: var(--nv-orange);
}

.nv-trust__lbl {
	font-size: 0.85rem;
	line-height: 1.3;
	color: var(--nv-ink-60);
}

.nv-trust__stocked-label {
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	margin: clamp(18px, 1.7vw, 30px) 0 10px;
	color: var(--nv-ink-40);
}

.nv-trust__stocked {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 8px 28px;
	margin: 0;
	padding: 0;
}

.nv-trust__stocked li {
	font-family: var(--nv-serif);
	font-size: 0.95rem;
	color: var(--nv-ink-80);
}

.nv-trust__quote {
	font-family: var(--nv-serif);
	font-size: clamp(1.5rem, 1.77vw, 2.13rem);
	font-weight: 600;
	line-height: 1.28;
	letter-spacing: -0.015em;
	margin: 0 0 clamp(20px, 2vw, 36px);
	color: var(--nv-ink);
}

/* Attribution sits directly under the quote — no card box. Explicit column:
   the legacy acf-blocks.css reset `figure:not(.wp-block-image){display:flex}`
   otherwise rows the figcaption beside the quote (staging QA 2026-07-31). */
.nv-trust__quotewrap {
	margin: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
}

.nv-trust__physician {
	display: flex;
	flex-direction: column;
	gap: 3px;
	margin: 0;
	padding-left: 18px;
	border-left: 2px solid var(--nv-orange);
}

.nv-portrait--initials {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	flex: none;
	border-radius: 50%;
	font-family: var(--nv-mono);
	font-size: 0.85rem;
	color: var(--nv-white);
	background: color-mix(in srgb, var(--nv-orange-soft) 70%, var(--nv-ink-40));
}

.nv-trust__physician strong {
	display: block;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--nv-ink);
}

.nv-trust__physician em {
	font-family: var(--nv-mono);
	font-style: normal;
	font-size: 0.64rem;
	letter-spacing: 0.04em;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-trust__program {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	padding: 14px 14px 14px 22px;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
}

.nv-trust__program span {
	font-family: var(--nv-mono);
	font-size: 0.76rem;
	color: var(--nv-ink-80);
}

.nv-trust__program-cta {
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	white-space: nowrap;
	text-decoration: none;
	padding: 0.8em 1.3em;
	border-radius: var(--wp--custom--radius--pill);
	color: var(--nv-white);
	background: var(--nv-ink);
	transition: background 0.2s var(--nv-ease);
}

.nv-trust__program-cta:hover {
	background: var(--nv-orange-deep);
	color: var(--nv-white);
}

@media (max-width: 980px) {
	.nv-trust__grid {
		grid-template-columns: 1fr;
	}

	.nv-trust__program {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* ============================================================
   Cart: header trigger + AJAX side-drawer mini cart
   ============================================================ */
.nv-cart-trigger,
.nv-search-trigger,
.nv-account-trigger {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	/* White over the transparent glass nav (QA: ink icons were unreadable on
	   photo heroes); flips to ink when the shell goes solid, like nv-nav__pro. */
	color: color-mix(in srgb, var(--nv-white) 88%, transparent);
	cursor: pointer;
	transition: background 0.25s var(--nv-ease), color 0.25s var(--nv-ease), transform 0.25s var(--nv-ease);
}

.nv-nav.scrolled .nv-cart-trigger,
.nv-nav.scrolled .nv-search-trigger,
.nv-nav.scrolled .nv-account-trigger,
.nv-nav-solid .nv-cart-trigger,
.nv-nav-solid .nv-search-trigger,
.nv-nav-solid .nv-account-trigger {
	color: var(--nv-ink);
}

.nv-cart-trigger:hover,
.nv-search-trigger:hover,
.nv-account-trigger:hover {
	background: color-mix(in srgb, var(--nv-white) 14%, transparent);
	color: var(--nv-white);
}

.nv-nav.scrolled .nv-cart-trigger:hover,
.nv-nav.scrolled .nv-search-trigger:hover,
.nv-nav.scrolled .nv-account-trigger:hover,
.nv-nav-solid .nv-cart-trigger:hover,
.nv-nav-solid .nv-search-trigger:hover,
.nv-nav-solid .nv-account-trigger:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-cart-trigger:focus-visible,
.nv-search-trigger:focus-visible,
.nv-account-trigger:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

.nv-search-trigger__icon {
	display: block;
}

/* ---------- Search modal (header magnifier → dialog) ---------- */
.nv-search-modal {
	width: min(720px, calc(100vw - 2 * var(--nv-gutter)));
	margin: clamp(70px, 12vh, 130px) auto auto;
	border: 0;
	border-radius: var(--nv-radius-lg);
	padding: 0;
	background: var(--nv-paper);
	box-shadow: var(--nv-shadow-lg);
}

.nv-search-modal::backdrop {
	background: rgba(0, 0, 0, 0.45);
	backdrop-filter: blur(3px);
}

.nv-search-modal__panel {
	padding: clamp(16px, 2.4vw, 26px);
}

.nv-search-modal__form {
	display: flex;
	align-items: center;
	gap: 10px;
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-white);
	padding: 6px 6px 6px 18px;
}

.nv-search-modal__form:focus-within {
	border-color: var(--nv-orange);
}

.nv-search-modal__icon {
	flex: none;
	color: var(--nv-ink-40);
}

.nv-search-modal__form input[type="search"] {
	flex: 1;
	min-width: 0;
	border: 0;
	background: transparent;
	font: inherit;
	font-size: 1.05rem;
	color: var(--nv-ink);
	outline: none;
	padding: 0.55em 0;
}

.nv-search-modal__submit {
	border: 0;
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-ink);
	color: var(--nv-white);
	font: inherit;
	font-weight: 600;
	padding: 0.6em 1.4em;
	cursor: pointer;
}

.nv-search-modal__submit:hover {
	background: var(--nv-orange-deep);
}

.nv-search-modal__close {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--nv-ink-60);
	cursor: pointer;
}

.nv-search-modal__close:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-search-modal__hints {
	margin-top: clamp(14px, 2vw, 20px);
}

.nv-search-modal__hints-label {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--nv-ink-40);
	margin: 0 0 10px;
}

.nv-search-modal__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.nv-search-modal__chips a {
	display: inline-block;
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--wp--custom--radius--pill);
	background: var(--nv-white);
	color: var(--nv-ink-80);
	text-decoration: none;
	font-size: 0.92rem;
	padding: 6px 14px;
	transition: border-color 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-search-modal__chips a:hover {
	border-color: var(--nv-orange);
	color: var(--nv-orange-deep);
}

@media (max-width: 620px) {
	.nv-search-modal__submit {
		display: none;
	}
}

.nv-cart-trigger__icon {
	display: block;
}

.nv-cart-trigger__count {
	position: absolute;
	top: 1px;
	right: 0;
	min-width: 18px;
	height: 18px;
	padding: 0 4px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 9px;
	background: var(--nv-orange);
	color: var(--nv-white);
	font-family: var(--nv-mono);
	font-size: 11px;
	font-weight: 700;
	line-height: 1;
	font-variant-numeric: tabular-nums;
}

/* The unconditional `display` above beats the UA [hidden] rule (author
   styles win over user-agent styles regardless of specificity), so the
   badge stayed visible at count 0. Restate [hidden] explicitly. */
.nv-cart-trigger__count[hidden] {
	display: none;
}

/* --- css-drawer theming -------------------------------------------------
   The drawer is a native <dialog class="drawer"> driven by the vendored
   css-drawer library: overlay (::backdrop), focus trap, scroll lock and the
   slide animation are the library's. We only map its tokens onto NOVOS design
   tokens, pin the header/footer (the item list scrolls), and set the
   responsive direction (bottom sheet on mobile, right panel on desktop). --- */
:root {
	--drawer-bg: var(--nv-white);
	--drawer-radius: var(--nv-radius-lg);
	--drawer-backdrop: color-mix(in srgb, var(--nv-ink) 52%, transparent);
	--drawer-backdrop-blur: 2px;
	--drawer-duration: 0.42s;
	--drawer-duration-close: 0.3s;
	--drawer-ease: var(--nv-ease);
	--drawer-shadow-right: var(--nv-shadow-lg);
	--drawer-shadow-bottom: var(--nv-shadow-lg);
}

/* The library scales <body> behind an open drawer; that transform would
   re-anchor our position:fixed header. `scale: none` removes the transform
   (and the containing block it would create) entirely. */
body:has(.drawer[open]) {
	scale: none;
	border-radius: 0;
}

/* Scroll lock: every NOVOS dialog carries data-scroll-lock="false", which
   opts out of the library's JS lock (body position:fixed + scrollTo restore).
   That technique visibly shifted the page behind bottom sheets on mobile —
   the sticky nav re-anchored while locked and the restore could land a few
   pixels off. Locking the real scroller (<html>) with overflow:hidden keeps
   the scroll position untouched; scrollbar-gutter:stable (set on html above)
   keeps the reserved gutter so desktop doesn't reflow either. */
html:has(dialog.drawer[open]) {
	overflow: hidden;
}

/* Bottom sheets must span the full visual viewport. The dialog's default
   `width: 100%` resolves against the ICB minus the gutter that
   `scrollbar-gutter: stable` (on <html> above) keeps reserved, so on
   classic-scrollbar browsers every bottom sheet stopped ~15px short of
   the right edge (QA PR #1950 R1-8). `100vw` includes the gutter. */
dialog.drawer[data-direction='bottom'] {
	--drawer-width: 100vw;
}

#nvCartDrawer.drawer[open] {
	display: flex;
	flex-direction: column;
}

#nvCartDrawer[data-direction="right"] {
	--drawer-width: min(424px, 92vw);
}

#nvCartDrawer[data-direction="bottom"] {
	--drawer-max-height: 90dvh;
}

/* The grab handle reads as a bottom-sheet affordance on mobile only. */
#nvCartDrawer[data-direction="right"] .drawer-handle {
	display: none;
}

.nv-cart-drawer__head {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 22px 24px;
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-cart-drawer__title {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	font-family: var(--nv-serif);
	font-size: 1.4rem;
	line-height: 1.1;
	color: var(--nv-ink);
}

.nv-cart-drawer__count {
	min-width: 24px;
	height: 24px;
	padding: 0 7px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 12px;
	background: var(--nv-ink-05);
	color: var(--nv-ink-60);
	font-family: var(--nv-mono);
	font-size: 0.8rem;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.nv-cart-drawer__close {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--nv-ink-60);
	cursor: pointer;
	transition: background 0.25s var(--nv-ease), color 0.25s var(--nv-ease);
}

.nv-cart-drawer__close:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-cart-drawer__close:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

/* Transient error notice (quantity caps, geo restrictions) — outside the
   refreshable body so AJAX re-renders don't wipe it. */
.nv-cart-drawer__notice {
	flex: none;
	margin: 12px 24px 0;
	padding: 10px 14px;
	border: 1px solid var(--nv-ink-10);
	border-left: 4px solid var(--wp--preset--color--clinical-red, #c0392b);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-white);
	color: var(--nv-ink);
	font-size: 0.85rem;
	line-height: 1.4;
}

.nv-cart-drawer__body {
	/* flex:1 / min-height:0 / overflow come from the library's .drawer-content. */
	min-height: 0;
	overflow-x: hidden;
	padding: 8px 24px;
	overscroll-behavior: contain;
	transition: opacity 0.2s var(--nv-ease);
}

.nv-cart-drawer.is-loading .nv-cart-drawer__body {
	opacity: 0.5;
	pointer-events: none;
}

.nv-cart-items {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nv-cart-item {
	display: grid;
	grid-template-columns: 76px 1fr;
	gap: 16px;
	padding: 20px 0;
	border-bottom: 1px solid var(--nv-ink-10);
}

/* Optimistic in-drawer edits (see assets/js/cart.js): the affected row reacts
   immediately so removal reads as instant, instead of fading the whole list. */
.nv-cart-item.is-removing {
	overflow: hidden;
	opacity: 0;
	padding-block: 0;
	border-bottom-color: transparent;
	transform: translateX(10px);
	pointer-events: none;
	transition:
		max-height 0.3s var(--nv-ease),
		opacity 0.2s var(--nv-ease),
		padding 0.3s var(--nv-ease),
		transform 0.26s var(--nv-ease);
}

.nv-cart-item.is-updating {
	opacity: 0.6;
}

.nv-cart-item.is-updating .nv-cart-item__qty,
.nv-cart-item.is-updating .nv-cart-item__remove {
	pointer-events: none;
}

.nv-cart-item__remove.is-loading {
	position: relative;
	color: transparent;
}

.nv-cart-item__remove.is-loading > svg {
	opacity: 0;
}

.nv-cart-item__remove.is-loading::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 14px;
	height: 14px;
	margin: -7px 0 0 -7px;
	border-radius: 50%;
	border: 2px solid var(--nv-ink-10);
	border-top-color: var(--nv-orange);
	animation: nv-cart-spin 0.7s linear infinite;
}

.nv-cart-item__media {
	display: block;
	overflow: hidden;
}

.nv-cart-item__media img {
	width: 100%;
	object-fit: cover;
	aspect-ratio: 1;
	border-radius: var(--nv-radius-xs);
}

/* Optimistic ghost row (assets/js/cart.js): placeholder line item shown the
   instant an add-to-cart request leaves; the server re-render replaces it. */
.nv-cart-item--ghost .nv-cart-item__media {
	aspect-ratio: 1;
}

.nv-ghost-line {
	display: block;
	height: 14px;
	border-radius: var(--nv-radius-sm);
	background: var(--nv-ink-05);
}

.nv-ghost-line--name {
	width: 68%;
	height: 18px;
	margin-top: 3px;
}

.nv-ghost-line--qty {
	width: 92px;
	height: 30px;
	border-radius: var(--wp--custom--radius--pill, 999px);
}

.nv-ghost-line--price {
	width: 56px;
}

.nv-cart-item--ghost .nv-cart-item__media,
.nv-ghost-line {
	position: relative;
	overflow: hidden;
}

.nv-cart-item--ghost .nv-cart-item__media::after,
.nv-ghost-line::after {
	content: "";
	position: absolute;
	inset: 0;
	transform: translateX(-100%);
	background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--nv-white) 65%, transparent), transparent);
	animation: nv-cart-shimmer 1.1s var(--nv-ease) infinite;
}

@keyframes nv-cart-shimmer {
	to {
		transform: translateX(100%);
	}
}

.nv-cart-item__main {
	min-width: 0;
}

.nv-cart-item__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 8px;
}

.nv-cart-item__name {
	font-family: var(--nv-serif);
	font-size: 1.02rem;
	line-height: 1.25;
	color: var(--nv-ink);
	text-decoration: none;
}

.nv-cart-item__name:hover {
	color: var(--nv-orange-deep);
}

.nv-cart-item__remove {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--nv-ink-40);
	cursor: pointer;
	transition: background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-cart-item__remove:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-cart-item__remove:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 1px;
}

.nv-cart-item__tag {
	display: inline-block;
	margin-top: 6px;
	padding: 2px 8px;
	border-radius: var(--nv-radius-sm);
	background: color-mix(in srgb, var(--nv-orange) 12%, transparent);
	color: var(--nv-orange-deep);
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.nv-cart-item__subtitle {
	display: block;
	margin-top: 4px;
	font-size: 0.78rem;
	line-height: 1.35;
	color: var(--nv-ink-60);
}

/* Plugin hook output: flavor-swap links (novos_mini_cart_flavor) and
   upsell CTAs (novos_mini_cart_upsell) rendered by novos-extended. */
.nv-cart-item__flavor {
	margin-top: 4px;
	font-size: 0.78rem;
	line-height: 1.5;
}

.nv-cart-item__flavor a {
	color: var(--nv-orange-deep);
	text-decoration: underline;
	text-underline-offset: 2px;
}

.nv-cart-item__flavor a.is-loading,
.nv-cart-item__upsell a.is-loading {
	opacity: 0.5;
	pointer-events: none;
}

.nv-cart-item__upsell {
	margin-top: 10px;
}

.nv-cart-item__upsell a {
	display: inline-block;
	padding: 6px 14px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-orange) 12%, transparent);
	color: var(--nv-orange-deep);
	font-size: 0.78rem;
	font-weight: 600;
	text-decoration: none;
}

/* Cart-page upsell swap (span.upsell-item, novos_after_cart_item_remove hook
   output) renders in the product-name cell — styled with the rest of the
   cart-page table further down. */

.nv-cart-item__row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	margin-top: 14px;
}

.nv-cart-item__qty {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--wp--custom--radius--pill);
	overflow: hidden;
}

.nv-cart-item__qty-btn {
	width: 30px;
	height: 30px;
	border: 0;
	background: transparent;
	color: var(--nv-ink);
	font-size: 1.05rem;
	line-height: 1;
	cursor: pointer;
	transition: background 0.2s var(--nv-ease);
}

.nv-cart-item__qty-btn:hover {
	background: var(--nv-ink-05);
}

/* Purchase-cap reached (server renders the + disabled at the per-line max). */
.nv-cart-item__qty-btn:disabled {
	color: var(--nv-ink-40);
	cursor: default;
	background: transparent;
}

.nv-cart-item__qty-val {
	min-width: 28px;
	text-align: center;
	font-family: var(--nv-mono);
	font-size: 0.86rem;
	font-variant-numeric: tabular-nums;
	color: var(--nv-ink);
}

.nv-cart-item__price {
	font-weight: 600;
	color: var(--nv-ink);
	white-space: nowrap;
	font-size: 0.9rem;
}

.nv-cart-item__price del {
	color: var(--nv-ink-40);
	font-weight: 400;
	margin-right: 0.35em;
}

.nv-cart-item__price ins {
	text-decoration: none;
}

.nv-cart-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 10px;
	padding: 56px 16px;
	color: var(--nv-ink-60);
}

.nv-cart-empty__icon {
	color: var(--nv-ink-40);
}

.nv-cart-empty__title {
	margin: 6px 0 0;
	font-family: var(--nv-serif);
	font-size: 1.25rem;
	color: var(--nv-ink);
}

.nv-cart-empty__text {
	margin: 0 0 8px;
	font-size: 0.95rem;
}

.nv-cart-drawer__foot {
	flex: none;
	padding: 20px 24px calc(20px + env(safe-area-inset-bottom));
	border-top: 1px solid var(--nv-ink-10);
	background: var(--nv-white);
}

.nv-cart-drawer.is-empty .nv-cart-drawer__foot {
	display: none;
}

.nv-cart-drawer__subtotal {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 16px;
}

.nv-cart-drawer__subtotal-label {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
}

.nv-cart-drawer__subtotal-value {
	font-family: var(--nv-serif);
	font-size: 1.3rem;
	color: var(--nv-ink);
}

/* "Updating" state: subtotal dims and shows a spinner while the server settles
   the new total after an optimistic add/remove/quantity change. */
.nv-cart-drawer__foot.is-updating .nv-cart-drawer__subtotal-value {
	color: var(--nv-ink-40);
}

.nv-cart-drawer__foot.is-updating .nv-cart-drawer__subtotal-value::after {
	content: "";
	display: inline-block;
	vertical-align: middle;
	width: 13px;
	height: 13px;
	margin-left: 8px;
	border-radius: 50%;
	border: 2px solid var(--nv-ink-10);
	border-top-color: var(--nv-orange);
	animation: nv-cart-spin 0.7s linear infinite;
}

.nv-cart-drawer__actions {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nv-cart-drawer__checkout {
	width: 100%;
}

.nv-cart-drawer__note {
	margin: 14px 0 0;
	text-align: center;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.4;
	color: var(--nv-ink-40);
}

.nv-pdp-buy__notice {
	display: none;
	margin-top: 14px;
	padding: 12px 16px;
	border-radius: var(--nv-radius-sm);
	background: color-mix(in srgb, var(--nv-orange-deep) 10%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-orange-deep) 30%, transparent);
	color: var(--nv-orange-deep);
	font-size: 0.9rem;
	line-height: 1.4;
}

.nv-pdp-buy__notice.is-visible {
	display: block;
}

.nv-pdp-add.is-loading {
	position: relative;
	color: transparent;
	pointer-events: none;
}

.nv-pdp-add.is-loading::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 18px;
	height: 18px;
	margin: -9px 0 0 -9px;
	border-radius: 50%;
	border: 2px solid color-mix(in srgb, var(--nv-white) 45%, transparent);
	border-top-color: var(--nv-white);
	animation: nv-cart-spin 0.7s linear infinite;
}

@keyframes nv-cart-spin {
	to {
		transform: rotate(360deg);
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-pdp-add.is-loading::after,
	.nv-cart-item__remove.is-loading::after,
	.nv-cart-item--ghost .nv-cart-item__media::after,
	.nv-ghost-line::after,
	.nv-cart-drawer__foot.is-updating .nv-cart-drawer__subtotal-value::after {
		animation: none;
	}

	.nv-cart-item.is-removing {
		transform: none;
		transition-duration: 0.01ms;
	}
}

/* === Reusable drawer chrome (.nv-drawer) ==================================
   Generic slide-out panel on the css-drawer <dialog> primitive, opened by
   any [data-nv-drawer-open="id"] trigger (wiring: assets/js/drawer.js).
   Right-hand panel on desktop, bottom sheet on mobile. Instances scope their
   own width/content styles (e.g. .nv-study below). */

/* css-drawer's .drawer-content only scrolls when the dialog is a flex
   column (flex: 1 + min-height: 0 need a flex parent). Without this the
   bottom-sheet direction clips overflowing content instead of scrolling. */
.nv-drawer.drawer[open] {
	display: flex;
	flex-direction: column;
}

.nv-drawer__close {
	position: absolute;
	top: 18px;
	right: 20px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border: 0;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nv-white) 82%, transparent);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	color: var(--nv-ink-60);
	cursor: pointer;
	transition: background 0.25s var(--nv-ease), color 0.25s var(--nv-ease);
}

.nv-drawer__close:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-drawer__close:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

/* The grab handle reads as a bottom-sheet affordance on mobile only. */
.nv-drawer[data-direction="right"] .drawer-handle,
.nv-drawer[data-direction="left"] .drawer-handle {
	display: none;
}

/* === Study details drawer (.nv-study) ===================================== */

.nv-study {
	--drawer-bg: var(--nv-paper);
}

.nv-study[data-direction="right"] {
	--drawer-width: min(880px, calc(100vw - 56px));
}

.nv-study[data-direction="bottom"] {
	--drawer-max-height: 94dvh;
}

.nv-study__scroll {
	overscroll-behavior: contain;
}

.nv-study__grid {
	display: grid;
	grid-template-columns: 168px minmax(0, 1fr);
	gap: clamp(28px, 4vw, 64px);
	padding: clamp(48px, 8vh, 92px) clamp(22px, 3.2vw, 56px) clamp(40px, 6vh, 72px);
}

.nv-study__toc {
	position: sticky;
	top: clamp(48px, 8vh, 92px);
	align-self: start;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.nv-study__toc-label {
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	color: var(--nv-ink-60);
	margin-bottom: 8px;
}

.nv-study__toc a {
	font-size: 1.18rem;
	font-weight: 500;
	line-height: 1.3;
	letter-spacing: -0.01em;
	text-decoration: none;
	color: var(--nv-ink-40);
	transition: color 0.2s var(--nv-ease);
}

.nv-study__toc a:hover {
	color: var(--nv-ink-80);
}

.nv-study__toc a.is-active {
	color: var(--nv-ink);
}

.nv-study__eyebrow {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-study__eyebrow strong {
	font-weight: 700;
	color: var(--nv-orange-deep);
}

.nv-study__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.9rem, 2.6vw, 2.7rem);
	font-weight: 500;
	line-height: 1.05;
	letter-spacing: -0.02em;
	margin: 16px 0 0;
	max-width: 18ch;
	color: var(--nv-ink);
}

.nv-study__lead {
	font-size: clamp(1.05rem, 1.2vw, 1.28rem);
	line-height: 1.5;
	color: var(--nv-ink-80);
	margin: 18px 0 0;
	max-width: 46ch;
}

.nv-study__badges {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 14px 30px;
	margin: 28px 0 0;
	padding: 0;
}

.nv-study__badges li {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-ink-80);
}

.nv-study__badges svg {
	flex: none;
	width: 20px;
	height: 20px;
	color: var(--nv-orange-deep);
}

.nv-study__pub {
	display: flex;
	gap: clamp(16px, 2vw, 28px);
	align-items: flex-start;
	margin: 32px 0 0;
	padding: clamp(20px, 2.2vw, 32px);
	background: var(--nv-beige);
	border-radius: var(--nv-radius-sm);
}

.nv-study__pub-icon {
	flex: none;
	color: var(--nv-ink-40);
}

.nv-study__pub-icon svg {
	display: block;
	width: clamp(52px, 4.6vw, 72px);
	height: clamp(52px, 4.6vw, 72px);
}

.nv-study__pub-label {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.13em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-study__pub-name {
	font-size: 1.05rem;
	font-weight: 600;
	color: var(--nv-ink);
	margin: 7px 0 8px;
}

.nv-study__pub-copy {
	font-size: 0.92rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
	margin: 0 0 12px;
	max-width: 52ch;
}

.nv-study__pub-link {
	display: inline-block;
	padding-bottom: 3px;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.016em;
	text-decoration: none;
	color: var(--nv-ink);
	border-bottom: 1px solid var(--nv-ink);
	transition: color 0.2s var(--nv-ease), border-color 0.2s var(--nv-ease);
}

.nv-study__pub-link:hover {
	color: var(--nv-orange-deep);
	border-color: var(--nv-orange-deep);
}

.nv-study__section + .nv-study__section {
	margin-top: clamp(44px, 5vw, 72px);
}

.nv-study__h {
	font-family: var(--nv-sans);
	font-size: 1.35rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	margin: 0 0 20px;
	padding-bottom: 14px;
	border-bottom: 2px solid color-mix(in srgb, var(--nv-ink) 18%, transparent);
	color: var(--nv-ink);
}

.nv-study__section > p {
	font-size: 1rem;
	line-height: 1.6;
	color: var(--nv-ink-80);
	margin: 0 0 16px;
	max-width: 62ch;
}

.nv-study__stats {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 12px;
	margin-top: 28px;
}

.nv-study__stat {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	gap: 22px;
	min-height: 128px;
	padding: 18px 20px 20px;
	background: var(--nv-ink-05);
	border-radius: var(--nv-radius-tile);
}

.nv-study__stat-label {
	font-size: 0.86rem;
	font-weight: 500;
	line-height: 1.35;
	color: var(--nv-ink-60);
}

.nv-study__stat-value {
	font-size: clamp(1.5rem, 1.9vw, 2rem);
	font-weight: 500;
	letter-spacing: -0.02em;
	line-height: 1.05;
	color: var(--nv-ink);
}

.nv-study__chart {
	margin: 28px 0;
	padding: clamp(20px, 2.4vw, 36px);
	background: var(--nv-ink-05);
	border-radius: var(--nv-radius-tile);
}

.nv-study__chart svg {
	display: block;
	width: 100%;
	height: auto;
}

.nv-study__chart-grid line {
	stroke: var(--nv-ink-40);
	stroke-width: 1;
}

.nv-study__chart-grid line:first-child {
	stroke: var(--nv-ink-60);
	stroke-width: 1.5;
}

.nv-study__chart-ticks text,
.nv-study__chart-axis {
	font-family: var(--nv-mono);
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	fill: var(--nv-ink-60);
}

.nv-study__bar--placebo {
	fill: var(--nv-white);
	stroke: var(--nv-ink-60);
	stroke-width: 1.5;
}

.nv-study__bar--novos {
	fill: var(--nv-orange);
}

.nv-study__chart-bracket {
	stroke: var(--nv-ink-60);
	stroke-width: 1.5;
}

.nv-study__chart-callout {
	font-family: var(--nv-sans);
	font-size: 34px;
	font-weight: 600;
	letter-spacing: -0.02em;
	fill: var(--nv-ink);
}

.nv-study__legend {
	display: flex;
	justify-content: center;
	gap: 30px;
	margin-top: 18px;
}

.nv-study__legend-item {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-ink-80);
}

.nv-study__legend-item::before {
	content: "";
	width: 14px;
	height: 14px;
	border-radius: 3px;
}

.nv-study__legend-item--placebo::before {
	background: var(--nv-white);
	border: 1.5px solid var(--nv-ink-60);
}

.nv-study__legend-item--novos::before {
	background: var(--nv-orange);
}

.nv-study__note {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	line-height: 1.5;
	letter-spacing: 0.01em;
	color: var(--nv-ink-40);
	margin-top: 28px;
}

.nv-study__note a {
	color: inherit;
}

@media (max-width: 980px) {
	.nv-study__grid {
		grid-template-columns: 1fr;
		padding-top: 44px;
	}

	.nv-study__toc {
		display: none;
	}

	.nv-study__stats {
		grid-template-columns: 1fr;
	}

	.nv-study__stat {
		flex-direction: row;
		align-items: center;
		justify-content: space-between;
		min-height: 0;
	}
}

/* ============================================================
   SCIENCE PAGE (page-anti-aging-scientific-supplement)
   Sections: hero stats, studies + hotspots, different cards,
   trust panels, compare tweaks, detail drawers (.nv-sci-dr)
   ============================================================ */

/* ---------- Hero: at-a-glance stat grid inside the light intro panel ---------- */
/* Section 1 of the page: unlike the homepage intro (mid-page), this sits at
   the top where main pulls up under the chrome — reserve the bulletin + nav
   stack so the glass pill never overlaps the panel card. */
.nv-sci-hero.nv-intro {
	padding-top: calc(var(--nv-top-stack) + clamp(20px, 2.6vw, 44px));
}

.nv-sci-hero .nv-intro__lead {
	max-width: 1120px;
}

.nv-sci-hero__copy {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(16px, 1.8vw, 26px);
	max-width: 1120px;
	margin-inline: auto;
}

.nv-sci-hero__body {
	font-size: var(--nv-fs-lead);
	line-height: 1.5;
	text-align: center;
	max-width: 900px;
	margin: 0;
	color: var(--nv-ink-60);
}

.nv-sci-hero__sub {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h3);
	font-weight: 500;
	line-height: 1.25;
	letter-spacing: -0.02em;
	text-align: center;
	max-width: 980px;
	margin: 0;
	color: var(--nv-ink);
}

.nv-sci-stats {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(14px, 1.6vw, 26px);
	width: min(100%, 1120px);
	margin-inline: auto;
}

.nv-sci-stat {
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: clamp(18px, 2vw, 28px) clamp(18px, 2vw, 30px);
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-ink) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	text-align: left;
}

.nv-sci-stat__num {
	font-family: var(--nv-serif);
	font-size: clamp(2rem, 3.2vw, 3.1rem);
	font-weight: 500;
	line-height: 1;
	letter-spacing: -0.03em;
	color: var(--nv-ink);
}

.nv-sci-stat__label {
	font-size: 0.92rem;
	line-height: 1.35;
	letter-spacing: var(--nv-ls-btn);
	color: var(--nv-ink-60);
}

/* ---------- Studies: heading + photo stage with "+" hotspots ---------- */
.nv-sci-studies {
	background: var(--nv-white);
	padding: var(--nv-section-pad) var(--nv-gutter);
}

.nv-sci-studies__title {
	font-size: var(--nv-fs-h2);
	max-width: var(--nv-container-mid);
	margin: 0 auto;
	text-wrap: balance;
}

/* Full-bleed band between the section head and the evidence data. Bleeding
   against the section's own gutter (rather than 100vw) keeps it exact and
   cannot introduce horizontal overflow when a scrollbar is present. */
.nv-sci-studies__band {
	/* Bleeding against the section's own gutter (rather than 100vw) is exact
	   and cannot overflow when a scrollbar is present. !important for the same
	   reason as .nv-carousel__track: this is a direct child of a constrained
	   group, where WP's layout CSS pins `margin-inline: auto !important`. */
	margin-inline: calc(-1 * var(--nv-gutter)) !important;
	max-width: none !important;
	margin-bottom: clamp(32px, 4vw, 64px);
	aspect-ratio: 2200 / 715;
	overflow: hidden;
	background: var(--nv-ink-05);
}

.nv-sci-studies__band img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

@media (max-width: 620px) {
	.nv-sci-studies__band {
		aspect-ratio: 4 / 5;
	}
}

.nv-sci-studies__orgline {
	display: block;
	max-width: var(--nv-container-mid);
	margin: clamp(4px, 0.8vw, 10px) auto clamp(24px, 3vw, 48px);
	color: var(--nv-ink-10);
}

.nv-sci-studies__stage {
	position: relative;
	max-width: var(--nv-container-wide);
	margin: 0 auto;
	border-radius: clamp(24px, 3vw, var(--nv-radius-panel));
	overflow: hidden;
	isolation: isolate;
}

.nv-sci-studies__img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 19 / 10;
	object-fit: cover;
}

.nv-sci-studies__hint {
	max-width: var(--nv-container-wide);
	margin: 14px auto 0;
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

.nv-sci-studies__intro {
	max-width: var(--nv-container-mid);
	margin: clamp(12px, 1.4vw, 20px) auto 0;
	font-size: var(--nv-fs-lead);
	line-height: 1.5;
	color: var(--nv-ink-60);
	text-wrap: pretty;
}

.nv-sci-studies__inner {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

/* Cardiovascular-health framing band, between the evidence ladder and trial */
.nv-sci-cvd {
	margin-top: clamp(48px, 6vw, 88px);
	max-width: 820px;
}

.nv-sci-cvd__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.6rem, 2.6vw, 2.4rem);
	font-weight: 500;
	line-height: 1.1;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	margin: 0 0 clamp(12px, 1.4vw, 18px);
	text-wrap: balance;
}

.nv-sci-cvd__copy {
	font-size: var(--nv-fs-lead);
	line-height: 1.55;
	color: var(--nv-ink-60);
	margin: 0;
	text-wrap: pretty;
}

/* Block A — evidence ladder (big-number study cards) */
.nv-evladder {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: clamp(14px, 1.6vw, 24px);
}

.nv-evcard {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: clamp(22px, 2vw, 32px) clamp(20px, 1.8vw, 28px);
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-ink) 3%, transparent);
	border: 1px solid var(--nv-ink-10);
}

.nv-evcard__num {
	font-family: var(--nv-serif);
	font-size: clamp(2.4rem, 3.6vw, 3.4rem);
	font-weight: 500;
	line-height: 1;
	letter-spacing: -0.03em;
	color: var(--nv-orange);
	margin: 0;
}

.nv-evcard__label {
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	gap: 4px 10px;
	margin: 0 0 6px;
}

.nv-evcard__outcome {
	font-size: 1.05rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
}

.nv-evcard__tag {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

.nv-evcard__copy {
	font-size: 0.95rem;
	line-height: 1.5;
	letter-spacing: var(--nv-ls-btn);
	color: var(--nv-ink);
	margin: 0;
}

.nv-evcard__note {
	margin: auto 0 0;
	padding-top: 12px;
	font-size: 0.78rem;
	font-style: italic;
	line-height: 1.4;
	color: var(--nv-ink-40);
}

/* Block B — the human trial */
.nv-trial {
	margin-top: clamp(48px, 6vw, 88px);
}

.nv-trial__head {
	max-width: 760px;
}

.nv-trial__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.6rem, 2.6vw, 2.4rem);
	font-weight: 500;
	line-height: 1.1;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	margin: 0 0 clamp(12px, 1.4vw, 18px);
	text-wrap: balance;
}

.nv-trial__intro {
	font-size: var(--nv-fs-lead);
	line-height: 1.5;
	color: var(--nv-ink);
	margin: 0;
	text-wrap: pretty;
}

.nv-trial__markers {
	list-style: none;
	margin: clamp(22px, 2.6vw, 36px) 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(14px, 1.6vw, 24px);
}

.nv-trial-marker {
	display: flex;
	flex-direction: column;
	gap: 10px;
	width: 100%;
	height: 100%;
	text-align: left;
	padding: clamp(22px, 2vw, 30px);
	border-radius: var(--nv-radius);
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	cursor: pointer;
	transition: border-color 0.25s var(--nv-ease), transform 0.25s var(--nv-ease), box-shadow 0.25s var(--nv-ease);
}

.nv-trial-marker:hover {
	transform: translateY(-4px);
	border-color: color-mix(in srgb, var(--nv-orange) 40%, transparent);
	box-shadow: 0 16px 40px color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-trial-marker:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

.nv-trial-marker__name {
	font-family: var(--nv-serif);
	font-size: clamp(1.2rem, 1.5vw, 1.5rem);
	font-weight: 500;
	line-height: 1.15;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
}

.nv-trial-marker__copy {
	font-size: 0.92rem;
	line-height: 1.5;
	letter-spacing: var(--nv-ls-btn);
	color: var(--nv-ink-60);
}

.nv-trial-marker__more {
	margin-top: auto;
	font-family: var(--nv-sans);
	font-size: 0.82rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	color: var(--nv-orange);
}

.nv-trial-marker:hover .nv-trial-marker__more {
	color: var(--nv-orange-deep);
}

/* Block C — head-to-head context */
.nv-h2h {
	margin-top: clamp(48px, 6vw, 88px);
}

.nv-h2h__header {
	font-family: var(--nv-serif);
	font-size: clamp(1.5rem, 2.4vw, 2.2rem);
	font-weight: 500;
	line-height: 1.12;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	margin: 0 0 clamp(10px, 1.2vw, 16px);
	max-width: 720px;
	text-wrap: balance;
}

.nv-h2h__lead {
	margin: 0 0 clamp(22px, 2.6vw, 36px);
	max-width: 720px;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

.nv-h2h__groups {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(18px, 2.2vw, 34px);
}

.nv-h2h__group {
	padding: clamp(22px, 2vw, 32px);
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-ink) 3%, transparent);
	border: 1px solid var(--nv-ink-10);
}

.nv-h2h__title {
	font-weight: 700;
	font-size: 1.02rem;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
	margin: 0;
}

.nv-h2h__note {
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: 4px 0 16px;
}

.nv-h2h__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

/* Rows are staggered in (--nv-i set inline per row) once the .nv-reveal
   parent gets .in; each row's fill then grows to its normalized --nv-bar
   width, mirroring the .nv-sci-bar drawer primitive. */
.nv-h2h__item {
	padding: 11px 0 13px;
	border-top: 1px solid var(--nv-ink-10);
	opacity: 0;
	transform: translateY(10px);
	transition: opacity 0.6s var(--nv-ease), transform 0.6s var(--nv-ease);
	transition-delay: calc(var(--nv-i, 0) * 70ms);
}

.nv-h2h.in .nv-h2h__item,
html.no-js .nv-h2h__item {
	opacity: 1;
	transform: none;
}

.nv-h2h__item:first-child {
	border-top: 0;
}

.nv-h2h__top {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
}

.nv-h2h__vs {
	font-size: 0.95rem;
	color: var(--nv-ink);
}

.nv-h2h__pct {
	font-family: var(--nv-serif);
	font-size: 1.25rem;
	font-weight: 500;
	letter-spacing: -0.02em;
	font-variant-numeric: tabular-nums;
	color: var(--nv-orange);
	white-space: nowrap;
}

.nv-h2h__track {
	display: block;
	height: 6px;
	margin-top: 7px;
	background: color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--wp--custom--radius--pill);
	overflow: hidden;
}

.nv-h2h__fill {
	display: block;
	height: 100%;
	width: 0;
	background: var(--nv-orange);
	border-radius: var(--wp--custom--radius--pill);
	transition: width 0.9s var(--nv-ease);
	transition-delay: calc(0.25s + var(--nv-i, 0) * 90ms);
}

.nv-h2h.in .nv-h2h__fill,
html.no-js .nv-h2h__fill {
	width: var(--nv-bar, 0%);
}

@media (prefers-reduced-motion: reduce) {
	.nv-h2h__item,
	.nv-h2h__fill {
		transition: none;
	}
}

.nv-h2h__caveat {
	margin: clamp(18px, 2.2vw, 28px) 0 0;
	max-width: 760px;
	font-size: 0.82rem;
	font-style: italic;
	line-height: 1.5;
	color: var(--nv-ink-40);
}

.nv-hotspot {
	position: absolute;
	top: var(--hs-y, 50%);
	left: var(--hs-x, 50%);
	transform: translate(-50%, -50%);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 46px;
	height: 46px;
	border-radius: 14px;
	background: var(--nv-orange);
	color: var(--nv-white);
	box-shadow: 0 10px 26px color-mix(in srgb, #000 32%, transparent);
	transition: transform 0.25s var(--nv-ease), background 0.25s var(--nv-ease);
}

.nv-hotspot:hover,
.nv-hotspot:focus-visible {
	transform: translate(-50%, -50%) scale(1.08);
	background: var(--nv-orange-deep);
}

.nv-hotspot:focus-visible {
	outline: 2px solid var(--nv-white);
	outline-offset: 3px;
}

.nv-hotspot__plus {
	position: relative;
	width: 18px;
	height: 18px;
}

.nv-hotspot__plus::before,
.nv-hotspot__plus::after {
	content: "";
	position: absolute;
	inset: 0;
	margin: auto;
	background: currentColor;
	border-radius: 2px;
}

.nv-hotspot__plus::before {
	width: 18px;
	height: 2.5px;
}

.nv-hotspot__plus::after {
	width: 2.5px;
	height: 18px;
}

.nv-hotspot__pulse {
	position: absolute;
	inset: 0;
	border-radius: inherit;
	border: 2px solid color-mix(in srgb, var(--nv-orange) 70%, transparent);
	animation: nv-hotspot-pulse 2.4s var(--nv-ease) infinite;
	pointer-events: none;
}

@keyframes nv-hotspot-pulse {
	0% {
		transform: scale(1);
		opacity: 0.9;
	}

	70%,
	100% {
		transform: scale(1.75);
		opacity: 0;
	}
}

/* ---------- What Makes NOVOS Different: dark section + glass path cards ---------- */
.nv-sci-different {
	background:
		radial-gradient(110% 80% at 82% 0%, color-mix(in srgb, #857467 34%, transparent), transparent 60%),
		var(--nv-ink-warm);
	color: var(--nv-beige);
	padding: var(--nv-section-pad) var(--nv-gutter);
}

.nv-sci-different__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
}

.nv-sci-different__head {
	display: grid;
	grid-template-columns: minmax(0, 1.1fr) minmax(280px, 0.7fr);
	gap: clamp(24px, 4vw, 72px);
	align-items: end;
}

.nv-sci-different__title {
	font-size: var(--nv-fs-h2);
	color: var(--nv-white);
	margin: 0;
	text-wrap: balance;
}

.nv-sci-different__intro {
	font-size: var(--nv-fs-lead);
	line-height: 1.5;
	color: color-mix(in srgb, var(--nv-beige) 74%, transparent);
	margin: 0 0 6px;
}

.nv-sci-different__orgline {
	display: block;
	margin: clamp(18px, 2.4vw, 36px) 0 clamp(26px, 3.4vw, 52px);
	color: color-mix(in srgb, var(--nv-white) 14%, transparent);
}

.nv-sci-cards {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: clamp(12px, 1.3vw, 22px);
}

.nv-sci-card2 {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	gap: clamp(40px, 5vw, 96px);
	padding: clamp(20px, 1.8vw, 30px);
	border-radius: clamp(22px, 2vw, 34px);
	background: color-mix(in srgb, var(--nv-white) 5%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 11%, transparent);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	transition: background 0.3s var(--nv-ease), border-color 0.3s var(--nv-ease), transform 0.3s var(--nv-ease);
}

.nv-sci-card2:hover {
	background: color-mix(in srgb, var(--nv-white) 9%, transparent);
	border-color: color-mix(in srgb, var(--nv-white) 20%, transparent);
	transform: translateY(-4px);
}

.nv-sci-card2__num {
	font-family: var(--nv-mono);
	font-size: 0.78rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	color: var(--nv-orange-soft);
	margin: 0 0 clamp(12px, 1.4vw, 20px);
}

.nv-sci-card2__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.3rem, 1.6vw, 1.7rem);
	font-weight: 500;
	line-height: 1.14;
	letter-spacing: -0.02em;
	color: var(--nv-white);
	margin: 0 0 10px;
	text-wrap: balance;
}

.nv-sci-card2__copy {
	font-size: 0.92rem;
	line-height: 1.5;
	letter-spacing: var(--nv-ls-btn);
	color: color-mix(in srgb, var(--nv-beige) 66%, transparent);
	margin: 0;
}

.nv-sci-card2__cta {
	display: inline-flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	width: 100%;
	padding: 13px 18px;
	border-radius: var(--nv-radius-sm);
	border: 1px solid color-mix(in srgb, var(--nv-white) 18%, transparent);
	background: color-mix(in srgb, var(--nv-white) 7%, transparent);
	color: var(--nv-white);
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	cursor: pointer;
	transition: background 0.25s var(--nv-ease), border-color 0.25s var(--nv-ease);
}

.nv-sci-card2__cta:hover {
	background: var(--nv-orange);
	border-color: var(--nv-orange);
}

.nv-sci-card2__cta:focus-visible {
	outline: 2px solid var(--nv-orange);
	outline-offset: 2px;
}

.nv-sci-card2__arrow {
	transition: transform 0.25s var(--nv-ease);
}

.nv-sci-card2__cta:hover .nv-sci-card2__arrow {
	transform: translateX(4px);
}

/* ---------- Tested & Recognized: twin gradient panels ---------- */
.nv-sci-trust {
	background: var(--nv-ink-warm);
	padding: 0 var(--nv-gutter) var(--nv-section-pad);
}

.nv-sci-trust__grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(14px, 1.6vw, 26px);
	max-width: var(--nv-container-wide);
	margin-inline: auto;
}

.nv-sci-panel {
	display: flex;
	flex-direction: column;
	padding: clamp(30px, 3.4vw, 60px) clamp(24px, 3vw, 56px);
	border-radius: clamp(24px, 3vw, 44px);
	border: 1px solid color-mix(in srgb, var(--nv-white) 9%, transparent);
	background:
		radial-gradient(120% 100% at 50% 0%, color-mix(in srgb, #857467 26%, transparent), transparent 65%),
		color-mix(in srgb, var(--nv-white) 3%, var(--nv-ink-warm));
	color: var(--nv-beige);
}

.nv-sci-panel__title {
	font-size: clamp(1.7rem, 2.4vw, 2.5rem);
	font-family: var(--nv-serif);
	font-weight: 500;
	line-height: 1.08;
	letter-spacing: -0.025em;
	color: var(--nv-white);
	text-align: center;
	margin: 0 0 14px;
}

.nv-sci-panel__lead {
	font-size: 0.98rem;
	line-height: 1.55;
	letter-spacing: var(--nv-ls-btn);
	color: color-mix(in srgb, var(--nv-beige) 66%, transparent);
	text-align: center;
	max-width: 460px;
	margin: 0 auto clamp(26px, 3vw, 44px);
}

.nv-sci-rows {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 10px;
	margin: auto 0 0;
	padding: 0;
}

.nv-sci-row {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	padding: 16px 18px;
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-white) 5%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 8%, transparent);
}

.nv-sci-row__icon {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 12px;
	background: color-mix(in srgb, var(--nv-white) 9%, transparent);
	color: var(--nv-orange-soft);
}

.nv-sci-row__icon svg {
	width: 22px;
	height: 22px;
}

.nv-sci-row__body {
	display: flex;
	flex-direction: column;
	gap: 3px;
}

.nv-sci-row__title {
	font-weight: 600;
	font-size: 0.98rem;
	letter-spacing: -0.01em;
	color: var(--nv-white);
}

.nv-sci-row__copy {
	font-size: 0.88rem;
	line-height: 1.45;
	letter-spacing: var(--nv-ls-btn);
	color: color-mix(in srgb, var(--nv-beige) 62%, transparent);
}

.nv-sci-awards {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 10px;
	margin: auto 0 0;
	padding: 0;
}

.nv-sci-award {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 16px 18px;
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-white) 5%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-white) 8%, transparent);
}

.nv-sci-award__mark {
	flex: none;
	width: 34px;
	height: 34px;
	border-radius: 10px;
	background: color-mix(in srgb, var(--nv-white) 9%, transparent);
	position: relative;
}

.nv-sci-award__mark::before {
	content: "";
	position: absolute;
	inset: 0;
	margin: auto;
	width: 12px;
	height: 12px;
	border-radius: 50%;
	border: 2px solid var(--nv-orange-soft);
}

.nv-sci-award__body {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.nv-sci-award__name {
	font-weight: 600;
	font-size: 0.88rem;
	line-height: 1.3;
	letter-spacing: -0.01em;
	color: var(--nv-white);
}

.nv-sci-award__year {
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--nv-beige) 52%, transparent);
}

/* ---------- Compare (science variant): stacked head + full-width matrix ---------- */
.nv-sci-compare .nv-sci-compare__head {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-sci-compare .nv-compare__title {
	margin-inline: 0;
}

.nv-sci-compare__sub {
	font-size: var(--nv-fs-lead);
	line-height: 1.5;
	color: var(--nv-ink-60);
	max-width: 560px;
	margin: 14px 0 0;
}

.nv-sci-compare .nv-compare__orgline {
	display: block;
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-sci-compare .nv-compare__right {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

/* ---------- Science detail drawers (.nv-sci-dr on the .nv-drawer chrome) ---------- */
.nv-sci-drawers {
	display: contents;
}

.nv-sci-dr {
	--drawer-bg: var(--nv-paper);
}

.nv-sci-dr[data-direction="right"] {
	--drawer-width: min(640px, calc(100vw - 56px));
}

.nv-sci-dr[data-direction="bottom"] {
	--drawer-height: min(88svh, 760px);
}

.nv-sci-dr__scroll {
	overscroll-behavior: contain;
}

.nv-sci-dr__body {
	padding: clamp(28px, 4vw, 48px) clamp(22px, 3.4vw, 44px) clamp(36px, 5vw, 60px);
	max-width: 640px;
}

.nv-sci-dr__eyebrow {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--nv-orange-deep);
	margin: 0 0 14px;
}

.nv-sci-dr__title {
	font-family: var(--nv-serif);
	font-size: clamp(1.6rem, 2.4vw, 2.15rem);
	font-weight: 500;
	line-height: 1.1;
	letter-spacing: -0.025em;
	color: var(--nv-ink);
	margin: 0 0 14px;
	text-wrap: balance;
	padding-right: 40px;
}

.nv-sci-dr__lead {
	font-size: 1.02rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
	margin: 0 0 20px;
}

.nv-sci-dr__badges {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 20px;
	padding: 0;
}

.nv-sci-dr__badges li {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 6px 12px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-ink) 5%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 7%, transparent);
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
}

.nv-sci-dr__badges li::before {
	content: "";
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--nv-orange);
}

.nv-sci-dr__status {
	display: flex;
	align-items: flex-start;
	gap: 14px;
	padding: 16px 18px;
	border-radius: var(--nv-radius);
	background: color-mix(in srgb, var(--nv-orange-soft) 16%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-orange) 18%, transparent);
	margin: 0 0 26px;
}

.nv-sci-dr__status-icon {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: 11px;
	background: color-mix(in srgb, var(--nv-orange) 14%, transparent);
	color: var(--nv-orange-deep);
}

.nv-sci-dr__status-icon svg {
	width: 20px;
	height: 20px;
}

.nv-sci-dr__status-body {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.nv-sci-dr__status-label {
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

.nv-sci-dr__status-text {
	font-size: 0.92rem;
	line-height: 1.45;
	color: var(--nv-ink);
}

.nv-sci-dr__h {
	font-family: var(--nv-serif);
	font-size: 1.25rem;
	font-weight: 500;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
	margin: 0 0 10px;
}

.nv-sci-dr__copy {
	font-size: 0.95rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
	margin: 0 0 18px;
}

.nv-sci-dr__tiles {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
	margin: 4px 0 18px;
}

.nv-sci-dr__tile {
	display: flex;
	flex-direction: column-reverse;
	gap: 4px;
	padding: 16px 14px;
	border-radius: var(--nv-radius-sm);
	background: color-mix(in srgb, var(--nv-ink) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	text-align: center;
}

.nv-sci-dr__tile-label {
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
}

.nv-sci-dr__tile-value {
	font-family: var(--nv-serif);
	font-size: 1.6rem;
	font-weight: 500;
	letter-spacing: -0.02em;
	line-height: 1;
	color: var(--nv-ink);
}

.nv-sci-dr__list {
	margin: 0 0 20px;
	padding: 0 0 0 1.15em;
	display: flex;
	flex-direction: column;
	gap: 8px;
	font-size: 0.95rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
}

.nv-sci-dr__list li::marker {
	color: var(--nv-orange);
}

.nv-sci-dr__figure {
	margin: 0 0 20px;
	border-radius: var(--nv-radius-md, 12px);
	overflow: hidden;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	background: color-mix(in srgb, var(--nv-ink) 3%, transparent);
}

.nv-sci-dr__figure img {
	display: block;
	width: 100%;
	height: auto;
}

.nv-sci-dr__ledger {
	display: flex;
	flex-direction: column;
	margin: 4px 0 20px;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--nv-radius);
	overflow: hidden;
}

.nv-sci-ledger-row {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	padding: 14px 16px;
	background: var(--nv-white);
}

.nv-sci-ledger-row + .nv-sci-ledger-row {
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 7%, transparent);
}

.nv-sci-ledger-row__key {
	flex: none;
	width: 52px;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	color: var(--nv-orange-deep);
	padding-top: 3px;
}

.nv-sci-ledger-row__main {
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
}

.nv-sci-ledger-row__name {
	font-weight: 600;
	font-size: 0.95rem;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
}

.nv-sci-ledger-row__desc {
	font-size: 0.88rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-sci-dr__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 20px;
}

.nv-sci-dr__chip {
	display: inline-flex;
	padding: 8px 14px;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-ink) 5%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	font-size: 0.85rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	color: var(--nv-ink-80);
}

.nv-sci-dr__people {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 10px;
	margin: 4px 0 20px;
	padding: 0;
}

.nv-sci-person {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 14px 16px;
	border-radius: var(--nv-radius);
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-sci-person__badge {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nv-orange-soft) 30%, transparent);
	color: var(--nv-orange-deep);
	font-family: var(--nv-mono);
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.04em;
}

.nv-sci-person__body {
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
}

.nv-sci-person__name {
	font-weight: 600;
	font-size: 0.98rem;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
}

.nv-sci-person__role {
	font-size: 0.86rem;
	line-height: 1.45;
	color: var(--nv-ink-60);
}

/* Scientist roster rows carry a bio line, so top-align the badge. */
.nv-sci-dr__people .nv-sci-person {
	align-items: flex-start;
}

.nv-sci-person__bio {
	margin-top: 5px;
	font-size: 0.84rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

/* Wider key column for word/number labels (The gap · Tier 1 · 7+ yrs). */
.nv-sci-ledger-row__key--wide {
	width: 84px;
	text-transform: uppercase;
}

.nv-sci-ledger-row__key--num {
	font-family: var(--nv-serif);
	font-size: 1.05rem;
	font-weight: 500;
	letter-spacing: -0.01em;
	text-transform: none;
	color: var(--nv-orange);
}

.nv-sci-dr__note {
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	line-height: 1.5;
	letter-spacing: 0.01em;
	color: var(--nv-ink-40);
	margin: 22px 0 0;
}

.nv-sci-dr__note--italic {
	font-style: italic;
}

/* ---------- Study drawer v3 additions (cardiovascular RCT drawer) ----------
   Visual-first study layout: rich result tiles, raised takeaway, chart
   cards (illustrative FMD line + SBP pair bars), tabbed marker comparison
   ([data-nv-markers], novos.js), collapsible methods, pull quote,
   disclaimers. All colors resolve to theme.json tokens. */

.nv-sci-dr__badges li.is-status {
	background: color-mix(in srgb, var(--nv-orange-soft) 45%, transparent);
	border-color: transparent;
	color: var(--nv-orange-deep);
}

.nv-sci-dr__sub {
	font-size: 0.85rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
	margin: -4px 0 14px;
}

/* Marker cards stack full-width to hold the longer copy (plain-language
   title, big value, marker name, description) — Chris, 2026-07-22. */
.nv-sci-dr__tiles--rich {
	grid-template-columns: 1fr;
	margin: 4px 0 14px;
}

.nv-sci-dr__tile--rich {
	flex-direction: column;
	gap: 5px;
	text-align: left;
	padding: 18px 16px;
}

.nv-sci-dr__tile-title {
	font-weight: 600;
	font-size: 0.95rem;
	letter-spacing: -0.01em;
	color: var(--nv-ink);
}

.nv-sci-dr__tile--rich .nv-sci-dr__tile-value {
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: 1.7rem;
	letter-spacing: -0.01em;
}

.nv-sci-dr__tile--rich .nv-sci-dr__tile-value small {
	font-size: 0.9rem;
	font-weight: 500;
	color: var(--nv-ink-60);
}

.nv-sci-dr__tile--rich .nv-sci-dr__tile-label {
	color: var(--nv-orange-deep);
}

.nv-sci-dr__tile-gloss {
	font-size: 0.8rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
	margin-top: 3px;
}

.nv-sci-dr__tile-gloss b {
	color: var(--nv-ink);
	font-weight: 600;
}

.nv-sci-dr__takeaway {
	display: flex;
	gap: 12px;
	align-items: flex-start;
	padding: 14px 16px;
	border-radius: var(--nv-radius);
	background: var(--nv-beige-dark);
	border: 1px solid color-mix(in srgb, var(--nv-orange) 22%, transparent);
	margin: 0 0 26px;
}

.nv-sci-dr__takeaway-mark {
	flex: none;
	font-family: var(--nv-serif);
	font-size: 1.25rem;
	line-height: 1;
	color: var(--nv-orange);
	margin-top: 1px;
}

.nv-sci-dr__takeaway-txt {
	font-size: 0.86rem;
	line-height: 1.5;
	color: var(--nv-ink);
	margin: 0;
}

.nv-sci-dr__takeaway-txt b {
	font-weight: 600;
}

.nv-sci-dr__takeaway-fine {
	display: block;
	font-size: 0.7rem;
	color: var(--nv-ink-40);
	margin-top: 5px;
}

.nv-sci-dr__chartcard {
	background: color-mix(in srgb, var(--nv-ink) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	padding: 18px 16px 14px;
	margin: 0 0 18px;
}

.nv-sci-dr__legend {
	display: flex;
	gap: 18px;
	justify-content: center;
	margin-top: 6px;
	font-size: 0.74rem;
	color: var(--nv-ink-60);
}

.nv-sci-dr__lg {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.nv-sci-dr__lg-line {
	width: 20px;
	height: 0;
}

.nv-sci-dr__lg-line--novos {
	border-top: 2.5px solid var(--nv-orange);
}

.nv-sci-dr__lg-line--placebo {
	border-top: 2px dashed var(--nv-ink-40);
}

.nv-sci-dr__chart-note {
	font-size: 0.7rem;
	line-height: 1.45;
	color: var(--nv-ink-40);
	text-align: center;
	margin: 8px 0 0;
}

/* Illustrative FMD line chart (SVG classes; no literal fills in markup).
   Type sizes bumped + thicker strokes per Chris's 2026-07-22 review. */
.nv-sci-fmd__caption {
	font-family: var(--nv-mono);
	font-size: 11px;
	font-style: italic;
	fill: var(--nv-ink-40);
}

.nv-sci-fmd__axis {
	stroke: var(--nv-ink-10);
	stroke-width: 1;
}

.nv-sci-fmd__ticks {
	font-family: var(--nv-sans);
	font-size: 13px;
	fill: var(--nv-ink-60);
}

.nv-sci-fmd__line {
	fill: none;
}

.nv-sci-fmd__line--placebo {
	stroke: var(--nv-ink-40);
	stroke-width: 2.5;
	stroke-dasharray: 6 5;
}

.nv-sci-fmd__line--novos {
	stroke: var(--nv-orange);
	stroke-width: 3.5;
}

.nv-sci-fmd__dot--placebo {
	fill: var(--nv-ink-40);
}

.nv-sci-fmd__dot--novos {
	fill: var(--nv-orange);
}

.nv-sci-fmd__sig {
	font-family: var(--nv-mono);
	font-size: 16px;
	font-weight: 700;
	fill: var(--nv-orange);
}

.nv-sci-fmd__callout {
	font-family: var(--nv-mono);
	font-size: 14px;
	font-weight: 700;
	fill: var(--nv-orange);
}

/* SBP pair bars (NOVOS vs placebo) */
.nv-sci-pair {
	display: flex;
	flex-direction: column;
	gap: 11px;
	margin-top: 2px;
}

.nv-sci-pair__row {
	display: grid;
	grid-template-columns: 78px 1fr 66px;
	align-items: center;
	gap: 10px;
}

.nv-sci-pair__lbl {
	font-size: 0.76rem;
	color: var(--nv-ink-60);
}

.nv-sci-pair__track {
	display: block;
	height: 14px;
	background: color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--nv-radius-xs);
	overflow: hidden;
}

.nv-sci-pair__fill {
	display: block;
	height: 100%;
	width: var(--nv-bar, 0%);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-ink-40);
}

.nv-sci-pair__val {
	font-family: var(--nv-mono);
	font-size: 0.74rem;
	letter-spacing: 0.01em;
	text-align: right;
	color: var(--nv-ink-60);
}

.nv-sci-pair__row.is-novos .nv-sci-pair__lbl,
.nv-sci-pair__row.is-novos .nv-sci-pair__val {
	color: var(--nv-orange-deep);
	font-weight: 700;
}

.nv-sci-pair__row.is-novos .nv-sci-pair__fill {
	background: var(--nv-orange);
}

/* Tabbed marker comparison ([data-nv-markers], wired in novos.js) */
.nv-sci-markers__tabs {
	display: flex;
	gap: 6px;
	background: color-mix(in srgb, var(--nv-ink) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--wp--custom--radius--pill);
	padding: 4px;
	margin: 0 0 14px;
}

.nv-sci-markers__tab {
	flex: 1;
	border: none;
	background: transparent;
	padding: 8px 6px;
	border-radius: var(--wp--custom--radius--pill);
	font-family: var(--nv-sans);
	font-size: 0.76rem;
	font-weight: 600;
	color: var(--nv-ink-60);
	cursor: pointer;
	transition: background 0.25s var(--nv-ease), color 0.25s var(--nv-ease);
}

.nv-sci-markers__tab[aria-selected="true"] {
	background: var(--nv-orange);
	color: var(--nv-white);
}

.nv-sci-markers__unit {
	font-family: var(--nv-mono);
	font-size: 0.66rem;
	font-weight: 500;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-40);
	margin: 0 0 10px;
}

.nv-sci-bar {
	padding: 9px 0;
	border-bottom: 1px solid color-mix(in srgb, var(--nv-ink) 7%, transparent);
}

.nv-sci-bar:last-child {
	border-bottom: none;
}

.nv-sci-bar__top {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	margin-bottom: 6px;
}

.nv-sci-bar__name {
	font-size: 0.78rem;
	color: var(--nv-ink-60);
}

.nv-sci-bar__val {
	font-family: var(--nv-mono);
	font-size: 0.74rem;
	letter-spacing: 0.01em;
	font-variant-numeric: tabular-nums;
	color: var(--nv-ink-60);
}

.nv-sci-bar__track {
	height: 6px;
	background: color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--wp--custom--radius--pill);
	overflow: hidden;
}

.nv-sci-bar__fill {
	height: 100%;
	width: var(--nv-bar, 0%);
	background: var(--nv-ink-40);
	border-radius: var(--wp--custom--radius--pill);
}

.nv-sci-bar.is-novos .nv-sci-bar__name,
.nv-sci-bar.is-novos .nv-sci-bar__val {
	color: var(--nv-orange-deep);
	font-weight: 700;
}

.nv-sci-bar.is-novos .nv-sci-bar__fill {
	background: var(--nv-orange);
}

.nv-sci-markers__more {
	margin-top: 12px;
	border: none;
	background: transparent;
	padding: 0;
	font-family: var(--nv-sans);
	font-size: 0.76rem;
	font-weight: 600;
	color: var(--nv-orange-deep);
	cursor: pointer;
}

.nv-sci-markers__more:hover {
	color: var(--nv-orange);
}

.nv-sci-dr__callout {
	background: color-mix(in srgb, var(--nv-ink) 4%, transparent);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	padding: 13px 15px;
	margin: 14px 0 0;
	font-size: 0.78rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
}

.nv-sci-dr__hl {
	color: var(--nv-orange-deep);
	font-weight: 600;
}

.nv-sci-dr__details {
	margin-top: 24px;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--nv-radius);
	overflow: hidden;
}

.nv-sci-dr__details summary {
	list-style: none;
	cursor: pointer;
	padding: 14px 16px;
	font-size: 0.82rem;
	font-weight: 600;
	color: var(--nv-ink);
	display: flex;
	align-items: center;
	justify-content: space-between;
}

.nv-sci-dr__details summary::-webkit-details-marker {
	display: none;
}

.nv-sci-dr__details-chev {
	color: var(--nv-ink-40);
	transition: transform 0.25s var(--nv-ease);
}

.nv-sci-dr__details[open] .nv-sci-dr__details-chev {
	transform: rotate(90deg);
}

.nv-sci-dr__details-body {
	padding: 0 16px 16px;
	font-size: 0.82rem;
	line-height: 1.55;
	color: var(--nv-ink-60);
}

.nv-sci-dr__details-body strong {
	color: var(--nv-ink);
	font-weight: 600;
}

.nv-sci-dr__quote {
	border-left: 3px solid color-mix(in srgb, var(--nv-orange) 35%, transparent);
	padding: 2px 0 2px 16px;
	margin: 24px 0 0;
}

.nv-sci-dr__quote p {
	font-family: var(--nv-serif);
	font-style: italic;
	font-size: 0.94rem;
	line-height: 1.5;
	color: var(--nv-ink);
	margin: 0 0 10px;
}

.nv-sci-dr__quote cite {
	font-style: normal;
	font-size: 0.76rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
	display: block;
}

.nv-sci-dr__quote cite b {
	color: var(--nv-ink);
	font-weight: 600;
}

.nv-sci-dr__quote-meta2 {
	display: block;
}

.nv-sci-dr__disc {
	margin-top: 22px;
	padding-top: 16px;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 7%, transparent);
}

.nv-sci-dr__disc p {
	font-size: 0.66rem;
	line-height: 1.5;
	color: var(--nv-ink-40);
	margin: 0 0 8px;
}

.nv-sci-dr__disc p:last-child {
	margin-bottom: 0;
}

.nv-sci-dr__disc-dshea {
	font-weight: 600;
	color: var(--nv-ink-60);
}

.nv-sci-dr__disc-chart {
	font-style: italic;
}

/* ---------- PDP ingredients drawer (nv-ing-dr on the nv-sci-dr chrome) ---------- */
.nv-ing-dr-root {
	display: contents;
}

.nv-ing-dr__rows {
	list-style: none;
	margin: 28px 0 0;
	padding: 0;
}

.nv-ing-dr__row {
	padding: 18px 0;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-ing-dr__row:last-child {
	border-bottom: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-ing-dr__head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
}

.nv-ing-dr__name {
	font-size: 1.05rem;
	font-weight: 600;
	color: var(--nv-ink);
}

.nv-ing-dr__dose {
	flex: none;
	font-family: var(--nv-mono);
	font-size: var(--nv-fs-mono);
	letter-spacing: 0.01em;
	color: var(--nv-ink-60);
	font-variant-numeric: tabular-nums;
}

.nv-ing-dr__benefits {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 10px 0 0;
	padding: 0;
}

/* Supplement-facts label photo at the end of the drawer. */
.nv-ing-dr__label {
	margin: 28px 0 0;
}

.nv-ing-dr__facts {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--nv-radius-sm);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-ing-dr__label-caption {
	margin-top: 10px;
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	line-height: 1.4;
	color: var(--nv-ink-40);
}

.nv-ing-dr__benefits li {
	padding: 0.35em 0.8em;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-ink) 6%, transparent);
	font-size: 0.78rem;
	line-height: 1.3;
	color: var(--nv-ink-60);
}

.nv-sci-dr__note a {
	color: inherit;
}

/* === PDP Vital · On-page ingredients panel (copy doc Section 7) ===========
   One white card carrying the seven actives with doses + benefit chips
   (rows reuse the nv-ing-dr row primitives) and the formulation fine print. */
.nv-vital-ing {
	padding: var(--nv-section-pad) 0;
}

.nv-vital-ing__inner {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	padding-inline: var(--nv-gutter-wide);
}

.nv-vital-ing__panel {
	max-width: 900px;
	margin: clamp(20px, 2.2vw, 36px) auto 0;
	padding: clamp(24px, 3vw, 48px);
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 6%, transparent);
	border-radius: var(--nv-radius);
	box-shadow: 0 4px 10px color-mix(in srgb, var(--nv-ink) 4%, transparent);
}

.nv-vital-ing__title {
	margin: 0;
	font-family: var(--nv-serif);
	font-size: clamp(1.4rem, 1.8vw, 2rem);
	font-weight: 500;
	letter-spacing: -0.02em;
	color: var(--nv-ink);
}

/* Second and later group headings (Bar's multi-group ingredient explorer):
   space away from the previous group's rows instead of sitting flush
   under the panel's top padding. */
.nv-vital-ing__title--group {
	margin-top: clamp(28px, 3vw, 44px);
}

/* Description paragraph in place of the benefit-chip list (foods rather
   than dosed actives don't carry benefit tags). */
.nv-ing-dr__desc {
	margin: 8px 0 0;
	font-size: 0.9rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
}

.nv-vital-ing__foot {
	display: flex;
	flex-direction: column;
	gap: 8px;
	margin-top: clamp(18px, 2vw, 28px);
}

.nv-vital-ing__foot p {
	margin: 0;
	font-size: 0.9rem;
	line-height: 1.55;
	color: var(--nv-ink-80);
}

.nv-vital-ing__foot p.nv-vital-ing__note {
	font-size: 0.8rem;
	color: var(--nv-ink-60);
}

.nv-vital-ing__cta {
	margin-top: clamp(20px, 2.2vw, 32px);
}

/* ---------- Supplement Facts panel (.nv-facts) ----------
   Static HTML label card (theme inc/supplement-facts.php), rendered in the
   Key-ingredients accordion row and the ingredients drawer. Element
   selectors are scoped to the block to keep this lean. */
.nv-facts {
	--nv-facts-pad: clamp(18px, 3vw, 34px);
	margin-top: 20px;
	background: var(--nv-white);
	border: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
	border-radius: var(--nv-radius-sm);
	box-shadow: var(--nv-shadow-sm);
	overflow: hidden;
	line-height: 1.4;
}

.nv-facts__head {
	padding: var(--nv-facts-pad) var(--nv-facts-pad) 18px;
}

/* Mono micro-labels share one treatment: eyebrow, column heads, block heads. */
.nv-facts__eyebrow,
.nv-facts h4,
.nv-facts thead th {
	margin: 0;
	font-family: var(--nv-mono);
	font-size: 0.68rem;
	font-weight: 500;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
}

.nv-facts__eyebrow {
	margin-bottom: 8px;
	letter-spacing: 0.12em;
	color: var(--nv-orange);
}

.nv-facts__title {
	margin: 0;
	font-family: var(--nv-serif);
	font-size: clamp(1.55rem, 2.4vw, 2rem);
	font-weight: 600;
	line-height: 1.1;
	color: var(--nv-ink);
}

.nv-facts__serving {
	margin: 10px 0 0;
	font-size: 0.875rem;
	color: var(--nv-ink-60);
}

.nv-facts__serving b {
	margin-left: 4px;
	font-family: var(--nv-mono);
	font-weight: 500;
	color: var(--nv-ink);
}

.nv-facts table {
	width: 100%;
	border-collapse: collapse;
}

.nv-facts th,
.nv-facts td {
	text-align: right;
	vertical-align: middle;
}

.nv-facts tr > :first-child {
	padding-left: var(--nv-facts-pad);
	text-align: left;
}

.nv-facts tr > :last-child {
	width: 92px;
	padding-right: var(--nv-facts-pad);
}

.nv-facts thead th {
	padding-top: 11px;
	padding-bottom: 11px;
	background: var(--nv-beige-dark);
	border-block: 1px solid color-mix(in srgb, var(--nv-ink) 10%, transparent);
}

.nv-facts tbody th,
.nv-facts tbody td {
	padding-block: 13px;
	border-bottom: 1px solid color-mix(in srgb, var(--nv-ink) 8%, transparent);
}

.nv-facts tbody tr:last-child > * {
	border-bottom: 0;
}

.nv-facts tbody th {
	font-size: 0.94rem;
	font-weight: 600;
	line-height: 1.3;
	color: var(--nv-ink);
}

/* Ingredient form line ("as Ascorbic Acid"). */
.nv-facts tbody th span {
	display: block;
	margin-top: 2px;
	font-size: 0.78rem;
	font-weight: 400;
	color: var(--nv-ink-60);
}

/* Data cells: mono numerals. Rows without a DV show a bare muted "*". */
.nv-facts tbody td {
	padding-left: 12px;
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: 0.94rem;
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
	color: var(--nv-ink-40);
}

.nv-facts tbody td:first-of-type,
.nv-facts tbody td b {
	color: var(--nv-ink);
}

.nv-facts tbody td small {
	font-size: 0.69rem;
	color: var(--nv-ink-60);
}

.nv-facts tbody td b {
	font-weight: 500;
	font-size: 0.875rem;
}

/* %DV mini-bar: one element, orange fill via a hard-stop gradient. */
.nv-facts tbody td i {
	display: block;
	height: 4px;
	margin-top: 5px;
	border-radius: 2px;
	background: linear-gradient(
		to right,
		var(--nv-orange) var(--nv-dv, 0%),
		color-mix(in srgb, var(--nv-ink) 8%, transparent) 0
	);
}

.nv-facts__foot {
	margin: 0;
	padding: 14px var(--nv-facts-pad) 18px;
	font-size: 0.78rem;
	color: var(--nv-ink-60);
}

.nv-facts__block {
	margin: 0 var(--nv-facts-pad);
	padding: 16px 0 18px;
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 12%, transparent);
}

.nv-facts h4 {
	margin-bottom: 8px;
}

.nv-facts__block p {
	margin: 0;
	font-size: 0.84rem;
	line-height: 1.6;
}

.nv-facts__note {
	font-size: 0.75rem;
	color: var(--nv-ink-60);
}

.nv-facts__block ul + .nv-facts__note {
	margin-top: 14px;
}

/* EU Reference Intake tiles. */
.nv-facts__block ul {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 12px;
	margin: 14px 0 0;
	padding: 0;
}

.nv-facts__block li {
	padding: 12px 14px;
	border-radius: var(--nv-radius-xs);
	background: var(--nv-beige-dark);
	font-size: 0.75rem;
	color: var(--nv-ink-60);
}

.nv-facts__block li b {
	display: block;
	margin-top: 4px;
	font-family: var(--nv-mono);
	font-weight: 500;
	font-size: 0.875rem;
	font-variant-numeric: tabular-nums;
	color: var(--nv-ink);
}

.nv-facts__block li em {
	font-style: normal;
	color: var(--nv-orange);
}

/* Trust badges (LAB / GMP). */
.nv-facts__badges {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin: 0 var(--nv-facts-pad);
	padding: 18px 0 var(--nv-facts-pad);
	border-top: 1px solid color-mix(in srgb, var(--nv-ink) 12%, transparent);
}

.nv-facts__badges > span {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 16px;
	border: 1px solid color-mix(in srgb, var(--nv-ink) 14%, transparent);
	border-radius: var(--nv-radius-xs);
}

.nv-facts__badges i {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border: 1.5px solid var(--nv-ink);
	border-radius: 50%;
	font-family: var(--nv-mono);
	font-style: normal;
	font-weight: 600;
	font-size: 0.66rem;
}

.nv-facts__badges b {
	font-size: 0.78rem;
	font-weight: 600;
}

.nv-facts__badges small {
	display: block;
	margin-top: 1px;
	font-size: 0.69rem;
	font-weight: 400;
	color: var(--nv-ink-60);
}

@media (max-width: 560px) {
	.nv-facts {
		--nv-facts-pad: 18px;
	}

	.nv-facts__block ul {
		grid-template-columns: 1fr;
	}
}

/* ---------- Science page: responsive ---------- */
@media (max-width: 980px) {
	.nv-sci-stats {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.nv-evladder {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.nv-trial__markers {
		grid-template-columns: 1fr;
	}

	.nv-h2h__groups {
		grid-template-columns: 1fr;
	}

	.nv-sci-different__head {
		grid-template-columns: 1fr;
		align-items: start;
	}

	.nv-sci-cards {
		display: flex;
		gap: 12px;
		overflow-x: auto;
		scroll-snap-type: x proximity;
		margin-inline: calc(-1 * var(--nv-gutter));
		padding-inline: var(--nv-gutter);
		padding-bottom: 8px;
	}

	.nv-sci-card2 {
		flex: 0 0 min(76vw, 320px);
		scroll-snap-align: start;
		gap: 44px;
	}

	.nv-sci-trust__grid {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 620px) {
	.nv-sci-stats {
		gap: 10px;
	}

	.nv-sci-stat {
		padding: 14px 16px;
	}

	.nv-sci-studies__img {
		aspect-ratio: 4 / 5;
	}

	.nv-evladder {
		grid-template-columns: 1fr;
	}

	.nv-hotspot {
		width: 40px;
		height: 40px;
		border-radius: 12px;
	}

	.nv-sci-awards {
		grid-template-columns: 1fr;
	}

	.nv-sci-dr__tiles {
		grid-template-columns: repeat(3, minmax(0, 1fr));
		gap: 8px;
	}

	.nv-sci-dr__tile-value {
		font-size: 1.3rem;
	}

	.nv-sci-pair__row {
		grid-template-columns: 66px 1fr 58px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-hotspot__pulse {
		animation: none;
		opacity: 0;
	}

	.nv-sci-card2,
	.nv-sci-card2:hover {
		transform: none;
	}
}

/* === Shop / Collections page ==============================================
   Figma: DIGITAL · Collection Page Redesign (Option 01). White canvas with
   beige cards; goal filter pills drive client-side filtering (novos.js);
   card rails share the generic carousel drag/drift behaviours. */

.nv-main--shop {
	background: var(--nv-white);
}

.nv-shop-hidden {
	display: none !important;
}

/* ---------- Upper (dynamic, symptom-based headline) ---------- */
.nv-shop-upper {
	padding: calc(var(--nv-top-stack) + clamp(56px, 8vw, 140px)) var(--nv-gutter) clamp(16px, 2.4vw, 40px);
}

.nv-shop-upper__inner {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-shop-upper__title {
	font-size: var(--nv-fs-h2);
	margin: 0;
}

.nv-shop-upper__orgline,
.nv-shop-sec__orgline {
	color: var(--nv-ink);
	margin-top: clamp(2px, 0.4vw, 8px);
}


/* ---------- Hero product + quiz aside ---------- */
.nv-shop-hero {
	padding: clamp(20px, 2.6vw, 48px) var(--nv-gutter) 0;
}

.nv-shop-hero__grid {
	max-width: var(--nv-container-wide);
	margin-inline: auto;
	display: grid;
	grid-template-columns: minmax(0, 3.35fr) minmax(260px, 1fr);
	gap: clamp(14px, 1vw, 20px);
	align-items: stretch;
}

.nv-shop-hero__card {
	display: grid;
	grid-template-columns: minmax(0, 508fr) minmax(0, 733fr);
	gap: clamp(24px, 3.3vw, 64px);
	align-items: center;
	background: color-mix(in srgb, var(--nv-ink-10) 60%, transparent);
	border-radius: var(--wp--custom--radius--xl);
	padding: clamp(24px, 2.6vw, 40px) clamp(24px, 3.3vw, 64px);
	margin: 0;
}

.nv-shop-hero__content {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: clamp(18px, 1.9vw, 36px);
}

.nv-shop-hero__title {
	font-family: var(--nv-serif);
	font-size: clamp(2.2rem, 3.33vw, 4rem);
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--ls-display);
	line-height: 1;
	margin: 0;
}

.nv-shop-hero__desc {
	font-size: var(--nv-fs-lead);
	line-height: 1.38;
	color: var(--nv-ink-60);
	max-width: 34ch;
	margin: 0;
}

.nv-shop-hero__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 9px;
}

.nv-shop-hero__price {
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: clamp(1rem, 1.25vw, 1.5rem);
	color: var(--nv-orange);
}

.nv-shop-hero__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	width: 100%;
}

.nv-shop-hero__actions .nv-btn {
	flex: 1 1 0;
	max-width: 250px;
	padding-inline: 1.2em;
}

.nv-shop-hero__arrow {
	width: 0.7em;
	height: 0.66em;
	flex: 0 0 auto;
}

/* The photo matches the content column's height: the column stretches and
   the img is pinned to it, so it never feeds back into the row height. */
.nv-shop-hero__media {
	position: relative;
	min-width: 0;
	align-self: stretch;
}

.nv-shop-hero__media img {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: var(--nv-radius-lg);
	background: var(--nv-ink-05);
}

.nv-shop-hero__quiz {
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	gap: clamp(20px, 2vw, 40px);
	background: color-mix(in srgb, var(--nv-ink-10) 60%, transparent);
	border-radius: var(--wp--custom--radius--xl);
	padding: clamp(20px, 1.6vw, 32px) clamp(16px, 1.2vw, 24px) clamp(28px, 2.9vw, 56px);
	margin: 0;
}

/* The portrait absorbs whatever height the featured card sets (the quiz
   column stretches to match it), so the text and CTA stay pinned below. */
.nv-shop-hero__quiz-media {
	flex: 1 1 auto;
	min-height: 200px;
	overflow: hidden;
	border-radius: var(--nv-radius-sm);
	background: var(--nv-ink-05);
}

.nv-shop-hero__quiz-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 25%;
}

.nv-shop-hero__quiz p {
	font-size: clamp(1rem, 1.05vw, 1.25rem);
	line-height: 1.38;
	color: var(--nv-ink-60);
	margin: 0;
}

.nv-pill-link {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 41px;
	padding: 8px 16px;
	border: 1.7px solid var(--nv-ink);
	border-radius: var(--wp--custom--radius--pill);
	font-weight: 600;
	font-size: 1rem;
	line-height: 1.15;
	color: var(--nv-ink);
	text-decoration: none;
	transition: background var(--wp--custom--motion--dur-fast) var(--nv-ease), color var(--wp--custom--motion--dur-fast) var(--nv-ease);
}

.nv-pill-link:hover {
	background: var(--nv-ink);
	color: var(--nv-white);
}

/* ---------- Goal filter pills ---------- */
.nv-shop-filters {
	padding: clamp(44px, 6vw, 104px) var(--nv-gutter) 0;
}

/* Arrow group above the pill rail, house carousel style; :has() hides it
   when both arrows are disabled, i.e. every pill fits without scrolling. */
.nv-shop-filters__nav {
	max-width: var(--nv-container-mid);
	margin: 0 auto 10px;
}

.nv-shop-filters__nav:has([data-nv-carousel-prev][disabled]):has([data-nv-carousel-next][disabled]) {
	display: none;
}

.nv-shop-filters__row {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
	display: flex;
	gap: clamp(8px, 0.65vw, 12px);
	overflow-x: auto;
	padding-block: 4px;
}

.nv-filter-pill {
	flex: 0 0 auto;
	scroll-snap-align: start;
	padding: 0.72em 1.15em;
	background: transparent;
	border: 2px solid var(--nv-ink);
	border-radius: var(--wp--custom--radius--pill);
	font-family: var(--nv-sans);
	font-weight: 600;
	font-size: clamp(1rem, 1.17vw, 1.4rem);
	line-height: 1;
	color: var(--nv-ink);
	text-decoration: none;
	cursor: pointer;
	transition: background var(--wp--custom--motion--dur-fast) var(--nv-ease), color var(--wp--custom--motion--dur-fast) var(--nv-ease);
}

.nv-filter-pill:hover {
	background: var(--nv-ink-05);
}

.nv-filter-pill.is-active {
	background: var(--nv-ink);
	color: var(--nv-white);
}

.nv-filter-pill:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 3px;
}

/* Collection description, server-rendered below the pills and swapped
   in place by novos.js when a pill changes the collection. */
.nv-shop-filters__desc {
	max-width: var(--nv-container-mid);
	margin: clamp(14px, 1.6vw, 24px) auto 0;
	font-size: clamp(0.95rem, 1.05vw, 1.125rem);
	line-height: 1.55;
	color: var(--nv-ink-60);
}

.nv-shop-filters__desc:empty {
	display: none;
}

.nv-shop-filters__desc p {
	max-width: 78ch;
	margin: 0;
}

.nv-shop-filters__desc p + p {
	margin-top: 0.8em;
}

.nv-shop-filters__desc a {
	color: var(--nv-ink);
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* ---------- Shared section chrome (heading + orgline + rail) ---------- */
.nv-shop-sec {
	padding: clamp(28px, 3.6vw, 64px) var(--nv-gutter) 0;
}

.nv-shop-samples {
	padding-bottom: var(--nv-section-pad);
}

.nv-shop-sec__inner {
	max-width: var(--nv-container-mid);
	margin-inline: auto;
}

.nv-shop-sec__title {
	font-size: var(--nv-fs-h3);
	margin: 0;
}

/* Shared .nv-cardrail scroll-snap track; bleeds to the right viewport edge
   like the timeline/protocol rails so the last card peeks. */
.nv-shop-rail {
	display: flex;
	gap: clamp(14px, 1.25vw, 24px);
	overflow-x: auto;
	margin-right: calc(50% - 50vw);
	padding-block: clamp(18px, 2.4vw, 40px) 6px;
	padding-right: var(--nv-gutter);
}

.nv-shop-sec__nav,
.nv-shop-sec .nv-carousel-nav {
	margin: clamp(16px, 2vw, 28px) 0 calc(-1 * clamp(8px, 1.4vw, 24px));
}

.nv-shop-rail > *,
.nv-shop-sec .nv-product-rail > * {
	flex: 0 0 auto;
	scroll-snap-align: start;
}

/* Shared product-rail under shop: match shop rail gap/padding. */
.nv-shop-sec .nv-product-rail {
	gap: clamp(14px, 1.25vw, 24px);
	padding-block: clamp(18px, 2.4vw, 40px) 6px;
	padding-right: var(--nv-gutter);
	padding-left: 0;
}

/* ---------- Goal cards ---------- */
.nv-goal-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(14px, 1.35vw, 26px);
	width: clamp(150px, 14vw, 268px);
	padding: clamp(20px, 2vw, 39px) clamp(16px, 2vw, 39px);
	background: color-mix(in srgb, var(--nv-beige) 45%, var(--nv-white));
	border: 0;
	border-radius: var(--nv-radius);
	font-family: var(--nv-sans);
	font-weight: 600;
	font-size: clamp(1rem, 1.19vw, 1.43rem);
	line-height: 1.3;
	color: var(--nv-ink);
	cursor: pointer;
	transition: background var(--wp--custom--motion--dur-fast) var(--nv-ease), transform var(--wp--custom--motion--dur-fast) var(--nv-ease), box-shadow var(--wp--custom--motion--dur-fast) var(--nv-ease);
}

.nv-goal-card img {
	width: clamp(36px, 2.7vw, 52px);
	height: auto;
}

.nv-goal-card:hover {
	background: var(--nv-beige);
	transform: translateY(-2px);
}

.nv-goal-card.is-active {
	box-shadow: inset 0 0 0 2px var(--nv-ink);
	background: var(--nv-beige);
}

.nv-goal-card:focus-visible {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 3px;
}

/* ---------- Product cards (Longevity Solutions) ---------- */
.nv-shop-card {
	display: flex;
	flex-direction: column;
	width: clamp(282px, 19.2vw, 369px);
	background: var(--nv-beige);
	border-radius: var(--nv-radius-lg);
	padding-block: 24px;
	margin: 0;
}

.nv-shop-card__media {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
}

.nv-shop-card__tag {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 32px;
	padding: 6px 20px;
	background: color-mix(in srgb, var(--nv-ink) 12%, var(--nv-white));
	border-radius: var(--wp--custom--radius--pill);
	font-weight: 600;
	font-size: 0.9rem;
	line-height: 1.1;
	color: var(--nv-ink);
	white-space: nowrap;
}

.nv-shop-card__media > img {
	width: 100%;
	height: clamp(200px, 13.3vw, 256px);
	object-fit: contain;
}

/* Body fills the (stretch-aligned) card so the CTA pins to one shared
   baseline across the rail regardless of copy length. */
.nv-shop-card__body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: clamp(14px, 1.25vw, 24px);
	padding: clamp(14px, 2vw, 24px) 24px 0;
	flex: 1 1 auto;
	min-height: 0;
}

.nv-shop-card__body h3 {
	font-family: var(--nv-sans);
	font-size: 1.2rem;
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--ls-tight);
	line-height: 1;
	margin: 0;
}

.nv-shop-card__body p {
	font-size: 0.9rem;
	line-height: 1.42;
	color: var(--nv-ink-60);
	margin: 0;
}

/* Single-line chips so card bodies stay the same height and the CTAs line
   up. The base row is the no-JS / reduced-motion fallback (finger-scrollable,
   scrollbar hidden); rows that overflow are upgraded to an auto marquee by
   buildChipTickers() in novos.js since the card rail already owns scroll-x. */
.nv-shop-card__chips {
	display: flex;
	flex-wrap: nowrap;
	gap: 6px;
	max-width: 100%;
	overflow-x: auto;
	scrollbar-width: none;
}

.nv-shop-card__chips::-webkit-scrollbar {
	display: none;
}

.nv-shop-card__chips .nv-chip {
	flex: 0 0 auto;
}

/* Upgraded rows also carry .nv-ticker, which supplies overflow: hidden and
   the edge fade mask. The base rule above wins the overflow-x battle by
   source order, so re-hide it here. The track can't reuse .nv-ticker__track:
   its span rule (serif wordmarks, grayscale) outranks .nv-chip and would
   need more counter-overrides than this block. Same no-flex-gap seam rule
   (the -50% loop point must land exactly one copy in) — spacing lives on
   the chips; keyframes shared with nv-ticker. */
.nv-shop-card__chips.nv-ticker {
	overflow-x: hidden;
}

.nv-shop-card__chips-track {
	display: flex;
	width: max-content;
	animation: nv-ticker 12s linear infinite;
	will-change: transform;
}

.nv-shop-card__chips-track .nv-chip {
	margin-right: 6px;
}

.nv-shop-card__chips.nv-ticker:hover .nv-shop-card__chips-track {
	animation-play-state: paused;
}

.nv-shop-card__chips .nv-chip {
	font-size: 0.82rem;
	padding: 5px 12px;
}

.nv-shop-card__price {
	font-family: var(--nv-mono);
	font-weight: 600;
	font-size: 0.875rem;
	color: var(--nv-orange);
}

.nv-shop-card .nv-btn {
	width: 100%;
	border-radius: var(--nv-radius-xs);
	margin-top: auto;
}

/* ---------- Bundle cards ---------- */
.nv-bundle-card,
.nv-sample-card {
	display: flex;
	flex-direction: column;
	gap: clamp(20px, 2.2vw, 43px);
	width: clamp(320px, 33.8vw, 649px);
	background: var(--nv-beige);
	border-radius: var(--nv-radius-lg);
	overflow: hidden;
	padding-bottom: 24px;
	text-decoration: none;
	color: inherit;
	transition: transform var(--wp--custom--motion--dur-fast) var(--nv-ease), box-shadow var(--wp--custom--motion--dur-fast) var(--nv-ease);
}

.nv-bundle-card:hover,
.nv-sample-card:hover {
	transform: translateY(-3px);
	box-shadow: var(--nv-shadow-sm);
	color: inherit;
}

.nv-bundle-card__media {
	aspect-ratio: 1400 / 664;
	display: flex;
	justify-content: center;
	overflow: hidden;
}

.nv-bundle-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.nv-bundle-card__body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: clamp(12px, 1.25vw, 24px);
	padding-inline: 24px;
}

.nv-bundle-card__body h3 {
	font-family: var(--nv-sans);
	font-size: 1.2rem;
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--ls-tight);
	line-height: 1;
	margin: 0;
}

.nv-bundle-card__body p {
	font-size: 0.9rem;
	line-height: 1.42;
	color: var(--nv-ink-60);
	margin: 0;
}

/* ---------- Sample cards ---------- */
.nv-sample-card__media {
	height: clamp(220px, 17.6vw, 339px);
}

.nv-sample-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.nv-sample-card__footer {
	display: flex;
	align-items: center;
	gap: clamp(14px, 1.25vw, 24px);
	padding-inline: 24px;
}

.nv-sample-card__footer h3 {
	font-family: var(--nv-sans);
	font-size: clamp(1.1rem, 1.25vw, 1.5rem);
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--ls-tight);
	line-height: 1;
	margin: 0;
	white-space: nowrap;
}

/* ---------- Shop responsive ---------- */
@media (max-width: 1280px) {
	.nv-shop-hero__grid {
		grid-template-columns: 1fr;
	}

	.nv-shop-hero__quiz {
		padding-block: clamp(24px, 3vw, 40px);
	}

	/* Own row here: without the stretched-column height the portrait would
	   render at its intrinsic size, so crop it to a wide band instead. */
	.nv-shop-hero__quiz-media {
		flex: none;
		aspect-ratio: 21 / 9;
		min-height: 0;
	}
}

@media (max-width: 980px) {
	.nv-shop-hero__card {
		grid-template-columns: 1fr;
		gap: 20px;
	}

	.nv-shop-hero__media {
		order: -1;
		/* Stacked above the content here, so nothing sets the column height
		   for the pinned img — give the box its own ratio instead. */
		aspect-ratio: 2 / 1;
	}

	.nv-shop-hero__actions .nv-btn {
		max-width: none;
	}

	.nv-shop-card {
		width: min(78vw, 320px);
	}

	.nv-bundle-card,
	.nv-sample-card {
		width: min(84vw, 460px);
	}
}

@media (prefers-reduced-motion: reduce) {
	.nv-goal-card:hover,
	.nv-bundle-card:hover,
	.nv-sample-card:hover {
		transform: none;
	}
}

/* ============================================================
   My Account (/my-account/) — styles WooCommerce's stock account
   markup with the theme's design tokens. Menu items, endpoint
   titles and the merged Orders & Subscriptions view come from
   the novos-extended plugin (Hooks\My_Account).
   ============================================================ */

/* Header account trigger stays visible when logged out too — /my-account/
   renders the login card, so it doubles as the customer log-in entry (QA
   2026-07-29: hiding it left logged-out customers no way in). On small
   screens the centered wordmark and the action icons collide, so the
   trigger hides there — the mobile drawer's "My Account" row covers it. */
@media (max-width: 620px) {
	.nv-account-trigger {
		display: none;
	}
}

/* ---------- Page title ---------- */
.nv-account__head {
	margin-bottom: clamp(20px, 3vw, 40px);
}

.nv-account__title {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h2);
	letter-spacing: var(--wp--custom--type--ls-tight);
	margin: 0;
}

/* ---------- Two-column shell (nav present = logged in) ---------- */
.nv-account .woocommerce:has(.woocommerce-MyAccount-navigation) {
	display: grid;
	grid-template-columns: 250px minmax(0, 1fr);
	gap: clamp(24px, 3.5vw, 56px);
	align-items: start;
}

/* Woo layout.css clearfix pseudes become grid items and steal
   the first track — kill them so nav/content map to the two columns. */
.nv-account .woocommerce:has(.woocommerce-MyAccount-navigation)::before,
.nv-account .woocommerce:has(.woocommerce-MyAccount-navigation)::after {
	content: none;
	display: none;
}

.nv-account .woocommerce-MyAccount-navigation,
.nv-account .woocommerce-MyAccount-content {
	float: none;
	width: auto;
	max-width: none;
}

.nv-account .woocommerce-notices-wrapper {
	grid-column: 1 / -1;
}

.nv-account .woocommerce-notices-wrapper:empty {
	display: none;
}

/* ---------- Account navigation ---------- */
.nv-account .woocommerce-MyAccount-navigation ul {
	list-style: none;
	margin: 0;
	padding: 6px;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
}

.nv-account .woocommerce-MyAccount-navigation a {
	display: block;
	padding: 12px 16px;
	border-radius: var(--nv-radius-xs);
	color: var(--nv-ink-80);
	font-weight: 500;
	text-decoration: none;
	transition: background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.nv-account .woocommerce-MyAccount-navigation a:hover {
	background: var(--nv-ink-05);
	color: var(--nv-ink);
}

.nv-account .woocommerce-MyAccount-navigation li.is-active a {
	background: var(--nv-ink);
	color: var(--nv-white);
	font-weight: 600;
}

.nv-account .woocommerce-MyAccount-navigation-link--customer-logout a {
	color: var(--nv-orange-deep);
}

/* ---------- Content typography ---------- */
.nv-account .woocommerce-MyAccount-content h2,
.nv-account .woocommerce-MyAccount-content h3,
.nv-account .woocommerce-column__title {
	font-family: var(--nv-serif);
	letter-spacing: var(--wp--custom--type--ls-tight);
}

.nv-account .woocommerce-MyAccount-content h3 {
	font-size: var(--nv-fs-h3);
	margin: clamp(24px, 3vw, 40px) 0 14px;
}

.nv-account .woocommerce-MyAccount-content h3:first-child {
	margin-top: 0;
}

.nv-account mark {
	background: var(--nv-energy);
	padding: 0 5px;
	border-radius: 4px;
}

/* ---------- Tables (orders, subscriptions, downloads) ---------- */
.nv-account table.shop_table {
	width: 100%;
	border-collapse: separate;
	border-spacing: 0;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-sm);
	overflow: hidden;
	margin-bottom: clamp(20px, 3vw, 36px);
}

.nv-account table.shop_table th,
.nv-account table.shop_table td {
	padding: 14px 18px;
	text-align: left;
	border: 0;
	border-bottom: 1px solid var(--nv-ink-05);
}

.nv-account table.shop_table thead th {
	font-size: 0.78rem;
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--ls-eyebrow);
	text-transform: uppercase;
	color: var(--nv-ink-60);
	background: var(--nv-ink-05);
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-account table.shop_table tbody tr:last-child td {
	border-bottom: 0;
}

/* ---------- Buttons (compose with .nv-btn / .nv-btn--primary) ---------- */
.nv-account .woocommerce a.button,
.nv-account .woocommerce button.button {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.55em;
	border: 0.5px solid var(--wp--custom--glass--border);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-orange);
	color: var(--nv-white);
	padding: 0.8em 1.5em;
	font: inherit;
	font-size: 0.95rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	line-height: 1.08;
	text-decoration: none;
	cursor: pointer;
	transition: transform 0.25s var(--nv-ease), background 0.25s var(--nv-ease), color 0.25s var(--nv-ease);
}

.nv-account .woocommerce a.button:hover,
.nv-account .woocommerce button.button:hover {
	background: var(--wp--custom--brand-hover);
	color: var(--nv-white);
	transform: translateY(-2px);
}

.nv-account table.shop_table .button {
	padding: 0.55em 1.1em;
	font-size: 0.85rem;
	margin: 2px 6px 2px 0;
}

/* ---------- Forms (account details, addresses, login) ---------- */
.nv-account .woocommerce form .form-row {
	margin: 0 0 16px;
	padding: 0;
}

.nv-account .woocommerce form .form-row label {
	display: block;
	margin-bottom: 6px;
	font-size: 0.9rem;
	font-weight: 600;
	color: var(--nv-ink-80);
}

.nv-account .woocommerce .input-text,
.nv-account .woocommerce select {
	width: 100%;
	box-sizing: border-box;
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-white);
	padding: 12px 16px;
	font: inherit;
	color: var(--nv-ink);
}

.nv-account .woocommerce .input-text:focus,
.nv-account .woocommerce select:focus {
	outline: 2px solid var(--nv-orange-soft);
	outline-offset: 1px;
	border-color: var(--nv-orange);
}

.nv-account .woocommerce fieldset {
	border: 0;
	border-top: 1px solid var(--nv-ink-10);
	margin: 28px 0 0;
	padding: 20px 0 0;
}

.nv-account .woocommerce fieldset legend {
	font-family: var(--nv-serif);
	font-size: 1.3rem;
	padding-right: 12px;
}

/* Logged-out: kill Woo float columns + stock form chrome; match both cards. */
.nv-account #customer_login {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(20px, 3vw, 40px);
}

.nv-account #customer_login::before,
.nv-account #customer_login::after {
	content: none;
	display: none;
}

.nv-account #customer_login .u-column1,
.nv-account #customer_login .u-column2 {
	float: none;
	width: auto;
	max-width: none;
}

.nv-account #customer_login h2 {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h3);
	letter-spacing: var(--wp--custom--type--ls-tight);
	margin: 0 0 14px;
}

.nv-account .woocommerce form.login,
.nv-account .woocommerce form.register,
.nv-account .woocommerce form.lost_reset_password {
	width: 100%;
	max-width: none;
	margin: 0;
	box-sizing: border-box;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: clamp(24px, 4vw, 40px);
}

.nv-account .woocommerce > form.lost_reset_password {
	max-width: 460px;
	margin-inline: auto;
}

.nv-account .lost_password {
	font-size: 0.9rem;
}

.nv-account .lost_password a,
.nv-account .woocommerce-privacy-policy-link {
	color: var(--nv-orange-deep);
}

.nv-account .fda-disclaimer-wrap {
	display: none;
}

/* ---------- Notices ---------- */
.nv-account .woocommerce-message,
.nv-account .woocommerce-info,
.nv-account .woocommerce-error {
	list-style: none;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-left: 4px solid var(--wp--preset--color--clinical-green);
	border-radius: var(--nv-radius-xs);
	padding: 14px 18px;
	margin: 0 0 20px;
}

.nv-account .woocommerce-info {
	border-left-color: var(--wp--preset--color--clinical-blue);
}

.nv-account .woocommerce-error {
	border-left-color: var(--wp--preset--color--clinical-red);
}

/* Woo core absolutely-positions a font icon inside notices assuming its own
   3.5em left padding; with the card padding above it lands on the text.
   The colored left border already carries the state, so drop the icon. */
.nv-account .woocommerce-message::before,
.nv-account .woocommerce-info::before,
.nv-account .woocommerce-error::before {
	content: none;
}

/* Newer Woo renders some account notices as SVG notice banners; without
   wc-blocks styles the icon stacks above the text. Same card treatment. */
.nv-account .wc-block-components-notice-banner {
	display: flex;
	align-items: center;
	gap: 12px;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-left: 4px solid var(--wp--preset--color--clinical-blue);
	border-radius: var(--nv-radius-xs);
	padding: 14px 18px;
	margin: 0 0 20px;
}

.nv-account .wc-block-components-notice-banner.is-success {
	border-left-color: var(--wp--preset--color--clinical-green);
}

.nv-account .wc-block-components-notice-banner.is-error {
	border-left-color: var(--wp--preset--color--clinical-red);
}

.nv-account .wc-block-components-notice-banner > svg {
	flex: none;
	width: 20px;
	height: 20px;
}

.nv-account .wc-block-components-notice-banner__content {
	flex: 1;
}

/* ---------- Mobile ---------- */
@media (max-width: 900px) {
	/* minmax(0, 1fr): with a bare 1fr the column can't shrink below the nav
	   strip's intrinsic width, so the whole page overflowed sideways instead
	   of the strip scrolling (QA 2026-07-29). */
	.nv-account .woocommerce:has(.woocommerce-MyAccount-navigation) {
		grid-template-columns: minmax(0, 1fr);
		gap: 20px;
	}

	.nv-account #customer_login {
		grid-template-columns: 1fr;
	}

	.nv-account .woocommerce-MyAccount-navigation {
		min-width: 0;
		max-width: 100%;
	}

	.nv-account .woocommerce-MyAccount-navigation ul {
		display: flex;
		gap: 4px;
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: thin;
	}

	.nv-account .woocommerce-MyAccount-navigation a {
		white-space: nowrap;
		padding: 10px 14px;
	}
}

/* ============================================================
   Geolocation currency switch notice (B3-07)
   Markup rendered by novos-extended Hooks\Currency_Notice;
   fixed bottom bar, ported from the ageless notice styles.
   Selectors carry the .demo_store/.woocommerce-store-notice classes
   because WooCommerce core styles `p.demo_store` (purple, absolute,
   top:0) at higher specificity than a lone class — without the boost
   the bar rides mid-page and scrolls away (staging QA 2026-07-31).
   ============================================================ */
p.novos_currency_switch_notice.woocommerce-store-notice,
p.novos_currency_switch_notice.demo_store {
	position: fixed;
	top: auto;
	bottom: 0;
	left: 0;
	right: auto;
	width: 100%;
	margin: 0;
	padding: 0.6em;
	background: var(--nv-white);
	color: var(--nv-ink);
	text-align: center;
	z-index: 99998;
	box-shadow: var(--nv-shadow-sm);
}

/* WC core pins `.admin-bar p.demo_store` to top:32px; with bottom:0 that
   would stretch the fixed bar over the whole viewport for logged-in users. */
body.admin-bar p.novos_currency_switch_notice.demo_store {
	top: auto;
}

p.novos_currency_switch_notice.woocommerce-store-notice a,
p.novos_currency_switch_notice.demo_store a {
	color: var(--nv-orange);
	text-decoration: none;
}

.novos_currency_switch_notice a.woocommerce-store-notice__dismiss-link {
	background-color: color-mix(in srgb, var(--nv-orange-soft) 10%, transparent);
	color: var(--nv-orange);
	border: 1px solid var(--nv-orange);
	border-radius: var(--nv-radius-btn);
	transition: background-color 0.2s var(--nv-ease);
	letter-spacing: -0.42px;
	box-sizing: border-box;
	padding: 0.2em 0.5em;
	margin-left: 2em;
	font-size: 0.9em;
}

.novos_currency_switch_notice a.woocommerce-store-notice__dismiss-link:hover {
	background-color: color-mix(in srgb, var(--nv-orange-soft) 25%, transparent);
}

/* ============================================================
   Cart page (/cart/) — classic [woocommerce_cart] shortcode markup
   plus the novos-extended cross-sell section (.cross-sell-container,
   hooked after the cart). Styles the stock Woo markup with theme
   tokens; no template override.
   ============================================================ */

/* Layout: cart form left, totals right, cross-sells full width below. */
.woocommerce-cart .nv-main .entry-content > .woocommerce {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(320px, 400px);
	gap: 28px;
	align-items: start;
}

.woocommerce-cart .nv-main .woocommerce-notices-wrapper,
.woocommerce-cart .nv-main .cross-sell-container {
	grid-column: 1 / -1;
}

@media (max-width: 980px) {
	.woocommerce-cart .nv-main .entry-content > .woocommerce {
		grid-template-columns: 1fr;
	}
}

/* ---------- Notices (added to cart, coupon applied, …) ---------- */
.woocommerce-cart .nv-main .woocommerce-message,
.woocommerce-cart .nv-main .woocommerce-info,
.woocommerce-cart .nv-main .woocommerce-error {
	list-style: none;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-left: 4px solid var(--wp--preset--color--clinical-green);
	border-radius: var(--nv-radius-xs);
	padding: 14px 18px;
	margin: 0 0 4px;
}

.woocommerce-cart .nv-main .woocommerce-info {
	border-left-color: var(--wp--preset--color--clinical-blue);
}

.woocommerce-cart .nv-main .woocommerce-error {
	border-left-color: var(--wp--preset--color--clinical-red);
}

.woocommerce-cart .nv-main .woocommerce-message::before,
.woocommerce-cart .nv-main .woocommerce-info::before,
.woocommerce-cart .nv-main .woocommerce-error::before {
	content: none;
}

/* ---------- Buttons ---------- */
.woocommerce-cart .nv-main .woocommerce a.button,
.woocommerce-cart .nv-main .woocommerce button.button,
.woocommerce-cart .nv-main .cross-sell-item button.add-to-cart {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.55em;
	border: 0.5px solid var(--wp--custom--glass--border);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-orange);
	color: var(--nv-white);
	padding: 0.8em 1.5em;
	font: inherit;
	font-size: 0.95rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	line-height: 1.08;
	text-decoration: none;
	cursor: pointer;
	transition: transform 0.25s var(--nv-ease), background 0.25s var(--nv-ease), color 0.25s var(--nv-ease);
}

.woocommerce-cart .nv-main .woocommerce a.button:hover,
.woocommerce-cart .nv-main .woocommerce button.button:hover,
.woocommerce-cart .nv-main .cross-sell-item button.add-to-cart:hover {
	background: var(--wp--custom--brand-hover);
	color: var(--nv-white);
	transform: translateY(-1px);
}

.woocommerce-cart .nv-main .woocommerce button.button:disabled,
.woocommerce-cart .nv-main .woocommerce button.button[disabled] {
	background: var(--nv-ink-10);
	color: var(--nv-ink-40);
	cursor: default;
	transform: none;

}

.woocommerce-cart .nv-main .woocommerce button.button[name="update_cart"] {
	float: none !important;
    padding: 16px 20px;
    margin-left: 40px;
}

@media (max-width: 980px) {
	.woocommerce-cart .nv-main .woocommerce button.button[name="update_cart"] {
		margin-left: 0;
	}
}

/* ---------- Cart table ---------- */
.woocommerce-cart .nv-main table.shop_table.cart {
	width: 100%;
	border-collapse: separate;
	border-spacing: 0;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	overflow: hidden;
	margin: 0;
}

.woocommerce-cart .nv-main table.shop_table.cart th,
.woocommerce-cart .nv-main table.shop_table.cart td {
	border: 0;
	background: transparent;
	padding: 16px;
	vertical-align: middle;
}

.woocommerce-cart .nv-main table.shop_table.cart thead th {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	border-bottom: 1px solid var(--nv-ink-10);
}

.woocommerce-cart .nv-main table.shop_table.cart tbody td {
	border-bottom: 1px solid var(--nv-ink-05, var(--nv-ink-10));
}

.woocommerce-cart .nv-main table.shop_table.cart tbody tr:last-child td,
.woocommerce-cart .nv-main table.shop_table.cart td.actions {
	border-bottom: 0;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-thumbnail img {
	width: 72px;
	height: auto;
	border-radius: var(--nv-radius-xs);
	display: block;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name a {
	display: block;
	color: var(--nv-ink);
	font-size: 1rem;
	font-weight: 600;
	text-decoration: none;
	margin-bottom: 2px;
}

/* Line description rendered after the name (cart_description meta): keep it
   off the name's line and quiet, however it is wrapped. */
.woocommerce-cart .nv-main table.shop_table.cart td.product-name {
	font-size: 0.85rem;
	line-height: 1.45;
	color: var(--nv-ink-60);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name a:hover {
	color: var(--nv-orange-deep);
}

/* Plugin-injected line description ("Subscribe & Save …") */
.woocommerce-cart .nv-main table.shop_table.cart td.product-name small.cart-description {
	display: block;
	margin: 4px 0 0;
	font-size: 0.82rem;
	line-height: 1.4;
	color: var(--nv-ink-60);
}

.woocommerce-cart .nv-main table.shop_table.cart a.remove {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	color: var(--nv-ink-40) !important;
	font-size: 1.2rem;
	font-weight: 400;
	text-decoration: none;
	transition: background 0.2s var(--nv-ease), color 0.2s var(--nv-ease);
}

.woocommerce-cart .nv-main table.shop_table.cart a.remove:hover {
	background: color-mix(in srgb, var(--wp--preset--color--clinical-red, #c0392b) 12%, transparent);
	color: var(--wp--preset--color--clinical-red, #c0392b) !important;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-remove {
	width: 20px;
}

/* Variation meta (Billing period / Flavor): Woo renders dl.variation with
   dt/dd pairs (dd wraps a p) — lay each pair out as one "Label: value" row. */
.woocommerce-cart .nv-main table.shop_table.cart td.product-name dl.variation {
	display: grid;
	grid-template-columns: max-content 1fr;
	gap: 2px 6px;
	margin: 8px 0 0;
	font-size: 0.82rem;
	line-height: 1.4;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name dl.variation dt,
.woocommerce-cart .nv-main table.shop_table.cart td.product-name dl.variation dd {
	float: none;
	margin: 0;
	padding: 0;
	border: 0;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name dl.variation dt {
	font-weight: 600;
	color: var(--nv-ink-60);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name dl.variation dd p {
	display: inline;
	margin: 0;
}

/* Upsell swap chip (novos_after_cart_item_remove output), rendered in the
   product-name cell after the line description; assets/js/cart.js handles
   the click via delegation. */
.woocommerce-cart .nv-main table.shop_table.cart td.product-name .upsell-item {
	display: inline-block;
	margin-top: 10px;
	padding: 0.45em 0.9em;
	border: 1px solid var(--nv-orange);
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-orange-soft) 12%, transparent);
	color: var(--nv-orange-deep);
	font-size: 0.78rem;
	font-weight: 600;
	line-height: 1.3;
	cursor: pointer;
	transition: background 0.2s var(--nv-ease);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name .upsell-item:hover {
	background: color-mix(in srgb, var(--nv-orange-soft) 25%, transparent);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-name .upsell-item.is-loading {
	opacity: 0.5;
	pointer-events: none;
}

/* NOVOS Age quantity-discount line (novos-extended wc_cart_item_subtotal):
   struck original total, discounted subtotal, "You saved X" chip. */
.woocommerce-cart .nv-main table.shop_table.cart td.product-subtotal del,
.woocommerce-cart .nv-main table.shop_table.cart td.product-price del {
	display: block;
	color: var(--nv-ink-40);
	font-size: 0.85rem;
	font-weight: 400;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ins,
.woocommerce-cart .nv-main table.shop_table.cart td.product-subtotal ins {
	text-decoration: none;
}

.woocommerce-cart .nv-main table.shop_table.cart .simple-product-subtotal {
	font-weight: 600;
	color: var(--nv-ink);
}

.woocommerce-cart .nv-main table.shop_table.cart .cart-saved-link {
	margin-top: 8px;
}

.woocommerce-cart .nv-main table.shop_table.cart .cart-saved-link .with-bg {
	display: inline-block;
	padding: 0.35em 0.8em;
	border-radius: var(--wp--custom--radius--pill);
	background: color-mix(in srgb, var(--nv-orange-soft) 18%, transparent);
	color: var(--nv-orange-deep);
	font-size: 0.75rem;
	font-weight: 600;
	line-height: 1.3;
	white-space: nowrap;
}

/* All Products for Subscriptions plan switcher (ul.wcsatt-options) in the
   price column: one-time vs subscription radios. Pick a plan, then Update
   cart applies it (core cart JS enables the button on input change). */
.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options {
	list-style: none;
	display: grid;
	gap: 7px;
	margin: 0;
	padding: 0;
	min-width: 150px;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options li {
	margin: 0;
	padding: 0;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options label {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	margin: 0;
	cursor: pointer;
	font-size: 0.9rem;
	font-weight: 400;
	line-height: 1.35;
	color: var(--nv-ink-80);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options input[type="radio"] {
	flex: none;
	margin: 2px 0 0;
	accent-color: var(--nv-orange);
	cursor: pointer;
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options li:has(input:checked) label {
	font-weight: 600;
	color: var(--nv-ink);
}

.woocommerce-cart .nv-main table.shop_table.cart td.product-price ul.wcsatt-options .subscription-details {
	color: var(--nv-ink-60);
	font-size: 0.82rem;
	font-weight: 400;
}

/* Multi-remove queue (assets/js/cart.js): Woo's blockUI overlay must not
   swallow clicks; queued rows fade until their removal is replayed. */
.woocommerce-cart .nv-main .blockUI.blockOverlay {
	pointer-events: none !important;
}

/* Lift the × above the overlay (blockUI's inline z-index is 1000) so the
   remaining removes read as active while a removal processes — the overlay
   is already click-through, this makes it look that way too. Queued rows'
   opacity creates a stacking context, so their × stays dimmed beneath. */
.woocommerce-cart .nv-main table.shop_table.cart a.remove {
	position: relative;
	z-index: 1001;
}

.woocommerce-cart .nv-main tr.nv-cart-row--pending-remove {
	opacity: 0.45;
}

.woocommerce-cart .nv-main tr.nv-cart-row--pending-remove a.remove {
	pointer-events: none;
}

.woocommerce-cart .nv-main table.shop_table.cart input.qty {
	width: 64px;
	padding: 0.55em 0.4em;
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-white);
	text-align: center;
	font: inherit;
}

/* Coupon + update row */
.woocommerce-cart .nv-main table.shop_table.cart td.actions {
	padding-top: 20px;
}

.woocommerce-cart .nv-main table.shop_table.cart td.actions .coupon {
	display: inline-flex;
	align-items: stretch;
	gap: 10px;
	float: none;
}

.woocommerce-cart .nv-main table.shop_table.cart td.actions .coupon .input-text {
	width: 200px;
	padding: 0.55em 1em;
	border: 1px solid var(--nv-ink-20);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-white);
	font: inherit;
	font-size: 0.95rem;
}

.woocommerce-cart .nv-main table.shop_table.cart td.actions .coupon .input-text:focus {
	outline: none;
	border-color: var(--nv-orange);
}

.woocommerce-cart .nv-main table.shop_table.cart td.actions > .button {
	float: right;
}

/* ---------- Cart totals ---------- */
.woocommerce-cart .nv-main .cart-collaterals {
	width: 100%;
}

.woocommerce-cart .nv-main .cart-collaterals .cart_totals {
	float: none;
	width: 100%;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: clamp(20px, 3vw, 28px);
	box-sizing: border-box;
}

.woocommerce-cart .nv-main .cart_totals h2 {
	font-family: var(--nv-serif);
	font-size: 1.35rem;
	letter-spacing: var(--wp--custom--type--ls-tight);
	margin: 0 0 14px;
}

.woocommerce-cart .nv-main .cart_totals table.shop_table {
	width: 100%;
	border: 0;
	border-collapse: collapse;
	margin: 0 0 6px;
}

.woocommerce-cart .nv-main .cart_totals table.shop_table th,
.woocommerce-cart .nv-main .cart_totals table.shop_table td {
	border: 0;
	background: transparent;
	padding: 10px 0;
	border-bottom: 1px solid var(--nv-ink-10);
	font-size: 0.95rem;
	vertical-align: top;
}

.woocommerce-cart .nv-main .cart_totals table.shop_table th {
	text-align: left;
	font-weight: 600;
	padding-right: 16px;
}

.woocommerce-cart .nv-main .cart_totals .order-total th,
.woocommerce-cart .nv-main .cart_totals .order-total td {
	border-bottom: 0;
	font-weight: 700;
	font-size: 1.05rem;
}

.woocommerce-cart .nv-main .wc-proceed-to-checkout {
	padding: 8px 0 8px;
}

.woocommerce-cart .nv-main .wc-proceed-to-checkout a.checkout-button {
	display: flex;
	width: 100%;
	font-size: 1.05rem;
	padding: 1em 2em;
	margin: 0;
}

/* ---------- Cross-sells (.cross-sell-container, novos-extended) ---------- */
.woocommerce-cart .nv-main .cross-sell-container {
	position: relative;
	margin-top: clamp(24px, 5vw, 48px);
}

.woocommerce-cart .nv-main .cross-sell-wrapper h2 {
	font-family: var(--nv-serif);
	font-size: var(--nv-fs-h3);
	letter-spacing: var(--wp--custom--type--ls-tight);
	text-align: center;
	margin: 0 0 clamp(18px, 3vw, 30px);
}

.woocommerce-cart .nv-main .cross-sell-items {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(230px, 320px));
	justify-content: center;
	gap: 20px;
}

.woocommerce-cart .nv-main .cross-sell-item .inner {
	display: flex;
	flex-direction: column;
	height: 100%;
	box-sizing: border-box;
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: 22px;
	text-align: center;
}

.woocommerce-cart .nv-main .cross-sell-item figure {
	margin: 0 0 14px;
}

.woocommerce-cart .nv-main .cross-sell-item figure img {
	width: auto;
	max-width: 100%;
	height: 190px;
	object-fit: contain;
	margin-inline: auto;
	display: block;
}

.woocommerce-cart .nv-main .cross-sell-item h3 {
	font-family: var(--nv-sans);
	font-size: 1.02rem;
	font-weight: 600;
	line-height: 1.35;
	margin: 0 0 16px;
}

.woocommerce-cart .nv-main .cross-sell-item form {
	margin-top: auto;
}

.woocommerce-cart .nv-main .cross-sell-item button.add-to-cart {
	width: 100%;
}

/* ============================================================
   Checkout (/checkout/) — base form chrome under novos-blocks.
   The novos-extended checkout layout (templates + checkout.css)
   provides structure, borders and colors; field sizing/typography
   used to come from the ageless theme's global form styles, so the
   block theme supplies them here. Sizing only — border/color rules
   stay with the plugin stylesheet.
   ============================================================ */
/* Production (ageless) serves checkout chrome-less on a white page; the
   theme's page-checkout.html drops WooCommerce's fallback checkout-header,
   and the canvas goes white so no beige band frames the plugin banner.
   Order-received gets full site chrome (templates/page-order-received.html),
   so it keeps the theme canvas and hides the checkout page's own
   Edit-Order/logo banner, which would double up under the real header. */
body.woocommerce-checkout:not(.woocommerce-order-received) {
	background-color: var(--nv-white);
}

body.woocommerce-checkout .nv-checkout-main {
	padding-top: 0;
}

body.woocommerce-order-received .novos-checkout-banner {
	display: none;
}

/* Confirmation content: card treatment for the order/customer tables. */
.nv-order-received .woocommerce-order {
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: clamp(20px, 4vw, 40px);
	margin-bottom: clamp(24px, 4vw, 40px);
}

/* "Thank you. Your order has been received." — page-title treatment. */
.nv-order-received p.woocommerce-notice.woocommerce-thankyou-order-received {
	font-family: var(--nv-serif);
	font-size: clamp(1.5rem, 3vw, 2.1rem);
	letter-spacing: var(--wp--custom--type--ls-tight);
	line-height: 1.2;
	color: var(--nv-ink);
	margin: 0 0 clamp(18px, 3vw, 28px);
}

/* Meta strip (order number / date / email / total / payment method).
   Woo core layout.css floats the li's with dashed separators — replace
   with a flex row of label-over-value pairs. */
.nv-order-received ul.woocommerce-order-overview {
	display: flex;
	flex-wrap: wrap;
	gap: 14px 36px;
	list-style: none;
	margin: 0 0 clamp(20px, 3vw, 32px);
	padding: 0 0 clamp(18px, 3vw, 26px);
	border-bottom: 1px solid var(--nv-ink-10);
}

.nv-order-received ul.woocommerce-order-overview li {
	float: none;
	margin: 0;
	padding: 0;
	border: 0;
	font-family: var(--nv-mono);
	font-size: 0.7rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
	line-height: 1.5;
}

.nv-order-received ul.woocommerce-order-overview li strong {
	display: block;
	font-family: var(--nv-sans);
	font-size: 0.95rem;
	font-weight: 600;
	letter-spacing: normal;
	text-transform: none;
	color: var(--nv-ink);
	margin-top: 2px;
}

/* Section headings (Order details / Related subscriptions / addresses). */
.nv-order-received .woocommerce-order-details h2,
.nv-order-received h2.woocommerce-column__title {
	font-family: var(--nv-serif);
	letter-spacing: var(--wp--custom--type--ls-tight);
	font-size: var(--nv-fs-h3);
	margin: clamp(24px, 3vw, 36px) 0 16px;
}

.nv-order-received h2.woocommerce-column__title {
	font-size: 1.25rem;
	margin: 0 0 12px;
}

.nv-order-received .woocommerce-order-details h2:first-child,
.nv-order-received .woocommerce-order-details__title {
	margin-top: 0;
}

/* Stray <br><br> the invoice plugin appends after its View-invoice link. */
.nv-order-received .woocommerce-order-details > br {
	display: none;
}

.nv-order-received table.shop_table {
	width: 100%;
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-xs);
	border-collapse: separate;
	border-spacing: 0;
	margin: 0 0 clamp(18px, 3vw, 28px);
}

.nv-order-received table.shop_table th,
.nv-order-received table.shop_table td {
	border: 0;
	border-bottom: 1px solid var(--nv-ink-10);
	padding: 12px 16px;
	text-align: left;
	vertical-align: top;
}

.nv-order-received table.shop_table thead th {
	background: var(--nv-ink-05);
	font-size: 0.8rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--nv-ink-60);
}

.nv-order-received table.shop_table tbody tr:last-child td,
.nv-order-received table.shop_table tfoot tr:last-child th,
.nv-order-received table.shop_table tfoot tr:last-child td {
	border-bottom: 0;
}

.nv-order-received table.shop_table tfoot th {
	font-weight: 600;
	color: var(--nv-ink-80);
	white-space: nowrap;
}

.nv-order-received table.order_details td .woocommerce-Price-amount {
	font-weight: 600;
}

.nv-order-received table.order_details .product-name a {
	font-weight: 600;
	color: var(--nv-ink);
	text-decoration: none;
}

.nv-order-received table.order_details .product-name a:hover {
	color: var(--nv-orange);
}

/* Variation meta (Billing period / Flavor) — same aligned rows as the cart. */
.nv-order-received table.order_details dl.variation {
	display: grid;
	grid-template-columns: max-content 1fr;
	gap: 2px 6px;
	margin: 8px 0 0;
	font-size: 0.82rem;
	line-height: 1.4;
}

.nv-order-received table.order_details dl.variation dt,
.nv-order-received table.order_details dl.variation dd {
	float: none;
	margin: 0;
	padding: 0;
	border: 0;
}

.nv-order-received table.order_details dl.variation dt {
	font-weight: 600;
	color: var(--nv-ink-60);
}

.nv-order-received table.order_details dl.variation dd p {
	display: inline;
	margin: 0;
}

/* Buttons (Actions row Invoice / View invoice, subscriptions View). */
.nv-order-received .woocommerce-order a.button,
.nv-order-received .woocommerce-order button.button {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border: 0.5px solid var(--wp--custom--glass--border);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-orange);
	color: var(--nv-white);
	padding: 0.55em 1.1em;
	font: inherit;
	font-size: 0.85rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	line-height: 1.08;
	text-decoration: none;
	cursor: pointer;
	margin: 2px 6px 2px 0;
	transition: background 0.25s var(--nv-ease);
}

.nv-order-received .woocommerce-order a.button:hover,
.nv-order-received .woocommerce-order button.button:hover {
	background: var(--wp--custom--brand-hover);
	color: var(--nv-white);
}

/* Billing / shipping addresses: two equal cards. */
.nv-order-received .woocommerce-customer-details .col2-set {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(16px, 3vw, 28px);
	margin-top: clamp(24px, 3vw, 36px);
}

/* Woo core's clearfix pseudo-elements (display:table) would otherwise become
   grid items and shove the two address columns into a staggered layout. */
.nv-order-received .woocommerce-customer-details .col2-set::before,
.nv-order-received .woocommerce-customer-details .col2-set::after {
	content: none;
}

.nv-order-received .woocommerce-customer-details .col2-set .col-1,
.nv-order-received .woocommerce-customer-details .col2-set .col-2 {
	float: none;
	width: auto;
	max-width: none;
}

.nv-order-received .woocommerce-customer-details address {
	font-style: normal;
	line-height: 1.6;
	background: var(--nv-paper);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius-xs);
	padding: 18px 20px;
	height: 100%;
	box-sizing: border-box;
}

.nv-order-received .woocommerce-customer-details--email,
.nv-order-received .woocommerce-customer-details--phone {
	margin: 10px 0 0;
	font-size: 0.9rem;
	color: var(--nv-ink-60);
}

/* Post-purchase survey (novos-extended renders it on woocommerce_thankyou). */
.nv-order-received .novos-thankyou-survey {
	max-width: 680px;
	margin: 0 auto clamp(24px, 4vw, 40px);
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
	padding: clamp(20px, 4vw, 36px);
}

.nv-order-received .novos-thankyou-survey .wpforms-field-label {
	font-family: var(--nv-serif);
	font-size: 1.15rem;
	letter-spacing: var(--wp--custom--type--ls-tight);
	color: var(--nv-ink);
}

/* Progress bar carries the WPForms builder green inline — map to brand. */
.nv-order-received .novos-thankyou-survey .wpforms-page-indicator-page-progress {
	background-color: var(--nv-orange) !important;
}

.nv-order-received .novos-thankyou-survey .wpforms-page-indicator-steps {
	font-family: var(--nv-mono);
	font-size: 0.72rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--nv-ink-60);
}

.nv-order-received .novos-thankyou-survey .wpforms-form button.wpforms-page-button,
.nv-order-received .novos-thankyou-survey .wpforms-form button.wpforms-submit {
	border: 0.5px solid var(--wp--custom--glass--border);
	border-radius: var(--nv-radius-xs);
	background: var(--nv-orange);
	color: var(--nv-white);
	padding: 0.7em 1.6em;
	font: inherit;
	font-size: 0.9rem;
	font-weight: 600;
	letter-spacing: var(--nv-ls-btn);
	line-height: 1.08;
	cursor: pointer;
	transition: background 0.25s var(--nv-ease);
}

.nv-order-received .novos-thankyou-survey .wpforms-form button.wpforms-page-button:hover,
.nv-order-received .novos-thankyou-survey .wpforms-form button.wpforms-submit:hover {
	background: var(--wp--custom--brand-hover);
	border-color: var(--wp--custom--glass--border);
	color: var(--nv-white);
}

.nv-order-received .novos-thankyou-survey .wpforms-form button.wpforms-page-button[disabled] {
	opacity: 0.45;
	cursor: not-allowed;
}

/* Mobile: single-column addresses, tighter card padding. */
@media (max-width: 620px) {
	.nv-order-received .woocommerce-customer-details .col2-set {
		grid-template-columns: 1fr;
	}

	.nv-order-received table.shop_table th,
	.nv-order-received table.shop_table td {
		padding: 10px 12px;
	}
}

/* Woo core layout.css (never loaded under ageless, which blanked all Woo
   styles) floats col-1/col-2 to 48% and shrinks form-row-first/last to 47%,
   fighting the plugin's 6-track field grid. Neutralize inside the layout. */
body.woocommerce-checkout .novos-checkout-layout .col2-set .col-1,
body.woocommerce-checkout .novos-checkout-layout .col2-set .col-2 {
	float: none;
	width: 100%;
	max-width: none;
}

body.woocommerce-checkout .novos-checkout-layout .form-row {
	margin: 0 0 14px;
	padding: 0;
	width: auto;
	float: none;
}

body.woocommerce-checkout .novos-checkout-layout .form-row label {
	display: block;
	font-size: 0.85rem;
	font-weight: 600;
	margin: 0 0 6px;
	color: var(--nv-ink);
}

body.woocommerce-checkout .novos-checkout-layout .form-row .input-text,
body.woocommerce-checkout .novos-checkout-layout .form-row select,
body.woocommerce-checkout .novos-checkout-layout .form-row textarea {
	box-sizing: border-box;
	width: 100%;
	padding: 0.72em 0.9em;
	background: var(--nv-white);
	font: inherit;
	font-size: 0.95rem;
	line-height: 1.3;
}

/* Country/state dropdowns rendered through select2 */
body.woocommerce-checkout .novos-checkout-layout .select2-container .select2-selection--single {
	box-sizing: border-box;
	height: auto;
	min-height: 42px;
	padding: 0.5em 0.4em;
	border: 1px solid #ccc;
	border-radius: 8px;
	background: var(--nv-white);
}

body.woocommerce-checkout .novos-checkout-layout .select2-container .select2-selection__arrow {
	height: 100%;
}

/* Section headings (Billing, Payment, …): production renders these in the
   sans stack at a compact size; without an override they inherit the theme's
   serif h3 at the plugin's 24px (QA, PR #1960 item 2). Selectors mirror the
   plugin's own (`form.checkout #customer_details h3`) so the later-loading
   theme sheet wins at equal specificity. */
body.woocommerce-checkout form.checkout #customer_details h3,
body.woocommerce-checkout form.checkout #order_review h3,
body.woocommerce-checkout .novos-checkout-section--payment h3,
body.woocommerce-checkout .novos-checkout-layout .novos-checkout-section-heading {
	font-family: var(--nv-sans);
	font-size: 1.15rem;
	font-weight: 600;
	letter-spacing: 0;
	margin: 0 0 14px;
}

body.woocommerce-checkout form.checkout .woocommerce-shipping-fields > h3#ship-to-different-address {
	font-family: var(--nv-sans);
	font-size: 0.9rem;
	font-weight: 500;
	margin: 12px 0 0;
}

body.woocommerce-checkout form.checkout h3#ship-to-different-address label {
	font-weight: inherit;
	cursor: pointer;
}

/* Checkbox rows (newsletter/SMS opt-ins, Company & Tax ID, ship-to): regular
   weight and compact size, matching production. */
body.woocommerce-checkout .novos-checkout-layout .form-row label.checkbox,
body.woocommerce-checkout .novos-checkout-layout .form-row label.woocommerce-form__label-for-checkbox {
	display: inline-flex;
	align-items: flex-start;
	gap: 8px;
	font-size: 0.85rem;
	font-weight: 400;
	margin: 0;
}

body.woocommerce-checkout .novos-checkout-layout .form-row label.checkbox input[type="checkbox"],
body.woocommerce-checkout .novos-checkout-layout .form-row label.woocommerce-form__label-for-checkbox input[type="checkbox"] {
	margin-top: 2px;
}

/* Klaviyo SMS/WhatsApp consent disclosure (rewrapped by novos-extended). */
body.woocommerce-checkout .novos-checkout-layout .novos-checkout-consent-note {
	font-size: 0.75rem;
	line-height: 1.5;
	color: var(--nv-ink-60);
	margin: 4px 0 16px;
}

body.woocommerce-checkout .novos-checkout-layout input[type="checkbox"],
body.woocommerce-checkout .novos-checkout-layout input[type="radio"] {
	accent-color: var(--nv-orange);
}

/* Payment box: Woo core paints it grey (#ebe9eb); use the card treatment */
body.woocommerce-checkout .novos-checkout-layout #payment {
	background: var(--nv-white);
	border: 1px solid var(--nv-ink-10);
	border-radius: var(--nv-radius);
}

body.woocommerce-checkout .novos-checkout-layout #payment div.payment_box {
	background: var(--nv-ink-05, rgba(31, 27, 24, 0.05));
	color: var(--nv-ink);
}

body.woocommerce-checkout .novos-checkout-layout #payment div.payment_box::before {
	border-bottom-color: var(--nv-ink-05, rgba(31, 27, 24, 0.05));
}

body.woocommerce-checkout .novos-checkout-layout #payment ul.payment_methods {
	border-bottom: 1px solid var(--nv-ink-10);
	padding: 14px;
}

/* Small screens: Woo's smallscreen sheet stacks rows into label/value pairs */
@media (max-width: 768px) {
	.woocommerce-cart .nv-main table.shop_table.cart tbody td {
		border-bottom: 0;
		text-align: right;
	}

	.woocommerce-cart .nv-main table.shop_table.cart tbody tr {
		border-bottom: 1px solid var(--nv-ink-10);
		display: block;
		padding: 8px 0;
	}

	.woocommerce-cart .nv-main table.shop_table.cart td.actions .coupon {
		display: flex;
		width: 100%;
		gap: 0;
	}

	.woocommerce-cart .nv-main table.shop_table.cart td.actions .coupon .input-text {
		flex: 1;
		width: auto;
		margin-right: 10px!important;
	}
}


.woocommerce-cart main .woocommerce {
	max-width: 100%;
}


section.novos-checkout-section {
    margin-top: 20px;
}

.novos-checkout-banner .wp-block-column > img {
	margin: 0 auto;
}
