
/* avid-bridge — GENERATED site.css. Do not edit here; edit the src/assets sources and rebuild. */

/* ============================= css/tokens.css ============================= */

/* tokens.css — Avid design system foundations. Copied VERBATIM from the locked
   style guide / the shared nav CSS (identical :root block in both). Global CSS
   variables only — safe to load site-wide. Keep in sync across both tracks. */
:root {
	--ink: #111821;
	--ink-hover: #28303d;
	--body: #5b6470;
	--muted: #8a93a3;
	--line: #e7ecf3;
	--blue: #2863fe;
	--blue-press: #164ee9;
	--surface: #f5f7fb;
	--cool: #edf3ff;
	--red: #f9423a;
	--error: #f8182d;
	--error-text: #d70d1f;
	--success: #9dd311;
	--dark: #111821;
	--dark-2: #1a2431;
	--sans: "DM Sans", system-ui, sans-serif;
	--mono: var(--sans);
	/* DM Mono RETIRED (brand, 2026-07-17) — not part of the brand type system; --mono kept as an alias so legacy usages resolve to DM Sans */
	--mono-data: "DM Mono", ui-monospace, monospace;
	/* THE ONE EXCEPTION (Stephen, 2026-07-17): the hero trust strip keeps the mono data voice — credentials have a special role and mono marks it. Sanctioned use: .avid-hero__trust ONLY. Do not reach for this anywhere else. */
	--grad-text: linear-gradient(108deg, #2863fe 0%, #2863fe 50%, #7a5cff 80%, #ff5d9e 100%);
	/* .sd-blue — DirectMail/legacy capability gradient; NOT the general default (use --grad-brand) */
	
	/* GRADIENT STRATEGY (2026-06-21): three tiers. brand = the general default (cool, restrained, blue-led —
     distinct from Edna's warm aurora and the capability hues). Edna aurora reserved to Edna moments only.
     Text gradient = single highlight word, large display only, AA at >=3:1. Mesh = pale wash, text stays AA.
     SYNC BACK to styleguide §03 (decouple .sd-blue from 'default'; add --grad-brand). */
	--grad-brand: linear-gradient(108deg, #2863fe 0%, #2863fe 42%, #7a5cff 100%);
	--mesh-brand: radial-gradient(40% 52% at 16% 16%, rgba(40, 99, 254, .18), transparent 70%), radial-gradient(42% 52% at 85% 22%, rgba(122, 92, 255, .16), transparent 70%), radial-gradient(52% 62% at 72% 96%, rgba(40, 99, 254, .1), transparent 72%);
	/* CAPABILITY system — CANONICAL from the app (2026-06-21 v2). Per capability:
     --cap-* = SOLID header color (titles OVER a mesh use this, never a gradient);
     --mesh-* = animated background wash (pair with .avid-mesh for the drift);
     --grad-* = standalone accent TEXT gradient (a highlight word on a PLAIN bg, never over a mesh).
     Dashboard + Pathways headers are neutral blue-grey #8092B0. Settings dropped (not a marketing capability). SYNC BACK §03. */
	--cap-dashboard: #8092b0;
	--cap-scorecard: #e20344;
	--cap-playbooks: #f45d22;
	--cap-insights: #faae00;
	--cap-benchmarks: #88b703;
	--cap-pathways: #8092b0;
	--cap-directmail: #1147e2;
	--cap-lockstep: #6e43c3;
	/* AA-safe darkened TEXT variants (>=4.5:1 over the same-hue mesh AND on white) — use for any colored capability TEXT.
     The vivid --cap-* above is ICON/MESH/decorative ONLY (gold/lime/orange fail as text at every size; the app isn't AA there).
     Body text over ANY mesh must be ink (#111821, 8–13:1); --body fails over the meshes. */
	--cap-dashboard-text: #4e596b;
	--cap-scorecard-text: #97022e;
	--cap-playbooks-text: #8e3614;
	--cap-insights-text: #825a00;
	--cap-benchmarks-text: #4b6502;
	--cap-pathways-text: #3b4351;
	--cap-directmail-text: #0e3ab9;
	--cap-lockstep-text: #57359a;
	/* standalone accent text gradients (color → lighter; PLAIN bg only) */
	--grad-dashboard: linear-gradient(108deg, #8092b0 0%, #8092b0 45%, #aebbd4 100%);
	--grad-scorecard: linear-gradient(108deg, #e20344 0%, #e20344 42%, #ff6071 100%);
	--grad-playbooks: linear-gradient(108deg, #f45d22 0%, #f45d22 42%, #ff875e 100%);
	--grad-insights: linear-gradient(108deg, #faae00 0%, #faae00 42%, #ffca6e 100%);
	--grad-benchmarks: linear-gradient(108deg, #5f8a00 0%, #88b703 45%, #9dd311 100%);
	--grad-pathways: linear-gradient(108deg, #ff413e 0%, #ff413e 28%, #7a5cff 62%, #1147e2 100%);
	--grad-directmail: linear-gradient(108deg, #0c2f9e 0%, #1147e2 55%, #3b8fff 100%);
	--grad-lockstep: linear-gradient(108deg, #6e43c3 0%, #6e43c3 38%, #9d75fd 100%);
	/* animated meshes (pale wash; pair with .avid-mesh; base baked in as the trailing layer) */
	--mesh-dashboard: radial-gradient(95% 95% at 14% 10%, rgba(128, 146, 176, .24), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(128, 146, 176, .16), transparent 64%), linear-gradient(#f4f6f9, #f4f6f9);
	--mesh-scorecard: radial-gradient(95% 95% at 14% 10%, rgba(226, 3, 68, .24), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(255, 96, 113, .24), transparent 64%), linear-gradient(#fff4f6, #fff4f6);
	--mesh-playbooks: radial-gradient(95% 95% at 14% 10%, rgba(244, 93, 34, .28), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(255, 135, 94, .26), transparent 64%), linear-gradient(#fff6f1, #fff6f1);
	--mesh-insights: radial-gradient(95% 95% at 14% 10%, rgba(250, 174, 0, .3), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(255, 202, 110, .3), transparent 64%), linear-gradient(#fffaf0, #fffaf0);
	--mesh-benchmarks: radial-gradient(95% 95% at 14% 10%, rgba(136, 183, 3, .3), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(157, 211, 17, .24), transparent 64%), linear-gradient(#f8fcec, #f8fcec);
	--mesh-pathways: radial-gradient(85% 95% at 10% 12%, rgba(255, 65, 62, .26), transparent 60%), radial-gradient(88% 98% at 92% 92%, rgba(17, 71, 226, .26), transparent 62%), linear-gradient(#f6f6fc, #f6f6fc);
	--mesh-directmail: radial-gradient(95% 95% at 14% 10%, rgba(17, 71, 226, .24), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(59, 143, 255, .26), transparent 64%), linear-gradient(#f2f5fe, #f2f5fe);
	--mesh-lockstep: radial-gradient(95% 95% at 14% 10%, rgba(157, 117, 253, .3), transparent 62%), radial-gradient(90% 100% at 92% 96%, rgba(110, 67, 195, .2), transparent 64%), linear-gradient(#f7f5ff, #f7f5ff);
	/* EDNA — Edna moments only. Over the aurora MESH, Edna text is SOLID (--edna-text, AA-safe rose-magenta);
     --grad-edna is the iridescent STANDALONE accent (legible, large/decorative); --mesh-edna = the aurora bg.
     VIBRANCE pass 2026-06-21 (Stephen): same warm→cool palette (coral→rose→sky→violet), more saturated/luminous. */
	--edna-text: #565073;
	--grad-edna: radial-gradient(130% 100% at 18%, #ffb079 0%, #ff8aa3 33%, #82acff 66%, #b297ff 100%);
	/* vibrant take on the ORIGINAL 4-stop (peach→rose→periwinkle→LAVENDER) — soft-iridescent, peach start + lavender end keep it DISTINCT from Pathways (red→violet→blue) */
	--mesh-edna: radial-gradient(54% 58% at 16% 14%, rgba(255, 125, 178, .42), transparent 60%), radial-gradient(52% 56% at 84% 10%, rgba(206, 201, 255, .3), transparent 62%), radial-gradient(46% 50% at 56% 40%, rgba(255, 150, 88, .42), transparent 60%), radial-gradient(48% 56% at 96% 64%, rgba(222, 108, 205, .38), transparent 60%), radial-gradient(56% 60% at 84% 92%, rgba(79, 144, 255, .46), transparent 62%), radial-gradient(54% 58% at 10% 90%, rgba(135, 122, 255, .44), transparent 62%), radial-gradient(48% 54% at 40% 98%, rgba(51, 205, 198, .4), transparent 60%), radial-gradient(52% 56% at 30% 48%, rgba(252, 250, 255, .52), transparent 60%), linear-gradient(#f7f6fc, #f7f6fc);
	/* +teal radial (bottom); +magenta (right-mid); strong light center keeps text AA */
	
	/* motion */
	--dur-fast: 160ms;
	--dur-base: 240ms;
	--dur-slow: 420ms;
	--reveal-dur: 720ms;
	--ease-out: cubic-bezier(.22, 1, .36, 1);
	--ease-in-out: cubic-bezier(.65, 0, .35, 1);
	--ease-spring: cubic-bezier(.34, 1.4, .64, 1);
	--lift: 6px;
	--lift-sm: 2px;
	--reveal-shift: 32px;
	/* elevation — soft, cool-tinted, low-opacity (never black); see 07 */
	--shadow-1: 0 1px 2px rgba(17, 24, 33, .06), 0 1px 1px rgba(17, 24, 33, .04);
	--shadow-2: 0 2px 4px rgba(17, 24, 33, .06), 0 6px 16px rgba(40, 71, 110, .1);
	--shadow-3: 0 4px 8px rgba(17, 24, 33, .06), 0 12px 28px rgba(40, 71, 110, .14);
	--shadow-4: 0 8px 16px rgba(17, 24, 33, .08), 0 24px 56px rgba(40, 71, 110, .18);
	--shadow-5: 0 10px 20px rgba(17, 24, 33, .08), 0 32px 72px rgba(40, 71, 110, .2);
	--shadow-card: var(--shadow-1);
	--shadow-card-hover: var(--shadow-2);
	--shadow-bar: var(--shadow-2);
	--shadow-popover: var(--shadow-3);
	--shadow-modal: var(--shadow-4);
	--shadow-toast: var(--shadow-5);
	--shadow-d1: inset 0 1px 0 rgba(255, 255, 255, .06), 0 1px 2px rgba(0, 0, 0, .35);
	--shadow-d2: inset 0 1px 0 rgba(255, 255, 255, .06), 0 4px 12px rgba(0, 0, 0, .4);
	--shadow-d3: inset 0 1px 0 rgba(255, 255, 255, .07), 0 12px 28px rgba(0, 0, 0, .45);
	--shadow-d4: inset 0 1px 0 rgba(255, 255, 255, .08), 0 24px 56px rgba(0, 0, 0, .5);
	--shadow-d5: inset 0 1px 0 rgba(255, 255, 255, .08), 0 32px 72px rgba(0, 0, 0, .55);
	--line-strong: #8a93a3;
	/* >=3:1 functional edge (popover/menu/sticky bar); --line is decorative only */
	--field-border: #7e8796;
	/* form-control border — 3.6:1 non-text (WCAG 1.4.11). --line/--muted FAIL here; MUST match the HubSpot adapter's value */
	--ctrl-border: #6b7686;
	/* checkbox/radio/switch box border — 4.1:1 non-text; matches the HubSpot adapter's checkbox border */
	
	/* radius scale (documented 8/12/16/22 + pill) — tokenized 2026-06-21; SYNC BACK to the styleguide :root */
	--radius-sm: 8px;
	--radius-md: 12px;
	--radius-lg: 16px;
	--radius-xl: 22px;
	--radius-pill: 100px;
	/* type scale (DM Sans; documented px ranges, fluid where the scale is a range) — tokenized 2026-06-21; SYNC BACK to the styleguide :root */
	--fs-display: clamp(2.5rem, 5vw, 4rem);
	/* 40–64 */
	--fs-h1: clamp(2.125rem, 4vw, 3.25rem);
	/* 34–52 */
	--fs-h2: clamp(1.75rem, 3vw, 2.5rem);
	/* 28–40 */
	--fs-h3: clamp(1.3125rem, 2vw, 1.6875rem);
	/* 21–27 */
	--fs-h4: 1.25rem;
	/* 20 */
	--fs-lead: var(--fs-body);
	/* 17 — supporting text = body size, site standard */
	--fs-body: 1.0625rem;
	/* 17 */
	--fs-small: .875rem;
	/* 14 */
	--fs-eyebrow: .8125rem;
	/* 13 (mono, uppercase) */
	
	/* spacing scale (8px base: 4/8/12/16/24/32/48/64/96/128) — tokenized 2026-06-21; SYNC BACK */
	--space-4: 4px;
	--space-8: 8px;
	--space-12: 12px;
	--space-16: 16px;
	--space-24: 24px;
	--space-32: 32px;
	--space-48: 48px;
	--space-64: 64px;
	--space-96: 96px;
	--space-128: 128px;
	/* layout rhythm */
	--gutter: clamp(20px, 5vw, 40px);
	/* page horizontal gutter */
	--section-y: clamp(72px, 9vw, 120px);
	/* section vertical padding */
	--container-max: 1200px;
	/* content max-width — documented value; header.css 1216 deploy tweak reconciled to this (flip here if you prefer 1216) */
	
	/* text-color ROLES — AA governance baked in. Use these for TEXT; the raw palette stays
     for fills / large / decorative. --muted = large/non-text only; text accent = --blue-press, never bare --blue. */
	--text-strong: var(--ink);
	/* headings / high-emphasis */
	--text-default: var(--body);
	/* body & secondary copy (NOT --muted — fails AA as text) */
	--text-accent: var(--blue-press);
	/* links / accent text (NOT bare --blue on tints) */
	--text-error: var(--error-text);
	/* error text (NOT --red/--error) */
	--text-on-fill: #fff;
	/* text on --blue / --ink fills */
	
	/* font weights (DM Sans loaded at 400/500/600/700) — tokenized 2026-06-21; SYNC BACK. Headings = semibold; display = bold. */
	--fw-regular: 400;
	--fw-medium: 500;
	--fw-semibold: 600;
	--fw-bold: 700;
	/* line-heights */
	--lh-tight: 1.1;
	/* display */
	--lh-heading: 1.2;
	/* headings h1–h3, eyebrow */
	--lh-snug: 1.35;
	/* h4 / compact subheads */
	--lh-relaxed: 1.55;
	/* body, lead */
	
	/* letter-spacing / tracking (em-based so it scales with size) — tokenized 2026-06-21; SYNC BACK */
	--tracking-tight: -.02em;
	/* display / large headings */
	--tracking-snug: -.01em;
	/* headings */
	--tracking-normal: 0;
	/* body / default */
	--tracking-wide: .08em;
	/* eyebrow (small-caps) */
	--tracking-wider: .16em;
}

/* ============================= css/system.css ============================= */

/* system.css — shared design-system primitives, copied VERBATIM from the locked
   style guide / nav CSS so the bridge is byte-compatible with the real build:
   focus ring, sr-only, scroll-reveal, hover lift, animated underline link, and
   the full .btn button system. Global (unscoped) by design — same as production. */
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
	border-radius: inherit;
}

.on-dark :focus-visible, [data-surface="dark"] :focus-visible {
	outline-color: #fff;
}

.sr-only {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* scroll reveal — visible by default; hidden only after JS confirms motion is allowed (html.anim), so content is never stuck invisible */
.anim .reveal {
	opacity: 0;
	transform: translateY(var(--reveal-shift));
	transition: opacity var(--reveal-dur) var(--ease-out), transform var(--reveal-dur) var(--ease-out);
}

.anim .reveal.is-in {
	opacity: 1;
	transform: none;
}

.reveal-group .reveal {
	transition-delay: calc(var(--ri, 0) * 90ms);
}

/* hover lift / press — lift gated to fine pointers so touch never sticks */
.lift {
	transition: transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.lift:hover {
		transform: translateY(calc(-1 * var(--lift)));
		box-shadow: 0 14px 30px -12px rgba(17, 24, 33, .22);
	}
}

.lift:active {
	transform: translateY(0) scale(.99);
	transition-duration: var(--dur-fast);
}

/* animated underline link */
.mlink {
	color: var(--text-accent);
	text-decoration: none;
	background-image: linear-gradient(currentColor, currentColor);
	background-size: 0% 1.5px;
	background-repeat: no-repeat;
	background-position: 0 100%;
	transition: background-size var(--dur-base) var(--ease-out);
}

.mlink:hover, .mlink:focus-visible {
	background-size: 100% 1.5px;
}

/* gradient highlight — wrap ONE word in a large heading. Defaults to the brand gradient;
   pass a different --grad (e.g. Edna/capability) per context. Single word only, never body. */
.avid-hl {
	background-image: var(--grad, var(--grad-brand));
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: transparent;
}

/* animated meshes — slow drift, matching the app feel. Pair with a --mesh-* background. Reduced-motion safe. */
.avid-mesh {
	background-size: 165% 165%;
	animation: meshdrift 22s ease-in-out infinite alternate;
}

.avid-mesh--edna {
	background-size: 185% 185%;
	animation: ednadrift 26s ease-in-out infinite;
}

@media (prefers-reduced-motion:reduce) {
	.avid-mesh, .avid-mesh--edna {
		animation: none;
		background-size: cover;
	}
}

@keyframes meshdrift {
	from {
		background-position: 0% 0%;
	}
	
	to {
		background-position: 100% 100%;
	}
}

@keyframes ednadrift {
	0% {
		background-position: 0% 30%;
	}
	
	25% {
		background-position: 100% 0%;
	}
	
	50% {
		background-position: 100% 100%;
	}
	
	75% {
		background-position: 0% 100%;
	}
	
	100% {
		background-position: 0% 30%;
	}
}

/* buttons */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	font-family: var(--sans);
	font-weight: var(--fw-semibold);
	line-height: 1;
	text-decoration: none;
	border: 1.5px solid transparent;
	border-radius: var(--radius-pill);
	cursor: pointer;
	position: relative;
	white-space: nowrap;
	-webkit-tap-highlight-color: transparent;
	user-select: none;
	--btn-h: 48px;
	--btn-px: 22px;
	--btn-fs: 15px;
	--btn-icon: 18px;
	--spin: #fff;
	min-height: var(--btn-h);
	padding: 0 var(--btn-px);
	font-size: var(--btn-fs);
	transition: background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}

.btn svg {
	width: var(--btn-icon);
	height: var(--btn-icon);
	flex: none;
}

.btn:active {
	transform: translateY(1px);
}

.btn--link:active {
	transform: none;
}

.btn--sm {
	--btn-h: 44px;
	--btn-px: 16px;
	--btn-fs: 14px;
	--btn-icon: 16px;
}

.btn--lg {
	--btn-h: 56px;
	--btn-px: 28px;
	--btn-fs: 16px;
	--btn-icon: 20px;
}

.btn--block {
	display: flex;
	width: 100%;
}

.btn--sharp {
	border-radius: var(--radius-md);
}

.btn--icon-only {
	padding: 0;
	width: var(--btn-h);
}

.btn--primary {
	background: var(--blue);
	color: var(--text-on-fill);
	box-shadow: var(--shadow-1);
}

.btn--ink {
	background: var(--ink);
	color: var(--text-on-fill);
	box-shadow: var(--shadow-1);
}

.btn--secondary {
	color: var(--text-accent);
	border-color: var(--blue);
	--spin: var(--blue-press);
}

.btn--ghost {
	color: var(--text-strong);
	border-color: var(--line-strong);
	--spin: var(--ink);
}

.btn--link {
	min-height: 44px;
	padding: 0 6px;
	border-radius: var(--radius-sm);
	color: var(--text-accent);
	text-decoration: underline;
	text-underline-offset: 3px;
	--spin: var(--blue-press);
}

.btn--on-dark.btn--primary {
	background: #fff;
	color: var(--text-strong);
	box-shadow: none;
	--spin: var(--ink);
}

.btn--on-dark.btn--secondary {
	background: transparent;
	color: var(--text-on-fill);
	border-color: rgba(255, 255, 255, .7);
	--spin: #fff;
}

.btn--on-dark:focus-visible {
	outline-color: #fff;
}

/* states — disabled + loading (the per-variant --spin color feeds the spinner) */
.btn:disabled, .btn[aria-disabled="true"] {
	opacity: .5;
	box-shadow: none;
	cursor: not-allowed;
}

.btn:disabled:active, .btn[aria-disabled="true"]:active {
	transform: none;
}

.btn[aria-busy="true"] {
	color: transparent !important;
	pointer-events: none;
}

.btn[aria-busy="true"]::after {
	content: "";
	position: absolute;
	inset: 0;
	margin: auto;
	width: 1.1em;
	height: 1.1em;
	border: 2px solid var(--spin);
	border-right-color: transparent;
	border-radius: 50%;
	animation: btnspin .6s linear infinite;
}

@keyframes btnspin {
	to {
		transform: rotate(1turn);
	}
}

@media (prefers-reduced-motion:reduce) {
	.btn[aria-busy="true"]::after {
		animation-duration: 1.4s;
	}
}

@media (hover:hover) and (pointer:fine) {
	.btn--primary:not(:disabled):hover {
		background: var(--blue-press);
	}
	
	.btn--ink:not(:disabled):hover {
		background: var(--ink-hover);
	}
	
	.btn--secondary:not(:disabled):hover {
		background: var(--cool);
	}
	
	.btn--ghost:not(:disabled):hover {
		background: var(--surface);
		border-color: #9aa3b2;
	}
	
	.btn--link:not(:disabled):hover {
		text-decoration-thickness: 2px;
	}
	
	.btn--on-dark.btn--primary:not(:disabled):hover {
		background: #eef2f8;
	}
	
	.btn--on-dark.btn--secondary:not(:disabled):hover {
		background: rgba(255, 255, 255, .14);
	}
}

/* Ask Avid — inline deep-link chips (data-aw-ask). Site-styled; the widget only wires the click. */
.aw-ask-chip {
	--aw-accent: var(--blue-press);
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-semibold) 13.5px/1 var(--sans);
	color: var(--blue-press);
	background: var(--cool);
	border: 1px solid #cfe0fb;
	border-radius: 100px;
	padding: 9px 15px;
	cursor: pointer;
	text-decoration: none;
	-webkit-appearance: none;
	appearance: none;
	transition: background .18s ease, border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}

.aw-ask-chip::before {
	content: "";
	width: 15px;
	height: 15px;
	flex: none;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23164ee9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E") center/contain no-repeat;
}

@media (hover:hover) and (pointer:fine) {
	.aw-ask-chip:hover {
		background: #e3ecff;
		border-color: var(--blue);
		transform: translateY(-1px);
		box-shadow: 0 6px 16px -10px rgba(40, 99, 254, .5);
	}
}

.aw-ask-chip:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

.aw-chip-row {
	margin-top: 16px;
}

/* mobile armor: decorative bleeds (mesh/glow pseudos, rotated paper) must never widen the page */
main {
	overflow-x: clip;
}

/* typography polish (2026-07-05): balance heading lines (no lone words), avoid orphan
   last lines in prose. Progressive enhancement — unsupported browsers render as before. */
h1, h2, h3, .avid-h1, .avid-h2, .avid-h3 {
	text-wrap: balance;
}

p {
	text-wrap: pretty;
}

/* ============================= css/forms.css ============================= */

/* forms.css — native form-field component (.fld). Token-pinned, WCAG 2.1 AA.

   ⚠ SCOPE: .fld styles NATIVE / non-HubSpot fields (search, filters, hand-built
   forms). HubSpot forms render inside a style-isolated iframe these rules CANNOT
   reach — they are re-skinned to MATCHING values by build/hubspot-form-adapter.html
   (which injects a stylesheet INTO the iframe). Keep the two in lockstep:
   border var(--field-border) #7e8796 · 48px / radius 12 · DM Sans · label --ink ·
   focus = blue border + soft glow. Native fields ALSO get the global :focus-visible
   outline (system.css); the adapter re-adds that outline inside the iframe. */
.fld {
	--fld-h: 48px;
	--fld-px: 14px;
	display: flex;
	flex-direction: column;
	gap: var(--space-8);
}

.fld--compact {
	--fld-h: 44px;
}

.fld__label {
	font: var(--fw-medium) var(--fs-small)/1.4 var(--sans);
	color: var(--ink);
}

.fld__req {
	color: var(--red);
	margin-left: 2px;
}

.fld__hint {
	font: var(--fw-medium) 13px/1.45 var(--mono);
	color: var(--body);
}

.fld__control {
	height: var(--fld-h);
	width: 100%;
	padding: 0 var(--fld-px);
	font: var(--fw-regular) 16px/1.2 var(--sans);
	color: var(--ink);
	background: #fff;
	border: 1px solid var(--field-border);
	border-radius: var(--radius-md);
	-webkit-appearance: none;
	appearance: none;
	transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}

.fld__control:hover {
	border-color: var(--body);
}

.fld__control:focus-visible {
	border-color: var(--blue);
	box-shadow: 0 0 0 4px rgba(40, 99, 254, .14);
}

.fld__control::placeholder {
	color: var(--body);
	opacity: 1;
}

textarea.fld__control {
	height: auto;
	min-height: 120px;
	padding: 12px 14px;
	line-height: 1.5;
	resize: vertical;
}

select.fld__control {
	padding-right: 42px;
	cursor: pointer;
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%235b6470' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
	background-repeat: no-repeat;
	background-position: right 14px center;
}

select.fld__control.nitro-lazy {
	background-image: none !important;
}

/* states */
.fld__control[aria-invalid="true"] {
	border-color: var(--error);
	box-shadow: 0 0 0 4px rgba(248, 24, 45, .12);
}

.fld__control[data-state="success"] {
	border-color: #5a8c00;
	box-shadow: 0 0 0 4px rgba(90, 140, 0, .12);
}

.fld__control:disabled {
	background: var(--surface);
	border-color: var(--line);
	color: var(--muted);
	cursor: not-allowed;
}

.fld__msg {
	display: flex;
	align-items: flex-start;
	gap: 7px;
	font: var(--fw-medium) 13px/1.4 var(--mono);
}

.fld__msg--error {
	color: var(--error-text);
}

.fld__msg--success {
	color: #2f6b12;
}

/* composition */
.fld-row {
	display: grid;
	gap: var(--space-16);
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

.fldform {
	max-width: 520px;
	display: flex;
	flex-direction: column;
	gap: 18px;
	padding: var(--space-24);
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: #fff;
}

/* on dark */
.on-dark .fld__label {
	color: #fff;
}

.on-dark .fld__hint {
	color: #aeb9c9;
}

.on-dark .fld__control {
	background: rgba(255, 255, 255, .06);
	border-color: rgba(255, 255, 255, .4);
	color: #fff;
}

.on-dark .fld__control::placeholder {
	color: #aeb9c9;
}

.on-dark select.fld__control {
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
}

.on-dark select.fld__control.nitro-lazy {
	background-image: none !important;
}

/* ============================================================
   SELECTION CONTROLS (.ctrl) — checkbox · radio · switch (styleguide C4)
   Painted-box technique: a real input (opacity 0, full-size, owns hit area
   + a11y) + a painted .ctrl-box sibling. Same box border (--ctrl-border
   #6b7686), 20px, 6px/round geometry + checkmark as the HubSpot adapter, so
   native + HubSpot selection controls match. Meaning never hue-alone.
   ============================================================ */
.ctrl-row {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	min-height: 44px;
	padding: 11px 0;
	position: relative;
}

.ctrl {
	position: relative;
	display: inline-flex;
	flex: none;
}

.ctrl-native {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	margin: 0;
	opacity: 0;
	cursor: pointer;
}

.ctrl-native:focus, .ctrl-native:focus-visible {
	outline: none;
}

.ctrl-native:disabled {
	cursor: not-allowed;
}

.ctrl-box {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 20px;
	height: 20px;
	flex: none;
	background: #fff;
	border: 1.5px solid var(--ctrl-border);
	box-sizing: border-box;
	pointer-events: none;
	transition: background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), transform 80ms var(--ease-out);
}

.ctrl--check .ctrl-box {
	border-radius: 6px;
}

.ctrl--radio .ctrl-box {
	border-radius: 50%;
}

.ctrl--check .ctrl-box::after {
	content: "";
	position: absolute;
	left: 6px;
	top: 2.5px;
	width: 5px;
	height: 9px;
	border: solid #fff;
	border-width: 0 2px 2px 0;
	transform: rotate(45deg) scale(0);
	transform-origin: center;
	transition: transform var(--dur-base) var(--ease-out);
}

.ctrl--radio .ctrl-box::after {
	content: "";
	position: absolute;
	inset: 0;
	margin: auto;
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background: #fff;
	transform: scale(0);
	transition: transform var(--dur-fast) var(--ease-spring);
}

.ctrl--check .ctrl-native:checked + .ctrl-box, .ctrl--check .ctrl-native:indeterminate + .ctrl-box {
	background: var(--blue);
	border-color: var(--blue);
}

.ctrl--check .ctrl-native:checked + .ctrl-box::after {
	transform: rotate(45deg) scale(1);
}

.ctrl--radio .ctrl-native:checked + .ctrl-box {
	border-color: var(--blue);
}

.ctrl--radio .ctrl-native:checked + .ctrl-box::after {
	background: var(--blue);
	transform: scale(1);
}

.ctrl--check .ctrl-native:indeterminate + .ctrl-box::after {
	transform: none;
	left: 5px;
	top: 9px;
	width: 10px;
	height: 2px;
	border: 0;
	border-radius: 1px;
	background: #fff;
}

.ctrl--sm.ctrl--check .ctrl-native:indeterminate + .ctrl-box::after {
	left: 3.25px;
	top: 7px;
	width: 8px;
}

/* SWITCH — meaning = thumb POSITION + track fill (OFF thumb edge 6:1, ON fill 4.88:1), never hue */
.ctrl--switch .ctrl-box {
	width: 44px;
	height: 26px;
	border-radius: var(--radius-pill);
	border: 1.5px solid var(--ctrl-border);
	background: #fff;
	justify-content: flex-start;
}

.ctrl--switch .ctrl-box::after {
	content: "";
	position: absolute;
	top: 1.5px;
	left: 1.5px;
	width: 20px;
	height: 20px;
	border-radius: 50%;
	background: #fff;
	border: 1.5px solid var(--body);
	box-sizing: border-box;
	box-shadow: var(--shadow-2);
	transform: none;
	transition: transform var(--dur-base) var(--ease-out);
}

.ctrl--switch .ctrl-native:checked + .ctrl-box {
	background: var(--blue);
	border-color: var(--blue);
}

.ctrl--switch .ctrl-native:checked + .ctrl-box::after {
	transform: translateX(18px);
}

.ctrl-lock {
	position: absolute;
	top: 1.5px;
	left: 1.5px;
	width: 20px;
	height: 20px;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--body);
	pointer-events: none;
	transition: transform var(--dur-base) var(--ease-out);
}

.ctrl--switch .ctrl-native:checked + .ctrl-box .ctrl-lock {
	transform: translateX(18px);
}

.ctrl-lock svg {
	width: 11px;
	height: 11px;
}

/* focus = shared ring on the painted box (#fff on dark) */
.ctrl-native:focus-visible + .ctrl-box {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

.on-dark .ctrl-native:focus-visible + .ctrl-box {
	outline-color: #fff;
}

@media (hover:hover) and (pointer:fine) {
	.ctrl-native:not(:disabled):hover + .ctrl-box {
		border-color: var(--ink);
	}
	
	.ctrl-native:not(:disabled):checked:hover + .ctrl-box {
		border-color: var(--blue-press);
		background: var(--blue-press);
	}
	
	.ctrl--radio .ctrl-native:not(:disabled):checked:hover + .ctrl-box {
		background: #fff;
		border-color: var(--blue-press);
	}
	
	.ctrl-native:not(:disabled):hover ~ .ctrl-text .ctrl-label {
		color: var(--ink);
	}
}

.ctrl-native:not(:disabled):active + .ctrl-box {
	transform: scale(.96);
}

/* disabled (disabled-checked #6f93f0 — exempt from 1.4.11; state also carried in text) */
.ctrl-native:disabled + .ctrl-box {
	background: var(--surface);
	border-color: var(--line);
}

.ctrl--check .ctrl-native:disabled:checked + .ctrl-box, .ctrl--check .ctrl-native:disabled:indeterminate + .ctrl-box {
	background: #6f93f0;
	border-color: #6f93f0;
}

.ctrl--radio .ctrl-native:disabled:checked + .ctrl-box {
	border-color: #6f93f0;
}

.ctrl--radio .ctrl-native:disabled:checked + .ctrl-box::after {
	background: #6f93f0;
}

.ctrl--switch .ctrl-native:disabled:checked + .ctrl-box {
	background: #6f93f0;
	border-color: #6f93f0;
}

.ctrl-native:disabled ~ .ctrl-text .ctrl-label, .ctrl-native:disabled ~ .ctrl-text .ctrl-desc {
	color: var(--muted);
}

/* label + description */
.ctrl-text {
	display: flex;
	flex-direction: column;
	flex: 1;
	min-width: 0;
	padding-top: 1px;
}

.ctrl-label {
	font: var(--fw-medium) 16px/1.4 var(--sans);
	color: var(--ink);
	cursor: pointer;
}

.ctrl-desc {
	font: var(--fw-regular) var(--fs-small)/1.5 var(--sans);
	color: var(--body);
	margin-top: 2px;
}

/* group (fieldset/legend) */
.ctrl-group {
	border: 0;
	padding: 0;
	margin: 0;
	min-inline-size: 0;
}

.ctrl-group > legend {
	font: var(--fw-semibold) 16px/1.3 var(--sans);
	color: var(--ink);
	padding: 0;
	margin: 0 0 8px;
}

.ctrl-group--eyebrow > legend {
	font: var(--fw-medium) 13px/1.3 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--body);
}

/* group message / error (icon + text; pair with aria-invalid, never colour alone) */
.ctrl-msg {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	margin-top: 10px;
	font: var(--fw-medium) var(--fs-small)/1.5 var(--sans);
	color: var(--ink);
}

.ctrl-msg-mark {
	flex: none;
	color: var(--error-text);
	display: inline-flex;
}

.ctrl-msg-mark svg {
	width: 16px;
	height: 16px;
	margin-top: 1px;
}

.ctrl-row[data-invalid="true"] .ctrl-box {
	border-color: var(--error-text);
}

/* size sm (dense rows; the .ctrl-row keeps its 44px target) */
.ctrl--sm.ctrl--check .ctrl-box, .ctrl--sm.ctrl--radio .ctrl-box {
	width: 16px;
	height: 16px;
}

.ctrl--sm.ctrl--check .ctrl-box::after {
	left: 4.5px;
	top: 1.5px;
	width: 4px;
	height: 8px;
	border-width: 0 2px 2px 0;
}

.ctrl--sm.ctrl--radio .ctrl-box::after {
	width: 8px;
	height: 8px;
}

.ctrl--sm.ctrl--switch .ctrl-box {
	width: 36px;
	height: 20px;
}

.ctrl--sm.ctrl--switch .ctrl-box::after {
	width: 15px;
	height: 15px;
}

.ctrl--sm.ctrl--switch .ctrl-native:checked + .ctrl-box::after {
	transform: translateX(15px);
}

/* on-dark label/desc/legend */
.on-dark .ctrl-label {
	color: #fff;
}

.on-dark .ctrl-desc {
	color: #c2c9d4;
}

.on-dark .ctrl-group > legend {
	color: #fff;
}

/* ============================================================
   NEWSLETTER SIGN-UP (.nl) — styleguide C13.
   ⚠ In PRODUCTION the .nl-row (input + submit) is a HubSpot embed (form
   af20d639-…) re-skinned to match .nl-input/.nl-submit by the adapter; the
   eyebrow / title / lede / privacy around it are OUR page copy. Input border
   = --field-border so native + the HubSpot newsletter match.
   ============================================================ */
.nl-form {
	max-width: 480px;
}

.nl--compact .nl-form {
	max-width: none;
}

.nl-eyebrow {
	font: var(--fw-medium) 13px/1 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--blue-press);
	margin-bottom: 14px;
}

.nl-title {
	font: var(--fw-semibold) clamp(21px, 3.2vw, 27px)/1.2 var(--sans);
	color: var(--ink);
	letter-spacing: var(--tracking-snug);
	margin-bottom: 10px;
}

.nl-title .nl-grad {
	background-image: var(--grad-brand);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: var(--blue-press);
}

.nl-lede {
	font: var(--fw-regular) clamp(17px, 2vw, 19px)/1.6 var(--sans);
	color: var(--body);
	max-width: 52ch;
	margin-bottom: 22px;
}

.nl-row {
	display: flex;
	gap: 8px;
	align-items: flex-start;
}

.nl--compact .nl-row {
	align-items: flex-end;
}

.nl-field {
	flex: 1;
	min-width: 0;
}

.nl-label {
	display: block;
	font: var(--fw-medium) 13px/1 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--body);
	margin-bottom: 8px;
}

.nl-input {
	width: 100%;
	min-width: 0;
	height: 48px;
	padding: 0 14px;
	font: var(--fw-regular) 16px/1.2 var(--sans);
	color: var(--ink);
	background: #fff;
	border: 1px solid var(--field-border);
	border-radius: var(--radius-md);
	-webkit-appearance: none;
	appearance: none;
	transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}

.nl-input::placeholder {
	color: var(--body);
	opacity: 1;
}

.nl-input:focus-visible {
	outline: none;
	border-color: var(--blue);
	box-shadow: 0 0 0 4px rgba(40, 99, 254, .14);
}

.nl-input[aria-invalid="true"] {
	border-color: var(--error);
}

.nl-input[aria-invalid="true"]:focus-visible {
	border-color: var(--error);
	box-shadow: 0 0 0 4px rgba(248, 24, 45, .16);
}

@media (hover:hover) and (pointer:fine) {
	.nl-input:hover {
		border-color: var(--body);
	}
}

/* submit — pill, blue→blue-press, fixed 48px to share the input baseline (focus = the global ring) */
.nl-submit {
	flex: none;
	height: 48px;
	padding: 0 22px;
	border: 0;
	border-radius: var(--radius-pill);
	font: var(--fw-semibold) 16px/1 var(--sans);
	color: #fff;
	background: var(--blue);
	cursor: pointer;
	white-space: nowrap;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	transition: background var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.nl-submit:hover {
		background: var(--blue-press);
		transform: translateY(calc(var(--lift-sm) * -1));
		box-shadow: var(--shadow-2);
	}
}

.nl-submit:active {
	transform: translateY(0);
	background: var(--blue-press);
	box-shadow: none;
}

.nl-submit[disabled], .nl-submit.is-loading {
	opacity: .6;
	cursor: not-allowed;
	transform: none;
	box-shadow: none;
}

/* status: one polite live region (error=error-text 5.29:1, success=#2f6b12) */
.nl-status {
	margin-top: 12px;
	font: var(--fw-medium) var(--fs-small)/1.5 var(--sans);
	color: var(--body);
	display: flex;
	gap: 8px;
	align-items: flex-start;
}

.nl-status:empty {
	display: none;
}

.nl-status svg {
	flex: none;
	margin-top: 1px;
}

.nl-status[data-state="error"] {
	color: var(--error-text);
}

.nl-status[data-state="success"] {
	color: #2f6b12;
}

/* privacy: help text --body, link --blue-press (governance: never bare --blue as text) */
.nl-privacy {
	margin-top: 14px;
	font: var(--fw-medium) var(--fs-small)/1.6 var(--sans);
	color: var(--body);
	max-width: 52ch;
}

.nl-privacy a {
	color: var(--blue-press);
	text-decoration: underline;
	text-underline-offset: 2px;
	padding: 6px 0;
	border-radius: var(--radius-sm);
}

/* loading spinner (reduced-motion → slows, never freezes) */
.nl-spin {
	width: 16px;
	height: 16px;
	border: 2px solid rgba(255, 255, 255, .5);
	border-top-color: #fff;
	border-radius: 50%;
	animation: nl-spin .7s linear infinite;
}

@keyframes nl-spin {
	to {
		transform: rotate(360deg);
	}
}

@media (prefers-reduced-motion:reduce) {
	.nl-spin {
		animation-duration: 1.4s;
	}
}

/* on-dark */
.nl--on-dark .nl-eyebrow {
	color: rgba(255, 255, 255, .78);
}

.nl--on-dark .nl-title {
	color: #fff;
}

.nl--on-dark .nl-lede {
	color: rgba(255, 255, 255, .82);
}

.nl--on-dark .nl-label {
	color: rgba(255, 255, 255, .78);
}

.nl--on-dark .nl-input {
	background: rgba(255, 255, 255, .06);
	border-color: rgba(255, 255, 255, .45);
	color: #fff;
}

.nl--on-dark .nl-input::placeholder {
	color: rgba(255, 255, 255, .6);
}

.nl--on-dark .nl-privacy {
	color: rgba(255, 255, 255, .82);
}

.nl--on-dark .nl-privacy a {
	color: #fff;
}

/* ============================= css/accordion.css ============================= */

/* accordion.css — disclosure accordion (styleguide C14). Controller: accordion.js.
   Height-animated panel, reduced-motion safe, WAI-ARIA roving focus. Modes via
   data-acc-mode="single|multi"; variants --carded / --compact. */
.acc {
	max-width: 62ch;
	border-bottom: 1px solid var(--line);
}

.acc__eyebrow {
	display: block;
	font: 500 13px/1 var(--mono);
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--body);
	margin: 0 0 16px;
}

.acc__item {
	border-top: 1px solid var(--line);
}

.acc__header {
	margin: 0;
	font: inherit;
}

.acc__trigger {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	width: 100%;
	min-height: 56px;
	padding: 16px 0;
	background: none;
	border: 0;
	text-align: left;
	cursor: pointer;
	color: var(--ink);
	font: 600 17px/1.4 var(--sans);
	letter-spacing: -.01em;
	border-radius: 8px;
}

.acc__label {
	flex: 1 1 auto;
	overflow-wrap: anywhere;
}

.acc__icon {
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	margin-top: 1px;
	color: var(--body);
	transition: transform var(--dur-base) var(--ease-in-out), color var(--dur-fast) var(--ease-out);
}

.acc__trigger[aria-expanded="true"] .acc__icon {
	transform: rotate(180deg);
	color: var(--blue);
}

.acc__trigger[aria-expanded="true"] {
	color: var(--ink);
}

.acc__trigger:active .acc__icon {
	color: var(--blue-press);
}

.acc__trigger[disabled] {
	cursor: not-allowed;
}

.acc__trigger[disabled] .acc__label, .acc__trigger[disabled] .acc__icon {
	color: var(--muted);
	opacity: .55;
}

/* panel: height-animated wrapper; inner carries padding so it never fights the height tween */
.acc__panel {
	overflow: hidden;
	height: 0;
	transition: height var(--dur-slow) var(--ease-out);
}

.acc__panel[hidden] {
	display: none;
}

.acc__panel-inner {
	padding: 0 0 24px;
	max-width: 62ch;
}

.acc__body {
	margin: 0;
	color: var(--body);
	font: 400 17px/1.6 var(--sans);
}

.acc__body + .acc__body {
	margin-top: 12px;
}

/* inline answer link: --blue-press + a persistent underline so colour is never the sole signal (1.4.1) */
.acc__link {
	color: var(--blue-press);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 2px;
	font-weight: 500;
	transition: text-decoration-thickness var(--dur-fast) var(--ease-out);
}

.acc__link:hover {
	text-decoration-thickness: 2px;
}

/* standalone (block) panel action: opt-in 44px target without breaking inline prose flow */
.acc__link--block {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
}

.acc__meta {
	display: block;
	margin-top: 12px;
	font: 500 13px/1.5 var(--mono);
	letter-spacing: .02em;
	color: var(--body);
}

/* carded variant */
.acc--carded {
	border-bottom: 0;
}

.acc--carded .acc__item {
	border: 1px solid var(--line);
	border-radius: 16px;
	padding: 0 20px;
	margin-bottom: 12px;
}

.acc--carded .acc__item:last-child {
	margin-bottom: 0;
}

/* compact density */
.acc--compact .acc__trigger {
	min-height: 48px;
	padding: 12px 0;
	font-size: 16px;
}

/* expand/collapse-all control (enhancement) — sits above the .acc, styled via .btn */
.acc-wrap__bar {
	display: flex;
	justify-content: flex-end;
	margin-bottom: 4px;
}

/* hover: tint the row text edge-to-edge; never tint behind only the chevron */
@media (hover:hover) and (pointer:fine) {
	.acc__trigger:not([disabled]):hover {
		background: var(--surface);
	}
	
	.acc__trigger:not([disabled]):hover .acc__icon {
		color: var(--ink);
	}
	
	.acc__trigger[aria-expanded="true"]:hover .acc__icon {
		color: var(--blue);
	}
	
	.acc--carded .acc__trigger:not([disabled]):hover {
		background: none;
	}
	
	.acc--carded .acc__item:hover {
		background: var(--surface);
	}
}

/* coarse pointer: bigger row target; 44px targets for STANDALONE panel actions only.
   Inline prose links (.acc__link in a sentence) are exempt from 2.5.5/2.5.8 and must NOT be forced to 44px. */
@media (pointer:coarse) {
	.acc__trigger {
		min-height: 48px;
	}
	
	.acc__panel-inner .acc__link--block, .acc__panel-inner button {
		min-height: 44px;
		display: inline-flex;
		align-items: center;
	}
}

@media (max-width:767px) {
	.acc__trigger {
		min-height: 60px;
	}
	
	.acc--carded .acc__item {
		padding: 0 16px;
	}
}

/* reduced motion: instant toggle, chevron snaps (state cue preserved) */
@media (prefers-reduced-motion:reduce) {
	.acc__panel, .acc__icon, .acc__link {
		transition: none;
	}
}

/* ============================= css/tabs.css ============================= */

/* tabs.css — ARIA tabs (styleguide C15). Controller: tabs.js.
   Sliding indicator; variants data-tab-style="pill", data-tab-fit="equal",
   data-tab-orient="vertical"; overflow scroll-buttons; data-tab-collapse="accordion"
   (becomes an accordion on mobile). Enhancements (tabs.js): data-tab-deeplink, data-tab-activation="manual". */
.tab-wrap {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 clamp(20px, 5vw, 40px);
}

.tabs {
	position: relative;
	min-width: 0;
}

.tab-scroll {
	position: relative;
}

/* The rail scrolls within itself: min-width:0 lets it shrink inside a flex/grid parent,
   overflow-x:auto contains the buttons so a long tab set scrolls here instead of widening
   the page. Base (not just .tab-scroll) so every horizontal tab set is contained — vertical
   orientation overrides this back to overflow:visible below. */
.tab-list {
	display: flex;
	gap: 4px;
	position: relative;
	border-bottom: 1px solid var(--line);
	min-width: 0;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.tab-list::-webkit-scrollbar {
	display: none;
}

.tab-scroll .tab-list {
	scroll-snap-type: x proximity;
}

.tab {
	scroll-snap-align: start;
}

.tab {
	appearance: none;
	-webkit-appearance: none;
	background: none;
	border: 0;
	font-family: var(--sans);
	font-size: 15px;
	font-weight: 600;
	line-height: 1.2;
	color: var(--body);
	padding: 12px 16px;
	min-height: 44px;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border-radius: 8px;
	cursor: pointer;
	white-space: nowrap;
	flex: none;
	transition: color var(--dur-fast, .12s) var(--ease-out), background-color var(--dur-base, .16s) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.tab:hover:not([aria-disabled="true"]) {
		color: var(--ink);
	}
}

.tab[aria-selected="true"] {
	color: var(--ink);
}

.tab[aria-disabled="true"] {
	opacity: .45;
	cursor: not-allowed;
}

.tab:active:not([aria-disabled="true"]) {
	color: var(--blue-press);
}

/* Sliding underline indicator (decorative, redundant to aria-selected) */
.tab-indicator {
	position: absolute;
	bottom: -1px;
	left: 0;
	height: 2px;
	background: var(--blue);
	width: var(--ind-w, 0);
	transform: translateX(var(--ind-x, 0));
	transition: transform .22s cubic-bezier(.22, .61, .36, 1), width .22s cubic-bezier(.22, .61, .36, 1);
	pointer-events: none;
}

/* Pill variant */
.tabs[data-tab-style="pill"] .tab-list {
	border: 0;
	background: var(--surface);
	border-radius: 100px;
	padding: 4px;
	gap: 2px;
}

@media (hover:hover) and (pointer:fine) {
	.tabs[data-tab-style="pill"] .tab:hover:not([aria-disabled="true"]):not([aria-selected="true"]) {
		background: rgba(17, 24, 33, .04);
	}
}

.tabs[data-tab-style="pill"] .tab[aria-selected="true"] {
	background: #fff;
	color: var(--ink);
	box-shadow: 0 1px 2px rgba(17, 24, 33, .08);
}

.tabs[data-tab-style="pill"] .tab:active:not([aria-disabled="true"]) {
	box-shadow: inset 0 0 0 999px rgba(40, 99, 254, .06);
}

/* Fitted / equal-width variant */
.tabs[data-tab-fit="equal"] .tab {
	flex: 1 1 0;
	justify-content: center;
}

/* Count badge — --blue-press on --cool = 5.72:1 (AA at 12px) */
.tab-count {
	font-family: var(--mono);
	font-size: 12px;
	line-height: 1;
	color: var(--blue-press);
	background: var(--cool);
	border-radius: 100px;
	padding: 3px 7px;
	font-variant-numeric: tabular-nums;
}

.tab[aria-selected="true"] .tab-count {
	color: var(--blue-press);
}

.tab .tab-ico {
	width: 18px;
	height: 18px;
	flex: none;
}

/* Focus ring — shared convention, layered so it reads on rail/track/pill */
.tab:focus-visible {
	outline: none;
	box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--blue);
	border-radius: 8px;
}

/* Panels */
.tab-panels {
	position: relative;
}

.tab-panel {
	padding-top: 24px;
	animation: tabPanelIn .18s cubic-bezier(.22, .61, .36, 1);
}

.tab-panel[hidden] {
	display: none;
}

.tab-panel:focus-visible {
	outline: none;
	box-shadow: inset 0 0 0 2px var(--blue);
	border-radius: 12px;
}

.tab-panel h3 {
	margin: 0 0 8px;
}

.tab-panel p {
	margin: 0;
	max-width: 60ch;
}

.tab-panel .tab-stat {
	font-size: clamp(28px, 4vw, 40px);
	font-weight: 600;
	color: var(--ink);
	line-height: 1.1;
	letter-spacing: -.01em;
}

@keyframes tabPanelIn {
	from {
		opacity: 0;
		transform: translateY(4px);
	}
	
	to {
		opacity: 1;
		transform: none;
	}
}

/* Edge-fade scroll affordance ON THE RAIL ITSELF — so an overflowing tab set is discoverable
   without a visible scrollbar (touch hides it; the scroll-buttons below are hover/fine-pointer only).
   No .tab-scroll wrapper needed. Toggled by tabs.js (is-fade-start/-end from scroll position);
   masks to TRANSPARENT so it reveals the real bg behind (more robust than a fixed-colour overlay).
   Dropped on :focus-within so a keyboard-focused edge tab's focus ring is never clipped. */
.tab-list.is-fade-end {
	-webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
	mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
}

.tab-list.is-fade-start {
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 28px);
	mask-image: linear-gradient(90deg, transparent, #000 28px);
}

.tab-list.is-fade-start.is-fade-end {
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 28px, #000 calc(100% - 28px), transparent);
	mask-image: linear-gradient(90deg, transparent, #000 28px, #000 calc(100% - 28px), transparent);
}

.tab-list:focus-within {
	-webkit-mask-image: none;
	mask-image: none;
}

.tab-list:focus-within.nitro-lazy {
	mask-image: none !important;
}

/* Scroll overflow affordances — fade matches the rail bg (#fff) */
.tab-fade {
	position: absolute;
	top: 0;
	bottom: 1px;
	width: 32px;
	pointer-events: none;
	opacity: 0;
	transition: opacity .15s ease;
	z-index: 1;
}

.tab-fade.is-start {
	left: 0;
	background: linear-gradient(90deg, #fff, rgba(255, 255, 255, 0));
}

.tab-fade.is-end {
	right: 0;
	background: linear-gradient(270deg, #fff, rgba(255, 255, 255, 0));
}

.tab-fade.is-show {
	opacity: 1;
}

.tab-scroll-btn {
	position: absolute;
	top: 0;
	width: 44px;
	height: 44px;
	display: none;
	place-items: center;
	border-radius: 100px;
	background: #fff;
	border: 1px solid var(--line-strong);
	color: var(--ink);
	cursor: pointer;
	z-index: 2;
}

.tab-scroll-btn.is-start {
	left: -4px;
}

.tab-scroll-btn.is-end {
	right: -4px;
}

@media (hover:hover) and (pointer:fine) {
	.tab-scroll[data-has-overflow="true"] .tab-scroll-btn {
		display: grid;
	}
}

.tab-scroll-btn svg {
	width: 18px;
	height: 18px;
}

/* Accordion fallback (mobile, data-tab-collapse="accordion") */
.tab-acc {
	display: none;
}

.tab-acc-item + .tab-acc-item {
	margin-top: 0;
}

.tab-acc-item {
	border-bottom: 1px solid var(--line);
}

.tab-acc-trigger {
	appearance: none;
	-webkit-appearance: none;
	width: 100%;
	min-height: 48px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	background: none;
	border: 0;
	padding: 12px 4px;
	font-family: var(--sans);
	font-size: 15px;
	font-weight: 600;
	color: var(--ink);
	text-align: left;
	cursor: pointer;
}

.tab-acc-trigger[aria-disabled="true"] {
	opacity: .45;
	cursor: not-allowed;
}

.tab-acc-trigger:focus-visible {
	outline: none;
	box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--blue);
	border-radius: 8px;
}

.tab-acc-chev {
	width: 18px;
	height: 18px;
	flex: none;
	color: var(--body);
	transition: transform .22s cubic-bezier(.22, .61, .36, 1);
}

.tab-acc-trigger[aria-expanded="true"] .tab-acc-chev {
	transform: rotate(180deg);
}

.tab-acc-panel {
	padding: 0 4px 20px;
}

.tab-acc-panel[hidden] {
	display: none;
}

.tab-acc-panel .tab-stat {
	font-size: 28px;
	font-weight: 600;
	color: var(--ink);
	line-height: 1.1;
}

.tab-acc-cnt {
	font-family: var(--mono);
	font-size: 12px;
	color: var(--blue-press);
	background: var(--cool);
	border-radius: 100px;
	padding: 3px 7px;
	margin-left: 8px;
	font-variant-numeric: tabular-nums;
}

@media (max-width:767px) {
	.tab {
		font-size: 14px;
		padding: 10px 14px;
		min-height: 44px;
	}
	
	.tab-list {
		gap: 8px;
	}
	
	.tabs[data-tab-style="pill"] .tab-list {
		gap: 4px;
	}
	
	.tabs[data-tab-collapse="accordion"] .tab-scroll {
		display: none;
	}
	
	.tabs[data-tab-collapse="accordion"] .tab-panels {
		display: none;
	}
	
	.tabs[data-tab-collapse="accordion"] .tab-acc {
		display: block;
	}
}

@media (prefers-reduced-motion:reduce) {
	.tab, .tab-indicator, .tab-panel, .tab-fade, .tab-acc-chev {
		transition: none;
		animation: none;
	}
	
	.tab-scroll .tab-list {
		scroll-behavior: auto;
	}
}

/* Vertical orientation — rail beside the panel (controller publishes --ind-y/--ind-h) */
.tabs[data-tab-orient="vertical"] {
	display: grid;
	grid-template-columns: minmax(170px, 210px) minmax(0, 1fr);
	gap: clamp(16px, 3vw, 32px);
	align-items: start;
}

.tabs[data-tab-orient="vertical"] .tab-scroll {
	min-width: 0;
}

.tabs[data-tab-orient="vertical"] .tab-list {
	flex-direction: column;
	gap: 2px;
	border-bottom: 0;
	border-right: 1px solid var(--line);
	align-items: stretch;
	overflow: visible;
}

.tabs[data-tab-orient="vertical"] .tab {
	justify-content: flex-start;
	text-align: left;
	white-space: normal;
}

.tabs[data-tab-orient="vertical"] .tab[aria-selected="true"] {
	background: var(--cool);
}

.tabs[data-tab-orient="vertical"] .tab-indicator {
	top: 0;
	bottom: auto;
	left: auto;
	right: -1px;
	width: 2px;
	height: var(--ind-h, 0);
	transform: translateY(var(--ind-y, 0));
	transition: transform .22s cubic-bezier(.22, .61, .36, 1), height .22s cubic-bezier(.22, .61, .36, 1);
}

.tabs[data-tab-orient="vertical"] .tab-panels, .tabs[data-tab-orient="vertical"] .tab-panel {
	padding-top: 0;
}

@media (max-width:767px) {
	.tabs[data-tab-orient="vertical"] {
		grid-template-columns: minmax(0, 1fr);
	}
	
	.tabs[data-tab-orient="vertical"] .tab-list {
		border-right: 0;
		border-bottom: 1px solid var(--line);
	}
	
	.tabs[data-tab-orient="vertical"] .tab {
		width: 100%;
	}
	
	.tabs[data-tab-orient="vertical"] .tab-indicator {
		display: none;
	}
	
	.tabs[data-tab-orient="vertical"] .tab[aria-selected="true"] {
		box-shadow: inset 3px 0 0 var(--blue);
	}
}

/* Media-in-panel layout (image + copy) */
.tab-media {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
	gap: clamp(20px, 3vw, 36px);
	align-items: center;
}

.tab-media__copy h3 {
	margin: 0 0 8px;
}

.tab-media__copy p {
	margin: 0 0 14px;
	max-width: 48ch;
}

.tab-media__fig {
	position: relative;
	margin: 0;
	border-radius: 16px;
	overflow: hidden;
	aspect-ratio: 4/3;
	border: 1px solid var(--line);
	display: grid;
	place-items: center;
}

.tab-media__fig img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.tab-media__ph {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font: 500 13px/1 var(--mono);
	letter-spacing: .06em;
	color: var(--blue-press);
	background: rgba(255, 255, 255, .72);
	border-radius: 100px;
	padding: 8px 14px;
}

.tab-media__ph svg {
	width: 16px;
	height: 16px;
	flex: none;
}

@media (max-width:767px) {
	.tab-media {
		grid-template-columns: minmax(0, 1fr);
		gap: 18px;
	}
}

/* ============================= css/hero.css ============================= */

/* hero.css — page-opener hero system. LEAN set (per Stephen, 2026-06-21):
   layouts = Split (+reverse) · Centered;  background = white | mesh;  size = standard | tall.
   The visual slot is interchangeable: .avid-hero__figure (a clean human PHOTO — flagship, .avid-hero--media)
   or .avid-hero__shot (product screenshot). Copy is ALWAYS first in the DOM, so reading + tab order stay
   copy-first even when the visual sits right/left. BULLETPROOF: the split stacks at 900px; long headlines
   wrap; eyebrow flips to --ink on the mesh (AA on every drift stop); reduced-motion freezes the mesh drift. */
.avid-hero, .avid-hero *, .avid-hero *::before, .avid-hero *::after {
	box-sizing: border-box;
}

.avid-hero {
	position: relative;
	overflow: clip;
	background: #fff;
	padding-block: clamp(56px, 9vw, 120px);
	font-family: var(--sans);
	color: var(--ink);
}

.avid-hero__inner {
	position: relative;
	z-index: 1;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
}

/* size */
.avid-hero--tall {
	display: grid;
	align-items: center;
	min-height: 78svh;
}

/* background: pale brand mesh, drifting (text stays --ink). --plain = flat surface, no mesh */
.avid-hero__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
	background-image: var(--hero-mesh, var(--mesh-brand));
	background-size: 165% 165%;
	animation: meshdrift 20s ease-in-out infinite alternate;
}

/* --hero-mesh set by the macro's `mesh:` field (brand|edna|scorecard|insights|…) */
.avid-hero--plain {
	background: var(--surface);
}

.avid-hero--plain .avid-hero__bg {
	display: none;
}

/* ---- copy stack ---- */
.avid-hero__copy {
	min-width: 0;
}

.avid-hero__eyebrow {
	font: var(--fw-medium) 13px/1 var(--mono);
	letter-spacing: var(--tracking-wide);
	text-transform: uppercase;
	color: var(--blue-press);
	margin: 0;
}

.avid-hero--mesh .avid-hero__eyebrow {
	color: var(--ink);
}

/* --blue-press can dip below AA over bluer mesh stops; --ink clears every stop */
.avid-hero__title {
	font: var(--fw-bold) clamp(32px, 5vw, 58px)/1.05 var(--sans);
	letter-spacing: var(--tracking-tight);
	color: var(--ink);
	margin: 16px 0 0;
	text-wrap: balance;
	overflow-wrap: break-word;
	hyphens: auto;
}

.avid-hero__hl {
	color: var(--hl, var(--blue-press));
}

/* SOLID highlight — use OVER a mesh (override --hl for a capability tint, e.g. style="--hl:var(--cap-scorecard-text)"). For a GRADIENT accent use .avid-hl on a PLAIN bg instead. */
.avid-hero__lede {
	font: var(--fw-regular) var(--fs-body)/1.55 var(--sans);
	color: var(--body);
	max-width: 60ch;
	margin: 16px 0 0;
}

.avid-hero__actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-12);
	margin-top: var(--space-32);
}

/* trust strip — stat / integrations / security under the CTAs. Runs in --mono-data (DM Mono), THE one
   sanctioned survivor of the 2026-07-17 mono retirement (Stephen): credentials have a special role and
   the mono voice marks it — in Sans they read as random body text. Keeps the dot separators added in the
   Sans experiment (structure + voice beat either alone). */
.avid-hero__trust {
	margin-top: var(--space-32);
	padding-top: var(--space-24);
	border-top: 1px solid var(--line);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 14px;
	font: var(--fw-medium) 13px/1.4 var(--mono-data);
	color: var(--body);
	letter-spacing: .02em;
}

.avid-hero__trust span + span::before {
	content: "";
	display: inline-block;
	width: 3px;
	height: 3px;
	border-radius: 50%;
	background: var(--line-strong);
	vertical-align: 3px;
	margin-right: 14px;
}

.avid-hero__trust b {
	color: var(--ink);
	font-weight: var(--fw-semibold);
}

.avid-hero--mesh .avid-hero__trust {
	border-top-color: rgba(17, 24, 33, .12);
}

/* ---- layout: centered ---- */
.avid-hero--center {
	text-align: center;
}

.avid-hero--center .avid-hero__inner {
	max-width: 760px;
}

.avid-hero--center .avid-hero__lede {
	max-width: 54ch;
	margin-inline: auto;
}

.avid-hero--center .avid-hero__actions {
	justify-content: center;
}

/* ---- layout: split (copy left, visual right). Reverse swaps via GRID PLACEMENT only — DOM stays copy-first ---- */
.avid-hero--split .avid-hero__inner {
	display: grid;
	grid-template-columns: 1fr 1fr;
	column-gap: clamp(var(--space-32), 3.5vw, var(--space-48));
	row-gap: var(--space-32);
	align-items: center;
}

.avid-hero--split .avid-hero__copy {
	grid-column: 1;
}

.avid-hero--split .avid-hero__visual {
	grid-column: 2;
}

.avid-hero--reverse .avid-hero__copy {
	grid-column: 2;
}

/* swap via placement; DOM stays copy-first */
.avid-hero--reverse .avid-hero__visual {
	grid-column: 1;
}

/* pin both columns to row 1 when side-by-side — without this, a reverse split (copy is first in the
   DOM but placed in col 2) forces the visual to wrap to a second row, since it can't backfill col 1.
   Scoped to ≥901 so the ≤900 stack still flows copy-then-visual into separate rows. */
@media (min-width:901px) {
	.avid-hero--split .avid-hero__copy, .avid-hero--split .avid-hero__visual {
		grid-row: 1;
	}
}

/* ---- visual: PEOPLE — a clean human PHOTO beside the copy (NO overlay). The floating-card concept was
   retired: the hero copy is too dense to also carry it, and Edna's "work" story is told in the sections
   below (Meet Edna card, Proof). .avid-hero--media → a copy-favoured ≈60/40 split so the long headline
   keeps 3 lines and the photo supports without dominating; a tall portrait panel side-by-side. ---- */
.avid-hero__figure {
	position: relative;
	margin: 0;
	border-radius: 22px;
	overflow: hidden;
	background: var(--surface);
	box-shadow: 0 40px 90px -44px rgba(17, 24, 33, .45);
	aspect-ratio: 16/10;
}

.avid-hero__figure > img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 64% center;
}

@media (min-width:901px) {
	.avid-hero--media.avid-hero--split .avid-hero__inner {
		grid-template-columns: 1.5fr 1fr;
	}
	
	.avid-hero--media .avid-hero__figure {
		aspect-ratio: 4/5;
	}
}

/* ---- visual: SHOT — product screenshot (drop a real <img> in .avid-hero__shot) ---- */
.avid-hero__shot {
	position: relative;
	border-radius: 18px;
	overflow: hidden;
	background: #fff;
	border: 1px solid var(--line);
	box-shadow: 0 40px 90px -36px rgba(17, 24, 33, .5), 0 10px 30px -16px rgba(17, 24, 33, .22);
	aspect-ratio: 16/10;
	display: flex;
	flex-direction: column;
	gap: 10px;
	padding: 18px;
}

.avid-hero__shot > img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.avid-hero__shot-bar {
	height: 14px;
	border-radius: 6px;
	background: rgba(40, 99, 254, .16);
}

.avid-hero__shot-bar:first-child {
	width: 42%;
	background: rgba(40, 99, 254, .28);
}

.avid-hero__shot-card {
	flex: 1;
	border-radius: 12px;
	background: var(--surface);
	border: 1px solid var(--line);
}

/* ---- responsive ---- */
@media (max-width:900px) {
	.avid-hero--split .avid-hero__inner {
		grid-template-columns: 1fr;
	}
	
	.avid-hero--split .avid-hero__copy, .avid-hero--split .avid-hero__visual, .avid-hero--reverse .avid-hero__copy, .avid-hero--reverse .avid-hero__visual {
		grid-column: 1/-1;
	}
}

@media (max-width:540px) {
	.avid-hero__actions {
		flex-direction: column;
		align-items: stretch;
	}
	
	.avid-hero__actions .btn {
		width: 100%;
	}
}

@media (prefers-reduced-motion:reduce) {
	.avid-hero__bg {
		animation: none !important;
	}
}

/* ============================= css/testimonials.css ============================= */

/* testimonials.css — customer voice. LEAN set (per Stephen, 2026-06-21): three core patterns —
   FEATURED (single strongest pull-quote) · RESULT CARDS (stat + logo row) · CASE-STUDY (photo + stat + quote + read more).
   The 3-up quote grid and the paged carousel were cut. Brand-led: proof stats use BLUE + INK (no green).
   Cross-cutting TOGGLES built in:
     • featured band is a clean WHITE card by DEFAULT — add .tmo--mesh for a tinted drifting "hero" band
     • the logo slot + metric chip are OPTIONAL — drop either and the flex attribution row still aligns.
   Faithful, token-pinned port of styleguide C10 (re-skinned to brand). WCAG AA holds everywhere (inline notes). */
.tmo {
	--tmo-accent: #6a9622;
	--tmo-hover-bd: #cdd7e8;
}

/* result-number green (AA large-text on white/band); --tmo--red overrides for the warm-red signature */
.tmo--red {
	--tmo-accent: var(--red);
}

/* optional brand-signature accent on the metric chip */

/* eyebrow rendered as a real heading (styled down) for outline integrity. Lives on the band TINT, so
   --blue-press (5.9:1) not --blue (blue is text-on-#fff only). */
.tmo__eyebrow {
	font-family: var(--mono);
	font-size: 13px;
	font-weight: 500;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--blue-press);
	margin: 0 0 16px;
}

/* shared figure + quote */
.tmo figure {
	margin: 0;
}

.tmo__quote {
	margin: 0;
	text-wrap: pretty;
}

/* highlight one phrase of a LARGE quote (>=20px/600) only — never body copy. --blue-press is the readable
   fallback if background-clip:text is unsupported (clip+transparent fill override it where supported). */
.tmo__highlight {
	color: var(--blue-press);
	background-image: var(--grad-text);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
}

/* attribution row — name + role, with an OPTIONAL logo slot and OPTIONAL metric chip */
.tmo__attribution {
	display: flex;
	align-items: center;
	gap: 16px;
	margin-top: 24px;
}

.tmo__avatar {
	width: 56px;
	height: 56px;
	border-radius: 100px;
	object-fit: cover;
	background: var(--cool);
	flex: none;
	box-shadow: 0 0 0 3px #fff, 0 0 0 4px #e7ecf3, 0 8px 18px -10px rgba(17, 24, 33, .28);
}

.tmo__identity {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.tmo__name {
	font-size: 16px;
	font-weight: 600;
	color: var(--ink);
	line-height: 1.3;
}

.tmo__role {
	font-family: var(--mono);
	font-size: 13px;
	font-weight: 400;
	color: var(--body);
	line-height: 1.4;
}

/* person's TITLE only — org is never duplicated here; --body (6:1), NOT --muted (fails 13px body) */

/* Optional org-logo slot — the ONE place the org is named. Drop a real <img class="tmo__logo-img" alt="<Org> logo"> in;
   .tmo__logo--ph is the text wordmark placeholder/fallback. NOT aria-hidden (it carries the org name). */
.tmo__logo {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	min-width: 0;
}

.tmo__logo-img {
	display: block;
	height: 26px;
	width: auto;
	max-width: 140px;
	object-fit: contain;
}

.tmo__metric {
	display: inline-block;
	font-family: var(--mono);
	font-size: 20px;
	font-weight: 600;
	line-height: 1.2;
	letter-spacing: -.01em;
	font-variant-numeric: tabular-nums;
	color: var(--tmo-accent);
	margin: 18px 0 0;
}

/* >=18.66px bold so red large-text clears 3:1; always paired with literal text, never colour-only */

/* avatar placeholder specimen (no external assets) */
.tmo__avatar--ph {
	display: grid;
	place-items: center;
	font-family: var(--sans);
	font-weight: 600;
	font-size: 18px;
	color: #fff;
}

.tmo__ph1 {
	background: radial-gradient(120% 120% at 20% 10%, #5a8bff, transparent 60%), var(--blue);
}

.tmo__ph2 {
	background: radial-gradient(120% 120% at 20% 10%, #8f6bff, transparent 60%), #6d3df5;
}

.tmo__ph3 {
	background: radial-gradient(120% 120% at 20% 10%, #ff8aa0, transparent 60%), var(--red);
}

.tmo__ph4 {
	background: radial-gradient(120% 120% at 20% 10%, #54c79a, transparent 60%), #2f9e6e;
}

/* logo wordmark placeholder — a soft "logo plate" that reads as an optional logo slot AND names the org */
.tmo__logo--ph {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	height: 30px;
	padding: 0 12px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: rgba(255, 255, 255, .62);
	font-family: var(--sans);
	font-weight: 700;
	font-size: 13px;
	letter-spacing: -.01em;
	color: var(--body);
	white-space: nowrap;
	max-width: 170px;
	overflow: hidden;
	text-overflow: ellipsis;
}

.tmo__logo--ph::before {
	content: "";
	flex: none;
	width: 14px;
	height: 14px;
	border-radius: 3px;
	background: currentColor;
	opacity: .45;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 3h18v18H3z' fill='none' stroke='%23000' stroke-width='2'/%3E%3Ccircle cx='8.5' cy='8.5' r='1.8' fill='%23000'/%3E%3Cpath d='M21 16l-5-5-7 7' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E") center/contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 3h18v18H3z' fill='none' stroke='%23000' stroke-width='2'/%3E%3Ccircle cx='8.5' cy='8.5' r='1.8' fill='%23000'/%3E%3Cpath d='M21 16l-5-5-7 7' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* ===== FEATURED — single strongest proof ===== */
.tmo--featured .tmo__quote {
	font-size: clamp(22px, 2.6vw, 30px);
	font-weight: 600;
	line-height: 1.3;
	letter-spacing: -.01em;
	color: var(--ink);
	max-width: 38ch;
}

/* base featured band = clean WHITE card (plain by DEFAULT — sits calmly in a proof section among other colour) */
.tmo__featured-band {
	padding: clamp(28px, 5vw, 48px);
	border-radius: 22px;
	background: #fff;
	border: 1px solid var(--line);
	box-shadow: 0 18px 48px -30px rgba(40, 71, 110, .45);
}

/* TOGGLE — opt into a tinted DRIFTING band for a standalone "hero testimonial" moment */
.tmo--mesh .tmo__featured-band {
	border-color: transparent;
	background-color: #f3f7fe;
	background-image: radial-gradient(74% 72% at 50% 0%, rgba(255, 255, 255, .72), transparent 56%), radial-gradient(108% 108% at 92% 84%, rgba(66, 132, 255, .16), transparent 64%);
	background-size: 165% 165%;
	animation: meshdrift 20s ease-in-out infinite alternate;
}

.tmo--featured .tmo__mark {
	font-size: 2.4em;
	line-height: 0;
	vertical-align: -.3em;
	margin-right: .04em;
	font-weight: 700;
	color: var(--blue-press);
}

/* solid brand blue (was a gradient) */

/* ===== CASE-STUDY feature — photo · headline stat · logo · quote · read-case-study link ===== */
.tmo-case {
	display: grid;
	grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
	gap: clamp(28px, 5vw, 56px);
	align-items: center;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 22px;
	padding: clamp(24px, 4vw, 44px);
	box-shadow: var(--shadow-2);
	margin-inline: 0;
}

/* 40 / 60 — photo is the smaller column; margin-inline:0 kills the UA <figure> default so it aligns with full-width rows */
.tmo-case__photo {
	position: relative;
	width: 100%;
	aspect-ratio: 1;
	border-radius: 50%;
	overflow: hidden;
	display: grid;
	place-items: center;
	background: radial-gradient(120% 120% at 30% 18%, #dfe9ff, #eef2fb 60%, #e7ecf3);
}

/* circular portrait — home proof band is the reference */
.tmo-case__photo > img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 54% 18%;
}

.tmo-case__photo-ph {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	color: var(--blue-press);
	opacity: .6;
}

.tmo-case__photo-ph svg {
	width: 52px;
	height: 52px;
}

.tmo-case__photo-ph span {
	font: 500 11px/1 var(--mono);
	letter-spacing: .14em;
	text-transform: uppercase;
}

.tmo-case__top {
	display: flex;
	align-items: center;
	gap: clamp(20px, 3vw, 36px);
	padding-bottom: 20px;
	border-bottom: 1px solid var(--line);
	margin-bottom: 22px;
}

.tmo-case__stat-fig {
	font: 600 clamp(34px, 4.4vw, 52px)/1 var(--mono);
	color: #6a9622;
	letter-spacing: -.02em;
	font-variant-numeric: tabular-nums;
}

/* result green, AA large-text on white (3.5:1) */
.tmo-case__stat-lbl {
	display: block;
	margin-top: 6px;
	font: 500 13px/1.4 var(--sans);
	color: var(--body);
}

.tmo-case__logo {
	margin-left: auto;
}

.tmo-case__quote {
	font: 600 clamp(20px, 2.2vw, 26px)/1.4 var(--sans);
	color: var(--ink);
	letter-spacing: -.01em;
	margin: 0 0 22px;
	text-wrap: pretty;
}

.tmo-case__foot {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
}

.tmo-case__name {
	font: 600 16px/1.3 var(--sans);
	color: var(--ink);
}

.tmo-case__role {
	display: block;
	margin-top: 2px;
	font: 400 13px/1.4 var(--mono);
	color: var(--body);
}

.tmo-case__link {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font: 600 14px/1 var(--sans);
	color: var(--blue);
	text-decoration: none;
	white-space: nowrap;
}

@media (hover:hover) and (pointer:fine) {
	.tmo-case__link:hover {
		color: var(--blue-press);
		gap: 10px;
	}
}

@media (max-width:767px) {
	.tmo-case {
		grid-template-columns: minmax(0, 1fr);
		gap: 22px;
	}
	
	.tmo-case__photo {
		max-width: 220px;
		margin-inline: auto;
	}
	
	.tmo-case__top {
		flex-wrap: wrap;
		row-gap: 12px;
	}
	
	.tmo__logo-img {
		max-width: min(240px, 100%);
		height: auto;
	}
}

/* ===== RESULT CARDS — stat + logo, on white / deep-green / image ===== */
.tmo-results {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 18px;
}

/* three equal cards — home proof band is the reference */
.tmo-result {
	position: relative;
	border-radius: 18px;
	padding: clamp(20px, 2.4vw, 28px);
	display: flex;
	flex-direction: column;
	gap: 14px;
	min-height: 256px;
	overflow: hidden;
	text-decoration: none;
	color: inherit;
	transition: transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.tmo-result:hover {
		transform: translateY(-3px);
	}
	
	.tmo-result--white:hover {
		box-shadow: var(--shadow-2);
		border-color: #cdd7e8;
	}
	
	.tmo-result--dark:hover, .tmo-result--image:hover {
		box-shadow: 0 14px 30px -12px rgba(16, 24, 32, .45);
	}
}

.tmo-result:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

.tmo-result--white {
	background: #fff;
	border: 1px solid var(--line);
	box-shadow: var(--shadow-1);
}

/* --dark / --image take a CUSTOM background via --tmo-card-bg: a colour for --dark, a url() for --image */
.tmo-result--dark {
	background: var(--tmo-card-bg, var(--ink));
	color: #fff;
}

.tmo-result--image {
	color: #fff;
	background-image: var(--tmo-card-bg, linear-gradient(155deg, #2f6bff, #0e2a73));
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
}

.tmo-result--image::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(8, 12, 24, .74), rgba(8, 12, 24, .3) 60%, rgba(8, 12, 24, .12));
	z-index: 0;
}

/* scrim guarantees text legibility over ANY photo */
.tmo-result > * {
	position: relative;
	z-index: 1;
}

.tmo-result .tmo__logo {
	margin-left: 0;
	align-self: flex-start;
}

/* logo sits TOP-LEFT in a result card (overrides the featured row's right-push) */
.tmo-result__rule {
	margin-top: auto;
	align-self: stretch;
	height: 1px;
	background: currentColor;
	opacity: .16;
	border: 0;
}

/* hairline divider; inherits the card's text colour, pushes the proof block to the bottom */
.tmo-result__stat {
	font: 600 clamp(30px, 3.6vw, 44px)/1 var(--mono);
	letter-spacing: -.02em;
	font-variant-numeric: tabular-nums;
}

.tmo-result--white .tmo-result__stat {
	color: #6a9622;
}

/* result green on white (3.5:1 large-text) */
.tmo-result--dark .tmo-result__stat, .tmo-result--image .tmo-result__stat {
	color: #bfe06a;
}

/* lime on ink/photo (>=9:1) */
.tmo-result__label {
	font: 500 14px/1.4 var(--sans);
	max-width: 24ch;
}

.tmo-result--white .tmo-result__label {
	color: var(--body);
}

.tmo-result--dark .tmo-result__label, .tmo-result--image .tmo-result__label {
	color: rgba(255, 255, 255, .86);
}

.tmo-result__link {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font: 600 13px/1 var(--sans);
	text-decoration: none;
	color: var(--blue);
}

.tmo-result__arrow {
	position: absolute;
	right: 18px;
	bottom: 18px;
	z-index: 1;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: rgba(255, 255, 255, .16);
	color: #fff;
}

.tmo-result--white .tmo-result__arrow {
	background: var(--surface);
	color: var(--blue);
	border: 1px solid var(--line);
}

.tmo-result--dark .tmo__logo--ph, .tmo-result--image .tmo__logo--ph {
	background: rgba(255, 255, 255, .12);
	border-color: rgba(255, 255, 255, .22);
	color: #fff;
}

@media (max-width:820px) {
	.tmo-results {
		grid-template-columns: 1fr 1fr;
	}
}

@media (max-width:540px) {
	.tmo-results {
		grid-template-columns: 1fr;
	}
}

/* ===== shared responsive + reduced-motion ===== */
@media (max-width:767px) {
	.tmo--featured .tmo__quote {
		font-size: 22px;
	}
	
	.tmo__attribution {
		flex-wrap: wrap;
	}
	
	.tmo__logo {
		margin-left: 0;
	}
}

@media (prefers-reduced-motion:reduce) {
	.tmo--mesh .tmo__featured-band {
		animation: none;
	}
	
	.tmo-result {
		transition: none;
	}
	
	.tmo-result:hover {
		transform: none;
	}
}

/* featured case logo — larger on the home proof card */
.tmo-case__logo .tmo__logo-img {
	height: 50px;
	max-width: 240px;
}

/* ============================= css/cards.css ============================= */

/* cards.css — the card surface system (styleguide C6), token-pinned port.
   ONE restrained surface: content · stat · link/resource · capability, + raised/compact modifiers.
   Lay them out in the bridge grid (.avid-cards__grid--2/3/4) or the .avid-bento primitive — this file
   styles the card itself, not the grid. Cut from the styleguide port: the skeleton loader (no async UI
   on a static marketing site) and the bespoke card-bento (use .avid-bento instead).
   A11y contract (keep): the WHOLE card links via a single anchor on the title stretched with ::after
   (one tab stop, real accessible name, no nested-interactive trap); a second action rides above it with
   z-index. Only link/capability cards lift. Coming-soon is textual (chip + aria-disabled), never colour/dim alone. */
.card {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding: clamp(20px, 5vw, 24px);
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 16px;
	min-width: 0;
	transition: transform var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}

.card--feature, .card--capability {
	border-radius: 22px;
}

.card--compact {
	padding: 16px;
	gap: 8px;
}

/* icon chip */
.card__icon {
	width: 44px;
	height: 44px;
	border-radius: 12px;
	background: var(--cool);
	display: grid;
	place-items: center;
	color: var(--blue);
	flex: 0 0 auto;
}

.card__icon svg {
	width: 22px;
	height: 22px;
}

/* text */
.card__eyebrow {
	font: 500 13px/1.1 var(--mono);
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--body);
	margin: 0;
}

/* TEXT → --body (6:1), never --muted */
.card__title {
	font: 600 21px/1.25 var(--sans);
	letter-spacing: -.01em;
	color: var(--ink);
	margin: 0;
	overflow-wrap: anywhere;
}

.card--link .card__title {
	font-size: 20px;
}

.card__body {
	font: 400 17px/1.6 var(--sans);
	color: var(--body);
	max-width: 46ch;
	min-width: 0;
	margin: 0;
}

.card__stat {
	font: 500 clamp(28px, 4vw, 42px)/1.05 var(--mono);
	font-variant-numeric: tabular-nums;
	color: var(--ink);
	margin: 0;
}

.card__stat-u {
	color: var(--blue-press);
}

/* unit takes the brand accent */
.card__meta {
	font: 500 13px/1.1 var(--mono);
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--body);
	margin: 0;
}

/* CTA / chevron affordances — visual only, owned by the heading link (aria-hidden) */
.card__cta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: 600 15px/1 var(--sans);
	color: var(--blue-press);
	margin-top: auto;
}

.card__cta-arrow, .card__chevron {
	display: inline-block;
	transition: transform var(--dur-fast) var(--ease-out);
}

.card__chevron {
	position: absolute;
	top: clamp(20px, 5vw, 24px);
	right: clamp(20px, 5vw, 24px);
	color: var(--blue-press);
}

.card__chevron svg, .card__cta-arrow svg {
	width: 16px;
	height: 16px;
	display: block;
}

/* full-card link: single anchor on the title, stretched via ::after */
.card__link {
	color: inherit;
	text-decoration: none;
	border-radius: 4px;
}

.card__link::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
	z-index: 1;
}

/* a SECOND interactive control rides above the overlay so it isn't swallowed */
.card__action {
	position: relative;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	min-height: 24px;
	padding: 10px 0;
	margin-top: 4px;
	font: 600 14px/1 var(--sans);
	color: var(--blue-press);
	text-decoration: none;
	align-self: flex-start;
}

.card__action:hover {
	text-decoration: underline;
}

/* whole-card focus halo (outline so overflow never clips it, follows the radius) */
.card:focus-within {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

@supports selector(:has(*)) {
	.card:focus-within {
		outline: none;
	}
	
	.card:has(.card__link:focus-visible) {
		outline: 2px solid var(--blue);
		outline-offset: 2px;
	}
}

/* raised — shadow at rest, transparent border reserves the box */
.card--raised {
	border-color: transparent;
	box-shadow: 0 1px 2px rgba(17, 24, 33, .04), 0 8px 24px -12px rgba(17, 24, 33, .1);
}

/* CAPABILITY — a DECORATIVE mesh band over an opaque panel; all copy sits on the flat panel,
   never on the radial peaks (where --body/--blue would fail 4.5:1). Band tint is set per
   capability via --card-band (a bridge --mesh-* token); defaults to the brand wash. */
.card--capability {
	padding: 0;
	overflow: hidden;
	background: #fbfcff;
}

.card--capability .card__band {
	height: 64px;
	flex: 0 0 auto;
	background-color: var(--cool);
	background-image: var(--card-band, var(--mesh-brand));
	background-size: 165% 165%;
}

.card--capability .card__panel {
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding: clamp(20px, 5vw, 24px);
	position: relative;
	z-index: 1;
}

.card--capability .card__icon {
	margin-top: -46px;
	box-shadow: 0 1px 2px rgba(17, 24, 33, .1), 0 4px 12px -6px rgba(17, 24, 33, .14);
}

.card--capability .card__eyebrow {
	color: var(--blue-press);
}

/* coming-soon — state is TEXTUAL (chip + aria-disabled). Never dim the whole card (body would fail
   contrast); only the decorative icon/band soften, copy stays at full contrast. */
.card--soon .card__link {
	pointer-events: none;
}

.card--soon .card__icon {
	opacity: .55;
}

.card--soon .card__band {
	opacity: .7;
}

.card__chip {
	display: inline-flex;
	align-items: center;
	align-self: flex-start;
	padding: 4px 10px;
	border-radius: 100px;
	background: var(--surface);
	border: 1px solid var(--line);
	font: 500 12px/1 var(--mono);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--body);
}

/* hover — interactive cards only, fine pointer + hover-capable. Static border (3.47:1) before color-mix. */
@media (hover:hover) and (pointer:fine) {
	.card--link:hover, .card--capability:hover {
		transform: translateY(-4px);
		border-color: #5e83f6;
		border-color: color-mix(in srgb, var(--blue) 45%, var(--line));
	}
	
	.card--raised:hover {
		box-shadow: 0 12px 30px -14px rgba(17, 24, 33, .16);
	}
	
	.card--link:hover .card__chevron, .card--link:hover .card__cta-arrow, .card--capability:hover .card__cta-arrow {
		transform: translateX(2px);
	}
	
	.card--link:active, .card--capability:active {
		transform: translateY(-1px);
	}
	
	.card--soon:hover {
		transform: none;
		border-color: var(--line);
	}
}

@media (prefers-reduced-motion:reduce) {
	.card, .card__cta-arrow, .card__chevron {
		transition: none;
	}
	
	.card--link:hover, .card--capability:hover {
		transform: none;
	}
	
	.card--link:hover .card__chevron, .card--link:hover .card__cta-arrow, .card--capability:hover .card__cta-arrow {
		transform: none;
	}
}

/* ============================= css/iconbox.css ============================= */

/* iconbox.css — the lighter sibling of the card (styleguide C7), token-pinned port.
   An icon chip + short heading + one scannable sentence (+ optional arrow link), tiled into a 3-/4-up
   feature grid — the "what Avid runs" workhorse. Variants: top-icon (default) · inline (left-icon rows) ·
   bare (chrome-less trust row) · clickable (whole-card link). Chips: plain (cool) · mesh (per-capability) ·
   red (one deliberate Edna cell). Use for capability/feature trios — reach for .card when you need media/stats.
   Mesh chips use the bridge's canonical --mesh-* tokens via --chip-mesh (like the hero's --hero-mesh),
   NOT the styleguide's superseded .m-* classes. A11y: eyebrow/links are TEXT → --body / --blue-press;
   coming-soon softens only the decorative chip; nothing relies on colour alone. */

/* grid */
.iconbox-grid {
	display: grid;
	gap: 16px;
	list-style: none;
	padding: 0;
	margin: 0;
}

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

.iconbox-grid--3up {
	grid-template-columns: repeat(3, 1fr);
}

.iconbox-grid--4up {
	grid-template-columns: repeat(4, 1fr);
}

.iconbox-grid > li {
	display: flex;
}

/* let cells stretch to equal height */
.iconbox-grid > li > .iconbox {
	flex: 1;
}

@media (max-width:1023px) {
	.iconbox-grid--3up, .iconbox-grid--4up {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width:767px) {
	.iconbox-grid--2up, .iconbox-grid--3up, .iconbox-grid--4up {
		grid-template-columns: 1fr;
	}
}

/* card root — no overflow clip (inner link's focus ring must not be clipped) */
.iconbox {
	position: relative;
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 16px;
	padding: clamp(20px, 2.4vw, 24px);
	transition: box-shadow var(--dur-base) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}

/* chip — 48px rounded square, 24px stroke glyph via currentColor */
.iconbox__chip {
	flex: 0 0 48px;
	width: 48px;
	height: 48px;
	border-radius: 12px;
	display: grid;
	place-items: center;
	background: var(--cool);
	color: var(--blue);
}

/* glyph aria-hidden → 3:1 graphic OK on cool */
.iconbox__chip svg {
	width: 24px;
	height: 24px;
	display: block;
}

/* mesh chip — per-capability tint via --chip-mesh (default brand); glyph --ink (≥16:1 on the pale mesh) */
.iconbox__chip--mesh {
	color: var(--ink);
	background-color: var(--cool);
	background-image: var(--chip-mesh, var(--mesh-brand));
	background-size: 165% 165%;
	animation: meshdrift 20s ease-in-out infinite alternate;
}

/* reserved red highlight chip — ONE deliberate cell per view; glyph decorative, meaning in the copy */
.iconbox__chip--red {
	background: rgba(249, 66, 58, .1);
	color: var(--red);
	animation: none;
}

/* ── IMAGE instead of an icon ──────────────────────────────────────────────
   1) IMAGE CHIP — drop an <img> in the chip; add --img to remove the tint base (the gradient capability
      orbs / logos / avatars are self-contained, so contain not cover). 2) MEDIA — a larger feature image
      at the TOP via .iconbox--media + .iconbox__media (a rounded thumbnail; aspect = --media-ratio, default 16/10). */
.iconbox__chip img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: inherit;
	display: block;
}

.iconbox__chip--img {
	background: none;
}

.iconbox__chip--img img {
	object-fit: contain;
}

.iconbox__media {
	border-radius: 12px;
	overflow: hidden;
	aspect-ratio: var(--media-ratio, 16 / 10);
	background: var(--surface);
}

.iconbox__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* LANDSCAPE / 50-50 — a FULL-WIDTH box: media one half, text the other. Use standalone (one per row),
   not inside a 3-up grid — for alternating feature rows. Media fills its half (edge-to-edge, full height);
   add --media-right to flip the image to the right (DOM stays media-first). Stacks media-over-text <640px. */
.iconbox--split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0;
	padding: 0;
	overflow: hidden;
	align-items: stretch;
}

.iconbox--split .iconbox__media {
	aspect-ratio: auto;
	height: 100%;
	min-height: 240px;
	border-radius: 0;
	background: var(--surface);
}

.iconbox--split .iconbox__text {
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-width: 0;
	padding: clamp(24px, 3.5vw, 48px);
}

.iconbox--split .iconbox__text > :first-child {
	margin-top: 0;
}

/* no chip above — kill the leading margin */

/* PADDED / inset landscape — the image sits framed on a panel with breathing room, instead of full-bleed.
   Compose with .iconbox--split: `.iconbox--split.iconbox--split-inset`. Two knobs:
     --media-tint  panel colour behind the image (default --surface; pass a --mesh-* for a branded frame)
     --media-fit   cover (default, fills the frame) or contain (a whole screenshot/logo floats centred). */
.iconbox--split-inset {
	padding: clamp(24px, 3.5vw, 48px);
	gap: clamp(24px, 3.5vw, 48px);
}

/* generous, symmetric — matches the full-bleed text padding */
.iconbox--split-inset .iconbox__media {
	height: auto;
	min-height: 200px;
	border-radius: 16px;
	display: grid;
	place-items: center;
	background: var(--media-tint, transparent);
	background-size: 165% 165%;
	padding: var(--media-pad, 0);
}

/* default = NO frame (transparent, no inner pad); the image is just inset by the box padding */
.iconbox--split-inset .iconbox__media img {
	object-fit: var(--media-fit, cover);
	border-radius: 16px;
}

.iconbox--split-inset .iconbox__text {
	padding: 0;
}

/* spacing comes from the box padding + gap (so it equals the full-bleed version) */
@media (min-width:640px) {
	.iconbox--split.iconbox--media-right .iconbox__media {
		order: 2;
	}
}

@media (max-width:639px) {
	.iconbox--split {
		grid-template-columns: 1fr;
	}
	
	.iconbox--split .iconbox__media {
		aspect-ratio: 16/10;
		height: auto;
		min-height: 0;
	}
}

/* text */
.iconbox__eyebrow {
	font-family: var(--mono);
	font-size: 13px;
	font-weight: 500;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--body);
	margin: 16px 0 8px;
}

.iconbox__eyebrow + .iconbox__title {
	margin-top: 0;
}

.iconbox__title {
	font-size: 20px;
	font-weight: 600;
	line-height: 1.3;
	color: var(--ink);
	margin: 16px 0 8px;
}

.iconbox__body {
	font-size: 17px;
	line-height: 1.6;
	color: var(--body);
	max-width: 46ch;
	margin: 0;
}

/* link / arrow — text-equivalent blue → --blue-press */
.iconbox__link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	width: fit-content;
	min-height: 44px;
	margin-top: 16px;
	font-size: 15px;
	font-weight: 600;
	color: var(--blue-press);
	text-decoration: none;
}

.iconbox__arrow {
	width: 16px;
	height: 16px;
	display: block;
	transition: transform var(--dur-fast) var(--ease-out);
}

.iconbox__link:focus-visible {
	border-radius: 8px;
}

/* inline (left-icon) — chip-left, text-right; stacks under 560px so body never drops below ~40ch */
.iconbox--inline {
	flex-direction: row;
	gap: 16px;
	align-items: flex-start;
}

.iconbox--inline .iconbox__text {
	min-width: 0;
}

.iconbox--inline .iconbox__eyebrow, .iconbox--inline .iconbox__title {
	margin-top: 0;
}

@media (max-width:559px) {
	.iconbox--inline {
		flex-direction: column;
	}
}

/* bare-icon — no chip background, 28px blue stroke icon (informational trust row) */
.iconbox--bare .iconbox__chip {
	flex: none;
	width: auto;
	height: auto;
	background: none;
	color: var(--blue);
	animation: none;
}

.iconbox--bare .iconbox__chip svg {
	width: 28px;
	height: 28px;
}

/* coming-soon — soften ONLY the decorative chip; title/body stay full contrast */
.iconbox--soon .iconbox__chip {
	background: var(--surface);
	color: var(--body);
}

.iconbox--soon .iconbox__link {
	pointer-events: none;
	color: var(--body);
}

/* whole-card-clickable (stretched link). HARD CONSTRAINT: body text isn't selectable + may hold no nested
   links — the pseudo covers the card. Use the text-link variant when you need either. */
.iconbox--clickable .iconbox__title a {
	color: inherit;
	text-decoration: none;
}

.iconbox--clickable .iconbox__title a::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 16px;
}

.iconbox--clickable:focus-within {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

/* ruled-list variant — drop card chrome, share hairline rules */
.iconbox-grid--ruled {
	gap: 0;
}

.iconbox-grid--ruled > li > .iconbox {
	border: 0;
	border-radius: 0;
	border-top: 1px solid var(--line);
}

@media (min-width:768px) {
	.iconbox-grid--ruled.iconbox-grid--2up > li:nth-child(-n+2) > .iconbox, .iconbox-grid--ruled.iconbox-grid--3up > li:nth-child(-n+3) > .iconbox, .iconbox-grid--ruled.iconbox-grid--4up > li:nth-child(-n+4) > .iconbox {
		border-top: 0;
	}
}

/* hover/active — interactive cells only; informational cells never lift (no false affordance).
   :has() with a .iconbox--has-link fallback for engines without :has(). */
@media (hover:hover) and (pointer:fine) {
	.iconbox--clickable:hover, .iconbox--has-link:hover, .iconbox:has(.iconbox__link):hover {
		transform: translateY(-3px);
		box-shadow: var(--shadow-2);
		border-color: var(--line-strong);
	}
	
	.iconbox__link:hover {
		color: var(--blue-press);
	}
	
	.iconbox__link:hover .iconbox__arrow, .iconbox__link:focus-visible .iconbox__arrow {
		transform: translateX(4px);
	}
}

.iconbox--clickable:active {
	transform: translateY(-1px);
	box-shadow: var(--shadow-1);
}

@media (prefers-reduced-motion:reduce) {
	.iconbox {
		transition: border-color var(--dur-fast) linear, box-shadow var(--dur-fast) linear;
	}
	
	.iconbox--clickable:hover, .iconbox--has-link:hover, .iconbox:has(.iconbox__link):hover {
		transform: none;
	}
	
	.iconbox__chip--mesh {
		animation: none;
	}
	
	.iconbox__link:hover .iconbox__arrow, .iconbox__link:focus-visible .iconbox__arrow {
		transform: none;
	}
}

/* ============================= css/components/header.css ============================= */

/* components/header.css — Global header / nav (C30), copied VERBATIM from the
   shared nav CSS produced by the other build track. Every class prefixed .hdr.
   Reuses locked tokens + the .btn primitive (system.css) + .mlink + .sr-only +
   the live .on-dark/[data-surface=dark] white-ring scope. ADA-engineered: sticky
   edge uses --line-strong (3:1) per 1.4.11; mega = role=group of links (plain Tab,
   no menu roving); drawer = role=dialog aria-modal with its own focus trap; full
   reduced-motion + forced-colors fallbacks. Do not edit casually — keep in sync
   with the canonical nav artifact. */

/* --- token: ONE --header-h kills the 88/72 drift. --topbar-h offsets a top-bar. --- */
.hdr {
	--header-h: 80px;
}

.hdr--tall {
	--header-h: 88px;
}

/* --- root banner --- */
.hdr {
	position: sticky;
	top: var(--topbar-h, 0px);
	z-index: 50;
	min-height: var(--header-h);
	background: #fff;
	border-bottom: 1px solid transparent;
	transition: box-shadow var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);
}

/* --- inner rail --- */
.hdr__inner {
	display: flex;
	align-items: center;
	max-width: var(--container-max);
	margin-inline: auto;
	min-height: var(--header-h);
	padding-inline: var(--gutter);
}

/* --- brand / logo home link --- */
.hdr__brand {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	border-radius: var(--radius-sm);
	color: var(--text-strong);
	margin-inline-end: clamp(28px, 3.6vw, 52px);
}

.hdr__logo {
	display: block;
	height: 20px;
	width: auto;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__brand:hover {
		opacity: .85;
	}
}

/* --- primary nav --- */
.hdr__nav > ul {
	display: flex;
	align-items: center;
	gap: clamp(16px, 1.6vw, 24px);
	list-style: none;
	margin: 0;
	padding: 0;
}

/* --- plain link: .mlink underline mechanic, recoloured for nav --- */
.hdr__link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	white-space: nowrap;
	font: var(--fw-semibold) 14px/1 var(--sans);
	letter-spacing: -.4px;
	color: var(--text-strong);
	text-decoration: none;
	transition: color var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__link:hover {
		color: var(--text-accent);
	}
}

.hdr__link[aria-current=page] {
	color: var(--text-accent);
	font-weight: var(--fw-semibold);
}

/* --- disclosure trigger (Capabilities) --- */
.hdr__disc {
	position: relative;
}

.hdr__disc__btn {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 44px;
	white-space: nowrap;
	font: var(--fw-semibold) 14px/1 var(--sans);
	letter-spacing: -.4px;
	color: var(--text-strong);
	background: none;
	border: 0;
	border-radius: var(--radius-sm);
	cursor: pointer;
	transition: color var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__disc__btn:hover {
		color: var(--text-accent);
	}
}

.hdr__disc__btn[aria-expanded=true] {
	color: var(--text-accent);
}

.hdr__caret {
	width: 12px;
	height: 12px;
	flex: none;
	transition: transform var(--dur-fast) var(--ease-out);
}

.hdr__disc__btn[aria-expanded=true] .hdr__caret {
	transform: rotate(180deg);
}

/* --- mega panel: role=group of links, fill LOCKED #fff on every header variant --- */
.hdr__mega {
	position: absolute;
	top: calc(100% + 8px);
	inset-inline-start: 0;
	min-width: 560px;
	max-width: min(720px, calc(100vw - 32px));
	max-height: calc(100dvh - var(--header-h) - var(--topbar-h, 0px) - 24px);
	overflow-y: auto;
	overscroll-behavior: contain;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	box-shadow: 0 16px 48px -16px rgba(17, 24, 33, .18);
	padding: 32px;
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 10px;
	opacity: 0;
	transform: translateY(-6px);
	transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}

.hdr__mega[hidden] {
	display: none;
}

.hdr__disc.is-open .hdr__mega {
	opacity: 1;
	transform: none;
}

.hdr__mega__label {
	grid-column: 1/-1;
	margin: 2px 0 14px;
	font: var(--fw-medium) 12px/1 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--text-default);
}

.hdr__mega__item {
	display: flex;
	flex-direction: column;
	gap: 3px;
	align-items: flex-start;
	padding: 9px 12px;
	min-height: 44px;
	border-radius: var(--radius-sm);
	text-decoration: none;
	transition: background-color var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__mega__item:hover .hdr__mega__nm, .hdr__mega__item:hover .hdr__mega__ico {
		color: var(--text-accent);
	}
}

.hdr__mega__item:focus-visible {
	outline-offset: -2px;
}

.hdr__mega__nm {
	font: var(--fw-medium) 15px/1.35 var(--sans);
	color: var(--text-strong);
	transition: color var(--dur-fast) var(--ease-out);
}

.hdr__mega__ds {
	font: var(--fw-regular) 13.5px/1.45 var(--sans);
	color: var(--text-default);
}

.hdr__mega__all {
	grid-column: 1/-1;
	margin-top: 4px;
	padding: 10px 12px;
	min-height: 44px;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	font: var(--fw-semibold) 14px/1 var(--sans);
	color: var(--text-accent);
	text-decoration: none;
	border-radius: var(--radius-sm);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__mega__all:hover {
		text-decoration: underline;
		text-underline-offset: 3px;
	}
}

/* --- simple-dropdown variant: role=menu + haspopup=menu + roving belong here --- */
.hdr__menu {
	position: absolute;
	top: calc(100% + 8px);
	inset-inline-start: 0;
	min-width: 220px;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-popover);
	padding: 8px;
	margin: 0;
	list-style: none;
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}

.hdr__menu[hidden] {
	display: none;
}

.hdr__disc.is-open .hdr__menu {
	opacity: 1;
	transform: none;
}

.hdr__menu__item {
	display: flex;
	align-items: center;
	min-height: 44px;
	padding: 0 12px;
	border-radius: var(--radius-sm);
	font: var(--fw-medium) 15px/1.2 var(--sans);
	color: var(--text-default);
	text-decoration: none;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__menu__item:hover {
		background: var(--surface);
		color: var(--text-strong);
	}
}

.hdr__menu__item:focus-visible {
	outline-offset: -2px;
}

/* --- actions cluster --- */
.hdr__actions {
	display: flex;
	align-items: center;
	gap: 22px;
	margin-inline-start: auto;
}

.hdr__signin {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	white-space: nowrap;
	font: var(--fw-semibold) 14px/1 var(--sans);
	letter-spacing: -.4px;
	color: var(--text-accent);
	text-decoration: none;
	border-radius: var(--radius-sm);
}

.hdr__chev {
	width: 14px;
	height: 14px;
	flex: none;
}

.hdr__cta .hdr__chev {
	margin-inline-start: 3px;
	width: 15px;
	height: 15px;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__signin:hover {
		text-decoration: underline;
		text-underline-offset: 3px;
	}
}

.hdr__cta {
	font-size: 14px;
	--btn-h: 36px;
}

/* --- hamburger: <1024 only --- */
.hdr__burger {
	display: none;
	width: 44px;
	height: 44px;
	align-items: center;
	justify-content: center;
	border: 0;
	background: transparent;
	border-radius: var(--radius-sm);
	color: var(--text-strong);
	cursor: pointer;
}

.hdr__burger svg {
	width: 22px;
	height: 22px;
	flex: none;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__burger:hover {
		background: var(--surface);
	}
}

/* --- skip link: first focusable, visible-on-focus --- */
.hdr__skip {
	position: absolute;
	left: 8px;
	top: -64px;
	z-index: 100;
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	background: #fff;
	border: 1px solid var(--line-strong);
	border-radius: var(--radius-sm);
	padding: 0 16px;
	font: var(--fw-semibold) 15px/1 var(--sans);
	color: var(--text-strong);
	text-decoration: none;
	transition: top var(--dur-fast) var(--ease-out);
}

.hdr__skip:focus {
	top: 8px;
}

/* --- scroll-lifted state (JS toggles past ~16px): shadow/border only => 0 CLS --- */
.hdr--solid-scroll {
	box-shadow: 0 6px 20px -2px rgba(17, 24, 33, .05);
}

/* --- FILL: cool accent (interior section pages) --- */
.hdr--cool {
	background: var(--cool);
}

.hdr--cool .hdr__link {
	color: var(--text-strong);
}

.hdr--cool .hdr__disc__btn {
	color: var(--text-strong);
}

.hdr--cool .hdr__signin {
	color: var(--text-accent);
}

/* --- FILL: dark (carries data-surface="dark" => white ring via the live rule) --- */
.hdr--dark {
	background: var(--dark);
	border-bottom-color: rgba(255, 255, 255, .22);
}

.hdr--dark .hdr__link, .hdr--dark .hdr__disc__btn, .hdr--dark .hdr__signin {
	color: #fff;
}

.hdr--dark .hdr__brand {
	color: #fff;
}

.hdr--dark .hdr__burger {
	color: #fff;
}

.hdr--dark .hdr__link[aria-current=page] {
	background-image: linear-gradient(#fff, #fff);
}

/* --- FILL: ghost over a dark hero; resolves to solid white on scroll --- */
.hdr--ghost {
	background: transparent;
	border-bottom-color: transparent;
	box-shadow: none;
}

.hdr--ghost .hdr__link, .hdr--ghost .hdr__disc__btn, .hdr--ghost .hdr__signin {
	color: #fff;
}

.hdr--ghost .hdr__brand {
	color: #fff;
}

.hdr--ghost .hdr__burger {
	color: #fff;
}

.hdr--ghost .hdr__link[aria-current=page] {
	background-image: linear-gradient(#fff, #fff);
}

.hdr--ghost.hdr--solid-scroll {
	background: #fff;
	box-shadow: 0 6px 20px -2px rgba(17, 24, 33, .05);
}

.hdr--ghost.hdr--solid-scroll .hdr__link, .hdr--ghost.hdr--solid-scroll .hdr__disc__btn {
	color: var(--text-strong);
}

.hdr--ghost.hdr--solid-scroll .hdr__signin {
	color: var(--text-accent);
}

.hdr--ghost.hdr--solid-scroll .hdr__brand {
	color: var(--text-strong);
}

.hdr--ghost.hdr--solid-scroll .hdr__burger {
	color: var(--text-strong);
}

.hdr--ghost.hdr--solid-scroll .hdr__link[aria-current=page] {
	background-image: linear-gradient(var(--blue-press), var(--blue-press));
}

.hdr--dark .hdr__link:hover, .hdr--ghost:not(.hdr--solid-scroll) .hdr__link:hover, .hdr--dark .hdr__disc__btn:hover, .hdr--ghost:not(.hdr--solid-scroll) .hdr__disc__btn:hover, .hdr--dark .hdr__disc__btn[aria-expanded=true], .hdr--ghost:not(.hdr--solid-scroll) .hdr__disc__btn[aria-expanded=true] {
	color: rgba(255, 255, 255, .82);
}

/* --- responsive: collapse to hamburger at 1024 --- */
@media (max-width:1023px) {
	.hdr__nav, .hdr__signin {
		display: none;
	}
	
	.hdr__burger {
		display: inline-flex;
	}
}

@media (max-width:767px) {
	.hdr {
		--header-h: 64px;
	}
}

@media (max-width:400px) {
	.hdr__actions .hdr__cta {
		display: none;
	}
}

/* --- reduced motion --- */
@media (prefers-reduced-motion:reduce) {
	.hdr, .hdr__link, .hdr__caret, .hdr__mega, .hdr__menu, .hdr__skip, .hdr__disc__btn, .hdr__signin {
		transition: none;
	}
	
	.hdr__mega, .hdr__menu {
		transform: none;
	}
}

/* --- forced-colors --- */
@media (forced-colors:active) {
	.hdr {
		border-bottom-color: CanvasText;
	}
	
	.hdr__mega, .hdr__menu {
		border-color: CanvasText;
	}
	
	:where(.hdr a,.hdr button):focus-visible {
		outline-color: Highlight;
	}
}

/* ===== DESIGNED MEGA LAYER — icon chips, Edna feature card, role tints, grouped columns, featured story ===== */
.hdr__mega {
	z-index: 5;
}

.hdr__mega--wide {
	min-width: 680px;
	max-width: min(760px, calc(100vw - 32px));
	grid-template-columns: 1.55fr .8fr;
	gap: 28px;
}

.hdr__mega--roles {
	min-width: 560px;
	max-width: min(620px, calc(100vw - 32px));
	gap: 6px 20px;
}

.hdr__mega--story {
	min-width: 540px;
	max-width: min(600px, calc(100vw - 32px));
	gap: 28px;
}

.hdr__mega--cols {
	min-width: 460px;
	max-width: min(520px, calc(100vw - 32px));
	gap: 28px;
}

.hdr__mega--wide > :nth-child(2), .hdr__mega--story > :nth-child(2), .hdr__mega--cols > :nth-child(2) {
	border-inline-start: 1px solid var(--line);
	padding-inline-start: 28px;
}

.hdr__mega--end {
	inset-inline-start: auto;
	inset-inline-end: 0;
}

.hdr__mega__ico {
	width: 16px;
	height: 16px;
	flex: none;
	display: block;
	color: var(--text-strong);
	margin-top: 2px;
	transition: color var(--dur-fast) var(--ease-out);
}

.hdr__mega__ico svg {
	width: 16px;
	height: 16px;
	display: block;
}

.hdr__mega__item--rich {
	flex-direction: row;
	align-items: flex-start;
	gap: 13px;
}

.hdr__mega__tx {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.hdr__mega__grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 14px 24px;
	align-content: start;
}

.hdr__mega__grid .hdr__mega__label {
	grid-column: 1/-1;
}

.hdr__feat {
	position: relative;
	display: flex;
	flex-direction: column;
	min-height: 200px;
	text-decoration: none;
}

.hdr__feat__eyebrow {
	font: var(--fw-medium) 12px/1 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--text-default);
}

.hdr__feat__title {
	font: var(--fw-semibold) 17px/1.28 var(--sans);
	color: var(--text-strong);
	margin: 9px 0 0;
}

.hdr__feat__media {
	flex: 1;
	min-height: 92px;
	margin-top: 16px;
	border-radius: var(--radius-sm);
	border: 1px solid var(--line);
	background: #fff;
	padding: 14px;
	display: flex;
	align-items: flex-start;
	gap: 10px;
}

.hdr__feat__ava {
	width: 26px;
	height: 26px;
	flex: none;
	border-radius: 50%;
	background-size: 170% 170%;
}

.hdr__feat__lines {
	flex: 1;
	display: flex;
	flex-direction: column;
	gap: 7px;
	margin-top: 3px;
}

.hdr__feat__lines i {
	display: block;
	width: 100%;
	height: 7px;
	border-radius: 4px;
	background: var(--surface);
}

.hdr__feat__lines i:nth-child(2) {
	width: 80%;
}

.hdr__feat__lines i:nth-child(3) {
	width: 55%;
	background: var(--cool);
}

.hdr__feat__go {
	margin-top: 14px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-semibold) 14px/1 var(--sans);
	color: var(--text-accent);
	transition: gap var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__feat:hover .hdr__feat__go {
		gap: 10px;
	}
}

.hdr__role {
	display: flex;
	align-items: flex-start;
	gap: 13px;
	padding: 9px 12px;
	border-radius: var(--radius-sm);
	text-decoration: none;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__role:hover .hdr__role__nm, .hdr__role:hover .hdr__mega__ico {
		color: var(--text-accent);
	}
}

.hdr__role .hdr__mega__ico {
	margin-top: 2px;
}

.hdr__role__nm {
	font: var(--fw-medium) 15px/1.35 var(--sans);
	color: var(--text-strong);
	transition: color var(--dur-fast) var(--ease-out);
}

.hdr__role__ds {
	font: var(--fw-regular) 13.5px/1.4 var(--sans);
	color: var(--text-default);
	margin-top: 2px;
}

.hdr__story {
	display: flex;
	flex-direction: column;
	gap: 12px;
	text-decoration: none;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__story:hover .hdr__story__src {
		color: var(--text-accent);
	}
}

.hdr__story__media {
	aspect-ratio: 16/10;
	border-radius: var(--radius-sm);
	border: 1px solid var(--line);
	background: linear-gradient(135deg, var(--cool), var(--surface));
}

.hdr__story__stat {
	font: var(--fw-bold) 24px/1 var(--mono);
	color: var(--text-accent);
}

.hdr__story__q {
	font: var(--fw-medium) 14px/1.4 var(--sans);
	color: var(--text-strong);
}

.hdr__story__src {
	font: var(--fw-regular) 13px/1 var(--sans);
	color: var(--text-default);
}

.hdr__megacol {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.hdr__megacol .hdr__mega__label {
	margin-bottom: 8px;
}

/* ===== MOBILE DRAWER (header-owned) ===== */
.hdr__scrim {
	position: fixed;
	inset: 0;
	z-index: 60;
	background: rgba(17, 24, 33, .52);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--dur-base) var(--ease-out), visibility var(--dur-base) var(--ease-out);
}

.hdr__scrim.is-open {
	opacity: 1;
	visibility: visible;
}

.hdr__drawer {
	position: fixed;
	top: 0;
	inset-inline-end: 0;
	z-index: 61;
	height: 100%;
	height: 100dvh;
	width: min(420px, 92vw);
	display: flex;
	flex-direction: column;
	background: #fff;
	box-shadow: var(--shadow-modal);
	transform: translateX(101%);
	visibility: hidden;
	transition: transform var(--dur-base) var(--ease-out), visibility 0s linear var(--dur-base);
}

.hdr__drawer.is-open {
	transform: none;
	visibility: visible;
	transition: transform var(--dur-base) var(--ease-out), visibility 0s;
}

.hdr__drawer__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 14px 16px 14px 20px;
	border-bottom: 1px solid var(--line);
}

.hdr__drawer__brand {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	color: var(--text-strong);
}

.hdr__drawer__brand svg {
	height: 26px;
	width: auto;
}

.hdr__drawer__close {
	width: 44px;
	height: 44px;
	flex: none;
	display: grid;
	place-items: center;
	border: 0;
	background: transparent;
	border-radius: var(--radius-sm);
	color: var(--text-strong);
	cursor: pointer;
}

.hdr__drawer__close svg {
	width: 22px;
	height: 22px;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__drawer__close:hover {
		background: var(--surface);
	}
}

.hdr__drawer__body {
	flex: 1;
	min-height: 0;
	overflow-y: auto;
	overflow-x: hidden;
	-webkit-overflow-scrolling: touch;
	padding: 6px 12px 14px;
	overscroll-behavior: contain;
}

.hdr__acc {
	border-bottom: 1px solid var(--line);
}

.hdr__acc__btn {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	min-height: 54px;
	padding: 0 8px;
	background: none;
	border: 0;
	font: var(--fw-semibold) 17px/1.2 var(--sans);
	color: var(--text-strong);
	text-align: start;
	cursor: pointer;
}

.hdr__acc__btn .hdr__caret {
	width: 14px;
	height: 14px;
}

.hdr__acc__btn[aria-expanded=true] .hdr__caret {
	transform: rotate(180deg);
}

.hdr__acc__panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--dur-base) var(--ease-out);
}

.hdr__acc__btn[aria-expanded=true] + .hdr__acc__panel {
	grid-template-rows: 1fr;
}

.hdr__acc__inner {
	overflow: hidden;
	min-height: 0;
	display: flex;
	flex-direction: column;
}

.hdr__acc__inner > :last-child {
	margin-bottom: 10px;
}

.hdr__acc .hdr__mega__item--rich {
	padding: 10px 8px;
	border-radius: var(--radius-sm);
}

.hdr__acc .hdr__role {
	margin: 3px 0;
}

.hdr__drawer__link {
	display: flex;
	align-items: center;
	min-height: 54px;
	padding: 0 8px;
	border-bottom: 1px solid var(--line);
	font: var(--fw-semibold) 17px/1.2 var(--sans);
	color: var(--text-strong);
	text-decoration: none;
}

.hdr__drawer__link[aria-current=page] {
	color: var(--text-accent);
}

@media (hover:hover) and (pointer:fine) {
	.hdr__drawer__link:hover, .hdr__acc__btn:hover {
		color: var(--text-accent);
	}
}

.hdr__drawer__foot {
	flex: none;
	border-top: 1px solid var(--line);
	padding: 14px 16px calc(14px + env(safe-area-inset-bottom));
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.hdr__drawer__foot .hdr__cta {
	width: 100%;
	justify-content: center;
	--btn-h: 48px;
}

.hdr__drawer__signin {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	font: var(--fw-semibold) 16px/1 var(--sans);
	color: var(--text-accent);
	text-decoration: none;
}

@media (hover:hover) and (pointer:fine) {
	.hdr__drawer__signin:hover {
		text-decoration: underline;
		text-underline-offset: 3px;
	}
}

html.hdr-drawer-lock {
	overflow: hidden;
}

html.hdr-drawer-lock body {
	position: fixed;
	left: 0;
	right: 0;
	width: 100%;
	overflow: hidden;
}

@media (prefers-reduced-motion:reduce) {
	.hdr__scrim, .hdr__drawer, .hdr__acc__panel, .hdr__feat__go {
		transition: none;
	}
}

@media (forced-colors:active) {
	.hdr__drawer {
		border-inline-start: 1px solid CanvasText;
	}
	
	.hdr__feat__media, .hdr__story__media {
		border: 1px solid CanvasText;
	}
}

/* --- nav extras --- */
.hdr__mega--product {
	min-width: 812px;
	max-width: min(900px, calc(100vw - 32px));
	grid-template-columns: 212px 1fr;
	gap: 30px;
}

.hdr__megacol--caps {
	min-width: 0;
}

.hdr__caps {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 2px 20px;
	margin-top: 2px;
}

.hdr__cap {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 8px 10px;
	border-radius: var(--radius-sm);
	text-decoration: none;
	transition: background-color var(--dur-fast) var(--ease-out);
}

@media (hover:hover) {
	.hdr__cap:hover {
		background: var(--cool);
	}
}

.hdr__cap:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

.hdr__cap__ico {
	width: 26px;
	height: 26px;
	flex: none;
	object-fit: contain;
	display: block;
}

.hdr__cap__tx {
	display: flex;
	flex-direction: column;
	gap: 1px;
	min-width: 0;
}

.hdr__cap__nm {
	font: var(--fw-semibold) 14px/1.25 var(--sans);
	letter-spacing: -.2px;
	color: var(--text-strong);
}

.hdr__cap__ds {
	font: var(--fw-regular) 12px/1.3 var(--sans);
	color: var(--text-default);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.hdr__mega--res {
	min-width: 520px;
	max-width: min(560px, calc(100vw - 32px));
}

.hdr__acc__inner .hdr__caps {
	grid-template-columns: 1fr;
	gap: 0;
	margin-top: 2px;
}

.hdr__mega__ico {
	width: 28px;
	height: 28px;
	border-radius: var(--radius-sm);
	background: #edf3ff;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: none;
	margin-top: 1px;
}

.hdr__mega__ico svg {
	width: 16px;
	height: 16px;
	color: #2863fe;
	stroke: #2863fe;
}

/* skip link: bulletproof clip-hide (off-screen positioning fails inside Elementor) -> reveal on focus */
.hdr__skip {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
	top: auto;
	left: auto;
}

.hdr__skip:focus {
	position: fixed !important;
	top: 8px !important;
	left: 8px !important;
	width: auto !important;
	height: auto !important;
	min-height: 44px;
	margin: 0 !important;
	clip: auto !important;
	clip-path: none !important;
	overflow: visible !important;
	display: inline-flex;
	align-items: center;
	padding: 0 16px;
	background: #fff;
	border: 1px solid var(--line-strong);
	border-radius: var(--radius-sm);
	font: var(--fw-semibold) 15px/1 var(--sans);
	color: var(--text-strong);
	z-index: 100000;
}

.hdr__cta:hover, .hdr__cta:focus-visible, .hdr__cta:hover * {
	color: #fff !important;
}

.hdr__acc__inner .hdr__mega__label {
	display: block;
	margin: 14px 0 4px;
	padding: 0 8px;
}

.hdr__acc__inner > .hdr__mega__label:first-child {
	margin-top: 2px;
}

/* --- deploy --- */
.hdr__inner {
	max-width: var(--container-max);
}

/* ============================= css/components/header-writer.css ============================= */

/* header-writer.css — EXPERIMENT: writer.com-style nav (full-width, larger logo
   left, everything right-aligned, larger type + buttons).

   This is an ADDITIVE OVERRIDE LAYER, loaded AFTER header.css. The canonical
   header.css is NOT modified. TO REVERT: remove "css/components/header-writer.css"
   from the CSS bundle list in eleventy.config.js and rebuild — the nav returns
   exactly to its prior state. All values below are intentionally easy to tune. */

/* (1) bar height — compact */
.hdr {
	--header-h: 70px;
}

@media (max-width: 767px) {
	.hdr {
		--header-h: 60px;
	}
}

/* (2) full-width rail — logo hugs the left edge, actions hug the right edge */
.hdr__inner {
	max-width: none;
	padding-inline: clamp(24px, 4vw, 64px);
}

/* (3) larger logo */
.hdr__logo {
	height: 30px;
}

/* (4) push the whole nav cluster to the RIGHT; keep the actions tight beside it
       (override the actions' auto-margin so nav + actions sit together, not split) */
.hdr__nav {
	margin-inline-start: auto;
}

.hdr__nav > ul {
	gap: clamp(14px, 1.5vw, 24px);
}

/* tightened nav-item gap */
.hdr__actions {
	margin-inline-start: clamp(14px, 1.6vw, 22px);
	gap: 12px;
}

/* (5) nav typography */
.hdr__link, .hdr__disc__btn {
	font-size: 14.5px;
	letter-spacing: -.2px;
}

/* (6) Login as a button. Mirrors the design system's SECONDARY variant — blue
       outline (--blue) + blue text (--blue-press) — on the style-guide --surface
       gray, pill shape to pair with the primary CTA. Markup is unchanged (still
       .hdr__signin), so with the writer layer removed the original nav keeps Login
       as its plain text link. */
.hdr__signin {
	background: var(--surface);
	color: var(--blue-press);
	border: 1.5px solid var(--blue);
	font-size: 14.5px;
	font-weight: 600;
	min-height: 46px;
	padding: 0 21px;
	border-radius: var(--radius-pill);
}

@media (hover: hover) and (pointer: fine) {
	.hdr__signin:hover {
		background: var(--cool);
		color: var(--blue-press);
		text-decoration: none;
	}
}

.hdr__cta {
	font-size: 15px;
	--btn-h: 46px;
	--btn-px: 24px;
}

/* collapse to the hamburger a touch earlier — the larger type + full-width rail
   need more room than the stock 1024 breakpoint */
@media (max-width: 1100px) {
	.hdr__nav, .hdr__signin {
		display: none;
	}
	
	.hdr__burger {
		display: inline-flex;
	}
	
	.hdr__actions {
		margin-inline-start: auto;
	}
}

/* ============================= css/components/footer.css ============================= */

/* footer.css — global site footer (styleguide C31/C32), token-pinned port. Prefix .ftr.
   GLOBAL chrome (like the header): mounted in base.njk; in prod it goes in Elementor's Footer template.
   Light by default (.ftr--surface); .ftr--dark is an option. Columns are real <nav><details> — forced
   open on desktop (links can never hide), native accordions <768. A11y: col titles --ink (not --muted);
   links --body/--blue with underline-on-hover (never colour-alone); social/legal targets ≥44px. */
.ftr {
	background: var(--surface);
	border-top: 1px solid var(--line);
	color: var(--body);
}

.ftr__inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: clamp(56px, 8vw, 96px) clamp(20px, 5vw, 40px) 0;
}

/* top grid */
.ftr__top {
	display: grid;
	grid-template-columns: repeat(12, 1fr);
	column-gap: 24px;
	row-gap: clamp(32px, 4vw, 48px);
}

.ftr__brand {
	grid-column: span 4;
}

.ftr__home {
	display: inline-block;
	border-radius: 8px;
}

/* shared focus ring lands tidily around the mark */
.ftr__logo {
	display: block;
	height: 30px;
	width: auto;
	color: var(--ink);
}

/* ink to match the header (currentColor; flips to #fff on dark) */
.ftr__tagline {
	margin-top: 16px;
	font: 400 14px/1.6 var(--sans);
	color: var(--body);
	max-width: 40ch;
}

.ftr__social {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 24px;
	list-style: none;
	padding: 0;
}

.ftr__social-link {
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	border-radius: 12px;
	color: var(--body);
	transition: color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);
}

.ftr__social-link svg {
	width: 22px;
	height: 22px;
}

/* nav columns — plain (always visible). Reflow to 2-up then stack on mobile; NO <details> accordion
   (native <details> collapse is unreliable to force-open on desktop across Chrome versions — a broken
   desktop footer is worse than a slightly taller mobile one, so links are always shown). */
.ftr__col {
	grid-column: span 2;
	min-width: 0;
}

.ftr__col-title {
	display: block;
	font: 600 16px/1 var(--sans);
	letter-spacing: -.5px;
	color: var(--ink);
	margin: 0;
}

/* --ink 16.6:1 on --surface; never --muted. nav is aria-labelledby this */
.ftr__list {
	list-style: none;
	margin: 14px 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
}

.ftr__link {
	display: inline-block;
	padding: 6px 0;
	font: 400 13.5px/1.5 var(--sans);
	letter-spacing: -.225px;
	color: var(--blue);
}

/* ≥44px row incl. line-height; --blue 4.6:1 on --surface */
.ftr__link.mlink {
	color: var(--body);
}

/* override .mlink default; keep the underline-grow */
.ftr__link:hover, .ftr__link:focus-visible {
	color: var(--blue-press);
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* colour shift + underline = never colour-alone */

/* divider + compliance badges */
.ftr__rule {
	border: 0;
	border-top: 1px solid var(--line);
	margin: clamp(40px, 5vw, 56px) 0 0;
}

.ftr__badges {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	list-style: none;
	margin: clamp(24px, 3vw, 32px) 0 0;
	padding: 0;
}

.ftr__badge {
	display: block;
	width: 96px;
	height: 54px;
	border-radius: 10px;
	background: #fff;
	border: 1px solid var(--line);
}

/* placeholder — swap for a real <img class="ftr__badge" src alt> */

/* legal row */
.ftr__legal {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px 24px;
	padding: clamp(24px, 3vw, 32px) 0;
}

.ftr__copy {
	font: 500 14px/1.5 var(--sans);
	color: var(--body);
	flex: 1 1 auto;
	margin: 0;
}

.ftr__legal-nav {
	flex: 0 1 auto;
}

.ftr__legal-list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px 20px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.ftr__legal-link, .ftr__cookie {
	display: inline-block;
	font: 500 14px/1.5 var(--sans);
	color: var(--body);
	padding: 11px 0;
	background: none;
	border: 0;
	cursor: pointer;
}

/* 11px pad → ≥44px tap height; cookie is a real <button> */
.ftr__legal-link.mlink, .ftr__cookie.mlink {
	color: var(--body);
}

.ftr__legal-link:hover, .ftr__legal-link:focus-visible, .ftr__cookie:hover, .ftr__cookie:focus-visible {
	color: var(--ink);
}

/* DARK variant (option) — data-surface="dark" on the root activates the shared white focus ring */
.ftr--dark {
	background: var(--dark);
	border-top: 0;
	color: rgba(255, 255, 255, .78);
}

.ftr--dark .ftr__logo {
	color: #fff;
}

.ftr--dark .ftr__tagline, .ftr--dark .ftr__link {
	color: rgba(255, 255, 255, .78);
}

/* ~11:1 on #111821 */
.ftr--dark .ftr__col-title {
	color: #fff;
}

.ftr--dark .ftr__social-link {
	color: rgba(255, 255, 255, .72);
}

.ftr--dark .ftr__copy, .ftr--dark .ftr__legal-link, .ftr--dark .ftr__cookie {
	color: rgba(255, 255, 255, .66);
}

/* ~8:1 on #111821 */
.ftr--dark .ftr__rule {
	border-top-color: rgba(255, 255, 255, .12);
}

.ftr--dark .ftr__badge {
	background: rgba(255, 255, 255, .08);
	border-color: rgba(255, 255, 255, .18);
}

/* hover — pointer/fine only */
@media (hover:hover) and (pointer:fine) {
	.ftr__social-link:hover {
		color: var(--blue-press);
		background: var(--cool);
	}
	
	.ftr--dark .ftr__social-link:hover, .ftr--dark .ftr__link:hover, .ftr--dark .ftr__legal-link:hover, .ftr--dark .ftr__cookie:hover {
		color: #fff;
	}
	
	.ftr--dark .ftr__social-link:hover {
		background: rgba(255, 255, 255, .08);
	}
}

/* keyboard state shift — ungated so touch/keyboard users get it too */
.ftr__social-link:focus-visible {
	color: var(--blue-press);
	background: var(--cool);
}

.ftr--dark .ftr__social-link:focus-visible, .ftr--dark .ftr__link:focus-visible, .ftr--dark .ftr__legal-link:focus-visible, .ftr--dark .ftr__cookie:focus-visible {
	color: #fff;
}

.ftr--dark .ftr__social-link:focus-visible {
	background: rgba(255, 255, 255, .08);
}

/* responsive — desktop: brand span 4 + four cols span 2. Tablet: brand full row, cols 4-up (span 3).
   Mobile: cols 2-up (span 6) so the footer stays compact without an accordion. */
@media (max-width:1023px) {
	.ftr__brand {
		grid-column: 1/-1;
	}
	
	.ftr__col {
		grid-column: span 3;
	}
}

@media (max-width:600px) {
	.ftr__col {
		grid-column: span 6;
	}
	
	.ftr__legal {
		flex-direction: column;
		align-items: flex-start;
	}
}

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

/* ============================= css/components/askedna.css ============================= */

/* ===== Ask Edna — one bounded window; the conversation plays inside it like a screen
   recording. The chart opens as its OWN view OVER the chat. Trying to reply pops a CTA.
   Final-state HTML (no-JS / reduced-motion = scrollable chat). askedna.js arms the play
   (motion only) and wires the chart + CTA interactions (always). ===== */
.aske-wrap {
	position: relative;
	isolation: isolate;
	max-width: 480px;
	margin-inline: auto;
}

.aske-wrap::before {
	content: "";
	position: absolute;
	z-index: -1;
	inset: -12% -9%;
	background: var(--mesh-edna);
	filter: blur(46px);
	opacity: .55;
	border-radius: 48px;
}

@media (prefers-reduced-motion:no-preference) {
	.aske-wrap::before {
		animation: meshdrift 22s ease-in-out infinite alternate;
		background-size: 160% 160%;
	}
}

.aske {
	position: relative;
	display: flex;
	flex-direction: column;
	height: clamp(440px, 62vh, 540px);
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 22px;
	box-shadow: 0 50px 100px -50px rgba(16, 24, 32, .5), 0 18px 44px -30px rgba(16, 24, 32, .26);
	overflow: hidden;
	font-family: var(--sans);
}

/* header (persistent) */
.aske__bar {
	flex: none;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 13px 15px;
	border-bottom: 1px solid var(--line);
}

.aske__nav {
	width: 30px;
	height: 30px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	border: 1px solid var(--line);
	background: #fff;
	color: var(--blue);
	flex: none;
}

.aske__nav svg {
	width: 15px;
	height: 15px;
}

.aske__title {
	font: var(--fw-semibold) 15px/1.2 var(--sans);
	color: var(--ink);
	margin: 0;
}

.aske__tools {
	margin-left: auto;
	display: flex;
	align-items: center;
	gap: 8px;
}

.aske__tool {
	width: 30px;
	height: 30px;
	border-radius: 9px;
	display: grid;
	place-items: center;
	border: 1px solid var(--line);
	background: #fff;
	color: var(--body);
	flex: none;
}

.aske__tool svg {
	width: 16px;
	height: 16px;
}

/* scrolling viewport — the "screen" */
.aske__view {
	flex: 1;
	min-height: 0;
	overflow-y: auto;
	overflow-x: hidden;
	overscroll-behavior: contain;
	scrollbar-width: thin;
	scrollbar-color: #c7cdd8 transparent;
}

.aske__view::-webkit-scrollbar {
	width: 8px;
	height: 0;
}

.aske__view::-webkit-scrollbar-thumb {
	background: #c7cdd8;
	border-radius: 8px;
}

.aske__view::-webkit-scrollbar-track {
	background: transparent;
}

.aske__feed {
	display: flex;
	flex-direction: column;
	gap: 13px;
	padding: 16px;
}

/* rows + bubbles */
.aske__row {
	display: flex;
	gap: 10px;
	align-items: flex-start;
	max-width: 100%;
}

.aske__row--you {
	flex-direction: row-reverse;
}

.aske__av {
	width: 30px;
	height: 30px;
	border-radius: 9px;
	flex: none;
	object-fit: cover;
	box-shadow: 0 3px 9px -4px rgba(86, 80, 115, .6);
}

.aske__bub {
	border-radius: 16px;
	padding: 12px 15px;
	font: var(--fw-regular) 14.5px/1.55 var(--sans);
	max-width: 86%;
}

.aske__bub--you {
	background: var(--blue);
	color: #fff;
	border-bottom-right-radius: 5px;
}

.aske__bub--edna {
	background: #f0f2f7;
	color: var(--ink);
	border-bottom-left-radius: 5px;
}

.aske__bub--edna b {
	font-weight: var(--fw-semibold);
}

.aske__cl {
	color: var(--blue-press);
	font-weight: var(--fw-medium);
	text-decoration: underline;
	cursor: pointer;
}

.aske__line {
	display: block;
}

.aske__line + .aske__line {
	margin-top: 9px;
}

/* typing */
.aske__typing-row {
	display: none;
}

.aske__typing-row.is-on {
	display: flex;
}

.aske__typing {
	display: inline-flex;
	gap: 5px;
	padding: 14px 16px;
	background: #f0f2f7;
	border-radius: 16px;
	border-bottom-left-radius: 5px;
}

.aske__typing span {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #9aa3b2;
	animation: aske-blink 1.2s infinite ease-in-out;
}

.aske__typing span:nth-child(2) {
	animation-delay: .18s;
}

.aske__typing span:nth-child(3) {
	animation-delay: .36s;
}

@keyframes aske-blink {
	0%, 80%, 100% {
		opacity: .35;
		transform: translateY(0);
	}
	
	40% {
		opacity: 1;
		transform: translateY(-3px);
	}
}

/* input (an anchor that acts as the CTA trigger) */
.aske__input {
	flex: none;
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0 14px 14px;
	padding: 9px 9px 9px 16px;
	border: 1px solid var(--line);
	border-radius: 100px;
	background: var(--surface);
	text-decoration: none;
	cursor: pointer;
	transition: border-color .15s ease, background-color .15s ease;
}

.aske__input:hover {
	border-color: var(--line-strong);
	background: #fff;
}

.aske__ph {
	flex: 1;
	font: var(--fw-regular) 14px/1 var(--sans);
	color: var(--muted);
}

.aske__send {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: var(--blue);
	color: #fff;
	flex: none;
}

.aske__send svg {
	width: 17px;
	height: 17px;
}

.aske.is-done .aske__input {
	animation: aske-nudge 2.4s ease-in-out infinite;
}

@keyframes aske-nudge {
	0%, 100% {
		box-shadow: 0 0 0 0 rgba(40, 99, 254, 0);
	}
	
	50% {
		box-shadow: 0 0 0 4px rgba(40, 99, 254, .1);
	}
}

/* shared chart pieces */
.askchart {
	display: flex;
	align-items: flex-end;
	gap: clamp(10px, 2.4vw, 20px);
}

.askchart__grp {
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 9px;
	min-width: 0;
}

.askchart__bars {
	display: flex;
	align-items: flex-end;
	justify-content: center;
	gap: 3px;
	height: 150px;
	width: 100%;
}

.askchart__bar {
	width: clamp(6px, 1.5vw, 11px);
	border-radius: 3px 3px 1px 1px;
	background: var(--c, var(--blue));
	height: var(--h, 0%);
	transition: height .7s cubic-bezier(.2, .7, .3, 1);
}

.askchart__lbl {
	font: var(--fw-medium) 10px/1.2 var(--sans);
	color: var(--body);
	text-align: center;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	max-width: 100%;
}

.aske__legend {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 6px 12px;
	margin: 16px 0 0;
}

.aske__legend span {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-regular) 10.5px/1 var(--mono);
	color: var(--body);
}

.aske__legend i {
	width: 9px;
	height: 9px;
	border-radius: 2px;
	background: var(--c);
}

.aske__cc-cap {
	text-align: center;
	font: var(--fw-regular) 10.5px/1.4 var(--sans);
	color: var(--muted);
	margin: 14px 0 0;
}

/* ===== chart view — opens OVER the chat (its own surface, like clicking the link) ===== */
.aske__chartview {
	position: absolute;
	inset: 0;
	z-index: 4;
	display: flex;
	flex-direction: column;
	background: #fff;
	opacity: 0;
	pointer-events: none;
	transform: translateY(10px) scale(.985);
	transition: opacity .4s ease, transform .4s cubic-bezier(.2, .7, .3, 1);
}

.aske.is-chart-open .aske__chartview {
	opacity: 1;
	pointer-events: auto;
	transform: none;
}

.aske__cv-bar {
	flex: none;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 13px 15px;
	border-bottom: 1px solid var(--line);
	background: linear-gradient(var(--surface), #fff);
}

.aske__cv-title {
	font: var(--fw-semibold) 13.5px/1.25 var(--sans);
	color: var(--ink);
	margin: 0;
}

.aske__cv-bar .aske__tool {
	margin-left: auto;
	cursor: pointer;
}

.aske__cv-body {
	flex: 1;
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding: 20px 18px;
}

.aske__cv-sub {
	font: var(--fw-regular) 11.5px/1.3 var(--mono);
	color: var(--muted);
	margin: 0 0 18px;
}

/* ===== end-of-play CTA ===== */
.aske__cta {
	position: absolute;
	inset: 0;
	z-index: 6;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 22px;
	background: rgba(247, 249, 252, .8);
	opacity: 0;
	pointer-events: none;
	transition: opacity .3s ease;
}

@supports (backdrop-filter:blur(2px)) {
	.aske__cta {
		backdrop-filter: blur(3px);
	}
}

.aske.is-cta-open .aske__cta {
	opacity: 1;
	pointer-events: auto;
}

.aske__cta-card {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 18px;
	box-shadow: 0 40px 80px -40px rgba(16, 24, 32, .5);
	padding: 26px 24px;
	text-align: center;
	max-width: 300px;
	transform: translateY(10px) scale(.97);
	transition: transform .35s cubic-bezier(.2, .7, .3, 1);
}

.aske.is-cta-open .aske__cta-card {
	transform: none;
}

.aske__cta-ic {
	width: 46px;
	height: 46px;
	border-radius: 13px;
	margin: 0 auto 15px;
	display: block;
	box-shadow: 0 8px 20px -8px rgba(86, 80, 115, .55);
}

.aske__cta-t {
	font: var(--fw-semibold) 18px/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 8px;
}

.aske__cta-d {
	font: var(--fw-regular) 14px/1.5 var(--sans);
	color: var(--body);
	margin: 0 0 18px;
}

/* ===== armed (JS, motion) — hide feed beats (no space) until revealed ===== */
.aske--armed [data-beat]:not(.is-in):not(.aske__typing-row) {
	display: none;
}

.aske--armed [data-beat].is-in {
	animation: aske-in .45s cubic-bezier(.2, .7, .3, 1) both;
}

@keyframes aske-in {
	from {
		opacity: 0;
		transform: translateY(10px);
	}
	
	to {
		opacity: 1;
		transform: none;
	}
}

.aske--armed .aske__line {
	opacity: 0;
}

.aske--armed .aske__line.is-in {
	opacity: 1;
	transition: opacity .4s ease;
}

.aske--armed .aske__chartview .askchart__bar {
	height: 0;
}

.aske--armed.is-chart-open .aske__chartview .askchart__bar {
	height: var(--h, 0%);
	transition-delay: calc(var(--bd, 0) * 45ms);
}

/* ============================= css/sections.css ============================= */

/* sections.css — page section components. Unscoped to match the production build;
   each section self-namespaces via its own .avid-<name> root class. Uses the shared
   .btn system + tokens. No global reset shipped (the WP theme / Elementor supplies
   box-sizing in production); box-sizing is pinned per-section here as insurance. */
.avid-features, .avid-features *, .avid-features *::before, .avid-features *::after {
	box-sizing: border-box;
}

/* ---- shared section primitives ---- */
.avid-container {
	width: 100%;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
}

.avid-eyebrow {
	font: var(--fw-medium) var(--fs-eyebrow)/var(--lh-heading) var(--mono);
	text-transform: uppercase;
	color: var(--text-accent);
	margin: 0 0 var(--space-16);
	letter-spacing: var(--tracking-wide);
}

.avid-section-title {
	font: var(--fw-semibold) var(--fs-h2)/var(--lh-heading) var(--sans);
	letter-spacing: var(--tracking-snug);
	color: var(--text-strong);
	margin: 0;
}

.avid-card {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-card);
}

/* ---------- Hero ---------- the hero system now lives in hero.css (.avid-hero--split/--center …) */

/* ---------- Features ---------- */
.avid-features {
	padding: var(--section-y) 0;
	background: #fff;
	font-family: var(--sans);
	color: var(--text-strong);
}

.avid-features .avid-section-title {
	max-width: 22ch;
	margin-bottom: var(--space-48);
}

.avid-features__grid {
	display: grid;
	gap: var(--space-24);
	grid-template-columns: repeat(3, 1fr);
	list-style: none;
	margin: 0;
	padding: 0;
}

@media (max-width: 820px) {
	.avid-features__grid {
		grid-template-columns: 1fr;
	}
}

.avid-feature {
	padding: var(--space-24);
}

.avid-feature__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--radius-md);
	background: var(--cool);
	color: var(--text-accent);
	margin-bottom: var(--space-16);
}

.avid-feature__title {
	font: var(--fw-semibold) var(--fs-h4)/var(--lh-snug) var(--sans);
	color: var(--text-strong);
	margin: 0 0 .4em;
}

.avid-feature__body {
	font-size: var(--fs-body);
	line-height: var(--lh-relaxed);
	color: var(--text-default);
	margin: 0;
}

/* ============================= css/layouts.css ============================= */

/* layouts.css — section layout primitives ("the lego set"), token-driven and
   composable. Each primitive is a full section: content sits in the
   --container-max rail (.avid-container); backgrounds may run full-bleed. Built
   entirely on the foundation tokens (section rhythm, spacing, radius, type, color
   roles). Batch 1: shared helpers + Split + Cards + Statement. */

/* ===== shared section helpers ===== */
.avid-sec {
	padding: var(--section-y) 0;
}

.avid-sec--surface {
	background: var(--surface);
}

.avid-sec--cool {
	background: var(--cool);
}

/* canonical heading + text classes (carry default bottom rhythm so blocks flow) */
.avid-h1 {
	font: var(--fw-bold) var(--fs-h1)/var(--lh-heading) var(--sans);
	letter-spacing: var(--tracking-snug);
	color: var(--text-strong);
	margin: 0 0 var(--space-16);
}

.avid-h2 {
	font: var(--fw-semibold) var(--fs-h2)/var(--lh-heading) var(--sans);
	letter-spacing: var(--tracking-snug);
	color: var(--text-strong);
	margin: 0 0 var(--space-16);
}

.avid-h3 {
	font: var(--fw-semibold) var(--fs-h3)/var(--lh-snug) var(--sans);
	color: var(--text-strong);
	margin: 0 0 var(--space-8);
}

.avid-lede {
	font-size: var(--fs-lead);
	line-height: var(--lh-relaxed);
	color: var(--text-default);
	margin: 0 0 var(--space-24);
	max-width: 56ch;
}

.avid-prose {
	font-size: var(--fs-body);
	line-height: var(--lh-relaxed);
	color: var(--text-default);
}

.avid-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-12);
}

/* media / screenshot slot ( [ slot: ... ] in the copy docs ) */
.avid-media {
	position: relative;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: linear-gradient(135deg, var(--cool), var(--surface));
	aspect-ratio: 16/10;
	display: grid;
	place-items: center;
	overflow: hidden;
	box-shadow: var(--shadow-2);
}

.avid-media__tag {
	font: var(--fw-medium) var(--fs-small)/1 var(--mono);
	letter-spacing: var(--tracking-wide);
	text-transform: uppercase;
	color: var(--text-default);
}

/* ===== Split — text + visual ===== */
.avid-split {
	padding: var(--section-y) 0;
}

.avid-split__grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(var(--space-32), 5vw, var(--space-64));
	align-items: center;
}

.avid-split--6040 .avid-split__grid {
	grid-template-columns: 1.4fr 1fr;
}

/* text-led */
.avid-split--media-left .avid-split__media {
	order: -1;
}

/* visual on the left; DOM stays text-first */
.avid-split__text > :last-child {
	margin-bottom: 0;
}

@media (max-width: 820px) {
	.avid-split__grid {
		grid-template-columns: 1fr;
		gap: var(--space-32);
	}
	
	.avid-split--media-left .avid-split__media {
		order: 0;
	}
}

/* ===== Cards — 2 / 3 / 4-up ===== */
.avid-cards {
	padding: var(--section-y) 0;
}

.avid-cards__head {
	max-width: 44ch;
	margin: 0 0 var(--space-48);
}

.avid-cards__head > :last-child {
	margin-bottom: 0;
}

.avid-cards__grid {
	display: grid;
	gap: var(--space-24);
	list-style: none;
	margin: 0;
	padding: 0;
}

.avid-cards__grid--2 {
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.avid-cards__grid--3 {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.avid-cards__grid--4 {
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

@media (max-width: 980px) {
	.avid-cards__grid--4 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 760px) {
	.avid-cards__grid--2, .avid-cards__grid--3, .avid-cards__grid--4 {
		grid-template-columns: 1fr;
	}
}

/* generic card body (reuses .avid-card surface from sections.css) */
.avid-tile {
	padding: var(--space-24);
}

.avid-tile__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--radius-md);
	background: var(--cool);
	color: var(--text-accent);
	margin-bottom: var(--space-16);
}

.avid-tile__title {
	font: var(--fw-semibold) 1.125rem/var(--lh-snug) var(--sans);
	color: var(--text-strong);
	margin: 0 0 var(--space-8);
}

.avid-tile__body {
	font-size: var(--fs-body);
	line-height: var(--lh-relaxed);
	color: var(--text-default);
	margin: 0;
}

/* ===== Statement — centered ===== */
.avid-statement {
	padding: var(--section-y) 0;
}

.avid-statement__inner {
	max-width: 720px;
	margin-inline: auto;
	text-align: center;
}

.avid-statement__inner > :last-child {
	margin-bottom: 0;
}

.avid-statement__inner .avid-lede {
	max-width: none;
}

.avid-statement__inner .avid-actions {
	justify-content: center;
}

/* ===== Bands — full-bleed background moments ===== */
.avid-band {
	padding: var(--section-y) 0;
}

.avid-band > .avid-container {
	position: relative;
	z-index: 1;
}

/* mesh band — soft aurora capability moment (light) */
.avid-band--mesh {
	position: relative;
	overflow: hidden;
	background: var(--surface);
}

.avid-band--mesh::before {
	content: "";
	position: absolute;
	inset: -20% -10%;
	z-index: 0;
	pointer-events: none;
	filter: blur(10px);
	background: var(--mesh-brand);
	/* brand mesh — general default (cool blue→violet) */
	background-size: 165% 165%;
	animation: meshdrift 22s ease-in-out infinite alternate;
}

@media (prefers-reduced-motion: reduce) {
	.avid-band--mesh::before {
		animation: none;
		background-size: cover;
	}
}

/* edna aurora band — richer iridescent moment (pink→violet→teal→blue) with a wandering drift.
   Same mechanics as --mesh, tuned up: --mesh-edna, larger size, the ednadrift path. Reduced-motion safe.
   Eyebrow flips to --ink (like the hero's edna mesh) so the accent clears every drifting stop. */
.avid-band--edna {
	position: relative;
	overflow: hidden;
	background: var(--surface);
}

.avid-band--edna::before {
	content: "";
	position: absolute;
	inset: -20% -10%;
	z-index: 0;
	pointer-events: none;
	filter: blur(16px);
	background: var(--mesh-edna);
	background-size: 185% 185%;
	animation: ednadrift 26s ease-in-out infinite;
}

.avid-band--edna .avid-eyebrow {
	color: var(--ink);
}

@media (prefers-reduced-motion: reduce) {
	.avid-band--edna::before {
		animation: none;
		background-size: cover;
	}
}

/* ===== radiant gradient bands — mid-tone, saturated "pivot" surfaces (NOT navy, NOT pale) =====
   Use on a section with `avid-band on-dark`. Text colors are tuned per band; a gradient highlight
   word/line via .avid-hl gets a light, AA-safe --grad by default (override inline). Reduced-motion
   safe. Built for the How-It-Works "turn" (Dusk is live there); both reusable anywhere. */
.avid-band--dusk {
	position: relative;
	overflow: hidden;
	isolation: isolate;
	background-color: #2a2f8c;
	background-image: radial-gradient(120% 78% at 50% 46%, rgba(16, 20, 63, .9) 0%, rgba(16, 20, 63, .86) 34%, rgba(16, 20, 63, .4) 66%, rgba(16, 20, 63, 0) 100%), linear-gradient(122deg, #164ee9 0%, #1147e2 20%, #4b45c9 44%, #7a5cff 66%, #a95bd6 84%, #de6ccd 100%);
	background-repeat: no-repeat;
}

.avid-band--dusk::before {
	content: "";
	position: absolute;
	inset: -14% -8%;
	z-index: 0;
	pointer-events: none;
	background-image: radial-gradient(46% 52% at 84% 14%, rgba(255, 109, 158, .55) 0%, rgba(255, 109, 158, 0) 62%), radial-gradient(48% 56% at 12% 92%, rgba(130, 172, 255, .42) 0%, rgba(130, 172, 255, 0) 64%), radial-gradient(40% 44% at 70% 88%, rgba(122, 92, 255, .34) 0%, rgba(122, 92, 255, 0) 66%);
	filter: blur(26px);
	opacity: .92;
	animation: turnDusk 22s ease-in-out infinite alternate;
}

@keyframes turnDusk {
	from {
		transform: translate3d(-1.4%, -1%, 0) scale(1.02);
		opacity: .86;
	}
	
	to {
		transform: translate3d(1.6%, 1.2%, 0) scale(1.06);
		opacity: 1;
	}
}

.avid-band--dusk .avid-eyebrow {
	color: #c3cdff;
}

.avid-band--dusk .avid-h2 {
	color: #fff;
	text-shadow: 0 1px 22px rgba(10, 14, 48, .42);
}

.avid-band--dusk .avid-lede {
	color: rgba(255, 255, 255, .86);
}

.avid-band--dusk .avid-lede b {
	color: #fff;
}

.avid-band--dusk .avid-lede i {
	color: #dfe4ff;
}

.avid-band--dusk .avid-hl {
	--grad: linear-gradient(96deg, #82acff 0%, #b297ff 46%, #ffb079 100%);
	filter: drop-shadow(0 0 18px rgba(178, 151, 255, .3));
}

@media (prefers-reduced-motion: reduce) {
	.avid-band--dusk::before {
		animation: none;
	}
}

.avid-band--brand {
	position: relative;
	overflow: hidden;
	isolation: isolate;
	background: radial-gradient(120% 90% at 50% 46%, #0e3299 0%, #0e3299 24%, rgba(14, 50, 153, 0) 62%), radial-gradient(90% 120% at 88% 8%, #9d75fd 0%, rgba(157, 117, 253, 0) 46%), radial-gradient(110% 120% at 12% 4%, #82acff 0%, rgba(130, 172, 255, 0) 40%), radial-gradient(130% 120% at 86% 100%, #1147e2 0%, rgba(17, 71, 226, 0) 55%), linear-gradient(108deg, #2863fe 0%, #3b57e8 40%, #6b53e6 72%, #7a5cff 100%);
	background-color: #1a3ec8;
}

.avid-band--brand::before {
	content: "";
	position: absolute;
	inset: -12%;
	z-index: 0;
	pointer-events: none;
	background: radial-gradient(42% 46% at 20% 16%, rgba(130, 172, 255, .55), rgba(130, 172, 255, 0) 70%), radial-gradient(46% 48% at 84% 20%, rgba(178, 151, 255, .5), rgba(178, 151, 255, 0) 70%), radial-gradient(50% 52% at 78% 96%, rgba(17, 71, 226, .6), rgba(17, 71, 226, 0) 70%);
	filter: blur(46px);
	opacity: .9;
	animation: turnDrift 26s ease-in-out infinite alternate;
}

.avid-band--brand::after {
	content: "";
	position: absolute;
	z-index: 0;
	pointer-events: none;
	left: 50%;
	top: 46%;
	width: min(1180px, 132%);
	height: min(560px, 120%);
	transform: translate(-50%, -50%);
	background: radial-gradient(60% 60% at 50% 50%, #0d2f92 0%, #0e3299 38%, rgba(14, 50, 153, 0) 74%);
	opacity: .96;
}

.avid-band--brand > .avid-container {
	position: relative;
	z-index: 2;
}

@keyframes turnDrift {
	from {
		transform: translate3d(-1.5%, -1%, 0) scale(1.02);
	}
	
	to {
		transform: translate3d(1.5%, 1.5%, 0) scale(1.06);
	}
}

.avid-band--brand .avid-eyebrow {
	color: #aec4ff;
}

.avid-band--brand .avid-h2 {
	color: #eef3ff;
	text-shadow: 0 1px 26px rgba(6, 20, 64, .5);
}

.avid-band--brand .avid-lede {
	color: #ccd8f4;
}

.avid-band--brand .avid-lede b {
	color: #fff;
}

.avid-band--brand .avid-hl {
	--grad: linear-gradient(100deg, #8fb3ff 0%, #b9a9ff 46%, #c9b2ff 70%, #ff9db0 100%);
	filter: drop-shadow(0 1px 18px rgba(8, 22, 72, .55));
}

@media (prefers-reduced-motion: reduce) {
	.avid-band--brand::before {
		animation: none;
	}
}

/* dark band — keystone / CTA (carries data-surface="dark" in markup for the white focus ring) */
.avid-band--dark {
	position: relative;
	overflow: hidden;
	background: var(--dark);
	color: var(--text-on-fill);
}

.avid-band--dark::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background: radial-gradient(60% 80% at 50% -10%, rgba(40, 99, 254, .2), transparent 70%);
}

/* on-dark text treatment — shared by dark bands + dark bento cells. Reuses the
   design system's .on-dark convention, which also flips :focus-visible to a white
   ring (rule lives in system.css). Apply `class="… on-dark"` on any dark surface. */
.on-dark .avid-h1, .on-dark .avid-h2, .on-dark .avid-h3 {
	color: var(--text-on-fill);
}

.on-dark .avid-lede, .on-dark .avid-prose, .on-dark .avid-tile__body {
	color: rgba(255, 255, 255, .78);
}

.on-dark .avid-eyebrow {
	color: rgba(255, 255, 255, .72);
}

/* logo strip — trust bar */
.avid-band--logos {
	padding: var(--space-48) 0;
	border-block: 1px solid var(--line);
}

.avid-logos {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: clamp(var(--space-24), 5vw, var(--space-64));
}

.avid-logos__cap {
	flex-basis: 100%;
	text-align: center;
	margin: 0 0 var(--space-24);
}

.avid-logos__item {
	height: 26px;
	width: clamp(72px, 9vw, 116px);
	border-radius: var(--radius-sm);
	background: var(--surface);
	border: 1px solid var(--line);
}

/* ===== Bento — one rich grid moment per page ===== */
.avid-bento {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	grid-auto-rows: minmax(168px, 1fr);
	gap: var(--space-16);
}

.avid-bento--4col {
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

.avid-bento__cell {
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-card);
	padding: var(--space-24);
}

.avid-bento__cell--feature {
	grid-column: span 2;
	grid-row: span 2;
}

.avid-bento__cell--wide {
	grid-column: span 2;
}

.avid-bento__cell--tall {
	grid-row: span 2;
}

.avid-bento__cell--dark {
	position: relative;
	overflow: hidden;
	background: var(--dark);
	color: var(--text-on-fill);
	border-color: rgba(255, 255, 255, .12);
}

.avid-bento__cell--dark::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background: radial-gradient(70% 70% at 80% 10%, rgba(122, 92, 255, .3), transparent 65%), radial-gradient(60% 60% at 15% 90%, rgba(255, 93, 158, .2), transparent 65%);
}

.avid-bento__cell--dark > * {
	position: relative;
	z-index: 1;
}

.avid-bento__cell .avid-tile__body {
	margin-top: auto;
}

/* push body to the cell floor */
@media (max-width: 900px) {
	.avid-bento, .avid-bento--4col {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
	
	.avid-bento__cell--feature {
		grid-row: span 1;
	}
}

@media (max-width: 560px) {
	.avid-bento, .avid-bento--4col {
		grid-template-columns: 1fr;
	}
	
	.avid-bento__cell--feature, .avid-bento__cell--wide {
		grid-column: span 1;
	}
}

/* ===== Comparison — tools vs Avid ===== */
.avid-compare {
	padding: var(--section-y) 0;
}

.avid-compare__table {
	width: 100%;
	border-collapse: separate;
	border-spacing: 0;
}

.avid-compare__table th, .avid-compare__table td {
	padding: var(--space-16);
	text-align: left;
	vertical-align: middle;
	border-bottom: 1px solid var(--line);
}

.avid-compare__table thead th {
	font: var(--fw-semibold) var(--fs-body)/var(--lh-snug) var(--sans);
	color: var(--text-strong);
}

.avid-compare__rowlabel {
	font: var(--fw-medium) var(--fs-body)/var(--lh-snug) var(--sans);
	color: var(--text-strong);
	width: 44%;
}

.avid-compare__cell {
	font-size: var(--fs-body);
	color: var(--text-default);
}

/* the Avid column — highlighted with a cool tint + blue top accent */
.avid-compare__col-avid {
	background: var(--cool);
}

.avid-compare__table thead .avid-compare__col-avid {
	border-top: 3px solid var(--blue);
	border-top-left-radius: var(--radius-md);
	border-top-right-radius: var(--radius-md);
	color: var(--text-accent);
}

.avid-compare__table tr:last-child .avid-compare__col-avid {
	border-bottom-left-radius: var(--radius-md);
	border-bottom-right-radius: var(--radius-md);
}

.avid-compare__yes {
	color: var(--text-accent);
	font-weight: var(--fw-semibold);
}

@media (max-width: 640px) {
	.avid-compare__wrap {
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
	}
	
	.avid-compare__table {
		min-width: 520px;
	}
}

/* ---- .ph-slot: image/screenshot placeholder for V1 review builds.
   Marks exactly where an asset lands; swap for the real <img> at production. ---- */
.ph-slot {
	position: relative;
	display: grid;
	place-items: center;
	width: 100%;
	aspect-ratio: 16/10;
	background: linear-gradient(160deg, #f2f5fa, #e9eef6);
	border: 1.5px dashed #b9c5d8;
	border-radius: 18px;
	overflow: hidden;
}

.ph-slot::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(60% 60% at 50% 40%, rgba(40, 99, 254, .05), transparent 70%);
}

.ph-slot__label {
	position: relative;
	font: var(--fw-semibold) 12px/1.5 var(--mono);
	letter-spacing: .06em;
	text-transform: uppercase;
	color: #7b8798;
	text-align: center;
	padding: 12px 18px;
	max-width: 44ch;
}

.ph-slot--tall {
	aspect-ratio: 4/3;
}

.ph-slot--wide {
	aspect-ratio: 21/9;
}

.ph-slot--square {
	aspect-ratio: 1/1;
}

.avid-cards__head--center .avid-lede {
	margin-inline: auto;
}

/* ============================= css/patterns.css ============================= */

/* patterns.css — page patterns promoted into the library from the Who It's For
   template family (fundraising-leaders.njk role-page prototype + who-its-for.njk
   overview; promoted 2026-07-03). CSS copied faithfully from the page-local
   <style> blocks — classes renamed only. Companion .ph-slot placeholder stays
   in layouts.css.
   .avid-sec section padding at equal specificity, so source order decides.
   Old → new map:
     .wif-contrast                   → .avid-contrast
     .wif-col / --load / --yours     → .avid-contrast__col / --load / --yours
     .wif-col__head / __title        → .avid-contrast__head / __title
     .wif-tag / --avid / --you       → .avid-contrast__tag / --avid / --you
     .flr-fin / __setup/__verdict/__alt → .avid-finale / __setup/__verdict/__alt
     .wif-seats / __label / .wif-seat → .avid-seats / __label / .avid-seat
     .wifo-grid / .wifo-card         → .avid-doors / .avid-door
     .wifo-card__ico/__name/__line/__go → .avid-door__ico/__name/__line/__go */

/* ===== .avid-contrast — two-column "the load / your work" panel ===== */
.avid-contrast {
	display: grid;
	grid-template-columns: 1.06fr 1fr;
	max-width: 940px;
	margin: var(--space-24) auto 0;
	border: 1px solid var(--line);
	border-radius: 22px;
	overflow: hidden;
	background: #fff;
	box-shadow: 0 34px 74px -44px rgba(16, 24, 32, .3);
}

.avid-contrast__col {
	padding: clamp(20px, 3vw, 30px);
}

.avid-contrast__col--load {
	background: linear-gradient(180deg, #f2f4f8, #eceff5);
	border-right: 1px solid var(--line);
}

.avid-contrast__col--yours {
	background: linear-gradient(180deg, #fff, #fbfdff);
	box-shadow: inset 28px 0 32px -30px rgba(70, 82, 100, .35);
}

.avid-contrast__head {
	display: flex;
	flex-direction: column;
	gap: 9px;
	margin-bottom: 16px;
}

.avid-contrast__title {
	font: var(--fw-semibold) 17px/1.25 var(--sans);
	color: var(--ink);
	margin: 0;
}

.avid-contrast__tag {
	align-self: flex-start;
	font: var(--fw-semibold) 11px/1 var(--mono);
	letter-spacing: .04em;
	border-radius: 100px;
	padding: 5px 11px 6px;
	white-space: nowrap;
}

.avid-contrast__tag--avid {
	color: var(--blue-press);
	background: rgba(40, 99, 254, .1);
}

.avid-contrast__tag--you {
	color: #55781b;
	background: rgba(106, 150, 34, .13);
}

.avid-contrast__col ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

.avid-contrast__col li {
	position: relative;
	padding: 13px 0 13px 24px;
	font: var(--fw-regular) 15px/1.5 var(--sans);
	color: var(--body);
}

.avid-contrast__col li + li {
	border-top: 1px solid rgba(17, 24, 33, .06);
}

.avid-contrast__col--load li::before {
	content: "";
	position: absolute;
	left: 3px;
	top: 20px;
	width: 8px;
	height: 8px;
	border-radius: 2px;
	background: #b6bdc9;
}

.avid-contrast__col--yours li {
	color: var(--ink);
	font-weight: var(--fw-medium);
}

.avid-contrast__col--yours li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 17px;
	width: 13px;
	height: 13px;
	border-radius: 50%;
	background: #6a9622;
}

.avid-contrast__col--yours li::after {
	content: "";
	position: absolute;
	left: 4.5px;
	top: 19.5px;
	width: 3.5px;
	height: 6.5px;
	border: solid #fff;
	border-width: 0 1.8px 1.8px 0;
	transform: rotate(45deg);
}

@media (max-width:720px) {
	.avid-contrast {
		grid-template-columns: 1fr;
	}
	
	.avid-contrast__col--load {
		border-right: 0;
		border-bottom: 1px solid var(--line);
	}
	
	.avid-contrast__col--yours {
		box-shadow: inset 0 28px 32px -30px rgba(70, 82, 100, .3);
	}
}

/* ===== .avid-finale — multi-path close: setup → verdict → primary CTA →
   alt paths. Lives inside a band (.avid-band--mesh on the FL page). ===== */
.avid-finale {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.avid-finale__setup {
	font: var(--fw-regular) var(--fs-lead)/1.65 var(--sans);
	color: var(--body);
	max-width: 56ch;
	margin: 0 auto;
}

.avid-finale__verdict {
	font: var(--fw-bold) clamp(1.625rem, 3.2vw, 2.375rem)/1.25 var(--sans);
	letter-spacing: -.018em;
	color: var(--ink);
	max-width: 22ch;
	margin: clamp(18px, 2.6vw, 26px) auto clamp(24px, 3.2vw, 34px);
}

.avid-finale .avid-actions {
	justify-content: center;
}

/* promoted from the page's inline style */
.avid-finale__alt {
	margin: var(--space-24) 0 0;
	font: var(--fw-regular) 14px/1.6 var(--sans);
	color: var(--body);
}

.avid-finale__alt b {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

.avid-finale__alt a {
	font-weight: var(--fw-semibold);
	color: var(--blue-press);
	text-decoration: none;
}

.avid-finale__alt a:hover {
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* ===== .avid-seats — cross-link pill row ("more seats"), sits under a close ===== */
.avid-seats {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: var(--space-48);
	padding-top: var(--space-24);
	border-top: 1px solid rgba(17, 24, 33, .08);
}

.avid-seats__label {
	font: var(--fw-medium) 11px/1 var(--mono);
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--body);
	margin-right: 4px;
}

.avid-seat {
	font: var(--fw-semibold) 12.5px/1 var(--sans);
	color: var(--ink);
	text-decoration: none;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 100px;
	padding: 8px 14px;
	transition: transform .2s var(--ease-out), border-color .2s var(--ease-out);
}

.avid-seat:hover {
	transform: translateY(-2px);
	border-color: #cdd8ea;
	color: var(--blue-press);
}

.avid-seat:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

/* ===== .avid-door — role door card (whole card is the link) + .avid-doors grid.
   --acc/--tint custom props recolor the icon chip + hover top bar. ===== */
.avid-doors {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(16px, 2.2vw, 24px);
	max-width: 940px;
	margin: 0 auto;
}

.avid-door {
	--acc: var(--blue);
	--tint: rgba(40, 99, 254, .1);
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 12px;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	padding: clamp(24px, 3vw, 32px);
	box-shadow: var(--shadow-1);
	text-decoration: none;
	overflow: hidden;
	transition: transform .25s var(--ease-out), box-shadow .25s var(--ease-out), border-color .25s var(--ease-out);
}

.avid-door::before {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 3px;
	background: var(--acc);
	opacity: 0;
	transition: opacity .25s var(--ease-out);
}

.avid-door:hover {
	transform: translateY(-4px);
	box-shadow: 0 28px 54px -30px rgba(16, 24, 32, .3);
	border-color: #cdd8ea;
}

.avid-door:hover::before {
	opacity: .9;
}

.avid-door:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 3px;
}

.avid-door__ico {
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	border-radius: 13px;
	background: var(--tint);
	color: var(--acc);
}

.avid-door__ico svg {
	width: 23px;
	height: 23px;
}

.avid-door__name {
	font: var(--fw-semibold) var(--fs-h4)/1.25 var(--sans);
	color: var(--ink);
	margin: 0;
}

.avid-door__line {
	font: var(--fw-regular) 15px/1.55 var(--sans);
	color: var(--body);
	margin: 0;
}

.avid-door__go {
	margin-top: auto;
	padding-top: 10px;
	font: var(--fw-semibold) var(--fs-small)/1 var(--sans);
	color: var(--blue-press);
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.avid-door__go::after {
	content: "→";
	transition: transform .25s var(--ease-out);
}

.avid-door:hover .avid-door__go::after {
	transform: translateX(4px);
}

@media (max-width:680px) {
	.avid-doors {
		grid-template-columns: 1fr;
	}
}

/* reduced motion — kill lifts/slides on the interactive patterns
   (house convention per cards.css/iconbox.css; source pages had none) */
@media (prefers-reduced-motion:reduce) {
	.avid-seat, .avid-door, .avid-door::before, .avid-door__go::after {
		transition: none;
	}
	
	.avid-seat:hover, .avid-door:hover {
		transform: none;
	}
	
	.avid-door:hover .avid-door__go::after {
		transform: none;
	}
}

/* ===== .avid-subnav — section sub-nav ("capability switcher"): sticky secondary
   nav for hub→spokes sections (Capabilities overview + 7 pages; same pattern for
   Who It's For + roles). Restored 2026-07-04 from the design styleguide's C31
   (design/styleguide/index.html, Stripe product-nav pattern) — the block the
   bridge consolidation never carried over. Classes renamed .subnav→.avid-subnav;
   dead rules from retired C37 variants dropped (icon-home svg, __sep divider,
   a duplicated hover). Edge-fade gradients switched #fff→--surface to match the
   strip's own background; forced-colors border made real (the color-only rule
   referenced a border the final design had removed).
   Old → new map:
     .subnav / __inner / __home        → .avid-subnav / __inner / __home
     .subnav__scroll / __list / __link → .avid-subnav__scroll / __list / __link
   Sticky contract: pins at top:var(--header-h) — set --header-h on the sub-nav
   or an ancestor to the pinned header's height (bridge .hdr: 80px, 64px ≤767px;
   header.css scopes that token to .hdr, so it does NOT inherit here on its own).
   Edge fades + current-link centering are driven by enhance.js, which targets
   .avid-subnav__scroll and sets data-overflow="start end" as the strip scrolls. */
.avid-subnav {
	position: sticky;
	top: var(--header-h, 0px);
	z-index: 40;
	background: var(--surface);
}

.avid-subnav__inner {
	display: flex;
	align-items: center;
	gap: 18px;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
	min-height: 50px;
}

.avid-subnav__home {
	display: inline-flex;
	align-items: center;
	flex: none;
	min-height: 44px;
	font: var(--fw-semibold) 12px/1 var(--sans);
	color: var(--blue-press);
	text-decoration: none;
	white-space: nowrap;
}

.avid-subnav__scroll {
	position: relative;
	min-width: 0;
	margin-inline-start: auto;
}

.avid-subnav__list {
	display: flex;
	align-items: center;
	gap: 2px;
	list-style: none;
	margin: 0;
	padding: 0;
	overflow-x: auto;
	scrollbar-width: none;
	-ms-overflow-style: none;
	scroll-snap-type: x proximity;
}

.avid-subnav__list::-webkit-scrollbar {
	display: none;
}

.avid-subnav__link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	padding: 0 12px;
	white-space: nowrap;
	font: var(--fw-medium) 12px/1 var(--sans);
	color: var(--body);
	text-decoration: none;
	border-radius: 8px;
	scroll-snap-align: start;
	transition: color var(--dur-fast) var(--ease-out);
}

@media (hover:hover) and (pointer:fine) {
	.avid-subnav__link:hover {
		color: var(--ink);
	}
}

.avid-subnav__link[aria-current=page] {
	color: var(--blue-press);
	font-weight: var(--fw-semibold);
}

.avid-subnav__link:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: -3px;
}

/* ring pulled inward so the strip's overflow:auto can't clip it */

/* edge fades when the strip overflows (data-overflow set by enhance.js); rgba endpoint = --surface #f5f7fb, explicit for old-Safari transparent-gradient gray */
.avid-subnav__scroll::before, .avid-subnav__scroll::after {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	width: 32px;
	pointer-events: none;
	z-index: 1;
	opacity: 0;
	transition: opacity var(--dur-fast) var(--ease-out);
}

.avid-subnav__scroll::before {
	inset-inline-start: 0;
	background: linear-gradient(90deg, var(--surface), rgba(245, 247, 251, 0));
}

.avid-subnav__scroll::after {
	inset-inline-end: 0;
	background: linear-gradient(270deg, var(--surface), rgba(245, 247, 251, 0));
}

.avid-subnav__scroll[data-overflow~="start"]::before {
	opacity: 1;
}

.avid-subnav__scroll[data-overflow~="end"]::after {
	opacity: 1;
}

@media (prefers-reduced-motion:reduce) {
	.avid-subnav__link, .avid-subnav__scroll::before, .avid-subnav__scroll::after {
		transition: none;
	}
}

@media (forced-colors:active) {
	.avid-subnav {
		border-bottom: 1px solid CanvasText;
	}
	
	.avid-subnav__link[aria-current=page] {
		background: Highlight;
		color: HighlightText;
	}
}

/* ============================= css/visuals.css ============================= */

/* visuals.css — SIGNATURE VISUALS moved verbatim from the finished flagship pages
   (home / meet-edna / how-it-works), 2026-07-03. Load LAST in the bundle: these rules
   originally lived in page <style> blocks (after site.css), so last-position preserves
   their cascade wins. Classes unchanged — pages keep working, library can reuse. */

/* ================================================================
   HOME LIBRARY VISUALS — moved verbatim from src/pages/index.njk
   Append at the END of the site.css bundle (after patterns.css).
   ================================================================ */

/* ============ VISUAL: Hero logo marquee (.herolm) — home §hero ============ */

/* hero logo marquee — part of the hero (scrolling, on the hero mesh) */
.herolm {
	position: relative;
	z-index: 1;
	margin-top: clamp(48px, 7vw, 84px);
}

.herolm__cap {
	text-align: center;
	font: var(--fw-medium) 12px/1 var(--mono);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	color: var(--body);
	margin: 0 0 clamp(32px, 3.6vw, 46px);
}

.herolm__viewport {
	overflow: hidden;
	-webkit-mask: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	mask: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}

.herolm__track {
	display: flex;
	align-items: center;
	width: max-content;
	animation: lm-scroll 60s linear infinite;
}

.herolm__track:hover {
	animation-play-state: paused;
}

.herolm__logo {
	height: 34px;
	width: auto;
	flex: none;
	margin-right: clamp(44px, 5vw, 76px);
	filter: grayscale(1);
	opacity: .7;
	transition: opacity .2s ease, filter .2s ease;
}

.herolm__logo:hover {
	filter: grayscale(0);
	opacity: 1;
}

@keyframes lm-scroll {
	from {
		transform: translateX(0);
	}
	
	to {
		transform: translateX(-50%);
	}
}

@media (prefers-reduced-motion:reduce) {
	.herolm__track {
		animation: none;
		flex-wrap: wrap;
		justify-content: center;
		width: auto;
		row-gap: 24px;
	}
	
	.herolm__logo {
		margin: 0 22px;
	}
	
	.herolm__viewport {
		-webkit-mask: none;
		mask: none;
	}
}

/* ============ VISUAL: Situation cards (.sit) — home §Start where you are ============ */

/* Start where you are — situation cards (they name your reality) */
.sit {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 16px;
	margin-top: var(--space-48);
}

@media (max-width:680px) {
	.sit {
		grid-template-columns: 1fr;
	}
}

.sit__card {
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-1);
	padding: clamp(24px, 2.6vw, 32px);
	transition: box-shadow .18s ease, transform .18s ease, border-color .18s ease;
}

.sit__card:hover {
	box-shadow: var(--shadow-2);
	transform: translateY(-2px);
	border-color: var(--line-strong);
}

.sit__ic {
	width: 46px;
	height: 46px;
	border-radius: 13px;
	display: grid;
	place-items: center;
	background: var(--cool);
	color: var(--blue);
	margin: 0 0 18px;
}

.sit__ic svg {
	width: 22px;
	height: 22px;
}

.sit__q {
	font: var(--fw-semibold) clamp(18px, 1.55vw, 22px)/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 16px;
	letter-spacing: -.01em;
}

.sit__lead {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-semibold) 11px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .06em;
	color: var(--blue-press);
	margin: 0 0 9px;
}

.sit__lead::before {
	content: "";
	width: 15px;
	height: 2px;
	border-radius: 2px;
	background: var(--blue);
}

.sit__a {
	font: var(--fw-regular) 15px/1.6 var(--sans);
	color: var(--body);
	margin: 0;
}

/* ============ VISUAL: Narrative bridge pivot (.avid-bridge__inner) — home §Meet Edna intro ============ */

/* Bridge — the narrative pivot from seeing (dashboard) to doing (Edna) */
.avid-bridge__inner {
	text-align: center;
	max-width: 820px;
	margin: 0 auto clamp(40px, 6vw, 72px);
}

.avid-bridge__kicker {
	font: var(--fw-regular) clamp(17px, 2.1vw, 23px)/1.45 var(--sans);
	color: var(--body);
	margin: 0 0 10px;
}

.avid-bridge__line {
	font: var(--fw-bold) clamp(30px, 5.2vw, 54px)/1.08 var(--sans);
	color: var(--ink);
	letter-spacing: -.022em;
	margin: 0;
}

.avid-bridge__hl {
	color: var(--blue-press);
	background-image: var(--grad-text);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
}

/* ============ VISUAL: Product dashboard recreation (.fdash) — site-wide Avid board [JS: dash.js] ============ */

/* Faithful to the LIVE app (computed CSS read 2026-07-15; layout ref Cropped UI/Dashboard/Avid Dashboard.png):
     canvas #F5F7FB · card border #EAECF0 · card radius 20 · shadow 0 4px 12px rgba(0,0,0,.08) · blue #2863FE ·
     slate title #8192B0 · connected olive #7BAA00 · DM Sans. Full app window: title bar + sub bar + colorful
     left icon rail + a bento of pinned WRC widgets. Not 1:1 (WRC data; no trial card). */
.fdash {
	--app-bg: #f5f7fb;
	--app-line: #eaecf0;
	--app-slate: #8192b0;
	--app-shadow: 0 4px 12px rgba(0, 0, 0, .08);
	max-width: 1080px;
	margin: clamp(32px, 5vw, 52px) auto 0;
	position: relative;
	background: var(--app-bg);
	border: 1px solid var(--app-line);
	border-radius: 20px;
	box-shadow: 0 50px 100px -50px rgba(16, 24, 32, .55), 0 18px 44px -30px rgba(16, 24, 32, .3);
	overflow: hidden;
	text-align: left;
}

/* top bar */
.fdash__bar {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 16px 20px 2px;
}

.fdash__title {
	font: var(--fw-bold) 26px/1 var(--sans);
	letter-spacing: -.02em;
	color: var(--app-slate);
	margin: 0;
}

.fdash__barctl {
	margin-left: auto;
	display: flex;
	align-items: center;
	gap: 10px;
}

.fdash__ico {
	width: 30px;
	height: 30px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	color: var(--app-slate);
}

.fdash__ico svg {
	width: 16px;
	height: 16px;
}

.fdash__logout {
	font: var(--fw-regular) 12px/1 var(--sans);
	color: var(--body);
	background: #fff;
	border: 1px solid var(--app-line);
	border-radius: 100px;
	padding: 7px 14px;
	box-shadow: var(--app-shadow);
}

/* sub bar: My Dashboard tab capsule (screen-mydash.png: white capsule wraps blue pill + plain blue +) · tools */
.fdash__sub {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 20px 14px;
	flex-wrap: wrap;
}

.fdash__tabs {
	display: inline-flex;
	align-items: center;
	background: #fff;
	border-radius: 100px;
	padding: 4px;
	box-shadow: var(--app-shadow);
}

.fdash__tabpill {
	font: var(--fw-semibold) 12.5px/1 var(--sans);
	color: #fff;
	background: var(--blue);
	border-radius: 100px;
	padding: 9px 18px;
}

.fdash__plus {
	width: 34px;
	text-align: center;
	font: var(--fw-regular) 16px/1 var(--sans);
	color: var(--blue);
}

.fdash__tools {
	margin-left: auto;
	display: flex;
	align-items: center;
	gap: 15px;
	background: #fff;
	border: 1px solid var(--app-line);
	border-radius: 100px;
	padding: 8px 16px;
	box-shadow: var(--app-shadow);
}

.fdash__tool {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-medium) 12px/1 var(--sans);
	color: var(--blue);
}

.fdash__tool svg {
	width: 13px;
	height: 13px;
	flex: none;
}

/* edna capsule — first in the tab row, sitting over the rail column (screen-topleft.png) */
.fdash__ednabtn {
	display: grid;
	place-items: center;
	width: 48px;
	height: 30px;
	flex: none;
	border-radius: 100px;
	background: linear-gradient(100deg, #f6c8b5, #e6d2ec 55%, #d8d4f2);
	color: #4a5162;
}

.fdash__ednabtn svg {
	width: 15px;
	height: 15px;
	display: block;
}

/* stage: colorful rail (screen-leftnav.png) + bento board */
.fdash__stage {
	display: flex;
	gap: 14px;
	padding: 0 20px 20px;
	align-items: flex-start;
}

.fdash__rail {
	display: flex;
	flex-direction: column;
	gap: 10px;
	flex: none;
	background: #fff;
	border: 1px solid var(--app-line);
	border-radius: 18px;
	padding: 11px 8px;
	box-shadow: var(--app-shadow);
}

.fdash__rail img {
	width: 30px;
	height: 30px;
	object-fit: contain;
	display: block;
	border-radius: 9px;
}

.fdash__rail span {
	position: relative;
	display: block;
}

.fdash__rail span.is-on::after {
	content: "";
	position: absolute;
	left: 50%;
	bottom: -5px;
	transform: translateX(-50%);
	width: 14px;
	height: 3px;
	border-radius: 3px;
	background: var(--app-slate);
}

/* the bento board — rows stretch so card heights match (no raggedness) */
.fdash__board {
	flex: 1;
	min-width: 0;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 14px;
}

.fdash__panel {
	position: relative;
	border: 1px solid var(--app-line);
	border-radius: 20px;
	background: #fff;
	padding: 20px 18px 16px;
	min-width: 0;
	box-shadow: var(--app-shadow);
	display: flex;
	flex-direction: column;
}

.fdash__panel--w2 {
	grid-column: span 2;
}

.fdash__panel--w3 {
	grid-column: 1/-1;
}

.fdash__panel--pad {
	padding-bottom: 34px;
}

/* clearance so the resize grip doesn't sit on content (Insights x-labels, Audiences rows) */
.fdash__ph {
	font: var(--fw-semibold) 13.5px/1.2 var(--sans);
	color: var(--ink);
	margin: 0 0 14px;
	padding-right: 34px;
}

/* app affordances on every card: drag-handle bar (top centre), the REAL pin asset (top right),
     resize grip (bottom right — where the app puts it) */
.fdash__panel::before {
	content: "";
	position: absolute;
	top: 8px;
	left: 50%;
	transform: translateX(-50%);
	width: 34px;
	height: 4px;
	border-radius: 4px;
	background: #e3e6ec;
}

.fcount::before {
	background: rgba(255, 255, 255, .38);
}

.fnote::before {
	background: rgba(47, 59, 23, .16);
}

.fadd::before {
	display: none;
}

.fpin {
	position: absolute;
	top: 9px;
	right: 10px;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	background: #eaf1fe;
	display: grid;
	place-items: center;
	color: var(--blue);
}

.fpin svg {
	width: 13px;
	height: 13px;
	display: block;
}

.fcount .fpin {
	background: rgba(255, 255, 255, .92);
}

.fgrip {
	position: absolute;
	right: 10px;
	bottom: 9px;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	background: #eaf1fe;
	display: grid;
	place-items: center;
	color: var(--blue);
}

.fgrip svg {
	width: 13px;
	height: 13px;
	display: block;
}

.fcount .fgrip {
	background: rgba(255, 255, 255, .92);
}

/* countdown widget (bold colour block) */
.fcount {
	color: #fff;
	background: linear-gradient(160deg, #5b53e6, #4b52e3);
	border-color: transparent;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: 150px;
}

.fcount__n {
	font: var(--fw-bold) 52px/.9 var(--sans);
	letter-spacing: -.03em;
	margin: 0;
}

.fcount__u {
	font: var(--fw-medium) 13px/1.25 var(--sans);
	color: rgba(255, 255, 255, .85);
	margin: 8px 0 0;
}

.fcount__e {
	font: var(--fw-semibold) 18px/1.15 var(--sans);
	margin: 2px 0 0;
}

/* sticky note widget */
.fnote {
	background: #dcefb6;
	border-color: #cbe49c;
}

.fnote__t {
	font: var(--fw-semibold) 14px/1.3 var(--sans);
	color: #2f3b17;
	margin: 0 0 8px;
	padding-right: 28px;
}

.fnote__b {
	font: var(--fw-regular) 12px/1.55 var(--sans);
	color: #43502a;
	margin: 0;
}

/* connections widget — matches the real app widget (screen-connections.png):
     grey row · white logo tile · Status/Connected (olive) · divider · Last Sync/date (blue) · chevron */
.fcx {
	display: flex;
	flex-direction: column;
	gap: 10px;
	flex: 1;
	justify-content: center;
}

.fcx__row {
	display: grid;
	grid-template-columns: auto 1fr 1px 1fr auto;
	align-items: center;
	gap: 14px;
	background: #f1f3f7;
	border-radius: 14px;
	padding: 9px 14px 9px 9px;
	min-width: 0;
}

.fcx__logo {
	width: 38px;
	height: 38px;
	border-radius: 10px;
	background: #fff;
	display: grid;
	place-items: center;
	flex: none;
	box-shadow: 0 1px 3px rgba(16, 24, 32, .08);
	overflow: hidden;
}

.fcx__logo img {
	width: 24px;
	height: 24px;
	object-fit: contain;
	display: block;
}

.fcx__logo--fill img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* marks that ARE a coloured tile (Virtuous) fill the tile, like the real widget */
.fcx__cell {
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
}

.fcx__lbl {
	font: var(--fw-regular) 10.5px/1 var(--sans);
	color: var(--body);
}

.fcx__ok {
	font: var(--fw-semibold) 13px/1 var(--sans);
	color: #7baa00;
}

.fcx__date {
	font: var(--fw-semibold) 13px/1 var(--sans);
	color: var(--blue);
	font-variant-numeric: tabular-nums;
}

.fcx__div {
	width: 1px;
	height: 26px;
	background: #e3e6ec;
	border: 0;
}

.fcx__chev {
	width: 14px;
	height: 14px;
	color: var(--blue);
}

@media (max-width:560px) {
	.fcx__row {
		grid-template-columns: auto 1fr auto;
		gap: 10px;
	}
	
	.fcx__div, .fcx__div + .fcx__cell {
		display: none;
	}
}

/* empty add-tile — the grey slot with ⊕ (screen-add.png) */
.fadd {
	background: #eef0f4;
	border-color: transparent;
	box-shadow: none;
	display: grid;
	place-items: center;
	min-height: 150px;
}

.fadd__plus {
	width: 44px;
	height: 44px;
	color: #93a0c2;
	display: block;
}

.fadd__plus svg {
	width: 100%;
	height: 100%;
	display: block;
}

/* legend (retention pair chart) */
.flgd {
	display: flex;
	gap: 16px;
	margin-top: 12px;
	justify-content: center;
	flex-wrap: wrap;
}

.flgd span {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-regular) 10.5px/1 var(--sans);
	color: var(--body);
}

.flgd i {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	flex: none;
}

.fins {
	display: grid;
	grid-template-columns: .85fr 1.55fr;
	gap: 20px;
	align-items: stretch;
}

.fins__cards {
	display: flex;
	flex-direction: column;
	gap: 9px;
	justify-content: center;
}

.fins__card {
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 12px 14px;
	background: var(--surface);
	text-align: left;
	width: 100%;
	font: inherit;
	color: inherit;
	cursor: pointer;
	transition: border-color .18s ease, background .18s ease, box-shadow .18s ease;
}

.fins__card:hover {
	border-color: #bcd0ff;
	background: #fff;
}

.fins__card:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
}

.fins__card--on {
	border-color: var(--blue);
	background: var(--cool);
	box-shadow: 0 6px 16px -10px rgba(40, 99, 254, .55);
}

.fins__nm {
	font: var(--fw-semibold) 12.5px/1.2 var(--sans);
	color: var(--ink);
	margin: 0 0 7px;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.fins__r {
	display: flex;
	align-items: baseline;
	margin: 0;
}

.fins__val {
	font: var(--fw-semibold) 13.5px/1 var(--mono);
	color: var(--ink);
	font-variant-numeric: tabular-nums;
}

.fins__sep {
	margin: 0 8px;
	color: rgba(16, 24, 32, .25);
	font-weight: 400;
}

.fins__dl {
	font: var(--fw-medium) 12.5px/1 var(--mono);
	color: var(--text-error);
	white-space: nowrap;
}

.fins__dl--up {
	color: #3f7019;
}

.fins__chart {
	display: flex;
	flex-direction: column;
	min-width: 0;
}

.fins__ct {
	font: var(--fw-semibold) 13.5px/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 14px;
}

.fplotw {
	display: flex;
	gap: 10px;
	align-items: flex-start;
}

.fyaxis {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	height: 190px;
	flex: none;
}

.fyaxis span {
	font: var(--fw-regular) 9.5px/1 var(--mono);
	color: var(--muted);
	text-align: right;
	min-width: 30px;
}

.fplot {
	flex: 1;
	min-width: 0;
}

.fchart {
	position: relative;
	display: flex;
	align-items: flex-end;
	gap: clamp(6px, 1.6vw, 20px);
	height: 190px;
}

.fgrid {
	position: absolute;
	inset: 0;
	z-index: 0;
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	pointer-events: none;
}

.fgrid span {
	display: block;
	height: 0;
	border-top: 1px dashed rgba(16, 24, 32, .13);
}

.fgrid span:last-child {
	border-top-style: solid;
	border-top-color: rgba(16, 24, 32, .2);
}

.fcol {
	position: relative;
	z-index: 1;
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: flex-end;
	height: 100%;
	min-width: 0;
}

.fcol__v {
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	color: var(--body);
	margin: 0 0 6px;
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
}

.fbar {
	width: 100%;
	max-width: 42px;
	border-radius: 6px 6px 0 0;
	height: var(--h, 0%);
	background: var(--c, var(--blue));
	background: linear-gradient(180deg, rgba(255, 255, 255, .28), rgba(255, 255, 255, 0) 42%), var(--c, var(--blue));
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, .45);
}

.fxrow {
	display: flex;
	gap: clamp(6px, 1.6vw, 20px);
	margin-top: 9px;
}

.fxrow span {
	flex: 1;
	text-align: center;
	font: var(--fw-regular) 9.5px/1 var(--mono);
	color: var(--muted);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.faud {
	display: flex;
	flex-direction: column;
	gap: 9px;
	height: 100%;
	justify-content: flex-start;
	margin-top: -4px;
	padding-bottom: 6px;
}

.faud__sug {
	border: 1px solid transparent;
	border-radius: 14px;
	padding: 12px 14px;
	background: linear-gradient(#fff, #fff) padding-box, var(--grad-edna) border-box;
}

.faud__k {
	font: var(--fw-medium) 12.5px/1.2 var(--sans);
	margin: 0 0 6px;
}

.faud__k1 {
	color: #c96a22;
}

.faud__k2 {
	color: #7c6cc8;
}

.faud__n {
	font: var(--fw-regular) 14px/1.35 var(--sans);
	color: var(--ink);
	margin: 0 0 7px;
}

.faud__m {
	display: flex;
	gap: 20px;
	font: var(--fw-regular) 11.5px/1.3 var(--sans);
	color: var(--body);
	margin: 0;
	flex-wrap: wrap;
}

.faud__m b {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

.faud__row {
	position: relative;
	background: #f4f5fa;
	border-radius: 12px;
	padding: 10px 32px 10px 13px;
}

.faud__rn {
	display: flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-regular) 13px/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 6px;
}

.faud__new {
	display: inline-flex;
	background: #4b52e3;
	color: #fff;
	border-radius: 100px;
	padding: 3.5px 9px;
	font: var(--fw-semibold) 10px/1 var(--sans);
	flex: none;
}

.faud__chev {
	position: absolute;
	right: 11px;
	top: 50%;
	transform: translateY(-50%);
	width: 14px;
	height: 14px;
	color: #7a86b8;
}

/* retention chart variants — shorter + grouped (benchmark vs your-org) bars */
.fchart--sm {
	height: 140px;
}

.fyaxis--sm {
	height: 140px;
}

.fchart--pair .fcol {
	flex-direction: row;
	gap: 5px;
	align-items: flex-end;
	justify-content: center;
}

.fchart--pair .fbar {
	width: 12px;
	max-width: none;
}

/* responsive — tablet: rail + edna capsule hide, board reflows to 2-up; mobile: single column */
@media (max-width:820px) {
	.fdash__rail, .fdash__ednabtn {
		display: none;
	}
	
	.fdash__board {
		grid-template-columns: 1fr 1fr;
	}
	
	.fdash__panel--w2, .fdash__panel--w3 {
		grid-column: 1/-1;
	}
}

@media (max-width:560px) {
	.fdash__board {
		grid-template-columns: 1fr;
	}
	
	.fdash__panel--w2, .fdash__panel--w3 {
		grid-column: auto;
	}
	
	.fins {
		grid-template-columns: 1fr;
	}
	
	.fins__cards {
		justify-content: flex-start;
	}
	
	.fdash__tools {
		margin-left: 0;
	}
}

/* populate-in (JS, motion only) — the board is BEING PUT TOGETHER: the rail docks first, then each
     widget is PLACED — arriving from its own side of the grid (left column from the left, right column
     from the right), dropping into its slot with a visible landing settle, one at a time so the sequence
     reads as deliberate assembly. Bars grow, numbers count up. Deliberately NO rotation and NO off-screen
     flights — it should feel like the product placing widgets, not the website showing off. */
.fbar {
	transition: height .8s cubic-bezier(.2, .7, .3, 1);
}

.fdash--armed .fdash__rail {
	opacity: 0;
	transform: translateX(-18px);
}

.fdash--armed.is-in .fdash__rail {
	opacity: 1;
	transform: none;
	transition: opacity .45s ease, transform .55s cubic-bezier(.2, .7, .3, 1);
}

.fdash--armed .fdash__panel {
	opacity: 0;
	transform: translate(var(--fx, 0), 38px) scale(.93);
}

/* per-slot arrival direction (grid cols: 1-2 left/wide · 3 right) */
.fdash--armed .fdash__panel:nth-child(1) {
	--fx: -28px;
}

.fdash--armed .fdash__panel:nth-child(2) {
	--fx: 30px;
}

.fdash--armed .fdash__panel:nth-child(3) {
	--fx: -28px;
}

.fdash--armed .fdash__panel:nth-child(5) {
	--fx: 30px;
}

.fdash--armed .fdash__panel:nth-child(6) {
	--fx: -22px;
}

.fdash--armed .fdash__panel:nth-child(7) {
	--fx: 24px;
}

.fdash--armed.is-in .fdash__panel {
	opacity: 1;
	transform: none;
	transition: opacity .45s ease, transform .62s cubic-bezier(.22, .9, .28, 1.14);
}

/* placement order — one tile at a time, then EDNA'S audience card (4) is placed LAST: the agent just did this for you */
.fdash--armed.is-in .fdash__panel:nth-child(2) {
	transition-delay: .13s;
}

.fdash--armed.is-in .fdash__panel:nth-child(3) {
	transition-delay: .26s;
}

.fdash--armed.is-in .fdash__panel:nth-child(5) {
	transition-delay: .38s;
}

.fdash--armed.is-in .fdash__panel:nth-child(6) {
	transition-delay: .5s;
}

.fdash--armed.is-in .fdash__panel:nth-child(7) {
	transition-delay: .6s;
}

.fdash--armed.is-in .fdash__panel:nth-child(4) {
	transition-delay: .78s;
}

/* …then its Edna-suggested card glows once, softly */
.fdash--armed.is-in .faud__sug {
	animation: ednaland 1s ease 1.6s both;
}

@keyframes ednaland {
	0% {
		box-shadow: 0 0 0 0 rgba(130, 140, 255, 0);
	}
	
	45% {
		box-shadow: 0 0 0 5px rgba(255, 138, 163, .16), 0 6px 26px -6px rgba(130, 140, 255, .55);
	}
	
	100% {
		box-shadow: 0 0 0 0 rgba(130, 140, 255, 0);
	}
}

.fdash--armed .fbar {
	height: 0;
}

.fdash--armed.is-in .fbar {
	height: var(--h, 0%);
	transition-delay: calc(.25s + var(--bd, 0) * 45ms);
}

.fdash--armed .fcol__v {
	opacity: 0;
}

.fdash--armed.is-in .fcol__v {
	opacity: 1;
	transition: opacity .4s ease calc(.45s + var(--bd, 0) * 45ms);
}

/* ============ VISUAL: Reinforcement row + mini product cards (.srow/.svis/.conx/.score) — home §See it in one place ============ */

/* See it in one place — reinforcement row (one record / truth on the page) */
.srow {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(20px, 3vw, 40px);
	margin-top: clamp(28px, 4vw, 48px);
}

@media (max-width:820px) {
	.srow {
		grid-template-columns: 1fr;
		gap: 34px;
	}
}

.scol {
	display: flex;
	flex-direction: column;
}

.scol__h {
	font: var(--fw-bold) clamp(20px, 1.9vw, 26px)/1.2 var(--sans);
	color: var(--ink);
	letter-spacing: -.015em;
	margin: 0 0 10px;
}

.scol__p {
	font: var(--fw-regular) clamp(14px, 1.1vw, 15.5px)/1.6 var(--sans);
	color: var(--body);
	margin: 0 0 22px;
	max-width: 44ch;
}

.svis {
	margin-top: auto;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 16px;
	box-shadow: 0 26px 54px -34px rgba(16, 24, 32, .45), 0 6px 18px -14px rgba(16, 24, 32, .22);
	padding: 15px 16px;
}

.svis__top {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 2px 2px 12px;
	border-bottom: 1px solid var(--line);
	margin: 0 0 12px;
}

.svis__t {
	font: var(--fw-semibold) 12.5px/1 var(--sans);
	color: var(--ink);
}

.svis__meta {
	margin-left: auto;
	font: var(--fw-medium) 10px/1 var(--mono);
	color: var(--body);
}

.svis__sync {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-medium) 10px/1 var(--mono);
	color: #3f7019;
}

.svis__sync::before {
	content: "";
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #4e8a1f;
	box-shadow: 0 0 0 3px rgba(78, 138, 31, .16);
}

/* connections */
.conx__grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 8px;
}

.conx__c {
	display: flex;
	align-items: center;
	gap: 9px;
	border: 1px solid var(--line);
	border-radius: 10px;
	padding: 9px 10px;
	min-width: 0;
}

.conx__ic {
	width: 26px;
	height: 26px;
	border-radius: 7px;
	flex: none;
	display: grid;
	place-items: center;
	color: #fff;
	background: var(--a, #9aa3b2);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, .4);
}

.conx__ic svg {
	width: 14px;
	height: 14px;
}

.conx__nm {
	font: var(--fw-semibold) 11.5px/1.15 var(--sans);
	color: var(--ink);
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.conx__ck {
	margin-left: auto;
	flex: none;
	color: #4e8a1f;
	display: grid;
	place-items: center;
}

.conx__ck svg {
	width: 15px;
	height: 15px;
	display: block;
}

/* scorecard */
.score__row {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 11px 4px;
	border-bottom: 1px solid var(--line);
}

.score__row:last-child {
	border-bottom: 0;
}

.score__nm {
	font: var(--fw-semibold) 13px/1.2 var(--sans);
	color: var(--ink);
	flex: 1;
	min-width: 0;
}

.score__stars {
	display: inline-flex;
	gap: 2px;
	color: var(--blue);
	flex: none;
}

.score__stars svg {
	width: 14px;
	height: 14px;
	display: block;
}

.score__stars .off {
	color: #cdd3dc;
	display: inline-flex;
}

.score__d {
	font: var(--fw-semibold) 11px/1 var(--mono);
	white-space: nowrap;
	min-width: 92px;
	text-align: right;
	flex: none;
}

.score__d--up {
	color: #3f7019;
}

.score__d--down {
	color: var(--text-error);
}

.score__go {
	flex: none;
	color: var(--muted);
	display: grid;
	place-items: center;
}

.score__go svg {
	width: 16px;
	height: 16px;
	display: block;
}

.svis--act .score__row {
	cursor: default;
}

.svis--act .score__row:hover {
	background: var(--surface);
	border-radius: 8px;
}

.svis--act .score__row:hover .score__go {
	color: var(--blue);
}

/* ============ VISUAL: Proof stat band (.statband) — home §Built on fundraising ============ */

/* designed stat band (proof numbers = green) */
.statband {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	overflow: hidden;
	background: #fff;
	box-shadow: var(--shadow-1);
}

.statband__cell {
	padding: clamp(24px, 3vw, 40px);
	text-align: center;
}

.statband__cell + .statband__cell {
	border-left: 1px solid var(--line);
}

.statband__fig {
	font: var(--fw-semibold) clamp(32px, 4.6vw, 48px)/1 var(--sans);
	color: #6a9622;
	letter-spacing: -.03em;
	font-variant-numeric: tabular-nums;
	margin: 0;
}

/* retuned for Sans post-mono: 600 matches the heading voice (700 shouted), tighter tracking, tabular figures */
.statband__lbl {
	font: var(--fw-medium) clamp(15px, 1.15vw, 16.5px)/1.4 var(--sans);
	color: var(--ink);
	margin: 12px 0 0;
}

.statband__sell {
	font: var(--fw-regular) 13px/1.45 var(--sans);
	color: var(--body);
	margin: 7px 0 0;
}

.statband__trust {
	text-align: center;
	font: var(--fw-regular) clamp(12px, 1vw, 13px)/1.55 var(--sans);
	color: var(--body);
	margin: clamp(16px, 2vw, 22px) auto 0;
	max-width: 66ch;
}

.statband__trust a {
	color: var(--text-accent);
	font-weight: var(--fw-medium);
	text-decoration: none;
	white-space: nowrap;
}

.statband__trust a:hover {
	text-decoration: underline;
}

@media (max-width:680px) {
	.statband {
		grid-template-columns: 1fr;
	}
	
	.statband__cell + .statband__cell {
		border-left: 0;
		border-top: 1px solid var(--line);
	}
}

/* ============ VISUAL: AVID loop card flow (.aloop) — home §How Avid works ============ */

/* AVID loop — centered card flow (A→V→I→D) */
.aloop {
	list-style: none;
	margin: var(--space-48) 0 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: clamp(30px, 2.6vw, 42px);
	position: relative;
}

.aloop__step {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-1);
	padding: clamp(26px, 2.8vw, 36px) clamp(16px, 1.6vw, 22px);
}

.aloop__badge {
	width: 64px;
	height: 64px;
	border-radius: 20px;
	display: grid;
	place-items: center;
	font: var(--fw-bold) 30px/1 var(--mono);
	color: #fff;
	background: linear-gradient(145deg, #f9423a, #d81e44);
	box-shadow: 0 12px 24px -12px rgba(216, 30, 68, .5);
	margin-bottom: 18px;
}

.aloop__verb {
	font: var(--fw-semibold) clamp(17px, 1.4vw, 20px)/1.2 var(--sans);
	color: var(--ink);
	margin: 0 0 8px;
}

.aloop__desc {
	font: var(--fw-regular) 14px/1.5 var(--sans);
	color: var(--body);
	margin: 0;
	max-width: 24ch;
}

.aloop__step:not(:last-child)::before, .aloop__step:not(:last-child)::after {
	content: "";
	position: absolute;
	top: calc(clamp(26px, 2.8vw, 36px) + 32px);
	left: calc(100% + clamp(30px, 2.6vw, 42px) / 2);
	width: 11px;
	height: 19px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%208%2014'%20fill='none'%20stroke='%23ff7d70'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M1%201l6%206-6%206'/%3E%3C/svg%3E") center/contain no-repeat;
	z-index: 2;
	animation: chevFlow 2.6s ease-in-out infinite;
}

.aloop__step:not(:last-child)::before {
	transform: translate(calc(-50% - 5px), -50%);
}

.aloop__step:not(:last-child)::after {
	transform: translate(calc(-50% + 5px), -50%);
	animation-delay: .3s;
}

@keyframes chevFlow {
	0%, 100% {
		opacity: .6;
	}
	
	50% {
		opacity: 1;
	}
}

@media (prefers-reduced-motion:reduce) {
	.aloop__step:not(:last-child)::before, .aloop__step:not(:last-child)::after {
		animation: none;
		opacity: .9;
	}
}

@media (max-width:760px) {
	.aloop {
		grid-template-columns: 1fr;
		gap: 34px;
	}
	
	.aloop__step:not(:last-child)::before, .aloop__step:not(:last-child)::after {
		top: 100%;
		bottom: auto;
		left: 50%;
		width: 11px;
		height: 19px;
	}
	
	.aloop__step:not(:last-child)::before {
		transform: translate(-50%, 5px) rotate(90deg);
	}
	
	.aloop__step:not(:last-child)::after {
		transform: translate(-50%, 17px) rotate(90deg);
	}
}

/* ============ VISUAL: Integration tool grid (.toolgrid) — home §Works with your stack ============ */

/* integrations — real logo mark + name */
.toolgrid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 10px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.tool {
	display: flex;
	align-items: center;
	gap: 12px;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 12px 14px;
	box-shadow: var(--shadow-1);
}

.tool__ico {
	width: 28px;
	height: 28px;
	flex: none;
	display: grid;
	place-items: center;
}

.tool__ico img {
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
	display: block;
}

.tool__name {
	font: var(--fw-medium) 14px/1.2 var(--sans);
	color: var(--ink);
}

.tool--more {
	grid-column: 1/-1;
	justify-content: center;
	background: var(--surface);
	box-shadow: none;
	border-style: dashed;
	padding: 12px;
}

.tool--more .tool__name {
	color: var(--body);
}

@media (max-width:420px) {
	.toolgrid {
		grid-template-columns: 1fr;
	}
}

/* ============ VISUAL: LockStep portrait + icon-point list (.ls-img/.ls-points) — home §LockStep ============ */
.ls-img {
	width: 100%;
	max-width: 100%;
	height: auto;
	aspect-ratio: 1/1;
	object-fit: cover;
	object-position: center 22%;
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-2);
	display: block;
}

.ls-points {
	list-style: none;
	margin: var(--space-24) 0 0;
	padding: 0;
	display: grid;
	gap: 18px;
}

.ls-point {
	display: flex;
	gap: 13px;
	align-items: flex-start;
}

.ls-point__ic {
	flex: none;
	width: 36px;
	height: 36px;
	border-radius: 10px;
	display: grid;
	place-items: center;
	background: #fff;
	color: var(--blue);
	box-shadow: 0 2px 6px -2px rgba(16, 24, 32, .14);
}

.ls-point__ic svg {
	width: 19px;
	height: 19px;
}

.ls-point__tx {
	display: flex;
	flex-direction: column;
	gap: 3px;
}

.ls-point__t {
	font: var(--fw-semibold) 16px/1.3 var(--sans);
	color: var(--ink);
}

.ls-point__b {
	font: var(--fw-regular) 14.5px/1.5 var(--sans);
	color: var(--body);
}

/* ==========================================================
   MEET EDNA VISUAL — Edna aurora glow wrapper  .ec-wrap (+ .ec-wrap--calm)
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ---- Edna aurora glow wrapper (copied + adapted from index.njk .ec / .ec-wrap) ---- */
.ec-wrap {
	position: relative;
	isolation: isolate;
}

.ec-wrap::before {
	content: "";
	pointer-events: none;
	position: absolute;
	z-index: -1;
	inset: -12% -9%;
	background: var(--mesh-edna);
	filter: blur(46px);
	opacity: .62;
	border-radius: 48px;
}

@media (prefers-reduced-motion:no-preference) {
	.ec-wrap::before {
		animation: meshdrift 20s ease-in-out infinite alternate;
		background-size: 160% 160%;
	}
}

.ec-wrap--calm::before {
	background: radial-gradient(44% 52% at 20% 26%, rgba(40, 99, 254, .24), transparent 70%), radial-gradient(46% 56% at 84% 32%, rgba(112, 152, 255, .22), transparent 72%), radial-gradient(58% 60% at 56% 98%, rgba(64, 168, 206, .16), transparent 76%), radial-gradient(42% 46% at 50% 52%, rgba(244, 248, 255, .55), transparent 82%);
	opacity: .6;
	filter: blur(52px);
}

/* ==========================================================
   MEET EDNA VISUAL — Revenue by Month chart  .rbm (hero Ask Edna chartview; parked heights via --h/--bd; armed animation driven by askedna.js state classes)
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* richer "Revenue by Month" chart (hero Ask Edna chartview) — not bland */
.rbm {
	margin-top: 10px;
}

.rbm__plot {
	position: relative;
	height: 172px;
	border-bottom: 1.5px solid var(--line-strong);
}

.rbm__grid {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.rbm__grid i {
	position: absolute;
	left: 0;
	right: 0;
	height: 1px;
	background: var(--line);
	opacity: .55;
}

.rbm__avg {
	position: absolute;
	left: 0;
	right: 0;
	z-index: 3;
	border-top: 1.5px dashed #8fb6ff;
}

.rbm__avg b {
	position: absolute;
	right: 0;
	top: -8px;
	font: var(--fw-semibold) 9.5px/1 var(--mono);
	color: var(--blue-press);
	background: #fff;
	padding: 0 5px;
}

.rbm__bars {
	position: absolute;
	inset: 0;
	z-index: 2;
	display: flex;
	align-items: flex-end;
	gap: clamp(10px, 2.6vw, 20px);
	padding: 0 6px;
}

.rbm__col {
	flex: 1;
	min-width: 0;
	height: 100%;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	align-items: center;
}

.rbm__val {
	font: var(--fw-semibold) 9.5px/1 var(--mono);
	color: var(--body);
	margin-bottom: 6px;
	white-space: nowrap;
}

.rbm__bar {
	width: 100%;
	max-width: 30px;
	border-radius: 6px 6px 2px 2px;
	background: #bcd0f7;
	height: var(--h, 0%);
	transition: height .85s cubic-bezier(.2, .7, .3, 1);
}

.rbm__col--peak .rbm__val {
	color: var(--blue-press);
	font-size: 11.5px;
}

.rbm__col--peak .rbm__bar {
	background: linear-gradient(180deg, #6d93ff, var(--blue));
	box-shadow: 0 10px 22px -10px rgba(40, 99, 254, .65);
}

.rbm__labels {
	display: flex;
	gap: clamp(10px, 2.6vw, 20px);
	padding: 9px 6px 0;
}

.rbm__labels span {
	flex: 1;
	text-align: center;
	font: var(--fw-medium) 10.5px/1.2 var(--sans);
	color: var(--body);
}

.rbm__labels span.is-peak {
	color: var(--blue-press);
	font-weight: var(--fw-bold);
}

.aske--armed .aske__chartview .rbm__bar {
	height: 0;
}

.aske--armed.is-chart-open .aske__chartview .rbm__bar {
	height: var(--h, 0%);
	transition-delay: calc(var(--bd, 0) * 60ms);
}

/* ==========================================================
   MEET EDNA VISUAL — Suggested Audience card  .sa
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */
.sa {
	position: relative;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-3);
	padding: clamp(18px, 2.4vw, 24px);
	overflow: hidden;
}

.sa::before {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	top: 0;
	height: 3px;
	background: var(--grad-edna);
}

.sa__head {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 2px 0 12px;
}

.sa__tag {
	font: var(--fw-bold) 11px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .06em;
	background-image: var(--grad-text);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.sa__src {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-medium) 11.5px/1 var(--mono);
	color: var(--body);
}

.sa__dot {
	width: 18px;
	height: 18px;
	border-radius: 50%;
}

.sa__name {
	font: var(--fw-semibold) 18px/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 9px;
}

.sa__meta {
	display: flex;
	gap: 18px;
	font: var(--fw-regular) 12.5px/1 var(--mono);
	color: var(--body);
	margin: 0 0 15px;
	padding: 0 0 15px;
	border-bottom: 1px solid var(--line);
}

.sa__meta b {
	color: var(--ink);
	font-weight: var(--fw-semibold);
}

.sa__why-k {
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--blue-press);
	margin: 0 0 7px;
}

.sa__why {
	font: var(--fw-regular) 13.5px/1.55 var(--sans);
	color: var(--body);
	margin: 0 0 15px;
}

.sa__noticed {
	list-style: none;
	margin: 0 0 18px;
	padding: 0;
	display: grid;
	gap: 8px;
}

.sa__noticed li {
	font: var(--fw-regular) 12.5px/1.4 var(--sans);
	color: var(--body);
	padding-left: 18px;
	position: relative;
}

.sa__noticed li::before {
	content: "";
	position: absolute;
	left: 2px;
	top: 6px;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--grad-edna);
}

.sa__nk {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

.sa__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.sa__btn {
	font: var(--fw-semibold) 12.5px/1 var(--sans);
	color: var(--body);
	background: var(--surface);
	border: 1px solid var(--line);
	border-radius: 100px;
	padding: 9px 14px;
}

.sa__btn--go {
	color: #fff;
	background: var(--blue);
	border-color: var(--blue);
}

.sa__btn--ghost {
	color: var(--muted);
	background: transparent;
	border-color: transparent;
}

/* ==========================================================
   MEET EDNA VISUAL — Strategy Brief card  .brief
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ===== Beat 2: strategy brief (you steer it) ===== */
.brief {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-3);
	overflow: hidden;
}

.brief__bar {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 13px 16px;
	border-bottom: 1px solid var(--line);
	background: linear-gradient(var(--surface), #fff);
}

.brief__title {
	font: var(--fw-semibold) 14px/1.2 var(--sans);
	color: var(--ink);
	margin: 0;
}

.brief__tabs {
	margin-left: auto;
	display: flex;
	gap: 6px;
}

.brief__tab {
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	color: var(--muted);
	background: var(--surface);
	border: 1px solid var(--line);
	border-radius: 100px;
	padding: 6px 11px;
}

.brief__tab--on {
	color: #fff;
	background: var(--blue);
	border-color: var(--blue);
}

.brief__body {
	padding: clamp(15px, 2vw, 18px);
	display: grid;
	gap: 12px;
}

.brief__sec {
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 12px 14px;
	background: #fff;
}

.brief__k {
	display: flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .04em;
	color: var(--blue-press);
	margin: 0 0 7px;
}

.brief__edit {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	font: var(--fw-medium) 10px/1 var(--mono);
	color: var(--body);
	text-transform: none;
	letter-spacing: 0;
}

.brief__edit svg {
	width: 11px;
	height: 11px;
}

.brief__tx {
	font: var(--fw-regular) 13px/1.5 var(--sans);
	color: var(--body);
	margin: 0;
}

.brief__refine {
	display: flex;
	align-items: center;
	gap: 10px;
	border: 1px solid var(--line-strong);
	border-radius: 100px;
	padding: 8px 8px 8px 15px;
	background: var(--surface);
}

.brief__ph {
	flex: 1;
	font: var(--fw-regular) 12.5px/1 var(--sans);
	color: var(--muted);
}

.brief__go {
	width: 30px;
	height: 30px;
	border-radius: 50%;
	background: var(--blue);
	color: #fff;
	display: grid;
	place-items: center;
	flex: none;
}

.brief__go svg {
	width: 14px;
	height: 14px;
}

/* brief refine action uses the Edna mark, in blue */
.brief__edit {
	color: var(--blue-press);
}

.brief__edit svg {
	width: 12px;
	height: 12px;
}

/* ==========================================================
   MEET EDNA VISUAL — Touchpoints board  .tpb / .tpc
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ===== Beat 3: touchpoints board (she drafts all of it) ===== */
.tpb {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-3);
	overflow: hidden;
}

.tpb__bar {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 14px 16px;
	border-bottom: 1px solid var(--line);
	background: linear-gradient(var(--surface), #fff);
}

.tpb__title {
	font: var(--fw-semibold) 13.5px/1.2 var(--sans);
	color: var(--ink);
	margin: 0;
}

.tpb__draft {
	font: var(--fw-semibold) 9px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--edna-text);
	background: rgba(86, 80, 115, .1);
	border-radius: 100px;
	padding: 5px 8px;
}

.tpb__n {
	margin-left: auto;
	font: var(--fw-medium) 11px/1 var(--mono);
	color: var(--body);
}

.tpb__grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 10px;
	padding: 14px;
}

.tpc {
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 12px;
	background: #fff;
}

.tpc__top {
	display: flex;
	align-items: flex-start;
	gap: 9px;
}

.tpc__ic {
	width: 26px;
	height: 26px;
	border-radius: 8px;
	flex: none;
	display: grid;
	place-items: center;
	background: var(--cool);
	color: var(--blue-press);
}

.tpc__ic svg {
	width: 14px;
	height: 14px;
}

.tpc__t {
	font: var(--fw-semibold) 12px/1.3 var(--sans);
	color: var(--ink);
	min-width: 0;
}

.tpc__m {
	display: block;
	font: var(--fw-regular) 10px/1.3 var(--mono);
	color: var(--muted);
	margin-top: 3px;
}

.tpc__ready {
	margin-top: 9px;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font: var(--fw-semibold) 9px/1 var(--mono);
	color: #3f7019;
	text-transform: uppercase;
	letter-spacing: .04em;
}

.tpc__ready::before {
	content: "";
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: #3f7019;
}

.tpc--open {
	grid-column: 1/-1;
	background: var(--surface);
}

.tpc__draft {
	margin-top: 11px;
	border-top: 1px dashed var(--line);
	padding-top: 11px;
	display: grid;
	gap: 6px;
}

.tpc__d {
	font: var(--fw-regular) 11.5px/1.45 var(--sans);
	color: var(--body);
}

.tpc__d b {
	color: var(--ink);
	font-weight: var(--fw-semibold);
}

@media (max-width:560px) {
	.tpb__grid {
		grid-template-columns: 1fr;
	}
}

/* touchpoint edit affordance (Beat 3) */
.tpc__edit {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	color: var(--muted);
	font: var(--fw-medium) 10px/1 var(--mono);
	flex: none;
}

.tpc__edit svg {
	width: 12px;
	height: 12px;
}

/* ==========================================================
   MEET EDNA VISUAL — Launch / review card  .launch (+ .ltag)
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ===== Beat 4: launch / review card ===== */
.launch {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-3);
	overflow: hidden;
	max-width: 460px;
	margin-left: auto;
}

.launch__head {
	padding: 18px 20px;
	border-bottom: 1px solid var(--line);
	background: linear-gradient(var(--cool), #fff);
}

.launch__t {
	font: var(--fw-regular) 15.5px/1.3 var(--sans);
	color: var(--ink);
	margin: 0 0 6px;
}

.launch__t b {
	font: var(--fw-bold) 22px/1 var(--mono);
	color: var(--blue-press);
	vertical-align: -2px;
}

.launch__d {
	font: var(--fw-regular) 12px/1.45 var(--sans);
	color: var(--body);
	margin: 0;
}

.launch__list {
	list-style: none;
	margin: 0;
	padding: 14px;
	display: grid;
	gap: 8px;
}

.launch__row {
	display: flex;
	align-items: center;
	gap: 11px;
	border: 1px solid var(--line);
	border-radius: 11px;
	padding: 11px 13px;
}

.launch__ic {
	width: 22px;
	height: 22px;
	flex: none;
	display: grid;
	place-items: center;
	color: var(--body);
}

.launch__ic svg {
	width: 15px;
	height: 15px;
}

.launch__n {
	font: var(--fw-medium) 13px/1.2 var(--sans);
	color: var(--ink);
}

.launch__tags {
	margin-left: auto;
	display: flex;
	gap: 6px;
}

.ltag {
	font: var(--fw-semibold) 9px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .04em;
	border-radius: 100px;
	padding: 5px 9px;
}

.ltag--ok {
	color: #3f7019;
	background: #eef5e2;
}

.ltag--review {
	color: #8a4f06;
	background: #fbeeda;
}

.launch__foot {
	display: flex;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
	padding: 15px 20px;
	border-top: 1px dashed var(--line);
}

.launch__hold {
	font: var(--fw-medium) 11.5px/1.35 var(--mono);
	color: var(--body);
	display: inline-flex;
	align-items: center;
	gap: 7px;
}

.launch__hold svg {
	width: 13px;
	height: 13px;
	color: var(--edna-text);
}

.launch__btn {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font: var(--fw-semibold) 13px/1 var(--sans);
	color: #fff;
	background: #f45d22;
	border-radius: 100px;
	padding: 11px 18px;
	box-shadow: 0 12px 24px -10px rgba(244, 93, 34, .5);
}

.launch__btn svg {
	width: 15px;
	height: 15px;
}

/* ==========================================================
   MEET EDNA VISUAL — Trust contrast  .vsgrid / .vscard
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ---- trust / recognition contrast ---- */
.vsgrid {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	gap: clamp(14px, 2vw, 24px);
	align-items: stretch;
	max-width: 900px;
	margin: var(--space-48) auto 0;
}

@media (max-width:720px) {
	.vsgrid {
		grid-template-columns: 1fr;
		gap: 12px;
	}
	
	.vsgrid__vs {
		justify-self: center;
	}
}

.vscard {
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	padding: clamp(22px, 2.6vw, 30px);
	box-shadow: var(--shadow-1);
	display: flex;
	flex-direction: column;
}

.vscard--muted {
	background: var(--surface);
	box-shadow: none;
}

.vscard--edna {
	position: relative;
	box-shadow: var(--shadow-3);
}

.vscard--edna::before {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
	padding: 2px;
	background: linear-gradient(140deg, #6d93ff, var(--blue));
	-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
	-webkit-mask-composite: xor;
	mask-composite: exclude;
	pointer-events: none;
}

.vscard__cap {
	display: flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-semibold) 11.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .05em;
	margin: 0 0 12px;
}

.vscard--muted .vscard__cap {
	color: var(--body);
}

.vscard--edna .vscard__cap {
	color: var(--blue-press);
}

.vscard__edna-ic {
	width: 18px;
	height: 18px;
	border-radius: 50%;
	flex: none;
	object-fit: cover;
}

.vscard__h {
	font: var(--fw-semibold) clamp(18px, 1.6vw, 22px)/1.25 var(--sans);
	color: var(--ink);
	margin: 0 0 8px;
}

.vscard__p {
	font: var(--fw-regular) 15px/1.55 var(--sans);
	color: var(--body);
	margin: 0;
}

.vscard__stats {
	display: flex;
	gap: 24px;
	margin: auto 0 0;
	padding-top: 18px;
	margin-top: 18px;
	border-top: 1px solid var(--line);
}

.vscard__fig {
	font: var(--fw-bold) clamp(24px, 2.7vw, 32px)/1 var(--mono);
	color: #6a9622;
	letter-spacing: -.02em;
}

.vscard__figl {
	display: block;
	font: var(--fw-regular) 12px/1.35 var(--sans);
	color: var(--body);
	margin-top: 5px;
	max-width: 18ch;
}

.vsgrid__vs {
	align-self: center;
	font: var(--fw-bold) 12px/1 var(--mono);
	color: var(--muted);
	text-transform: uppercase;
	letter-spacing: .05em;
}

/* ==========================================================
   MEET EDNA VISUAL — System-behind-Edna diagram  .force (+ .wf-* constellation)
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ---- workforce diagram (orchestrator + agents) ---- */
.force {
	position: relative;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: #fff;
	box-shadow: var(--shadow-1);
	padding: clamp(18px, 2.4vw, 26px);
}

.force__orch {
	display: flex;
	align-items: center;
	gap: 12px;
	border: 1px solid #e3ddf0;
	background: linear-gradient(90deg, rgba(86, 80, 115, .08), rgba(86, 80, 115, .02));
	border-radius: 14px;
	padding: 13px 15px;
}

.force__av {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	flex: none;
	object-fit: cover;
	box-shadow: 0 0 0 3px #fff, 0 5px 14px -7px rgba(86, 80, 115, .6);
}

.force__lab {
	min-width: 0;
}

.force__lab b {
	font: var(--fw-semibold) 14px/1.2 var(--sans);
	color: var(--ink);
	display: block;
}

.force__lab span {
	font: var(--fw-regular) 11.5px/1.3 var(--mono);
	color: var(--body);
}

.force__pipe {
	height: 18px;
	width: 2px;
	background: var(--line);
	margin: 0 auto;
}

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

/* ===== voice / brain / workforce diagram additions ===== */
.force__tag {
	margin-left: auto;
	flex: none;
	font: var(--fw-bold) 9px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .08em;
	color: var(--blue-press);
}

.force__orch--brain {
	border-color: #d6e0f5;
	background: linear-gradient(90deg, rgba(40, 99, 254, .07), rgba(40, 99, 254, .02));
}

.force__brain {
	width: 36px;
	height: 36px;
	border-radius: 11px;
	flex: none;
	display: grid;
	place-items: center;
	background: var(--cool);
	color: var(--blue-press);
}

.force__brain svg {
	width: 19px;
	height: 19px;
}

.force__wf {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 15px 0 3px;
	font: var(--fw-medium) 11.5px/1 var(--mono);
	color: var(--body);
}

.force__wf .force__tag {
	margin-left: 0;
}

.force__wfviz {
	margin-top: 6px;
}

.force__wfviz svg {
	width: 100%;
	height: auto;
}

/* constellation: always-on twinkle + signal pulses (motion only) */
.force__wfviz {
	margin-top: 2px;
}

.force__wfviz svg {
	width: 100%;
	height: auto;
}

.wf-node {
	transform-box: fill-box;
	transform-origin: center;
	opacity: .78;
}

.wf-hub {
	transform-box: fill-box;
	transform-origin: center;
}

@media (prefers-reduced-motion:no-preference) {
	.wf-node {
		animation: wfPulse 3s ease-in-out infinite;
	}
	
	.wf-hub {
		animation: wfHub 2.4s ease-in-out infinite;
	}
	
	.wf-flow {
		stroke-dasharray: 2 12;
		animation: wfFlow 1.5s linear infinite;
	}
}

@keyframes wfPulse {
	0%, 100% {
		opacity: .55;
		transform: scale(.9);
	}
	
	50% {
		opacity: 1;
		transform: scale(1.14);
	}
}

@keyframes wfHub {
	0%, 100% {
		opacity: .85;
		transform: scale(.95);
	}
	
	50% {
		opacity: 1;
		transform: scale(1.18);
	}
}

@keyframes wfFlow {
	to {
		stroke-dashoffset: -14;
	}
}

@media (prefers-reduced-motion:reduce) {
	.wf-flow {
		display: none;
	}
	
	.wf-node {
		opacity: .92;
	}
}

/* ==========================================================
   MEET EDNA VISUAL — Secure panel + tokenization flow  .secure / .secbadge / .tok (+ .secure-aura)
   moved verbatim from src/pages/meet-edna.njk <style>
   ========================================================== */

/* ---- security strip (tokenization flow) ---- */
.tok {
	display: grid;
	grid-template-columns: 1fr auto 1fr auto 1fr;
	align-items: center;
	gap: clamp(8px, 1.8vw, 18px);
}

.tok__node {
	border: 1px solid var(--line);
	border-radius: 12px;
	background: #fff;
	box-shadow: var(--shadow-1);
	padding: 14px 16px;
	text-align: center;
}

.tok__node--ai {
	background: var(--surface);
}

.tok__ic {
	width: 30px;
	height: 30px;
	border-radius: 8px;
	margin: 0 auto 9px;
	display: grid;
	place-items: center;
	background: var(--cool);
	color: var(--blue-press);
}

.tok__ic svg {
	width: 16px;
	height: 16px;
}

.tok__node--ai .tok__ic {
	background: rgba(86, 80, 115, .1);
	color: var(--edna-text);
}

.tok__t {
	font: var(--fw-semibold) 13px/1.25 var(--sans);
	color: var(--ink);
	margin: 0 0 3px;
}

.tok__s {
	font: var(--fw-regular) 11.5px/1.35 var(--mono);
	color: var(--body);
	margin: 0;
}

.tok__arrow {
	display: grid;
	place-items: center;
	color: var(--muted);
}

.tok__arrow svg {
	width: 20px;
	height: 20px;
}

.tok__arrow b {
	display: block;
	font: var(--fw-semibold) 9.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .04em;
	color: var(--blue-press);
	margin-top: 4px;
}

@media (max-width:680px) {
	.tok {
		grid-template-columns: 1fr;
		gap: 8px;
	}
	
	.tok__arrow {
		transform: rotate(90deg);
	}
	
	.tok__arrow b {
		transform: rotate(-90deg);
	}
}

/* ---- secure panel (Safe with your donors) ---- */
.secure {
	max-width: 960px;
	margin: var(--space-48) auto 0;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-3);
	overflow: hidden;
}

.secure__head {
	display: flex;
	align-items: center;
	gap: 13px;
	padding: clamp(16px, 1.9vw, 20px) clamp(20px, 2.4vw, 28px);
	background: linear-gradient(var(--cool), #fff);
	border-bottom: 1px solid var(--line);
}

.secure__shield {
	flex: none;
	width: 42px;
	height: 42px;
	border-radius: 12px;
	display: grid;
	place-items: center;
	color: #fff;
	background: linear-gradient(145deg, #6d93ff, var(--blue));
	box-shadow: 0 10px 22px -10px rgba(40, 99, 254, .55);
}

.secure__shield svg {
	width: 22px;
	height: 22px;
}

.secure__htx {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.secure__ht {
	font: var(--fw-semibold) 15px/1.2 var(--sans);
	color: var(--ink);
}

.secure__hs {
	font: var(--fw-regular) 12.5px/1.2 var(--mono);
	color: var(--body);
}

.secure__lock {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .05em;
	color: #2f6b12;
	background: rgba(106, 150, 34, .13);
	border-radius: 100px;
	padding: 8px 12px;
	white-space: nowrap;
}

.secure__lock svg {
	width: 13px;
	height: 13px;
}

.secure__body {
	padding: clamp(24px, 3.4vw, 44px);
}

.secure__badges {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	justify-content: center;
	padding: 0 clamp(20px, 2.4vw, 28px) clamp(22px, 2.6vw, 28px);
}

.secbadge {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-medium) 13px/1 var(--sans);
	color: var(--ink);
	background: var(--surface);
	border: 1px solid var(--line);
	border-radius: 100px;
	padding: 9px 14px;
}

.secbadge svg {
	width: 15px;
	height: 15px;
	color: var(--blue);
	flex: none;
}

@media (max-width:560px) {
	.secure__lock {
		display: none;
	}
}

.tok__q {
	font-style: italic;
}

.secure-aura {
	max-width: 960px;
	margin: var(--space-48) auto 0;
}

.secure-aura .secure {
	margin: 0;
}

/* ====================================================================================
   HOW-IT-WORKS — SIGNATURE VISUALS (moved verbatim from src/pages/how-it-works.njk)
   Load AFTER sections.css in the bundle: .ring__card must keep beating the generic
   .avid-card (sections.css) on border-radius for the AVID-ring node cards.
   ==================================================================================== */

/* =============================================================================
   VISUAL: THE DESCENT — trap → cost → turn movement (how-it-works §2–§3)
   .sec-grief air + vignette, .trapcase dissolving frame, .trapsplit, .traphandoff
   thread, .costbeat elegy (.grief drips/motes/verdict/thread), costbeat.js cadence
   contract (.anim .cb-armed .cbeat), .turnrise dawn, reduced-motion still.
   Page-bound movement — JS: costbeat.js + reveal.js (not moved).
   ============================================================================= */

/* ================================================================
   THE DESCENT — how-it-works §2 (trap → cost) + §3 (turn) composed
   as ONE continuous movement. REPLACES: the .trapsplit layout rules,
   .avid-sec.sec-grief, the .costbeat container spacing, and the
   .turnrise block. LOCKED internals kept verbatim and untouched:
   elegy drip/mote/verdict/thread + .cbeat cadence contract, dawn
   thread/glow jobs, and ALL .ring--trap internals (only its
   CONTAINER margin is overridden here — position/size are ours).
   .avid-cards__head--center and the .ring--trap block live elsewhere
   in this file and are unchanged.
   The story: the hero's white starts failing at the very top of §2,
   so the ring already spins in dying light (the red heat behind it is
   the ONLY red any background carries — and it dies downward into
   grey). The LOST pile sheds a grey thread that walks the eye from
   the ring's off-axis column to the page's center axis; the elegy
   lands on that axis; the same grey exits the wound and ignites
   periwinkle at the §3 seam. Off-axis → centered = trap → resolution.
   ================================================================ */

/* ---- the air: drifting lost-work motes + a faint scene vignette across §2.
       Fades in below the trap header, out before the seam — the air thins as
       the dawn nears. Behind all content (section children get z-index:1). ---- */
.avid-sec.sec-grief {
	position: relative;
}

.avid-sec.sec-grief > * {
	position: relative;
	z-index: 1;
}

.avid-sec.sec-grief > .griefair {
	z-index: 0;
}

.griefair {
	position: absolute;
	inset: 0;
	pointer-events: none;
	overflow: hidden;
	background: radial-gradient(130% 86% at 50% 46%, transparent 58%, rgba(28, 36, 48, .05) 100%);
	-webkit-mask-image: linear-gradient(180deg, transparent 0, #000 280px, #000 calc(100% - 220px), transparent 100%);
	mask-image: linear-gradient(180deg, transparent 0, #000 280px, #000 calc(100% - 220px), transparent 100%);
}

.griefair i {
	position: absolute;
	display: block;
	width: 6px;
	height: 6px;
	border-radius: 2px;
	background: #b6bdc9;
	opacity: 0;
	top: var(--y);
	left: var(--x);
	animation: air-fall var(--fall, 30s) linear var(--wait, 0s) infinite;
}

.griefair i:nth-child(1) {
	--x: 8%;
	--y: 4%;
	--fall: 34s;
	--wait: -19s;
	--run: 460px;
	--peak: .2;
}

.griefair i:nth-child(2) {
	--x: 23%;
	--y: 14%;
	--fall: 27s;
	--wait: -6s;
	--run: 420px;
	--peak: .16;
	width: 5px;
	height: 5px;
}

.griefair i:nth-child(3) {
	--x: 38%;
	--y: 7%;
	--fall: 39s;
	--wait: -31s;
	--run: 540px;
	--peak: .24;
	width: 7px;
	height: 7px;
}

.griefair i:nth-child(4) {
	--x: 57%;
	--y: 11%;
	--fall: 30s;
	--wait: -12s;
	--run: 440px;
	--peak: .18;
}

.griefair i:nth-child(5) {
	--x: 72%;
	--y: 5%;
	--fall: 36s;
	--wait: -24s;
	--run: 500px;
	--peak: .22;
	width: 5px;
	height: 5px;
}

.griefair i:nth-child(6) {
	--x: 88%;
	--y: 13%;
	--fall: 28s;
	--wait: -3s;
	--run: 430px;
	--peak: .16;
}

.griefair i:nth-child(7) {
	--x: 15%;
	--y: 34%;
	--fall: 37s;
	--wait: -27s;
	--run: 520px;
	--peak: .22;
	width: 7px;
	height: 7px;
}

.griefair i:nth-child(8) {
	--x: 47%;
	--y: 38%;
	--fall: 29s;
	--wait: -9s;
	--run: 450px;
	--peak: .18;
	width: 5px;
	height: 5px;
}

.griefair i:nth-child(9) {
	--x: 81%;
	--y: 36%;
	--fall: 33s;
	--wait: -16s;
	--run: 480px;
	--peak: .2;
}

.griefair i:nth-child(10) {
	--x: 30%;
	--y: 55%;
	--fall: 31s;
	--wait: -21s;
	--run: 430px;
	--peak: .16;
	width: 5px;
	height: 5px;
}

.griefair i:nth-child(11) {
	--x: 66%;
	--y: 58%;
	--fall: 35s;
	--wait: -8s;
	--run: 460px;
	--peak: .18;
}

@keyframes air-fall {
	0% {
		opacity: 0;
		transform: translateY(0);
	}
	
	10% {
		opacity: var(--peak, .2);
	}
	
	85% {
		opacity: var(--peak, .2);
	}
	
	100% {
		opacity: 0;
		transform: translateY(var(--run, 480px));
	}
}

/* ---- the case: copy + ring held as ONE unit — a frame the loop is stuck
       inside. The frame and its fill DISSOLVE toward the bottom edge: the case
       can't hold, and the loss (the pile's thread) escapes through the open
       base into the elegy below. Air motes drift behind it. ---- */
.trapcase {
	position: relative;
	padding: clamp(28px, 4vw, 48px) clamp(22px, 4vw, 56px) clamp(18px, 2.6vw, 30px);
	border-radius: 22px;
	background: linear-gradient(180deg, rgba(255, 255, 255, .78) 0%, rgba(255, 255, 255, .55) 62%, rgba(255, 255, 255, 0) 100%);
}

.trapcase::before {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
	pointer-events: none;
	border: 1px solid rgba(17, 24, 33, .09);
	box-shadow: 0 30px 70px -48px rgba(16, 24, 32, .28);
	-webkit-mask-image: linear-gradient(180deg, #000 66%, transparent 96%);
	mask-image: linear-gradient(180deg, #000 66%, transparent 96%);
}

/* ---- §2 the split (KEPT — the page's one asymmetric beat) ---- */
.trapsplit {
	display: grid;
	grid-template-columns: 1fr 1.05fr;
	gap: clamp(28px, 4vw, 64px);
	align-items: center;
}

.trapsplit__copy {
	min-width: 0;
}

.trapsplit__copy .avid-lede {
	max-width: 52ch;
	margin-bottom: var(--space-24);
}

.trapsplit__copy .avid-prose {
	max-width: 54ch;
}

.trapsplit__visual {
	min-width: 0;
	display: flex;
	justify-content: center;
	align-items: center;
	position: relative;
}

.trapsplit__visual .ring {
	width: 100%;
	max-width: 440px;
	margin: 0 auto;
	position: relative;
	z-index: 1;
}

/* failing light, anchored to the ring's COLUMN (travels with it at any
   layout): the trap's last heat above, a dead-grey pool below — the red
   dying into the grey that the pile, the thread and the elegy all speak */
.trapsplit__visual::before {
	content: "";
	position: absolute;
	left: 50%;
	top: 50%;
	width: min(600px, 128%);
	aspect-ratio: 1/.92;
	transform: translate(-50%, -48%);
	pointer-events: none;
	border-radius: 50%;
	background: radial-gradient(46% 38% at 50% 36%, rgba(216, 53, 44, .07), transparent 64%), radial-gradient(60% 52% at 50% 60%, rgba(91, 100, 112, .1), transparent 72%);
}

/* the ring's old below-pile margin is absorbed by the handoff zone */
.avid-sec.sec-grief .ring--trap {
	margin-bottom: 0;
}

@media (max-width:860px) {
	.trapsplit {
		grid-template-columns: 1fr;
		gap: var(--space-32);
		text-align: center;
	}
	
	.trapsplit__copy .avid-lede, .trapsplit__copy .avid-prose {
		max-width: 60ch;
		margin-inline: auto;
	}
	
	.trapsplit__visual .ring {
		max-width: 400px;
	}
}

/* ---- §2 section: ONE continuous descent of light. No flat zone — the
       dimming starts at 0% so the split sits inside the tonal journey;
       the grief vignette pools centered at the floor (the light that
       failed around the ring finishes dying on the page's axis). ---- */
.avid-sec.sec-grief {
	padding-bottom: 0;
	/* the exit thread runs to the section edge */
	background: linear-gradient(180deg, var(--surface) 0%, #eff3f9 22%, #e9edf5 44%, #e4e8f0 60%, #e6ecf7 78%, #ebf1fc 100%);
}

/* ---- THE HANDOFF (new): the LOST pile is the literal source of the
       elegy, so a thread now carries from it. Desktop: an SVG curve in
       container coordinates (viewBox 1200 wide + preserveAspectRatio:
       none — the fr columns scale proportionally, so x≈909 tracks the
       pile's column center at any width; the path start fades from 0
       so it needs no pixel registration with the pile). Stacked: the
       pile is already centered — a straight drip continues it. ---- */
.traphandoff {
	position: relative;
	height: clamp(120px, 16vw, 180px);
}

.traphandoff__svg {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	display: block;
	overflow: visible;
}

.traphandoff__drop {
	display: none;
}

@media (max-width:860px) {
	.traphandoff {
		height: auto;
		padding: 6px 0 2px;
	}
	
	.traphandoff__svg {
		display: none;
	}
	
	.traphandoff__drop {
		--driph: clamp(88px, 16vw, 140px);
		/* --driph feeds the shared mote-fall keyframes */
		display: block;
		position: relative;
		width: 2px;
		height: var(--driph);
		margin: 0 auto;
		border-radius: 1px;
		background: linear-gradient(180deg, rgba(182, 189, 201, 0), #b6bdc9 26%, #a9b1bf 100%);
	}
	
	.traphandoff__dropmote {
		position: absolute;
		left: 50%;
		top: 0;
		width: 6px;
		height: 6px;
		border-radius: 2px;
		background: #b6bdc9;
		transform: translate(-50%, 0);
		opacity: 0;
	}
}

/* ---- the cost beat: a centered elegy (internals LOCKED — kept verbatim;
       only the container spacing changes: the handoff now owns the gap) ---- */
.costbeat {
	margin-top: 0;
	text-align: center;
}

.costbeat__lead {
	font: var(--fw-medium) var(--fs-lead)/1.55 var(--sans);
	color: var(--body);
	max-width: 44ch;
	margin: 0 auto;
}

.costbeat__griefs {
	list-style: none;
	margin: clamp(20px, 3vw, 30px) auto 0;
	padding: 0;
	max-width: 46ch;
}

.grief {
	margin: 0;
}

.grief__text {
	font: var(--fw-regular) clamp(1.1875rem, 1.05rem + 1vw, 1.5rem)/1.45 var(--sans);
	color: var(--body);
	margin: 10px 0 0;
}

.grief__who {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

/* the drip — a falling hairline between griefs (the thread of loss) */
.grief__drip {
	--driph: clamp(30px, 4.5vw, 46px);
	position: relative;
	display: block;
	width: 2px;
	height: var(--driph);
	margin: clamp(14px, 2.2vw, 20px) auto 0;
	border-radius: 1px;
	background: linear-gradient(180deg, rgba(182, 189, 201, 0), #b6bdc9 30%, #b6bdc9 78%, rgba(182, 189, 201, .25));
}

.grief__mote {
	position: absolute;
	left: 50%;
	top: 0;
	width: 6px;
	height: 6px;
	border-radius: 2px;
	background: #b6bdc9;
	transform: translate(-50%, 0);
	opacity: 0;
}

/* the verdict */
.costbeat__verdict {
	margin: clamp(40px, 6vw, 64px) 0 0;
}

.costbeat__kicker {
	display: block;
	font: var(--fw-medium) var(--fs-eyebrow)/1.3 var(--mono);
	text-transform: uppercase;
	letter-spacing: var(--tracking-wider);
	color: var(--body);
	margin: 0 0 clamp(12px, 1.8vw, 18px);
}

.costbeat__statement {
	display: block;
	font: var(--fw-semibold) var(--fs-h1)/1.12 var(--sans);
	letter-spacing: var(--tracking-tight);
	color: var(--ink);
}

/* the thread that exits the wound — ends on the SAME deep grey (#a9b1bf)
   the handoff thread lands on and the dawn-thread ignites from */
.costbeat__thread {
	display: block;
	width: 2px;
	height: clamp(52px, 8vw, 96px);
	margin: clamp(36px, 5vw, 56px) auto 0;
	border-radius: 1px;
	background: linear-gradient(180deg, rgba(182, 189, 201, 0), #b6bdc9 45%, #a9b1bf 100%);
}

/* ---- cost-beat choreography — LOCKED contract (hidden only under
       html.anim; costbeat.js adds .is-in in strict cadence) ---- */
.anim .cb-armed .cbeat {
	opacity: 0;
	transform: translateY(-16px);
	transition: opacity var(--cost-dur, 900ms) var(--ease-out), transform var(--cost-dur, 900ms) var(--ease-out);
}

.anim .cb-armed .cbeat.is-in {
	opacity: 1;
	transform: none;
}

.anim .cb-armed .costbeat__lead.cbeat {
	--cost-dur: 850ms;
}

.anim .cb-armed .grief__drip.cbeat {
	--cost-dur: 520ms;
	transform: scaleY(0);
	transform-origin: top center;
}

.anim .cb-armed .grief__drip.cbeat.is-in {
	transform: none;
}

.anim .cb-armed .grief__text.cbeat {
	--cost-dur: 950ms;
	transform: translateY(-14px);
}

.anim .cb-armed .grief__text.cbeat.is-in {
	transform: none;
}

.anim .cb-armed .costbeat__kicker.cbeat {
	--cost-dur: 750ms;
	transform: translateY(-10px);
}

.anim .cb-armed .costbeat__kicker.cbeat.is-in {
	transform: none;
}

.anim .cb-armed .costbeat__statement.cbeat {
	--cost-dur: 1100ms;
	transform: translateY(-20px);
	filter: blur(6px);
	transition: opacity var(--cost-dur) var(--ease-out), transform var(--cost-dur) var(--ease-out), filter var(--cost-dur) var(--ease-out);
}

.anim .cb-armed .costbeat__statement.cbeat.is-in {
	transform: none;
	filter: none;
}

.anim .cb-armed .costbeat__thread.cbeat {
	--cost-dur: 900ms;
	transform: scaleY(0);
	transform-origin: top center;
}

.anim .cb-armed .costbeat__thread.cbeat.is-in {
	transform: none;
}

.anim .cb-armed .grief__drip.cbeat.is-in .grief__mote {
	animation: mote-fall 1.15s var(--ease-in-out) .35s both;
}

@keyframes mote-fall {
	0% {
		opacity: 0;
		transform: translate(-50%, 0);
	}
	
	16% {
		opacity: .9;
	}
	
	100% {
		opacity: 0;
		transform: translate(-50%, calc(var(--driph) - 6px));
	}
}

/* ---- NEW handoff beats, riding the same cadence engine.
       The path hides by being UNDRAWN (dashoffset), not by opacity, so
       it draws pile→center when costbeat.js lands it as beat one. ---- */
.anim .cb-armed .traphandoff__path.cbeat {
	opacity: 1;
	transform: none;
	stroke-dasharray: 1;
	stroke-dashoffset: 1;
	/* pathLength=1 normalizes */
	transition: stroke-dashoffset 1150ms var(--ease-in-out);
}

.anim .cb-armed .traphandoff__path.cbeat.is-in {
	stroke-dashoffset: 0;
}

/* fragments + motes trail the draw (no queue slots — keyed to the path) */
.anim .cb-armed .traphandoff__frags {
	opacity: 0;
	transition: opacity 900ms var(--ease-out) 350ms;
}

.anim .cb-armed .traphandoff__path.cbeat.is-in ~ .traphandoff__frags {
	opacity: 1;
}

.anim .cb-armed .traphandoff__motes {
	opacity: 0;
	transition: opacity 800ms var(--ease-out) 600ms;
}

.anim .cb-armed .traphandoff__path.cbeat.is-in ~ .traphandoff__motes {
	opacity: 1;
}

/* stacked drip draws like a grief drip; its mote falls once, reusing mote-fall */
.anim .cb-armed .traphandoff__drop.cbeat {
	opacity: 1;
	transform: scaleY(0);
	transform-origin: top center;
	transition: transform 900ms var(--ease-in-out);
}

.anim .cb-armed .traphandoff__drop.cbeat.is-in {
	transform: none;
}

.anim .cb-armed .traphandoff__drop.cbeat.is-in .traphandoff__dropmote {
	animation: mote-fall 1.3s var(--ease-in-out) .4s both;
}

/* ---- §3 turnrise: the dawn (jobs unchanged; seam vignette now mirrors
       the deepened grief vignette so the two halves read as one fold) ---- */
.avid-sec.turnrise {
	position: relative;
	overflow: hidden;
	padding: clamp(96px, 12vw, 160px) 0 clamp(88px, 11vw, 144px);
	background: linear-gradient(180deg, #ebf1fc 0%, #eef4ff 30%, #f6faff 64%, #fff 100%);
}

.avid-sec.turnrise > .avid-container {
	position: relative;
	z-index: 1;
}

.avid-sec.turnrise::after {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: clamp(96px, 14vw, 180px);
	pointer-events: none;
	background: linear-gradient(180deg, #ebf1fc, rgba(235, 241, 252, 0));
}

.turnrise .dawn-thread {
	position: absolute;
	left: 50%;
	top: 0;
	z-index: 1;
	width: 2px;
	height: clamp(64px, 10vw, 120px);
	margin-left: -1px;
	border-radius: 1px;
	pointer-events: none;
	background: linear-gradient(180deg, #a9b1bf 0%, #82acff 52%, rgba(40, 99, 254, 0) 100%);
}

.turnrise .dawn-glow {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background: radial-gradient(56% 60% at 50% 52%, #fff 0%, rgba(255, 255, 255, .92) 36%, rgba(255, 255, 255, .38) 60%, rgba(255, 255, 255, 0) 80%), radial-gradient(88% 84% at 50% 58%, rgba(130, 172, 255, .26) 0%, rgba(122, 92, 255, .13) 44%, rgba(255, 255, 255, 0) 68%);
}

.turnrise .dawn-glow::after {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(44% 54% at 50% 45%, rgba(255, 255, 255, .85), rgba(255, 255, 255, 0) 72%);
	opacity: .5;
	animation: dawn-breathe 9s var(--ease-in-out) infinite alternate;
}

@keyframes dawn-breathe {
	from {
		opacity: .3;
		transform: scale(.99);
	}
	
	to {
		opacity: .8;
		transform: scale(1.015);
	}
}

.avid-sec.turnrise .avid-h2 {
	font-size: var(--fs-h1);
	line-height: 1.1;
	letter-spacing: var(--tracking-tight);
}

.avid-sec.turnrise .avid-lede {
	max-width: 58ch;
	margin-inline: auto;
	margin-bottom: 0;
}

/* rise choreography — reveal.js verbatim; tokens only */
.avid-sec.turnrise {
	--reveal-dur: 1150ms;
	--reveal-shift: 42px;
}

.avid-sec.turnrise .reveal {
	transition-delay: calc(var(--ri, 0) * 260ms);
}

.avid-sec.turnrise .dawn-thread {
	--reveal-dur: 700ms;
}

.anim .avid-sec.turnrise .dawn-thread {
	transform: scaleY(0);
	transform-origin: top center;
}

.anim .avid-sec.turnrise .dawn-thread.is-in {
	transform: none;
}

.anim .avid-sec.turnrise .dawn-glow {
	transform: translateY(46px) scale(.965);
}

.anim .avid-sec.turnrise .dawn-glow.is-in {
	transform: none;
}

/* ---- reduced motion: the still frame tells the whole story ---- */
@media (prefers-reduced-motion: reduce) {
	.grief__mote, .traphandoff__dropmote {
		display: none;
	}
	
	/* motes are pure motion; gone */
	.griefair i {
		display: none;
	}
	
	/* air motes too; the scene vignette stays */
	.traphandoff__motes {
		display: none;
	}
	
	/* SMIL ignores this media query — CSS removes it */
	.turnrise .dawn-glow::after {
		animation: none;
		opacity: .6;
	}
	
	/* belt-and-braces if .anim ever leaks in: everything parked complete */
	.anim .cb-armed .cbeat {
		opacity: 1;
		transform: none;
		filter: none;
	}
	
	.anim .cb-armed .traphandoff__path.cbeat {
		stroke-dasharray: none;
		stroke-dashoffset: 0;
	}
	
	.anim .cb-armed .traphandoff__frags {
		opacity: 1;
	}
	
	.anim .cb-armed .traphandoff__drop.cbeat {
		transform: none;
	}
}

/* =============================================================================
   VISUAL: RINGS — shared bones (.ring), used by BOTH .ring--trap and .ring--avid
   ============================================================================= */

/* ===== the two rings: capacity trap (vicious) ↔ AVID loop (virtuous), a mirror pair ===== */
.ring {
	position: relative;
	width: min(500px, 90vw);
	aspect-ratio: 1/1;
	margin: var(--space-32) auto 0;
	--rad: 39%;
}

.ring__svg {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	overflow: visible;
}

.ring__track {
	fill: none;
	stroke-width: 2.2;
	stroke-linecap: round;
}

.ring__node {
	position: absolute;
	left: calc(50% + cos(var(--a)) * var(--rad));
	top: calc(50% + sin(var(--a)) * var(--rad));
	transform: translate(-50%, -50%);
	width: var(--nw, 32%);
	--a: calc(( var(--i) / var(--n) ) * 1turn - .25turn);
}

.ring__card {
	display: block;
	position: relative;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 12px;
	box-shadow: var(--shadow-1);
	padding: 9px 11px;
	text-align: center;
}

.ring__num {
	display: block;
	font: var(--fw-bold) 9.5px/1 var(--mono);
	letter-spacing: .06em;
	margin: 0 0 3px;
	opacity: .7;
}

.ring__cn {
	font: var(--fw-semibold) 12px/1.25 var(--sans);
	color: var(--ink);
}

.ring__center {
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%);
	width: 34%;
	text-align: center;
	z-index: 2;
}

.ring__ck {
	font: var(--fw-bold) 11px/1.2 var(--mono);
	text-transform: uppercase;
	letter-spacing: .06em;
	margin: 0;
}

.ring__cs {
	font: var(--fw-regular) 11px/1.4 var(--sans);
	color: var(--body);
	margin: 4px 0 0;
}

.ring__break {
	position: absolute;
	left: 50%;
	top: calc(100% + 6px);
	transform: translateX(-50%);
	display: inline-flex;
	align-items: center;
	gap: 5px;
	white-space: nowrap;
	font: var(--fw-bold) 8.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .04em;
	color: #1f7a52;
	background: rgba(31, 157, 107, .12);
	border-radius: 100px;
	padding: 5px 9px;
}

/* =============================================================================
   VISUAL: CAPACITY-TRAP RING (.ring--trap) — broken loop of fragments (§2)
   Pure CSS animation; reduced-motion parks a complete still.
   ============================================================================= */

/* ================================================================
   §2 TRAP RING — FINAL: a broken ring of fragments that never connect
   Winner (Design 3, "fragments") hardened with grafts from D1 + D2.
   Scoped to .ring--trap + .trap-*. Reuses the shared .ring bones.
   Does NOT touch .ring / .ring--avid geometry.
   Tokens: --red #f9423a; tension accents #d8352c/#b91c1c;
   dead grey #b6bdc9; --line --muted --mono --sans --shadow-1.
   ================================================================ */
.ring--trap {
	--red2: #d8352c;
	--red3: #b91c1c;
	--dead: #b6bdc9;
	padding-bottom: 12%;
	margin-bottom: var(--space-48);
}

/* Cards sit askew and never settle — nothing lines up. Every card reads
   strained + disconnected: hairline red-tinted edge + faint red shadow. */
.ring--trap .ring__card {
	border-color: rgba(216, 53, 44, .22);
	box-shadow: 0 1px 2px rgba(216, 53, 44, .09), 0 1px 1px rgba(17, 24, 33, .04);
	transform: rotate(var(--skew, 0deg)) translateY(var(--drop, 0px));
	will-change: transform;
}

.ring--trap .ring__num {
	color: var(--red2);
}

/* the two hand-work steps (04,05) read coldest — the drain concentrates
   where the manual work is burned: colder border + muted label */
.ring--trap .ring__node--3 .ring__cn, .ring--trap .ring__node--4 .ring__cn {
	color: var(--body);
}

.ring--trap .ring__node--3 .ring__card, .ring--trap .ring__node--4 .ring__card {
	border-color: rgba(139, 147, 163, .35);
}

/* per-node skew + vertical nudge so 'askew' reads intentional-broken.
   Twitchy 'try to align, snap apart' jitter (steps = mechanical, never smooth). */
.ring--trap .ring__node--0 {
	--skew: -3.4deg;
	--drop: -3px;
}

.ring--trap .ring__node--1 {
	--skew: 3.2deg;
	--drop: 4px;
}

.ring--trap .ring__node--2 {
	--skew: -2.6deg;
	--drop: 5px;
}

.ring--trap .ring__node--3 {
	--skew: 3.6deg;
	--drop: -4px;
}

.ring--trap .ring__node--4 {
	--skew: -3deg;
	--drop: 3px;
}

.ring--trap .ring__node--0 .ring__card {
	animation: trap-jitter-a 3.1s steps(1, end) infinite;
}

.ring--trap .ring__node--1 .ring__card {
	animation: trap-jitter-b 3.7s steps(1, end) infinite .4s;
}

.ring--trap .ring__node--2 .ring__card {
	animation: trap-jitter-a 3.4s steps(1, end) infinite .9s;
}

.ring--trap .ring__node--3 .ring__card {
	animation: trap-jitter-b 2.9s steps(1, end) infinite .2s;
}

.ring--trap .ring__node--4 .ring__card {
	animation: trap-jitter-a 3.9s steps(1, end) infinite .6s;
}

@keyframes trap-jitter-a {
	0%, 72% {
		transform: rotate(var(--skew)) translateY(var(--drop));
	}
	
	76% {
		transform: rotate(calc(var(--skew) * .1)) translate(2px, calc(var(--drop) - 1px));
	}
	
	/* almost aligns */
	80% {
		transform: rotate(var(--skew)) translate(-3px, calc(var(--drop) + 2px));
	}
	
	/* snaps apart */
	84%, 100% {
		transform: rotate(var(--skew)) translateY(var(--drop));
	}
}

@keyframes trap-jitter-b {
	0%, 68% {
		transform: rotate(var(--skew)) translateY(var(--drop));
	}
	
	72% {
		transform: rotate(calc(var(--skew) * .12)) translate(-2px, calc(var(--drop) + 1px));
	}
	
	76% {
		transform: rotate(var(--skew)) translate(3px, calc(var(--drop) - 2px));
	}
	
	80%, 100% {
		transform: rotate(var(--skew)) translateY(var(--drop));
	}
}

/* ---- FRACTURED ARCS: 5 dashed segments at the between-node midpoints
   (--i .5/1.5/2.5/3.5/4.5). Each at a DIFFERENT radius (--segrad) and a
   DIFFERENT tangent offset (--off) so they point past each other and can
   never join into a circle — fractured, misaligned, incomplete. No ring
   stroke, no bead, no continuous circuit. ---- */
.ring--trap .trap-seg {
	position: absolute;
	left: calc(50% + cos(var(--a)) * var(--segrad, 39%));
	top: calc(50% + sin(var(--a)) * var(--segrad, 39%));
	--a: calc(( var(--i) / var(--n) ) * 1turn - .25turn);
	width: 60px;
	height: 0;
	border-top: 2px dashed var(--red2);
	transform: translate(-50%, -50%) rotate(calc(var(--a) + .25turn + var(--off, 0deg)));
	opacity: .5;
	will-change: opacity;
}

.ring--trap .trap-seg--a {
	--i: .5;
	--off: 10deg;
	--segrad: 44%;
	animation: trap-arcfail 3.2s ease-in-out infinite;
}

.ring--trap .trap-seg--b {
	--i: 1.5;
	--off: -12deg;
	--segrad: 34%;
	animation: trap-arcfail 2.8s ease-in-out infinite .5s;
}

.ring--trap .trap-seg--c {
	--i: 2.5;
	--off: 13deg;
	--segrad: 45%;
	animation: trap-arcfail 3.6s ease-in-out infinite 1.1s;
}

.ring--trap .trap-seg--d {
	--i: 3.5;
	--off: -9deg;
	--segrad: 33%;
	animation: trap-arcfail 3s ease-in-out infinite .3s;
}

.ring--trap .trap-seg--e {
	--i: 4.5;
	--off: 12deg;
	--segrad: 43%;
	animation: trap-arcfail 3.4s ease-in-out infinite .8s;
}

/* arc tries to connect (brighten) then flickers dead — handoff fails */
@keyframes trap-arcfail {
	0%, 100% {
		opacity: .5;
	}
	
	44% {
		opacity: .82;
	}
	
	/* almost connects */
	48% {
		opacity: .1;
	}
	
	/* fails */
	52% {
		opacity: .6;
	}
	
	56% {
		opacity: .1;
	}
	
	/* fails again */
	60% {
		opacity: .45;
	}
}

/* ---- X BREAK MARKS at each severed handoff (same 5 midpoints).
   AXIS-ALIGNED times glyph — the container is NEVER rotated onto the ring
   tangent (that renders the top breaks as '+' not 'x'). All five read X. ---- */
.ring--trap .trap-x {
	position: absolute;
	left: calc(50% + cos(var(--a)) * var(--rad));
	top: calc(50% + sin(var(--a)) * var(--rad));
	--a: calc(( var(--i) / var(--n) ) * 1turn - .25turn);
	transform: translate(-50%, -50%);
	font: 700 17px/1 var(--mono);
	color: var(--red);
	text-shadow: 0 0 3px #fff, 0 0 3px #fff, 0 1px 2px rgba(255, 255, 255, .9);
	/* keep legible over arcs */
	will-change: opacity;
}

.ring--trap .trap-x::before {
	content: "×";
}

/* × */
.ring--trap .trap-x--a {
	--i: .5;
	animation: trap-xflick 2.6s steps(1, end) infinite;
}

.ring--trap .trap-x--b {
	--i: 1.5;
	animation: trap-xflick 2.2s steps(1, end) infinite .5s;
}

.ring--trap .trap-x--c {
	--i: 2.5;
	animation: trap-xflick 3s steps(1, end) infinite .9s;
}

.ring--trap .trap-x--d {
	--i: 3.5;
	animation: trap-xflick 2.4s steps(1, end) infinite .3s;
}

.ring--trap .trap-x--e {
	--i: 4.5;
	animation: trap-xflick 2.8s steps(1, end) infinite 1.2s;
}

@keyframes trap-xflick {
	0%, 55% {
		opacity: 1;
	}
	
	58% {
		opacity: .22;
	}
	
	/* flicker like a dying connection */
	61% {
		opacity: 1;
	}
	
	64% {
		opacity: .4;
	}
	
	67%, 100% {
		opacity: 1;
	}
}

/* ---- LOST WORK: fragments born at each handoff rise a few px (the attempt
   to hand off), the handoff FAILS, and they fall out of the loop toward the
   LOST pile while desaturating red -> --red2 -> --muted -> dead and fading.
   Effort in, nothing back; nothing carries over. (D2's failure-arc curve.) ---- */
.ring--trap .trap-drop {
	position: absolute;
	left: calc(50% + cos(var(--a)) * var(--rad));
	top: calc(50% + sin(var(--a)) * var(--rad));
	--a: calc(( var(--i) / var(--n) ) * 1turn - .25turn);
	width: 14px;
	height: 10px;
	border-radius: 2px;
	background: var(--red);
	transform: translate(-50%, -50%);
	opacity: 0;
	will-change: transform, opacity, background-color;
}

.ring--trap .trap-drop--a {
	--i: .5;
	animation: trap-drop 4.6s cubic-bezier(.4, 0, .9, 1) infinite;
}

.ring--trap .trap-drop--b {
	--i: 1.5;
	animation: trap-drop 5s cubic-bezier(.4, 0, .9, 1) infinite 1.3s;
}

.ring--trap .trap-drop--c {
	--i: 2.5;
	animation: trap-drop 4.8s cubic-bezier(.4, 0, .9, 1) infinite 2.1s;
}

.ring--trap .trap-drop--d {
	--i: 3.5;
	animation: trap-drop 5.2s cubic-bezier(.4, 0, .9, 1) infinite .7s;
}

.ring--trap .trap-drop--e {
	--i: 4.5;
	animation: trap-drop 4.9s cubic-bezier(.4, 0, .9, 1) infinite 2.8s;
}

@keyframes trap-drop {
	0% {
		opacity: 0;
		transform: translate(-50%, -50%) translate(0, 0) scale(1);
		background: var(--red);
	}
	
	8% {
		opacity: 1;
		transform: translate(-50%, -50%) translate(0, -7px) scale(1);
		background: var(--red);
	}
	
	/* try to hand off */
	18% {
		opacity: 1;
		transform: translate(-50%, -50%) translate(0, -9px) scale(1);
		background: var(--red);
	}
	
	/* reach the break */
	40% {
		opacity: .95;
		transform: translate(-50%, -50%) translate(calc(-1 * cos(var(--a)) * 22px), calc(-1 * sin(var(--a)) * 22px + 40px)) scale(.92);
		background: var(--red2);
	}
	
	/* FAILS — falls */
	68% {
		opacity: .7;
		transform: translate(-50%, -50%) translate(calc(-1 * cos(var(--a)) * 34px), calc(-1 * sin(var(--a)) * 34px + 92px)) scale(.82);
		background: var(--muted);
	}
	
	/* greying */
	90% {
		opacity: .25;
		transform: translate(-50%, -50%) translate(calc(-1 * cos(var(--a)) * 40px), calc(-1 * sin(var(--a)) * 40px + 140px)) scale(.72);
		background: var(--dead);
	}
	
	100% {
		opacity: 0;
		transform: translate(-50%, -50%) translate(calc(-1 * cos(var(--a)) * 42px), calc(-1 * sin(var(--a)) * 42px + 160px)) scale(.68);
		background: var(--dead);
	}
}

/* ---- THE LOST PILE (graft from D2): the only thing that accumulates is
   waste. A settled cluster of dead-grey bars under a mono 'LOST' label,
   below the ring. Additive + aria-hidden; does not touch geometry. ---- */
.ring--trap .trap-loss {
	position: absolute;
	left: 50%;
	bottom: -2%;
	transform: translateX(-50%);
	display: flex;
	gap: 5px;
	align-items: flex-end;
	pointer-events: none;
}

.ring--trap .trap-loss i {
	display: block;
	width: 12px;
	border-radius: 2px;
	background: var(--dead);
}

.ring--trap .trap-loss i:nth-child(1) {
	height: 9px;
	opacity: .6;
}

.ring--trap .trap-loss i:nth-child(2) {
	height: 14px;
	opacity: .85;
}

.ring--trap .trap-loss i:nth-child(3) {
	height: 10px;
	opacity: .68;
}

.ring--trap .trap-loss i:nth-child(4) {
	height: 16px;
	opacity: .9;
}

.ring--trap .trap-loss i:nth-child(5) {
	height: 8px;
	opacity: .55;
}

.ring--trap .trap-loss i:nth-child(6) {
	height: 12px;
	opacity: .72;
}

.ring--trap .trap-loss i:nth-child(7) {
	height: 9px;
	opacity: .58;
}

.ring--trap .trap-loss__label {
	position: absolute;
	top: calc(100% + 6px);
	left: 50%;
	transform: translateX(-50%);
	white-space: nowrap;
	font: 500 9.5px/1 var(--mono);
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--muted);
}

/* ---- CENTER: names the drain (graft from D1 — punchiest waste-naming) ---- */
.ring--trap .ring__ck {
	color: var(--red);
	font-size: 13px;
	line-height: 1.3;
	letter-spacing: .07em;
}

.ring--trap .ring__cs {
	color: var(--body);
}

/* ================= REDUCED MOTION: complete static frame, still reads
   broken + wasteful with ZERO movement ================================= */
@media (prefers-reduced-motion:reduce) {
	.ring--trap .ring__card, .ring--trap .trap-seg, .ring--trap .trap-x, .ring--trap .trap-drop {
		animation: none !important;
	}
	
	/* cards parked askew — visibly out of true */
	.ring--trap .ring__node--0 .ring__card {
		transform: rotate(-3.4deg) translateY(-3px);
	}
	
	.ring--trap .ring__node--1 .ring__card {
		transform: rotate(3.2deg) translateY(4px);
	}
	
	.ring--trap .ring__node--2 .ring__card {
		transform: rotate(-2.6deg) translateY(5px);
	}
	
	.ring--trap .ring__node--3 .ring__card {
		transform: rotate(3.6deg) translateY(-4px);
	}
	
	.ring--trap .ring__node--4 .ring__card {
		transform: rotate(-3deg) translateY(3px);
	}
	
	/* fractured arcs parked faint + misaligned; every X solid */
	.ring--trap .trap-seg {
		opacity: .42;
	}
	
	.ring--trap .trap-x {
		opacity: 1;
	}
	
	/* one DEAD grey dropped fragment parked mid-fall at EVERY handoff, with a
     faint outline — work visibly lost at all five broken links */
	.ring--trap .trap-drop {
		opacity: .9;
		background: var(--dead);
		border: 1px solid rgba(138, 147, 163, .45);
		transform: translate(-50%, -50%) translate(calc(-1 * cos(var(--a)) * 34px), calc(-1 * sin(var(--a)) * 34px + 82px)) scale(.85);
	}
}

/* =============================================================================
   VISUAL: AVID RING — flat variant basics + the SHARED ring mobile media query
   (this media rule also tunes .ring / .ring--trap — it is ring-family CSS)
   ============================================================================= */

/* avid variant — blue, forward, Edna at center, break-points */
.ring--avid .ring__track {
	stroke: var(--blue);
}

.ring--avid .ring__head {
	fill: var(--blue);
}

.ring--avid .ring__num {
	color: var(--blue-press);
}

.ring--avid .ring__ck {
	color: var(--blue-press);
}

.ring--avid .ring__card {
	border-color: #cfe0fb;
}

.ring--avid .ring__node {
	--nw: 30%;
}

.ring__edna {
	width: 52px;
	height: 52px;
	border-radius: 50%;
	background: var(--grad-edna);
	box-shadow: 0 0 0 4px #fff, 0 10px 22px -8px rgba(86, 80, 115, .6);
	margin: 0 auto 8px;
}

.ring__card--break {
	border-color: #9ad9bd !important;
	box-shadow: 0 0 0 2px rgba(31, 157, 107, .3), var(--shadow-1);
}

.ring__bp {
	display: block;
	margin-top: 3px;
	font: var(--fw-bold) 8.5px/1.1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .03em;
	color: #1f7a52;
}

@media (max-width:560px) {
	.ring {
		width: min(360px, 93vw);
		--rad: 40%;
	}
	
	.ring__cn {
		font-size: 10.5px;
	}
	
	.ring__card {
		padding: 7px 8px;
	}
	
	.ring__num {
		font-size: 8.5px;
	}
	
	.ring--trap .ring__node {
		--nw: 36%;
	}
	
	.ring--avid .ring__node {
		--nw: 34%;
	}
	
	.ring__break {
		font-size: 8px;
	}
}

/* =============================================================================
   VISUAL: AVID LOOP — wired OVAL orbit + Edna hub (.ring--avid, §4 #loop)
   KEPT IN PAGE (not here): #loop{overflow-x:clip} (page-section glue) and the
   .avid-card ring-node override rules — sections.css ships a GENERIC .avid-card,
   so those overrides must stay page-local or they restyle cards site-wide.
   ============================================================================= */

/* ============================================================
   .ring--avid  —  OVAL orbit + Edna hub WIRED to every node
   + DUAL motion (around the oval AND along the spokes).
   GEOMETRY APPROACH (b): keep the shared .ring__node trig, and draw the
   orbit + spokes in an SVG with viewBox 0 0 100 100 + preserveAspectRatio="none".
   Because .ring--avid overrides aspect-ratio to ~1.6/1, the SVG (and the r39
   circle/lines inside it) stretch horizontally by the SAME factor as the node
   positions, so orbit, spokes and nodes stay perfectly aligned from one source
   of truth (the container's own stretch). Everything is scoped to .ring--avid
   so the broken "trap" ring is untouched.
   ============================================================ */
.ring--avid {
	/* go OVAL: noticeably wider than tall */
	aspect-ratio: 1.6/1;
	width: min(780px, 94vw);
	/* reserve room for the caught pile BELOW with margin (NOT padding — padding
     on an aspect-ratio box shears the geometry) */
	margin: 0 auto clamp(56px, 8vw, 88px);
	--rad: 39%;
	/* keep node trig; the SVG stretch makes it read oval */
	--avid-blue: #2863fe;
	--avid-deep: #1147e2;
	--avid-peri: #82acff;
	--avid-green: #2f6b12;
	/* AA-passing green used for all break/caught TEXT */
	isolation: isolate;
}

/* soft contained radial puck so the glow reads tastefully on a light page */
.avid-puck {
	position: absolute;
	inset: -6% -3%;
	border-radius: 50%;
	background: radial-gradient(58% 62% at 50% 46%, rgba(40, 99, 254, .14) 0%, rgba(40, 99, 254, .07) 42%, rgba(130, 172, 255, .05) 66%, rgba(255, 255, 255, 0) 78%);
	filter: blur(2px);
	z-index: 0;
	pointer-events: none;
}

/* ---------- the oval wiring layer ---------- */
.avid-wire {
	z-index: 1;
}

.avid-wire * {
	vector-effect: non-scaling-stroke;
}

/* stroke stays even under the horizontal stretch */
.avid-orbit {
	/* the wide ellipse track */
	fill: none;
	stroke: var(--avid-peri);
	stroke-width: 2.2;
	opacity: .55;
}

/* DUAL MOTION (a): light travelling AROUND the oval, clockwise = forward A->V->I->D */
.avid-orbit-pulse {
	fill: none;
	stroke: url("#avidSpoke");
	stroke-width: 3;
	stroke-linecap: round;
	stroke-dasharray: 34 211;
	/* one bright arc + gap; r39 circumference ≈ 245 user-units */
	filter: drop-shadow(0 0 3px rgba(40, 99, 254, .55));
	animation: avidOrbit 7s linear infinite;
}

@keyframes avidOrbit {
	to {
		stroke-dashoffset: -245;
	}
}

.avid-spoke {
	/* Edna wired out to each node — SOLID wiring, always visible */
	stroke: #c7d6f8;
	stroke-width: 2.2;
	opacity: .95;
	stroke-linecap: round;
}

/* DUAL MOTION (b): a bright blue pulse travelling ALONG each solid spoke, hub -> node */
.avid-spoke-pulse {
	stroke: var(--avid-deep);
	stroke-width: 3.4;
	stroke-linecap: round;
	stroke-dasharray: 8 70;
	/* one lit bead per cycle */
	stroke-dashoffset: 78;
	filter: drop-shadow(0 0 4px rgba(40, 99, 254, .85));
	animation: avidSpokeRun 3.2s ease-in-out infinite;
}

/* stagger so the four spokes breathe in gentle harmony, not in lockstep */
.avid-spoke-pulse.s0 {
	animation-delay: 0s;
}

.avid-spoke-pulse.s1 {
	animation-delay: .8s;
}

.avid-spoke-pulse.s2 {
	animation-delay: 1.6s;
}

.avid-spoke-pulse.s3 {
	animation-delay: 2.4s;
}

@keyframes avidSpokeRun {
	0% {
		stroke-dashoffset: 78;
		opacity: 0;
	}
	
	12% {
		opacity: 1;
	}
	
	60% {
		opacity: 1;
	}
	
	100% {
		stroke-dashoffset: 0;
		opacity: 0;
	}
}

/* forward-direction arrowheads sitting ON the oval at the 45° mid-points between
   nodes; a border-right+border-bottom chevron points down-right at rotate(0). */
.avid-flow {
	position: absolute;
	width: 11px;
	height: 11px;
	z-index: 1;
	border-right: 2.4px solid var(--avid-blue);
	border-bottom: 2.4px solid var(--avid-blue);
	opacity: .7;
	filter: drop-shadow(0 0 2px rgba(40, 99, 254, .4));
	animation: avidFlowPulse 7s ease-in-out infinite;
}

.avid-flow--av {
	top: 22.3%;
	left: 77.6%;
	transform: translate(-50%, -50%) rotate(0deg);
}

/* A->V down-right */
.avid-flow--vi {
	top: 77.7%;
	left: 77.6%;
	transform: translate(-50%, -50%) rotate(90deg);
}

/* V->I down-left  */
.avid-flow--id {
	top: 77.7%;
	left: 22.4%;
	transform: translate(-50%, -50%) rotate(180deg);
}

/* I->D up-left    */
.avid-flow--da {
	top: 22.3%;
	left: 22.4%;
	transform: translate(-50%, -50%) rotate(270deg);
}

/* D->A up-right   */
@keyframes avidFlowPulse {
	0%, 100% {
		opacity: .35;
	}
	
	50% {
		opacity: .85;
	}
}

/* ---------- node cards ---------- */
.ring--avid .ring__node {
	--nw: 26%;
	z-index: 2;
}

.avid-mark {
	display: grid;
	place-items: center;
	width: 24px;
	height: 24px;
	border-radius: 7px;
	background: var(--avid-blue);
	color: #fff;
	font-weight: 700;
	font-size: 13px;
	line-height: 1;
	box-shadow: 0 2px 6px rgba(40, 99, 254, .35);
}

.avid-name {
	font-weight: 600;
	font-size: 13px;
	color: var(--ink);
	line-height: 1.15;
}

.avid-say {
	font-size: 11px;
	font-weight: 500;
	color: var(--body);
	line-height: 1.25;
	margin-top: 2px;
}

/* ---------- Edna hub (distinct center tile, the calm answer) ---------- */
.avid-hub {
	position: relative;
	z-index: 3;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 1px;
	background: #fff;
	border: 1px solid #e4e2f0;
	border-radius: 14px;
	padding: 8px 14px 9px;
	box-shadow: 0 2px 6px rgba(17, 24, 33, .06), 0 12px 28px -6px rgba(86, 80, 115, .28);
}

.avid-hub::before {
	/* Edna aurora glow — blended + on-palette, same move as Meet Edna's ec-wrap */
	content: "";
	position: absolute;
	z-index: -1;
	inset: -48% -34%;
	background: var(--mesh-edna);
	border-radius: 48px;
	filter: blur(28px);
	opacity: .7;
	animation: avidHubBreathe 4.8s ease-in-out infinite;
}

@keyframes avidHubBreathe {
	0%, 100% {
		opacity: .5;
		transform: scale(.94);
	}
	
	50% {
		opacity: .95;
		transform: scale(1.14);
	}
}

.avid-hub__icon {
	/* the real Edna mark — white ring + lavender shadow, matches Meet Edna's avatars */
	width: 36px;
	height: 36px;
	border-radius: 50%;
	margin-bottom: 2px;
	display: block;
	box-shadow: 0 0 0 3px #fff, 0 6px 16px -8px rgba(86, 80, 115, .6);
}

.avid-hub__thesis {
	font-weight: 700;
	font-size: 16px;
	color: var(--ink);
	line-height: 1.1;
	letter-spacing: -.01em;
}

.avid-hub__thesis b {
	color: var(--avid-blue);
	font-weight: 700;
}

.avid-hub__role {
	font-size: 11px;
	font-weight: 600;
	color: var(--avid-blue);
	line-height: 1.1;
}

/* ---------- reduced motion: freeze into a COMPLETE still that tells the story ---------- */
@media (prefers-reduced-motion: reduce) {
	.avid-hub::before {
		animation: none;
		opacity: .7;
	}
	
	.avid-orbit-pulse {
		animation: none;
		stroke-dasharray: none;
		opacity: .9;
	}
	
	/* full closed lit oval */
	.avid-spoke-pulse {
		animation: none;
		stroke-dasharray: none;
		opacity: .85;
	}
	
	/* spokes become solid = fully wired */
	.avid-spoke {
		opacity: .6;
	}
	
	.avid-flow {
		animation: none;
		opacity: .75;
	}
}

/* ---------- mobile: relax toward rounder, keep it contained ----------
   A node centred on the ellipse edge overhangs the ring box by ~half its width,
   so on narrow screens we shrink the ring below the viewport, pull the radius in,
   and shrink the nodes so the widest side card's outer edge lands inside. */
@media (max-width:520px) {
	.ring--avid {
		aspect-ratio: 1.35/1;
		width: min(350px, 92vw);
		margin-bottom: clamp(44px, 11vw, 68px);
		--rad: 36%;
	}
	
	.ring--avid .ring__node {
		--nw: 30%;
	}
	
	/* .avid-card{ padding:7px 8px; gap:1px; } — KEPT IN PAGE (generic .avid-card collision) */
	.avid-name {
		font-size: 12px;
	}
	
	.avid-say {
		display: none;
	}
	
	/* phones: the four beats below carry these lines */
	.avid-hub__icon {
		width: 28px;
		height: 28px;
	}
	
	.avid-hub__thesis {
		font-size: 13.5px;
	}
	
	.avid-hub__role {
		font-size: 10px;
	}
	
	.avid-mark {
		width: 22px;
		height: 22px;
		font-size: 12px;
	}
	
	.avid-hub {
		padding: 6px 10px 7px;
	}
}

/* =============================================================================
   VISUAL: PRODUCT WINDOW (.win) — chrome-less mockup window (Aggregate/Visualize)
   NOTE: the-system.njk carries its own page-local .win (adds .win__dot, tab
   margin-left:10px, deeper shadow) which keeps overriding this copy there.
   ============================================================================= */

/* product window chrome (shared by mockups) */
.win {
	position: relative;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 18px;
	box-shadow: 0 50px 100px -50px rgba(16, 24, 32, .5), 0 18px 44px -30px rgba(16, 24, 32, .28);
	overflow: hidden;
}

.win__bar {
	display: flex;
	align-items: center;
	gap: 7px;
	padding: 13px 16px;
	border-bottom: 1px solid var(--line);
	background: linear-gradient(var(--surface), #fff);
}

.win__tab {
	margin-left: 0;
	font: var(--fw-semibold) 12.5px/1 var(--mono);
	color: var(--body);
}

.win__live {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .08em;
	color: #6a9622;
}

.win__livedot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #6a9622;
	box-shadow: 0 0 0 3px rgba(106, 150, 34, .18);
}

.win__muted {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-semibold) 10.5px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .08em;
	color: var(--muted);
}

.win__muteddot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #c9d2de;
}

/* =============================================================================
   VISUAL: AGGREGATE MERGE CARD (.agg) — connectors merging into one record
   ============================================================================= */

/* AGGREGATE — connectors merging into one record */
.agg {
	padding: clamp(18px, 2.4vw, 24px);
}

.agg__flow {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: clamp(10px, 2vw, 20px);
}

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

.agg__src {
	display: flex;
	align-items: center;
	gap: 10px;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: 10px;
	padding: 9px 11px;
	box-shadow: var(--shadow-1);
}

.agg__mk {
	width: 28px;
	height: 28px;
	border-radius: 8px;
	display: grid;
	place-items: center;
	font: var(--fw-bold) 11px/1 var(--mono);
	color: #fff;
	background: var(--mk, var(--blue));
	flex: none;
}

.agg__sname {
	font: var(--fw-medium) 13px/1.2 var(--sans);
	color: var(--ink);
	min-width: 0;
}

.agg__sstat {
	margin-left: auto;
	font: var(--fw-semibold) 10px/1 var(--mono);
	color: #6a9622;
	text-transform: uppercase;
	letter-spacing: .04em;
	white-space: nowrap;
}

.agg__merge {
	display: grid;
	place-items: center;
	width: clamp(34px, 5vw, 52px);
	color: var(--line-strong);
}

.agg__merge svg {
	width: 100%;
	height: auto;
}

.agg__record {
	background: linear-gradient(180deg, var(--cool), #fff);
	border: 1px solid var(--line);
	border-radius: 14px;
	padding: 16px;
	box-shadow: var(--shadow-2);
}

.agg__rtop {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0 0 12px;
}

.agg__rname {
	font: var(--fw-semibold) 14px/1.1 var(--sans);
	color: var(--ink);
}

.agg__rsub {
	font: var(--fw-regular) 11px/1.1 var(--mono);
	color: var(--muted);
}

.agg__rrows {
	display: grid;
	gap: 7px;
}

.agg__rrow {
	display: flex;
	justify-content: space-between;
	gap: 10px;
	font: var(--fw-regular) 12px/1.3 var(--mono);
	color: var(--body);
}

.agg__rrow b {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

.agg__rtag {
	margin-top: 13px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: var(--fw-semibold) 10px/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .05em;
	color: #6a9622;
	background: rgba(106, 150, 34, .1);
	border-radius: 100px;
	padding: 6px 10px;
}

@media (max-width:520px) {
	.agg__flow {
		grid-template-columns: 1fr;
		gap: 14px;
	}
	
	.agg__merge {
		transform: rotate(90deg);
		justify-self: center;
	}
}

/* =============================================================================
   VISUAL: INSIGHTS DASH (.dash) — chart + flagged shift (Visualize)
   ============================================================================= */

/* VISUALIZE — dashboard chart with flagged shift */
.dash {
	display: grid;
	grid-template-columns: 1fr;
}

.dash__main {
	padding: 16px;
	display: grid;
	gap: 12px;
	align-content: start;
	min-width: 0;
}

.dash__chart {
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 14px 16px;
	background: #fff;
}

.dash__chart-h {
	display: flex;
	justify-content: space-between;
	align-items: center;
	font: var(--fw-medium) 11.5px/1 var(--mono);
	color: var(--body);
	margin: 0 0 14px;
}

.dash__chip {
	color: var(--red);
	font-weight: var(--fw-semibold);
}

/* chart drawn to the real Avid chart language: flat green bars, dashed gridlines,
     $ y-axis, thin baseline (restyled 2026-07-03 from a product screenshot) */
.dash__plot {
	display: flex;
	gap: 10px;
	align-items: stretch;
}

.dash__yaxis {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	flex: none;
	padding-bottom: 1px;
}

.dash__yaxis span {
	font: var(--fw-regular) 9.5px/1 var(--mono);
	color: var(--muted);
	text-align: right;
	min-width: 30px;
}

.dash__plotmain {
	flex: 1;
	min-width: 0;
}

.dash__chrow {
	position: relative;
	display: flex;
	align-items: flex-end;
	gap: clamp(16px, 3.4vw, 30px);
	height: 108px;
	border-bottom: 1px solid #dfe4ec;
}

.dash__chrow::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image: repeating-linear-gradient(90deg, #e2e7ee 0 4px, transparent 4px 10px), repeating-linear-gradient(90deg, #e2e7ee 0 4px, transparent 4px 10px), repeating-linear-gradient(90deg, #e2e7ee 0 4px, transparent 4px 10px);
	background-size: 100% 1px;
	background-position: 0 0, 0 36%, 0 72%;
	background-repeat: no-repeat;
	pointer-events: none;
}

.dash__bar {
	position: relative;
	flex: 1;
	border-radius: 7px 7px 0 0;
	background: #a6cc4a;
	min-height: 8px;
	transform-origin: bottom;
}

html.anim .dash__bar {
	animation: dashgrow .65s var(--ease-out) both;
	animation-delay: calc(var(--di, 0) * 110ms + 150ms);
}

html.anim .reveal:not(.is-in) .dash__bar {
	animation-play-state: paused;
}

@keyframes dashgrow {
	from {
		transform: scaleY(.05);
	}
	
	to {
		transform: scaleY(1);
	}
}

@media (prefers-reduced-motion:reduce) {
	html.anim .dash__bar {
		animation: none;
	}
}

.dash__xrow {
	display: flex;
	gap: clamp(16px, 3.4vw, 30px);
	margin-top: 8px;
}

.dash__x {
	flex: 1;
	text-align: center;
	font: var(--fw-regular) 10px/1 var(--mono);
	color: var(--muted);
}

.dash__flag {
	display: flex;
	align-items: center;
	gap: 11px;
	border: 1px solid var(--line);
	border-radius: 12px;
	padding: 12px 14px;
	background: linear-gradient(90deg, rgba(249, 66, 58, .07), transparent);
}

.dash__fmk {
	width: 24px;
	height: 24px;
	border-radius: 7px;
	flex: none;
	display: grid;
	place-items: center;
	background: rgba(249, 66, 58, .12);
	color: var(--red);
}

.dash__fmk svg {
	width: 14px;
	height: 14px;
}

.dash__ftext {
	font: var(--fw-regular) 13px/1.4 var(--sans);
	color: var(--ink);
	min-width: 0;
}

.dash__ftext b {
	font-weight: var(--fw-semibold);
}

.dash__fchip {
	margin-left: auto;
	font: var(--fw-semibold) 11.5px/1 var(--mono);
	color: var(--blue);
	background: var(--cool);
	border-radius: 100px;
	padding: 7px 12px;
	white-space: nowrap;
}

@media (max-width:600px) {
	.dash__flag {
		flex-wrap: wrap;
	}
}

/* =============================================================================
   VISUAL: HANDS-ON-THE-LOOP CARDS (.hands / .hand) — Edna + LockStep pair (§fit)
   ============================================================================= */

/* ---- the hands on the loop: two-up emphasis cards ---- */
.hands {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: clamp(16px, 2.4vw, 24px);
}

@media (max-width:720px) {
	.hands {
		grid-template-columns: 1fr;
	}
}

.hand {
	position: relative;
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 1px solid var(--line);
	border-radius: var(--radius-xl);
	padding: clamp(22px, 2.6vw, 30px);
	box-shadow: var(--shadow-1);
	transition: box-shadow .2s ease, border-color .2s ease, transform .2s ease;
}

.hand:hover {
	box-shadow: var(--shadow-3);
	border-color: var(--line-strong);
	transform: translateY(-2px);
}

.hand__mk {
	width: 44px;
	height: 44px;
	border-radius: 13px;
	display: grid;
	place-items: center;
	margin: 0 0 16px;
	flex: none;
}

.hand__mk--edna {
	background: var(--grad-edna);
}

.hand__mk--ls {
	background: var(--cool);
	color: var(--blue);
}

.hand__mk svg {
	width: 22px;
	height: 22px;
}

.hand__mk img {
	width: 100%;
	height: 100%;
	border-radius: inherit;
	object-fit: cover;
	display: block;
}

.hand__eyebrow {
	font: var(--fw-semibold) var(--fs-eyebrow)/1 var(--mono);
	text-transform: uppercase;
	letter-spacing: .1em;
	color: var(--blue);
	margin: 0 0 8px;
}

.hand__title {
	font: var(--fw-semibold) var(--fs-h4)/1.25 var(--sans);
	color: var(--ink);
	margin: 0 0 10px;
}

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

.hand__title a::after {
	content: "";
	position: absolute;
	inset: 0;
}

.hand:hover .hand__title a {
	color: var(--blue);
}

.hand__body {
	font: var(--fw-regular) var(--fs-body)/1.6 var(--sans);
	color: var(--body);
	margin: 0;
}

.hand__more {
	margin: 16px 0 0;
	font: var(--fw-semibold) 14px/1 var(--sans);
	color: var(--blue);
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

/* ============ VISUAL RIDER: .avid-repview — the "Representative view · figures illustrative." caption
   (promoted 2026-07-03; was 4 identical inline-styled instances on how-it-works) ============ */
.avid-repview {
	text-align: center;
	margin-top: var(--space-16);
	color: var(--muted);
	font-size: var(--fs-small);
}

/* ============ CONTEXT BAR (V-28) — stamp left · action/stages right, ABOVE product visuals.
   House pattern (Stephen, 2026-07-05): replaces below-visual strips. .bslide__export = blue action
   pill (MC); .bslide__stages = the FL arc progression (✓ accumulate; --stuck = warm-red Stage 0). */
.bslide__bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	margin: 0 0 10px;
}

.bslide__bar.mcbar {
	margin: 0 auto 10px;
}

.bslide__stamp {
	font: var(--fw-regular) 11.5px/1 var(--mono);
	color: var(--body);
}

.bslide__export {
	display: inline-flex;
	background: var(--cool);
	color: var(--blue);
	border-radius: 100px;
	padding: 8px 13px;
	font: var(--fw-semibold) 11.5px/1 var(--mono);
	white-space: nowrap;
}

.bslide__bar--solo {
	justify-content: center;
}

.bslide__stages {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font: var(--fw-medium) 10.5px/1 var(--mono);
	color: var(--muted);
	white-space: nowrap;
}

.bslide__stages i {
	font-style: normal;
	color: var(--line-strong);
}

.bslide__stage--done {
	color: var(--ink);
	font-weight: var(--fw-semibold);
}

.bslide__stage--done b {
	color: #5c8420;
	font-weight: inherit;
}

.bslide__stage--stuck {
	color: #b3372c;
	font-weight: var(--fw-semibold);
}

/* ============ PRIORITY WHY-BLOCK (V-26) — the in-product priority idiom:
   "Why is this a priority?" (Edna mark) + narrative + blue Dive Deeper, carded with gray fade. */
.dash__why {
	padding: 14px 16px;
	border: 1px solid var(--line);
	border-radius: 12px;
	background: linear-gradient(90deg, rgba(16, 24, 33, .06), rgba(255, 255, 255, 0) 70%);
}

.dash__whyk {
	display: flex;
	align-items: center;
	gap: 8px;
	font: var(--fw-semibold) 13px/1.2 var(--sans);
	color: var(--ink);
	margin: 0 0 7px;
}

.dash__whyk img {
	width: 17px;
	height: 17px;
	border-radius: 50%;
}

.dash__whyt {
	font: var(--fw-regular) 12.5px/1.55 var(--sans);
	color: var(--body);
	margin: 0 0 11px;
}

.dash__whyt b {
	font-weight: var(--fw-semibold);
	color: var(--ink);
}

.dash__dive {
	display: inline-flex;
	background: var(--blue);
	color: #fff;
	border-radius: 100px;
	padding: 8px 15px;
	font: var(--fw-semibold) 11.5px/1 var(--sans);
	box-shadow: 0 6px 14px -8px rgba(40, 99, 254, .6);
}

/* ============ STUCK NOTE (V-29) — Stage-0 story paper: the fundraiser's own to-do list,
   NOT an Avid screen. Same paper material family as the Exec sticky (.rlrep__note). */
.snote {
	position: relative;
	background: #fffbee;
	border: 1px solid #eee3b8;
	border-radius: 12px;
	box-shadow: 0 18px 40px -18px rgba(96, 78, 10, .4);
	padding: 26px 26px 20px;
	max-width: 460px;
	margin-inline: auto;
	transform: rotate(-1.2deg);
}

.snote__tape {
	position: absolute;
	top: -11px;
	left: 50%;
	transform: translateX(-50%) rotate(1.6deg);
	width: 92px;
	height: 24px;
	background: rgba(203, 196, 170, .38);
	border: 1px solid rgba(150, 140, 105, .18);
	border-radius: 2px;
}

.snote__goal {
	font: italic var(--fw-semibold) 15.5px/1.5 var(--sans);
	color: var(--ink);
	margin: 0 0 12px;
}

.snote__goal u {
	text-decoration-color: #d1442f;
	text-decoration-thickness: 2px;
	text-underline-offset: 3px;
}

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

.snote__list li {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 10.5px 0;
	border-bottom: 1px dashed #e5d9a8;
	font: var(--fw-medium) 13.5px/1.4 var(--sans);
	color: var(--ink);
}

.snote__box {
	flex: none;
	width: 13px;
	height: 13px;
	border: 1.6px solid #b7a86f;
	border-radius: 3px;
	transform: rotate(-1deg);
}

.snote__st {
	margin-left: auto;
	font: italic var(--fw-regular) 11.5px/1.3 var(--sans);
	color: #8a7f56;
	text-align: right;
	white-space: nowrap;
}

.snote__pen {
	font: italic var(--fw-semibold) 13.5px/1.3 var(--sans);
	color: #b3372c;
	margin: 14px 2px 0;
	transform: rotate(-.6deg);
}

.snote--week {
	transform: rotate(.8deg);
}

.snote--week .snote__list li {
	padding: 8.5px 0;
	align-items: baseline;
}

.snote__dow {
	flex: none;
	width: 36px;
	font: var(--fw-semibold) 10px/1 var(--mono);
	letter-spacing: .08em;
	text-transform: uppercase;
	color: #b7a86f;
}

.snote__wk {
	min-width: 0;
}

.snote__ghost {
	font: italic var(--fw-regular) 12.5px/1.4 var(--sans);
	color: #b3ab8d;
	text-decoration-color: #c9bd94;
	text-decoration-thickness: 1.4px;
	margin-right: 3px;
}

.snote__sat {
	font-size: 12.5px;
	padding-top: 7px;
}

.snote__sat .snote__dow {
	color: #b3372c;
}

.snote--done {
	transform: rotate(-.6deg);
}

.snote__ok {
	font-style: normal;
	font-weight: var(--fw-semibold);
	color: #5c8420;
}

.snote__blank {
	min-height: 19px;
}

.snote--done .snote__sat {
	font-size: 13.5px;
	padding-top: 8.5px;
}

.snote--done .snote__sat .snote__dow {
	color: #5c8420;
}

.snote--done .snote__pen {
	color: #5c8420;
}

@media (max-width:420px) {
	.snote__st {
		white-space: normal;
		max-width: 12ch;
	}
}

/* ============ FDASH CONNECTIONS MINI — verified widget grammar (2026-07-05 sweep):
   "Connections (N)" header; rows Status Connected (green) · Last Sync date. */
.fconx {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 8px;
	height: 100%;
	justify-content: center;
}

.fconx li {
	display: flex;
	align-items: center;
	gap: 10px;
	border: 1px solid var(--line);
	border-radius: 10px;
	padding: 9px 12px;
}

.fconx__n {
	font: var(--fw-semibold) 12px/1.2 var(--sans);
	color: var(--ink);
	min-width: 44px;
}

.fconx__ok {
	font: var(--fw-semibold) 11px/1.2 var(--sans);
	color: #3f7019;
}

.fconx__d {
	margin-left: auto;
	font: var(--fw-regular) 10.5px/1.2 var(--mono);
	color: var(--muted);
	white-space: nowrap;
}

/* ============ MOBILE (2026-07-05 bulletproofing pass) ============ */
.bslide__bar {
	flex-wrap: wrap;
	row-gap: 8px;
}

.bslide__stamp {
	line-height: 1.4;
}

@media (max-width:430px) {
	.bslide__stages {
		white-space: normal;
		line-height: 1.7;
	}
}

.sa__meta {
	flex-wrap: wrap;
	row-gap: 6px;
	line-height: 1.4;
}

@media (max-width:400px) {
	.fconx__d {
		white-space: normal;
		text-align: right;
		line-height: 1.35;
	}
	
	.fconx__n {
		min-width: 0;
	}
}

@media (max-width:380px) {
	.launch__row {
		flex-wrap: wrap;
		row-gap: 6px;
	}
	
	.launch__tags {
		margin-left: 33px;
	}
}

@media (max-width:360px) {
	.fcol__v {
		font-size: 8.5px;
	}
}
