:root {
	--cream: #fbfbfc;
	--cream-2: #eef0f5;
	--ink: #121729;
	--accent: #2f4bb5;
	--accent-tint: #e5e9f8;
	--accent-lift: #93a8f7;
	--warm: #5e6478;
	--warm-2: #969cb0;
	--warm-3: #c2c7d6;
	--hairline: #dde0ea;
	--hairline-2: #ebeef4;

	--sans: 'Plus Jakarta Sans', Helvetica, Arial, sans-serif;
	--mono: 'JetBrains Mono', ui-monospace, monospace;

	--r-card: 28px;
	--r-inner: 24px;
	--r-pill: 999px;

	--pad-card: 44px 48px;
	--pad-lg: clamp(32px, 4vw, 56px);
	--gap: 16px;
	--band: 28px;
	--section-gap: clamp(48px, 6vw, 96px);
	--container: 1240px;
	--nav-h: 113px;
	--edge: clamp(20px, 4vw, 48px);
	--shadow-card: 0 6px 24px rgba(18, 23, 41, 0.1);
}

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	scroll-padding-top: var(--nav-h);
}

/* The admin bar overlays the sticky nav for logged-in users. It is fixed only above 783px;
   below that WordPress lets it scroll away, so the nav goes back to the viewport top.
   The token is set on <html> because scroll-padding-top applies to the scrolling element. */
html:has(body.admin-bar) {
	--nav-h: 145px;
}

body.admin-bar .nav {
	top: 32px;
}

@media (max-width: 782px) {
	html:has(body.admin-bar) {
		--nav-h: 113px;
	}

	body.admin-bar .nav {
		top: 0;
	}
}

body {
	margin: 0;
	padding: 0;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	background: var(--cream);
	color: var(--ink);
	font-family: var(--sans);
	-webkit-font-smoothing: antialiased;
}

a {
	color: var(--accent);
	text-decoration: none;
}

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

img {
	max-width: 100%;
}

h1,
h2,
h3,
p,
blockquote,
figure {
	margin: 0;
}

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

/* Namespaced: WordPress puts `page`, `home`, `single` etc. on <body>, so a bare .page here
   would also match the body element and drag its children (including #wpadminbar) into layout. */
.site {
	flex: 1;
	display: flex;
	flex-direction: column;
	background: var(--cream);
	padding-inline: var(--edge);
}

/* Every top-level band centres on the same measure, so nothing drifts out of alignment. */
.site > * {
	width: 100%;
	max-width: var(--container);
	margin-inline: auto;
}

/* The pause between sections is what makes them read as separate; inside one, stay tight. */
.section {
	padding: 0 0 var(--section-gap);
}

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

.row {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
}

.card {
	border-radius: var(--r-card);
	padding: var(--pad-card);
}

.card--tint {
	background: var(--cream-2);
}

.card--inner {
	border-radius: var(--r-inner);
	padding: 32px;
	background: var(--cream-2);
}

/* The accent is a mid navy: dark enough to read on paper, too dark on ink. */
.section--bleed .label--accent,
.section--bleed .num {
	color: var(--accent-lift);
}

.pill {
	display: inline-flex;
	align-items: center;
	border-radius: var(--r-pill);
	padding: 11px 20px;
	background: var(--cream);
	font-size: 15px;
	line-height: 1.4;
}

.pill--tint {
	background: var(--cream-2);
}

/* The tint is the band's own background, so on the band the pill inverts to paper. */
.section--band .pill--tint {
	background: var(--cream);
}

.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--r-pill);
	padding: 15px 28px;
	font-size: 15px;
	font-weight: 600;
	transition: background-color 0.18s ease, color 0.18s ease;
}

/* Every variant states its own hover colours: inheriting the global a:hover would
   land ink text on an ink background. */
.btn--primary {
	background: var(--accent);
	color: var(--cream);
}

.btn--primary:hover,
.btn--nav:hover {
	background: var(--ink);
	color: var(--cream);
}

.btn--ghost {
	background: var(--cream);
	color: var(--ink);
}

.btn--ghost:hover {
	background: var(--ink);
	color: var(--cream);
}

.btn--nav {
	padding: 11px 22px;
	background: var(--accent);
	color: var(--cream);
}

.btn:focus-visible,
a:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 3px;
}

.label {
	font-family: var(--mono);
	font-size: 12px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--warm);
}

.label--accent {
	color: var(--accent);
}

.num {
	font-family: var(--mono);
	color: var(--accent);
}

.lede {
	font-size: 16px;
	line-height: 1.7;
	color: var(--warm);
	max-width: 760px;
}

.h-1,
.h-2,
.h-3 {
	font-weight: 600;
	letter-spacing: -0.02em;
}

.h-1 {
	font-size: clamp(36px, 4.4vw, 58px);
	line-height: 1.06;
	font-weight: 700;
	letter-spacing: -0.035em;
	text-wrap: pretty;
}

.h-2 {
	font-size: clamp(28px, 3vw, 40px);
	font-weight: 700;
	letter-spacing: -0.03em;
}

.h-3 {
	font-size: clamp(22px, 2vw, 26px);
}

.lede--narrow {
	max-width: 720px;
}

.lede--tight {
	max-width: 640px;
}

.nowrap {
	white-space: nowrap;
}

.gap-6 {
	gap: 6px;
}

.gap-8 {
	gap: 8px;
}

.gap-12 {
	gap: 12px;
}

.mr-6 {
	margin-right: 6px;
}

.align-end {
	align-items: flex-end;
}

.grid {
	display: grid;
	gap: var(--gap);
}

/* Fixed column counts: auto-fit would leave an orphan card on a half-filled row. */
.grid--2 {
	grid-template-columns: repeat(2, 1fr);
}

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

.split {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 40px;
}

/* Full-bleed callout: the page's positioning line, centred, in its own colour band so it
   reads as a statement rather than as part of the hero card. */
.topbar {
	width: auto;
	max-width: none;
	margin-inline: calc(var(--edge) * -1);
	padding: 13px var(--edge);
	background: var(--accent-tint);
}

/* Plain centred text, not flex: as a flex row the dot and the status get orphaned onto
   their own lines when the sentence wraps. */
.topbar__line {
	margin: 0 auto;
	max-width: var(--container);
	font-size: 14px;
	font-weight: 500;
	line-height: 1.55;
	letter-spacing: 0;
	text-align: center;
	text-wrap: balance;
	color: var(--ink);
}

.topbar__line::before {
	content: '';
	display: inline-block;
	width: 7px;
	height: 7px;
	margin-right: 9px;
	border-radius: 50%;
	background: var(--accent);
	vertical-align: middle;
}

.topbar__status {
	display: inline-block;
	color: var(--accent);
}

.topbar__status::before {
	content: '·';
	margin-right: 10px;
	color: var(--warm-2);
}

/* The nav floats: an opaque backing band would show as a cream box clipped to the container,
   which reads badly over the full-bleed section. The pill itself is the surface. */
.nav {
	position: sticky;
	top: 0;
	z-index: 10;
	padding: 20px 0;
	pointer-events: none;
}

.nav__bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: var(--cream-2);
	border-radius: var(--r-pill);
	padding: 12px 14px 12px 26px;
	box-shadow: var(--shadow-card);
	pointer-events: auto;
}

.nav__brand {
	font-size: 17px;
	font-weight: 700;
	letter-spacing: -0.01em;
	color: var(--ink);
}

.nav__links {
	display: flex;
	align-items: center;
	gap: 28px;
	font-size: 14px;
	color: var(--warm);
}

/* :not(.btn) so the CTA keeps its own colours — a bare `.nav__links a` outranks `.btn--nav`. */
.nav__links a:not(.btn) {
	color: var(--warm);
}

.nav__links a:not(.btn):hover {
	color: var(--ink);
}

.hero {
	padding: clamp(16px, 3vw, 36px) 0 var(--section-gap);
}

.hero__grid {
	display: grid;
	grid-template-columns: 1.3fr 1fr;
	gap: var(--gap);
}

.hero__copy {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 24px;
	padding: var(--pad-lg);
}

.hero__intro {
	max-width: 520px;
	font-size: 17px;
	line-height: 1.7;
	color: var(--warm);
}

.hero__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 6px;
}

.hero__portrait {
	position: relative;
	margin: 0;
	min-height: 100%;
	aspect-ratio: 4 / 5;
	border-radius: var(--r-card);
	overflow: hidden;
	background: var(--cream-2);
}

/* Names the face without a scrim: a solid card keeps the type legible over any crop. */
.hero__id {
	position: absolute;
	left: 20px;
	right: 20px;
	bottom: 20px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 16px 22px;
	border-radius: var(--r-inner);
	background: var(--cream);
}

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

/* The one place on the page a stranger can go and check who this is. */
.hero__in {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: none;
	width: 40px;
	height: 40px;
	margin-right: -8px;
	border-radius: 50%;
	color: var(--warm);
	transition: color 0.18s ease, background-color 0.18s ease;
}

.hero__in:hover {
	color: var(--accent);
	background: var(--accent-tint);
}

.hero__name {
	font-size: 16px;
	font-weight: 700;
	letter-spacing: -0.01em;
}

.hero__role {
	font-size: 14px;
	color: var(--warm);
}

.hero__portrait img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 20%;
	display: block;
}

.section__head {
	display: flex;
	flex-direction: column;
	gap: 14px;
	max-width: 780px;
	padding: 0 0 40px;
}

/* A numbered eyebrow gives the eye a landmark to stop on before the block of content.
   The rule above it is the mark that a new section has started. */
.section__eyebrow {
	display: flex;
	align-items: center;
	gap: 14px;
	color: var(--accent);
	padding-bottom: 2px;
}

.section__eyebrow::before {
	content: '';
	width: 32px;
	height: 2px;
	background: var(--accent);
}

.section__head .lede {
	font-size: 17px;
}

.symptom {
	border-radius: var(--r-inner);
	padding: 28px 32px;
	background: var(--cream-2);
	font-size: 17px;
	line-height: 1.55;
}

.deskrow {
	display: grid;
	grid-template-columns: 240px 1fr;
	gap: 32px;
	padding: 26px 0;
	border-top: 1px solid var(--hairline);
}

/* Without a card edge, the top rule is what opens the list. */
.deskrow:first-child {
	border-top-width: 2px;
	border-top-color: var(--accent);
}

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

.deskrow__term {
	font-size: 19px;
	font-weight: 600;
}

.deskrow__def {
	font-size: 17px;
	line-height: 1.7;
	color: var(--warm);
}

/* A divider sits between two bands, so the space above it (the parent's gap) and the space
   below it (this padding) are the same value. */
.divider {
	border-top: 1px solid var(--hairline);
	padding-top: var(--band);
}

.divider--soft {
	border-color: var(--hairline-2);
}

.rates {
	display: flex;
	flex-direction: column;
	gap: var(--band);
}

/* Its own grid rather than .grid--3: three price tiers must never break to 2 + 1. */
.rates__tiers {
	display: grid;
	/* Column count follows the number of cards in content.py, so adding or
	   removing a tier needs no CSS change. */
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 0;
}

.rate {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: 36px 40px;
	border-top: 2px solid var(--hairline);
}

.rate + .rate {
	border-left: 1px solid var(--hairline);
}

.rates__tiers > :first-child {
	padding-left: 0;
}

.rates__tiers > :last-child {
	padding-right: 0;
}

/* The retainer is the offer; a rule in the accent marks it without boxing it. */
.rate--feature {
	border-top-color: var(--accent);
}

.rate--feature .rate__amount {
	color: var(--accent);
}

.rate--feature::after {
	content: none;
}

.rate__price {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 4px;
}

.rate__amount {
	font-size: clamp(44px, 4.4vw, 60px);
	font-weight: 700;
	line-height: 1;
	letter-spacing: -0.03em;
}

.rate__qual {
	font-size: 14px;
	line-height: 1.2;
	color: var(--warm);
}

.rate__note {
	font-size: 15px;
	line-height: 1.65;
	color: var(--warm);
}

.quote {
	display: grid;
	grid-template-columns: 1fr 300px;
	gap: 56px;
	align-items: center;
}

.quote__text {
	font-size: clamp(22px, 2.4vw, 32px);
	line-height: 1.35;
	letter-spacing: -0.02em;
	font-weight: 500;
	text-wrap: pretty;
}

.quote__name {
	font-size: 16px;
	font-weight: 600;
}

.quote__role {
	font-size: 14px;
	color: var(--warm-2);
}

.cta {
	padding: var(--pad-lg);
}

.cta__sub {
	font-size: 16px;
	color: var(--warm);
}

.cta .btn {
	padding: 17px 30px;
}

.footer {
	display: flex;
	justify-content: space-between;
	/* Top-aligned: the two columns have different line counts, so bottom-aligning
	   opened a gap above the shorter one. */
	align-items: flex-start;
	gap: 32px;
	margin-top: auto;
	padding: 28px 8px 40px;
	border-top: 1px solid var(--hairline);
	font-size: 13px;
	line-height: 1.7;
	color: var(--warm);
}

.footer__nap {
	text-align: right;
}

.footer a:not(.btn) {
	color: var(--warm);
}

.footer a:not(.btn):hover {
	color: var(--ink);
}

.prose {
	padding: var(--pad-lg);
	font-size: 17px;
	line-height: 1.7;
}

.prose > * + * {
	margin-top: 1.1em;
}

/* The rates band shares the bleed geometry; only the colours differ. */
.section--band {
	width: auto;
	max-width: none;
	margin-inline: calc(var(--edge) * -1);
	margin-bottom: var(--section-gap);
	padding: clamp(64px, 8vw, 104px) var(--edge);
	background: var(--cream-2);
	/* One step darker: the page hairline disappears against the band's own tint. */
	--hairline: #d3d8e4;
}

.section--band > * {
	max-width: var(--container);
	margin-inline: auto;
}

/* One full-width band of ink: the single hard stop in an otherwise cream page.
   The negative inline margin cancels .site's edge padding, so it spans the viewport. */
.section--bleed {
	width: auto;
	max-width: none;
	margin-inline: calc(var(--edge) * -1);
	margin-bottom: var(--section-gap);
	padding: clamp(56px, 7vw, 96px) var(--edge);
	background: var(--ink);
	color: var(--cream);
}

.section--bleed > * {
	max-width: var(--container);
	margin-inline: auto;
}

.section--first {
	padding-top: clamp(24px, 3vw, 48px);
}

.section--last {
	padding-bottom: var(--section-gap);
}

.card--pills {
	gap: var(--band);
}

.deskrow__def {
	margin: 0;
}

.desk__list {
	margin: 0;
}

.rate__per {
	font-size: 15px;
}

/* Proof: the figures carry it, so they get the tier treatment rather than body copy. */
.proof {
	display: flex;
	flex-direction: column;
	gap: var(--band);
}

.proof .work {
	margin-top: -14px;
}

.proof__stats {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 0;
}

.proof__stat {
	display: flex;
	flex-direction: column;
	gap: 10px;
	padding: 0 32px;
}

.proof__stat:first-child {
	padding-left: 0;
}

.proof__stat + .proof__stat {
	border-left: 1px solid var(--hairline);
}

.work__head {
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	gap: 6px 14px;
}

.work__name {
	font-size: 22px;
	font-weight: 700;
	letter-spacing: -0.02em;
}

.work__meta {
	font-size: 15px;
	color: var(--warm);
}

/* The work itself, framed as a browser so it reads as a live site rather than a
   picture of one. A stranger recognises the brand faster than they read a claim. */
.work {
	display: block;
	overflow: hidden;
	border-radius: var(--r-inner);
	background: var(--ink);
	box-shadow: var(--shadow-card);
	transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.28s ease;
}

.work:hover {
	transform: translateY(-3px);
	box-shadow: 0 18px 44px rgba(18, 23, 41, 0.18);
}

.work__bar {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 12px 16px;
	background: var(--ink);
}

.work__dots {
	display: flex;
	gap: 6px;
}

.work__dots i {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: var(--warm-3);
	opacity: 0.5;
}

.work__url {
	font-family: var(--mono);
	font-size: 12px;
	color: var(--warm-2);
}

.work__shot {
	display: block;
	width: 100%;
	height: auto;
}

/* The claim leads and the figure sits inside the sentence as its evidence — a
   number on its own proves an audience, which is not what is being bought here. */
.proof__claim {
	font-size: 19px;
	font-weight: 600;
}

.proof__ev {
	font-size: 16px;
	line-height: 1.65;
	color: var(--warm);
}

.proof__stat .num {
	font-size: 17px;
}

.proof__foot {
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 20px;
}

.proof__note {
	font-size: 15px;
	line-height: 1.7;
	color: var(--warm);
	max-width: 52ch;
}

.rate__terms {
	font-size: 14px;
	color: var(--warm-2);
}

/* The sequence a caller is buying, at the point they decide to call. */
.steps {
	display: flex;
	flex-direction: column;
	gap: 18px;
	margin-bottom: var(--section-gap);
}

.steps__list {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 0;
}

.steps__step {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: 24px 32px 0 0;
	border-top: 2px solid var(--hairline);
}

.steps__step + .steps__step {
	padding-left: 32px;
	border-left: 1px solid var(--hairline);
}

.steps__n {
	font-family: var(--mono);
	font-size: 12px;
	letter-spacing: 0.1em;
	color: var(--accent);
}

.steps__term {
	font-size: 19px;
	font-weight: 600;
}

.steps__def {
	font-size: 16px;
	line-height: 1.65;
	color: var(--warm);
}

.rates__compare {
	max-width: 62ch;
	margin-top: var(--band);
	font-size: 16px;
	line-height: 1.65;
	color: var(--warm);
}

/* The one free thing on a page of prices. Paper on the tinted band so it reads as
   the way in rather than as a fourth tier. */
.ratescall {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 40px;
	margin-top: var(--band);
	padding: 36px 40px;
	/* Square on the ruled edge: a 3px accent bowing around a 24px radius reads as a
	   mistake rather than a marker. */
	border-radius: 0 var(--r-inner) var(--r-inner) 0;
	background: var(--cream);
	border-left: 3px solid var(--accent);
}

.ratescall__note {
	font-size: 16px;
	line-height: 1.7;
	color: var(--warm);
	max-width: 60ch;
}

.ratescall .btn {
	flex: none;
	padding: 17px 30px;
}

.quote {
	margin: 0;
}

@media (max-width: 900px) {
	:root {
		--pad-card: 28px 24px;
		--gap: 12px;
		--band: 22px;
	}

	.hero__grid,
	.quote,
	.deskrow {
		grid-template-columns: 1fr;
	}

	/* Tablet: two cards abreast, the third spanning, rather than three empty full-width bands. */
	.grid--3 {
		grid-template-columns: repeat(2, 1fr);
	}

	.grid--3 > :last-child {
		grid-column: 1 / -1;
	}

	/* Stacked, the portrait spans the full width, so cap its height instead of keeping a ratio. */
	.hero__portrait {
		aspect-ratio: auto;
		height: clamp(340px, 52vh, 470px);
	}

	.hero__portrait img {
		object-position: 50% 16%;
	}

	/* Short crop: the card shrinks to its text and tucks into the corner, off the face. */
	.hero__id {
		right: auto;
		left: 12px;
		bottom: 12px;
		padding: 11px 16px;
	}

	.hero__name {
		font-size: 15px;
	}

	.hero__role {
		font-size: 13px;
	}

	.quote,
	.cta {
		gap: 24px;
	}

	.section__head {
		padding-bottom: 26px;
	}

	/* The bands keep their full-bleed edge but not their desktop breathing room. */
	.section--band,
	.section--bleed {
		padding: clamp(44px, 9vw, 64px) var(--edge);
	}

	.deskrow:first-child {
		border-top-width: 2px;
	}

	.rates__tiers {
		grid-template-columns: 1fr;
	}

	.rate {
		padding: 28px 0;
	}

	.rate + .rate {
		border-left: 0;
	}

	.ratescall {
		flex-direction: column;
		align-items: flex-start;
		gap: 24px;
		padding: 28px;
	}

	.deskrow {
		gap: 6px;
	}

	.split,
	.footer {
		flex-direction: column;
		align-items: flex-start;
		gap: 20px;
	}

	/* Stacked, the two footer halves read as one centred block. */
	.footer {
		align-items: center;
		text-align: center;
	}

	.footer__nap {
		text-align: center;
	}

	.nav__links {
		gap: 16px;
		font-size: 13px;
	}

	.nav__bar {
		padding: 10px 10px 10px 18px;
	}
}

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

	/* Phone: one centred column. Headings, labels, figures and buttons all sit on the
	   same axis so the page reads as a single flow instead of a ragged left edge. */
	.section__head,
	.hero__copy,
	.rate,
	.ratescall,
	.ratescall .stack,
	.cta,
	.cta .stack {
		align-items: center;
		text-align: center;
	}

	.section__head {
		max-width: 100%;
	}

	.hero__actions,
	.card--pills .row,
	.ratescall,
	.cta {
		justify-content: center;
	}

	.hero__intro,
	.ratescall__note,
	.rate__note,
	.section__head .lede {
		margin-inline: auto;
	}

	.symptom,
	.deskrow,
	.deskrow__term,
	.quote,
	.quote__text {
		text-align: center;
	}

	/* The eyebrow's marker rule centres with its text rather than hanging off the edge. */
	.section__eyebrow {
		justify-content: center;
	}

	.rates,
	.rate__price {
		align-items: center;
	}

	/* The new blocks follow the same one-column, one-axis rule as everything else. */
	.proof__stats,
	.steps__list {
		grid-template-columns: 1fr;
	}

	.proof__stat,
	.steps__step {
		align-items: center;
		text-align: center;
		padding: 22px 0;
	}

	.proof__stat:first-child {
		padding-left: 0;
	}

	.proof__stat + .proof__stat,
	.steps__step + .steps__step {
		padding-left: 0;
		border-left: 0;
		border-top: 1px solid var(--hairline);
	}

	.steps__step {
		border-top: 1px solid var(--hairline);
	}

	.steps__step:first-child {
		border-top-width: 2px;
		border-top-color: var(--accent);
	}

	.proof__foot,
	.steps,
	.work__head {
		align-items: center;
		text-align: center;
		justify-content: center;
	}

	.proof__foot {
		justify-content: center;
	}

	.divider .label {
		text-align: center;
	}
}

@media (max-width: 560px) {
	.nav__links a:not(.btn) {
		display: none;
	}

	.topbar__line {
		font-size: 13px;
	}

	.rate__amount {
		font-size: 40px;
	}

	/* Full-bleed pills stack into a tall ragged column; smaller ones sit two-up. */
	.card--pills .pill {
		padding: 9px 14px;
		font-size: 14px;
	}

	.card--pills .row {
		gap: 8px;
	}

	/* The eyebrow reads as a heading for the row below it, not as another pill beside it. */
	.divider .label {
		flex: 1 0 100%;
		margin: 0 0 2px;
	}

	/* Buttons are the one thing worth stretching: full width beats a ragged half-row. */
	.hero__actions,
	.cta {
		align-items: stretch;
	}

	.hero__actions .btn,
	.cta .btn {
		width: 100%;
	}
}

/* Motion. The reveal's resting state is set from JS, so .has-reveal is the only
   thing standing between a script failure and a page nobody can read. */
.has-reveal [data-reveal] {
	opacity: 0;
	transform: translateY(14px);
}

.has-reveal [data-reveal].is-in {
	opacity: 1;
	transform: none;
	transition: opacity 0.5s ease var(--reveal-delay, 0ms), transform 0.5s cubic-bezier(0.22, 1, 0.36, 1) var(--reveal-delay, 0ms);
}

/* No fill on hover: the outer tiers run to the container edge, so a block of
   paper there lands as a hard vertical seam against the band. The top rule
   wipes in instead, which has no edges to catch. */
.rate::after {
	content: '';
	position: absolute;
	top: -2px;
	left: 0;
	right: 0;
	height: 2px;
	background: var(--accent);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
}

.rate:hover::after {
	transform: scaleX(1);
}

.rate__amount {
	transition: color 0.2s ease;
}

.rate:hover .rate__amount {
	color: var(--accent);
}

.symptom,
.pill {
	transition: background-color 0.18s ease, color 0.18s ease;
}

.pill:hover {
	background: var(--accent-tint);
}

.deskrow__term {
	transition: color 0.18s ease;
}

.deskrow:hover .deskrow__term {
	color: var(--accent);
}

.nav__links a[aria-current='true'] {
	color: var(--accent);
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		transition-duration: 0.01ms !important;
	}
}
