/* ==========================================================================
   Sections — header, footer, and the page-level bands.
   ========================================================================== */

/* ---------- Announcement bar ------------------------------------------------ */

.announce-dismissed .announce { display: none; }

.announce {
	background: var(--ink);
	color: var(--on-ink-muted);
	font-size: var(--step--1);
}
.announce__inner {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-s);
	min-height: 42px;
	text-align: center;
}
.announce p { margin: 0; }
.announce__close {
	display: grid; place-items: center;
	width: 34px; height: 34px;
	margin-left: auto;
	border: 0; border-radius: 50%;
	background: transparent;
	color: inherit;
	cursor: pointer;
	transition: background-color var(--dur-fast) var(--ease-out);
}
.announce__close:hover { background: var(--on-ink-10); color: var(--white); }
.announce__close .icon { width: 16px; height: 16px; }

/* ---------- Header ----------------------------------------------------------- */

.site-header {
	position: sticky;
	top: 0;
	z-index: var(--z-header);
	background: var(--glass-header);
	backdrop-filter: blur(12px);
	border-bottom: 1px solid transparent;
	transition:
		border-color var(--dur-base) var(--ease-out),
		box-shadow var(--dur-base) var(--ease-out),
		background-color var(--dur-base) var(--ease-out);
}
.site-header.is-stuck {
	border-bottom-color: var(--border);
	box-shadow: 0 4px 20px rgb(15 26 29 / 0.05);
}
.site-header__inner {
	display: flex;
	align-items: center;
	gap: var(--space-m);
	min-height: var(--header-h);
	transition: min-height var(--dur-base) var(--ease-out);
}
.site-header.is-stuck .site-header__inner { min-height: var(--header-h-compact); }

.site-logo { flex: none; display: block; }
.site-logo img { width: auto; height: 42px; transition: height var(--dur-base) var(--ease-out); }
.site-header.is-stuck .site-logo img { height: 34px; }
.site-logo--footer img { height: 46px; }
.site-logo--drawer img { height: 36px; }

/* Primary nav */
.primary-nav { margin-left: auto; }
@media (max-width: 1023px) { .primary-nav { display: none; } }
.primary-nav .menu {
	display: flex;
	align-items: center;
	gap: var(--space-xs);
	margin: 0; padding: 0;
	list-style: none;
}
.primary-nav .menu li { margin: 0; }
.menu-item--top { position: relative; display: flex; align-items: center; }

.nav-link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	padding: 0 var(--space-xs);
	color: var(--text);
	font-family: var(--font-display);
	font-size: var(--step-0);
	font-weight: 500;
	text-decoration: none;
	white-space: nowrap;
	transition: color var(--dur-fast) var(--ease-out);
}
.nav-link--top { position: relative; }
.nav-link--top::after {
	content: "";
	position: absolute;
	left: var(--space-xs); right: var(--space-xs);
	bottom: 14px;
	height: 2px;
	background: var(--accent-ink);
	border-radius: var(--radius-xs);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform var(--dur-base) var(--ease-out);
}
.menu-item--top:hover .nav-link--top::after,
.menu-item--top.is-current .nav-link--top::after,
.nav-link--top:focus-visible::after { transform: scaleX(1); }
.nav-link:hover { color: var(--accent-text); }

.nav-toggle {
	display: grid; place-items: center;
	width: 30px; height: 44px;
	margin-left: -6px;
	border: 0; background: none;
	color: var(--text-subtle);
	cursor: pointer;
	transition: color var(--dur-fast) var(--ease-out), transform var(--dur-base) var(--ease-out);
}
.nav-toggle .icon { width: 16px; height: 16px; }
.nav-toggle[aria-expanded="true"] { transform: rotate(180deg); color: var(--accent-text); }

/* Desktop dropdown / mega */
@media (min-width: 1024px) {
	.submenu {
		position: absolute;
		top: calc(100% - 6px);
		left: 50%;
		z-index: var(--z-header);
		min-width: 280px;
		margin: 0;
		padding: var(--space-s);
		list-style: none;
		background: var(--bg);
		border: var(--hairline);
		border-radius: var(--radius-l);
		box-shadow: var(--shadow-l);
		opacity: 0;
		visibility: hidden;
		pointer-events: none;
		transform: translate(-50%, 8px);
		transition:
			opacity var(--dur-base) var(--ease-out),
			transform var(--dur-base) var(--ease-out),
			visibility var(--dur-base) linear;
	}
	/* Opened by nav.js, which only reacts to the pointer being on the parent
	   item itself — hovering anywhere else in the header no longer opens it. */
	.menu-item--top.is-open > .submenu {
		opacity: 1;
		visibility: visible;
		pointer-events: auto;
		transform: translate(-50%, 0);
	}
	/* One plain column. The two-column mega panel was more structure than four
	   category links need. */
	.submenu { min-width: 306px; max-width: min(340px, calc(100vw - 2rem)); }
	.submenu .menu-item { position: relative; }
	.submenu .nav-link {
		display: block;
		width: 100%;
		padding: var(--space-xs) var(--space-s);
		border-radius: var(--radius-m);
		font-family: var(--font-body);
		font-weight: 500;
		white-space: normal;
		transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
	}
	.submenu .nav-link:hover { background: var(--surface); color: var(--accent-text); }
	.submenu .nav-toggle { display: none; }
	/* Third level renders inline under its parent rather than as a flyout. */
	/* Third level sits inline under its parent, indented against a hairline. */
	.submenu--nested {
		position: static;
		min-width: 0;
		margin: 2px 0 var(--space-2xs) var(--space-s);
		padding: 0 0 0 var(--space-s);
		border: 0;
		border-left: 1px solid var(--border);
		box-shadow: none;
		opacity: 1;
		/* The nested list is a .submenu too, so it picks up the closed panel's
		   hidden state. It must FOLLOW the parent rather than force itself
		   visible: forcing it kept its links clickable inside the invisible
		   panel (pointer cursor, and a click navigated). */
		visibility: inherit;
		pointer-events: inherit;
		transform: none;
		display: block;
		background: none;
	}
	.submenu--nested .nav-link { font-size: var(--step--1); color: var(--text-muted); padding-block: var(--space-2xs); }
}

/* Header actions */
.header-actions { display: flex; align-items: center; gap: 2px; margin-left: auto; }
@media (min-width: 1024px) { .header-actions { margin-left: var(--space-s); } }
.header-action {
	position: relative;
	display: grid; place-items: center;
	width: 44px; height: 44px;
	border: 0; border-radius: 50%;
	background: transparent;
	color: var(--text);
	text-decoration: none;
	cursor: pointer;
	transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.header-action:hover { background: var(--surface); color: var(--accent-text); }
.header-action .icon { width: 21px; height: 21px; }
.cart-count {
	position: absolute;
	top: 4px; right: 2px;
	min-width: 19px; height: 19px;
	padding: 0 5px;
	border-radius: var(--radius-full);
	background: var(--accent-ink);
	color: var(--white);
	font-size: var(--step--3);
	font-weight: 700;
	line-height: 19px;
	text-align: center;
	font-variant-numeric: tabular-nums;
}
.cart-count.is-empty { display: none; }

/* The burger owns every width below the nav's own breakpoint. It needs to be
   more specific than .header-action, which sets display: grid. */
@media (min-width: 1024px) {
	.site-header .header-burger { display: none; }
}

/* Search drop-down */
.site-search { border-top: var(--hairline); background: var(--bg); }
.site-search__inner { padding-block: var(--space-m); }
.site-search[hidden] { display: none; }

/* ---------- Mobile drawer ------------------------------------------------------ */

.drawer { position: fixed; inset: 0; z-index: var(--z-drawer); background: var(--scrim); }
.drawer[hidden] { display: none; }
.drawer__panel {
	display: flex;
	flex-direction: column;
	width: min(400px, 88vw);
	height: 100%;
	margin-left: auto;
	padding: var(--space-m) var(--space-m) var(--space-xl);
	background: var(--bg);
	overflow-y: auto;
	transform: translateX(100%);
	transition: transform var(--dur-slow) var(--ease-out);
}
.drawer.is-open .drawer__panel { transform: none; }
.drawer__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-l); }
.drawer__nav .menu { margin: 0; padding: 0; list-style: none; }
.drawer__nav .menu-item--top { display: flex; flex-wrap: wrap; align-items: center; border-bottom: var(--hairline); }
.drawer__nav .nav-link--top { flex: 1; font-size: var(--step-1); min-height: 56px; padding-inline: 0; }
.drawer__nav .nav-link--top::after { content: none; }
.drawer__nav .nav-toggle { width: 48px; height: 56px; }
.drawer__nav .submenu {
	flex-basis: 100%;
	margin: 0; padding: 0 0 var(--space-s) var(--space-s);
	list-style: none;
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--dur-slow) var(--ease-in-out);
}
.drawer__nav .submenu > * { overflow: hidden; }
.drawer__nav .submenu.is-open { grid-template-rows: 1fr; }
.drawer__nav .submenu .nav-link { min-height: 46px; font-size: var(--step-0); color: var(--text-muted); }
.drawer__foot { display: grid; gap: var(--space-2xs); margin-top: auto; padding-top: var(--space-l); }

/* ---------- Hero --------------------------------------------------------------- */

.hero {
	position: relative;
	/* .on-ink supplies the token set; the gradient below supplies the paint. */
	background-color: var(--ink);
	isolation: isolate;
	overflow: hidden;
	padding-block: var(--hero-y);
	background: var(--ink);
	color: var(--on-ink);
}
.hero::before {
	content: "";
	position: absolute;
	inset: -20% -10% auto -10%;
	height: 150%;
	z-index: -2;
	background:
		radial-gradient(48% 60% at 78% 18%, var(--veil-accent-lg) 0%, transparent 62%),
		radial-gradient(45% 55% at 12% 82%, var(--veil-brand-sm) 0%, transparent 60%),
		var(--gradient-ink);
}
/* Hex lattice: one repeating SVG, GPU-transformed only */
.hero__lattice {
	position: absolute;
	inset: -10%;
	z-index: -1;
	opacity: 0.4;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='104' viewBox='0 0 120 104' fill='none' stroke='%2335c97f' stroke-opacity='0.28' stroke-width='1'%3E%3Cpath d='M30 2l28 16v32L30 66 2 50V18z'/%3E%3Cpath d='M90 2l28 16v32L90 66 62 50V18z'/%3E%3Cpath d='M60 54l28 16v32L60 118 32 102V70z'/%3E%3C/svg%3E");
	background-size: 120px 104px;
	will-change: transform;
}
.hero__inner { display: grid; gap: clamp(var(--space-xl), 5vw, var(--space-3xl)); align-items: center; }
@media (min-width: 980px) { .hero__inner { grid-template-columns: 1.05fr 0.95fr; } }
.hero h1 { color: var(--white); max-width: 16ch; }
.hero .eyebrow { color: var(--accent-lift); }
.hero__lead { max-width: 52ch; color: var(--on-ink-muted); font-size: var(--step-1); line-height: var(--lh-snug); }
.hero__actions { display: flex; flex-wrap: wrap; gap: var(--space-s); margin-top: var(--space-l); }

/* On a phone every hero's CTAs stack full width — side by side they were a short
   pill and a shorter one against a full-width column of text. */
@media (max-width: 599px) {
	.hero__actions,
	.about-hero .cluster,
	.error-404 .cluster {
		display: grid;
		grid-template-columns: 1fr;
		gap: var(--space-2xs);
	}
	.hero__actions .btn,
	.about-hero .cluster .btn,
	.error-404 .cluster .btn { width: 100%; }
}
.hero__meta { display: flex; flex-wrap: wrap; gap: var(--space-m); margin-top: var(--space-xl); padding-top: var(--space-l); border-top: var(--hairline-ink); }
.hero__meta div { display: grid; gap: 2px; }
.hero__meta strong { font-family: var(--font-display); font-size: var(--step-1); color: var(--white); }
.hero__meta span { font-size: var(--step--1); color: var(--on-ink-muted); }

/* Hero visual: layered vial card */
.hero__visual { position: relative; display: grid; place-items: center; min-height: 300px; }
.hero__card {
	position: relative;
	width: min(420px, 100%);
	padding: var(--space-xl);
	border: 1px solid var(--on-ink-14);
	border-radius: var(--radius-xl);
	background: var(--glass-card);
	backdrop-filter: blur(6px);
	box-shadow: 0 30px 70px var(--shadow-cast-sm);
}
.hero__card-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-s); padding-block: var(--space-s); border-bottom: var(--hairline-ink); }
.hero__card-row:last-of-type { border-bottom: 0; }
.hero__card-row span { color: var(--on-ink-muted); font-size: var(--step--1); }
.hero__card-row strong { font-family: var(--font-display); color: var(--white); }
.hero__card .badge { margin-bottom: var(--space-m); }

/* ---------- Trust strip --------------------------------------------------------- */

.trust-strip { border-bottom: var(--hairline); background: var(--bg); }
.trust-strip__grid {
	display: grid;
	gap: var(--space-l);
	padding-block: var(--space-xl);
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
}
.trust-strip .feature h3 { font-size: var(--step-0); margin-bottom: 2px; }
.trust-strip .feature p { font-size: var(--step--1); margin: 0; }
.trust-strip .card-icon { width: 42px; height: 42px; }

/* ---------- Hero band --------------------------------------------------------
   One treatment for every hero on the site — the home hero's ink gradient plus
   its hex lattice — so a page never changes character on entry. The home hero
   keeps its own taller layout and parallax; everything else uses this.
   ---------------------------------------------------------------------------- */

.page-hero,
.shop-hero--ink,
.about-hero,
.error-404 {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	border-bottom: 0;
	background-color: var(--ink);
}

/* Gradient: the same two green washes the home hero uses. */
.page-hero::before,
.shop-hero--ink::before,
.about-hero::before,
.error-404::before {
	content: "";
	position: absolute;
	inset: -60% -10% auto -10%;
	height: 260%;
	z-index: -2;
	background:
		radial-gradient(46% 58% at 82% 14%, var(--veil-accent-md) 0%, transparent 62%),
		radial-gradient(42% 52% at 10% 86%, var(--veil-brand-sm) 0%, transparent 60%),
		var(--gradient-ink);
}

/* Lattice: the same hex tile, static here rather than parallaxed. */
.page-hero::after,
.shop-hero--ink::after,
.about-hero::after,
.error-404::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	opacity: 0.4;
	pointer-events: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='104' viewBox='0 0 120 104' fill='none' stroke='%2335c97f' stroke-opacity='0.28' stroke-width='1'%3E%3Cpath d='M30 2l28 16v32L30 66 2 50V18z'/%3E%3Cpath d='M90 2l28 16v32L90 66 62 50V18z'/%3E%3Cpath d='M60 54l28 16v32L60 118 32 102V70z'/%3E%3C/svg%3E");
	background-size: 120px 104px;
}

.page-hero { padding-block: var(--space-2xl); }
.page-hero .breadcrumb { margin-bottom: var(--space-m); }
.page-hero h1 { margin-bottom: var(--space-s); max-width: 20ch; color: var(--white); }
.page-hero p { max-width: 62ch; color: var(--text-muted); }
.page-hero .legal-meta { color: var(--on-ink-muted); }

/* ---------- COA band -------------------------------------------------------------- */

.coa-band .coa-card {
	display: grid;
	gap: var(--space-s);
	padding: var(--space-l);
	border: var(--hairline);
	border-radius: var(--radius-l);
	background: var(--bg);
}
.coa-card__head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-s); }
.coa-card__head h3 { margin: 0; font-size: var(--step-1); }
.coa-card dl { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: var(--space-s); margin: 0; }
.coa-card dt { font-size: var(--step--2); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-subtle); }
.coa-card dd { margin: 2px 0 0; font-family: var(--font-display); font-weight: 600; color: var(--text); }

/* ---------- FAQ --------------------------------------------------------------------- */

.faq__grid { display: grid; gap: clamp(var(--space-l), 4vw, var(--space-3xl)); align-items: start; }
@media (min-width: 900px) { .faq__grid { grid-template-columns: 0.8fr 1.2fr; } }

/* ---------- CTA band ----------------------------------------------------------------- */

.cta-band { padding-block: var(--section-y); background: var(--ink); }
.cta-band__inner { display: grid; gap: var(--space-xl); align-items: center; }
@media (min-width: 900px) { .cta-band__inner { grid-template-columns: 1.1fr 0.9fr; } }
.cta-band h2 { color: var(--white); max-width: 18ch; }
.cta-band .lead { color: var(--on-ink-muted); }
.cta-band input { background: var(--on-ink-6); border-color: var(--on-ink-20); color: var(--white); }
.cta-band input::placeholder { color: var(--on-ink-45); }
.cta-band .form-note { margin-top: var(--space-2xs); color: var(--on-ink-muted); }

/* ---------- Footer ---------------------------------------------------------------------- */

.site-footer { padding-block: var(--space-3xl) var(--space-m); background: var(--ink); }
.site-footer__grid {
	display: grid;
	gap: var(--space-xl);
	grid-template-columns: 1fr;
}
@media (min-width: 700px) { .site-footer__grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .site-footer__grid { grid-template-columns: 1.5fr 1fr 1fr 1.2fr; gap: var(--space-2xl); } }
.site-footer__brand p { max-width: 42ch; color: var(--on-ink-muted); font-size: var(--step--1); }
.site-footer h2 {
	margin-bottom: var(--space-m);
	font-size: var(--step--1);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--white);
}
.site-footer .menu { margin: 0; padding: 0; list-style: none; display: grid; gap: 2px; }
.site-footer .menu li { margin: 0; }
.site-footer .menu a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	color: var(--on-ink-muted);
	text-decoration: none;
	font-size: var(--step--1);
	transition: color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}
.site-footer .menu a:hover { color: var(--accent-lift); transform: translateX(3px); }

.trust-list, .contact-list { margin: var(--space-m) 0 0; padding: 0; list-style: none; display: grid; gap: var(--space-2xs); }
.trust-list li, .contact-list li {
	display: flex; gap: var(--space-2xs); align-items: center;
	margin: 0;
	color: var(--on-ink-muted);
	font-size: var(--step--1);
}
.contact-list li { min-height: 40px; }
.trust-list .icon, .contact-list .icon { width: 18px; height: 18px; color: var(--accent-lift); flex: none; }
/* 24px minimum target height (WCAG 2.5.8) — the bare text line measured 22px
   on phones, and these are the primary way anyone contacts the lab. */
.contact-list a { display: inline-flex; align-items: center; min-height: 24px; color: var(--on-ink-muted); text-decoration: none; }
.contact-list a:hover { color: var(--accent-lift); }
.contact-list strong { color: var(--white); font-weight: 600; }

.site-footer__disclaimer {
	margin-top: var(--space-xl);
	padding: var(--space-s) var(--space-m);
	border-left: 3px solid var(--on-ink-16);
	border-radius: 0 var(--radius-m) var(--radius-m) 0;
	background: var(--on-ink-4);
	color: var(--on-ink-muted);
	font-size: var(--step--1);
	max-width: var(--measure);
}
.site-footer__bottom {
	display: flex; flex-wrap: wrap; gap: var(--space-s);
	align-items: center; justify-content: space-between;
	margin-top: var(--space-l);
	padding-top: var(--space-m);
	border-top: var(--hairline-ink);
	color: var(--on-ink-muted);
}
.site-footer__bottom .menu { display: flex; flex-wrap: wrap; gap: var(--space-m); }
.site-footer__bottom .menu a { min-height: 32px; }

/* ---------- Legal / prose pages ------------------------------------------------------------- */

.legal-layout { display: grid; gap: var(--space-2xl); align-items: start; }
@media (min-width: 900px) { .legal-layout { grid-template-columns: 250px 1fr; gap: var(--space-3xl); } }
.legal-toc { font-size: var(--step--1); }
@media (min-width: 900px) { .legal-toc { position: sticky; top: calc(var(--header-h) + var(--space-m)); } }
.legal-toc h2 { font-size: var(--step--1); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-subtle); margin-bottom: var(--space-s); }
.legal-toc ol { margin: 0; padding: 0; list-style: none; counter-reset: toc; }
.legal-toc li { margin: 0; border-left: 2px solid var(--border); }
.legal-toc a {
	display: block;
	padding: 10px var(--space-s);
	color: var(--text-muted);
	text-decoration: none;
	transition: color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}
.legal-toc li:hover, .legal-toc li.is-active { border-left-color: var(--accent-text); }
.legal-toc li.is-active a { color: var(--text); font-weight: 600; }
.legal-meta { margin-bottom: var(--space-l); color: var(--text-subtle); font-size: var(--step--1); }

/* ---------- Contact ------------------------------------------------------------------------- */

.contact-layout { display: grid; gap: clamp(var(--space-xl), 4vw, var(--space-3xl)); align-items: start; }
@media (min-width: 900px) { .contact-layout { grid-template-columns: 1.2fr 0.8fr; } }
.contact-cards { display: grid; gap: var(--space-s); }
.contact-cards .card { padding: var(--space-m); }
.contact-cards .feature h3 { font-size: var(--step-0); }
.contact-cards .feature p { margin: 0; font-size: var(--step--1); }
.contact-cards .card-icon { width: 40px; height: 40px; }

/* ---------- Blog ---------------------------------------------------------------------------- */

.post-card { display: flex; flex-direction: column; overflow: hidden; }
.post-card__media { aspect-ratio: 16 / 10; background: var(--surface); overflow: hidden; }
.post-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-slow) var(--ease-out); }
.post-card:hover .post-card__media img { transform: scale(1.04); }
.post-card__body { display: grid; gap: var(--space-2xs); padding: var(--space-l); }
.post-card__meta { font-size: var(--step--2); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-subtle); }
.post-card h3 { font-size: var(--step-1); margin: 0; }
.post-card h3 a { color: var(--text); text-decoration: none; }
.post-card h3 a:hover { color: var(--accent-ink); }

.entry-content { max-width: var(--measure); }
.entry-content img { border-radius: var(--radius-l); }

/* ---------- 404 ------------------------------------------------------------------------------ */

.error-404 { padding-block: var(--hero-y); text-align: center; color: var(--on-ink); }
.error-404 .display { color: var(--white); }
.error-404 p { max-width: 52ch; margin-inline: auto; color: var(--on-ink-muted); }
.error-404 .cluster { justify-content: center; }

/* ---------- Wishlist / compare --------------------------------------------------------------- */

.wishlist-grid { display: grid; gap: var(--space-l); grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); }

/* ---------- Product carousel ------------------------------------------------------
   A scroll-snap track. Without JS it is still a usable horizontal scroller; with
   JS the buttons page it by a whole number of visible cards.
   --------------------------------------------------------------------------------- */

.carousel-section { overflow: hidden; }

.carousel-head {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-m);
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: var(--space-xl);
}
.carousel-head .section-head { margin-bottom: 0; }

.carousel-controls { display: flex; align-items: center; gap: var(--space-2xs); }

.carousel-btn {
	position: relative;
	display: grid;
	place-items: center;
	width: 46px; height: 46px;
	border: 1px solid var(--border);
	border-radius: 50%;
	background: var(--bg);
	color: var(--text);
	cursor: pointer;
	box-shadow: var(--shadow-s);
	transition:
		border-color var(--dur-fast) var(--ease-out),
		color var(--dur-fast) var(--ease-out),
		background-color var(--dur-fast) var(--ease-out),
		box-shadow var(--dur-base) var(--ease-out),
		transform var(--dur-fast) var(--ease-out),
		opacity var(--dur-fast) var(--ease-out);
}
.carousel-btn:hover:not([disabled]) {
	background: var(--ink);
	border-color: var(--ink);
	color: var(--white);
	box-shadow: var(--shadow-m);
	transform: translateY(-1px);
}
.carousel-btn:active:not([disabled]) { transform: translateY(0); box-shadow: var(--shadow-s); }
.carousel-btn[disabled] {
	opacity: 1;
	cursor: default;
	color: var(--text-subtle);
	border-color: var(--border);
	background: var(--surface);
	box-shadow: none;
}
.carousel-btn .icon { width: 18px; height: 18px; }

/* The viewport bleeds to the screen edge so a partly visible next card hints
   that the row scrolls, while the first card still lines up with the grid. */
.carousel-viewport { padding-right: 0; }
@media (min-width: 700px) { .carousel-viewport { padding-right: var(--gutter); } }

.carousel-track {
	display: flex;
	gap: var(--space-l);
	margin: 0;
	padding: 4px 4px var(--space-s);
	list-style: none;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	/* proximity, not mandatory: mandatory snapping cancels a programmatic
	   smooth scroll mid-flight in Chrome, so the arrows appear dead. */
	scroll-snap-type: x proximity;
	scroll-padding-left: 4px;
	scrollbar-width: none;
}
.carousel-track::-webkit-scrollbar { display: none; }
.carousel-track:focus-visible { outline: 3px solid var(--focus); outline-offset: 4px; border-radius: var(--radius-l); }

/* Fixed-basis items, not fractions: a fraction inside a scroller just squeezes
   every card into the visible width instead of overflowing it. */
.carousel-item {
	flex: 0 0 78%;
	margin: 0;
	scroll-snap-align: start;
	display: flex;
}
@media (min-width: 640px)  { .carousel-item { flex-basis: calc((100% - var(--space-l)) / 2); } }
@media (min-width: 900px)  { .carousel-item { flex-basis: calc((100% - var(--space-l) * 2) / 3); } }
@media (min-width: 1200px) { .carousel-item { flex-basis: calc((100% - var(--space-l) * 3) / 4); } }

.carousel-item .product-card { width: 100%; height: 100%; }

/* ---------- COA certificate gallery ------------------------------------------------ */

.coa-grid {
	display: grid;
	gap: var(--space-l);
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
}
.coa-tile {
	display: flex;
	flex-direction: column;
	gap: var(--space-s);
	margin: 0;
	padding: var(--space-s);
	background: var(--bg);
	border: var(--hairline);
	border-radius: var(--radius-l);
	box-shadow: var(--shadow-s);
	transition: transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}
.coa-tile:hover { transform: translateY(-4px); box-shadow: var(--shadow-l); }

.coa-tile__link {
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: var(--radius-m);
	background: var(--surface);
	aspect-ratio: 3 / 4;
}
.coa-tile__link img { width: 100%; height: 100%; object-fit: cover; object-position: top center; }
.coa-tile__zoom {
	position: absolute;
	right: var(--space-2xs);
	bottom: var(--space-2xs);
	display: grid;
	place-items: center;
	width: 40px; height: 40px;
	border-radius: 50%;
	background: var(--frost);
	color: var(--text);
	box-shadow: var(--shadow-s);
	opacity: 0;
	transform: translateY(6px);
	transition: opacity var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}
.coa-tile:hover .coa-tile__zoom,
.coa-tile__link:focus-visible .coa-tile__zoom { opacity: 1; transform: none; }
.coa-tile__zoom .icon { width: 18px; height: 18px; }

.coa-tile figcaption { display: grid; gap: var(--space-2xs); justify-items: start; }
.coa-tile__label { font-size: var(--step--1); color: var(--text-muted); }

/* ==========================================================================
   About page
   ========================================================================== */

.about-hero { padding-block: var(--hero-y) var(--hero-y-end); }


.about-hero__inner {
	display: grid;
	gap: clamp(var(--space-xl), 5vw, var(--space-3xl));
	align-items: center;
}
@media (min-width: 940px) { .about-hero__inner { grid-template-columns: 1.05fr 0.95fr; } }

.about-hero h1 { color: var(--white); max-width: 17ch; }
.about-hero__lead { max-width: 54ch; color: var(--on-ink-muted); font-size: var(--step-1); line-height: var(--lh-snug); }

/* Product shot with the certificate tucked under its corner — the page's one
   piece of real texture, built from catalogue media rather than stock. */
.about-hero__media { position: relative; padding-bottom: var(--space-2xl); }
.about-hero__shot {
	border-radius: var(--radius-xl);
	overflow: hidden;
	border: 1px solid var(--on-ink-14);
	box-shadow: 0 30px 70px var(--shadow-cast-lg);
	transform: rotate(-1.2deg);
}
.about-hero__shot img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; }

.about-hero__chip {
	position: absolute;
	z-index: 2;
	right: -6px;
	bottom: 0;
	width: min(168px, 40%);
	padding: 8px 8px 12px;
	border-radius: var(--radius-m);
	background: var(--white);
	box-shadow: 0 18px 40px var(--shadow-cast-md);
	transform: rotate(3deg);
}
.about-hero__chip img {
	width: 100%;
	aspect-ratio: 3 / 4;
	object-fit: cover;
	object-position: top center;
	border-radius: var(--radius-xs);
}
/* Sits inside the card: hanging it off the bottom edge clipped it against the
   band's overflow. */
.about-hero__chip .badge { position: absolute; left: 14px; top: 14px; box-shadow: var(--shadow-s); }

/* Stat rail under the hero */
.stat-rail {
	display: grid;
	gap: var(--space-m);
	margin: clamp(var(--space-xl), 5vw, var(--space-3xl)) 0 0;
	padding-top: var(--space-l);
	border-top: var(--hairline-ink);
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
}
.stat-rail div { display: grid; gap: 4px; }
.stat-rail dt { order: 2; font-size: var(--step--1); color: var(--on-ink-muted); }
.stat-rail dd {
	order: 1;
	margin: 0;
	font-family: var(--font-display);
	font-size: var(--step-3);
	font-weight: 600;
	line-height: 1;
	color: var(--white);
}

/* ---------- Story ------------------------------------------------------------ */

.story { display: grid; gap: clamp(var(--space-xl), 5vw, var(--space-3xl)); align-items: center; }
@media (min-width: 940px) { .story { grid-template-columns: 1fr 0.85fr; } }
.story__text .prose { margin-top: var(--space-m); }
.story blockquote {
	margin-top: var(--space-xl);
	font-family: var(--font-display);
	font-size: var(--step-1);
	line-height: var(--lh-snug);
}

.story__media { position: relative; min-height: 320px; }
.story__shot {
	margin: 0;
	border-radius: var(--radius-l);
	overflow: hidden;
	box-shadow: var(--shadow-l);
	background: var(--surface);
}
.story__shot img { width: 100%; height: 100%; object-fit: cover; display: block; }
.story__shot--one { width: 78%; aspect-ratio: 4 / 3; }
.story__shot--two {
	position: absolute;
	right: 0;
	bottom: -6%;
	width: 52%;
	aspect-ratio: 1 / 1;
	border: 6px solid var(--bg);
	border-radius: var(--radius-l);
}
@media (max-width: 599px) {
	.story__media { min-height: 0; }
	.story__shot--one { width: 100%; }
	.story__shot--two { position: static; width: 60%; margin-top: calc(var(--space-m) * -1); margin-left: auto; }
}

/* ---------- Principles ------------------------------------------------------- */

.principles {
	display: grid;
	gap: 0;
	margin: 0;
	padding: 0;
	list-style: none;
	border-top: var(--hairline);
}
@media (min-width: 800px) { .principles { grid-template-columns: 1fr 1fr; column-gap: var(--space-3xl); } }

.principle {
	display: flex;
	gap: var(--space-m);
	align-items: flex-start;
	margin: 0;
	padding: var(--space-l) 0;
	border-bottom: var(--hairline);
}
.principle__num {
	flex: none;
	font-family: var(--font-display);
	font-size: var(--step-1);
	font-weight: 600;
	line-height: 1.1;
	color: var(--accent-text);
	font-variant-numeric: tabular-nums;
}
.principle h3 { margin-bottom: var(--space-2xs); font-size: var(--step-1); }
.principle p { margin: 0; color: var(--text-muted); }

/* ---------- Process band ------------------------------------------------------ */

.process__inner { display: grid; gap: clamp(var(--space-xl), 5vw, var(--space-3xl)); align-items: center; }
@media (min-width: 940px) { .process__inner { grid-template-columns: 1.1fr 0.9fr; } }

.process__proof {
	display: grid;
	gap: var(--space-l);
	justify-items: center;
	padding: var(--space-xl);
	border: 1px solid var(--ink-line);
	border-radius: var(--radius-xl);
	background: var(--on-ink-4);
	text-decoration: none;
	transition: border-color var(--dur-base) var(--ease-out), background-color var(--dur-base) var(--ease-out);
}
.process__proof:hover { border-color: var(--veil-lift); background: var(--on-ink-6); }

.process__stack { position: relative; display: block; width: min(300px, 100%); aspect-ratio: 4 / 3; }
.process__sheet {
	position: absolute;
	top: 0;
	width: 62%;
	border-radius: var(--radius-m);
	overflow: hidden;
	box-shadow: 0 16px 36px var(--shadow-cast-md);
	background: var(--white);
	transition: transform var(--dur-slow) var(--ease-out);
}
.process__sheet img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: top center; display: block; }
.process__sheet--1 { left: 0; transform: rotate(-6deg); }
.process__sheet--2 { left: 19%; transform: rotate(1deg); z-index: 2; }
.process__sheet--3 { left: 38%; transform: rotate(7deg); }
.process__proof:hover .process__sheet--1 { transform: rotate(-9deg) translateY(-4px); }
.process__proof:hover .process__sheet--3 { transform: rotate(10deg) translateY(-4px); }

.process__proof-label {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2xs);
	color: var(--accent-lift);
	font-weight: 600;
	font-size: var(--step--1);
}
.process__proof-label .icon { width: 17px; height: 17px; }

/* ---------- Reasons + contact rail --------------------------------------------- */

.reason-grid {
	display: grid;
	gap: var(--space-xl) var(--space-2xl);
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
}

.about-contact { display: grid; gap: clamp(var(--space-xl), 4vw, var(--space-3xl)); align-items: center; }
@media (min-width: 900px) { .about-contact { grid-template-columns: 0.9fr 1.1fr; } }

.contact-rail {
	display: grid;
	gap: var(--space-s);
	margin: 0;
	padding: 0;
	list-style: none;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));
}
.contact-rail li {
	display: grid;
	gap: 2px;
	margin: 0;
	padding: var(--space-m);
	background: var(--bg);
	border: var(--hairline);
	border-radius: var(--radius-l);
}
.contact-rail .icon { width: 20px; height: 20px; color: var(--accent-text); }
.contact-rail span { font-size: var(--step--2); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-subtle); }
.contact-rail strong, .contact-rail a { font-family: var(--font-display); font-weight: 600; color: var(--text); word-break: break-word; }
.contact-rail a { text-decoration: none; }
.contact-rail a:hover { color: var(--accent-text); }

/* ---------- Header mini cart -------------------------------------------------------
   A panel anchored to the cart button. Hidden until nav JS opens it, so it never
   flashes on load and a no-JS visitor simply follows the link to /cart/.
   ---------------------------------------------------------------------------------- */

.header-cart-wrap { position: relative; }

.mini-cart-backdrop[hidden], .mini-cart[hidden] { display: none; }

/* Backdrop: dims the page behind the drawer and catches the click that closes it. */
.mini-cart-backdrop {
	position: fixed;
	inset: 0;
	z-index: calc(var(--z-drawer) - 1);
	background: var(--scrim);
	opacity: 0;
	transition: opacity var(--dur-base) var(--ease-out);
}
.header-cart-wrap.is-open .mini-cart-backdrop { opacity: 1; }

/* Drawer: flush to the right edge, full viewport height. */
.mini-cart {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	z-index: var(--z-drawer);
	width: min(420px, 92vw);
	height: 100vh;
	height: 100dvh;
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: var(--bg);
	border: 0;
	border-left: var(--hairline);
	border-radius: 0;
	box-shadow: -18px 0 48px var(--scrim-shadow);
	transform: translateX(100%);
	transition: transform var(--dur-slow) var(--ease-out);
}
.header-cart-wrap.is-open .mini-cart { transform: none; }

.mini-cart__head {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-s);
	padding: var(--space-l) var(--space-l) var(--space-m);
	border-bottom: var(--hairline);
}
.mini-cart__title {
	display: flex;
	align-items: center;
	gap: var(--space-2xs);
	margin: 0;
	font-size: var(--step-1);
	letter-spacing: 0;
}
.mini-cart__count {
	display: grid;
	place-items: center;
	min-width: 22px;
	height: 22px;
	padding: 0 6px;
	border-radius: var(--radius-full);
	background: var(--accent-soft);
	color: var(--accent-text-hover);
	font-family: var(--font-body);
	font-size: var(--step--2);
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}
.mini-cart__close {
	display: grid; place-items: center;
	width: 36px; height: 36px;
	border: 0; border-radius: 50%;
	background: transparent;
	color: var(--text-subtle);
	cursor: pointer;
	transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.mini-cart__close:hover { background: var(--surface); color: var(--text); }
.mini-cart__close .icon { width: 16px; height: 16px; }

.mini-cart__items {
	/* auto basis, not 0: with flex-basis 0 the list contributed no intrinsic
	   height and collapsed to a sliver with its own scrollbar. */
	flex: 1 1 auto;
	min-height: 0;
	margin: 0;
	padding: var(--space-2xs) var(--space-l);
	list-style: none;
	overflow-y: auto;
	overscroll-behavior: contain;
	scrollbar-width: thin;
}
.mini-cart__item {
	display: grid;
	grid-template-columns: 56px 1fr 32px;
	gap: var(--space-s);
	align-items: start;
	margin: 0;
	padding: var(--space-s) 0;
	border-bottom: var(--hairline);
}
.mini-cart__item:last-child { border-bottom: 0; }

.mini-cart__thumb {
	position: relative;
	display: block;
	width: 56px; height: 56px;
	border-radius: var(--radius-m);
	overflow: hidden;
	background: var(--surface);
}
.mini-cart__thumb img { width: 100%; height: 100%; object-fit: cover; }

.mini-cart__detail { min-width: 0; display: grid; gap: 6px; }
.mini-cart__detail h3 { margin: 0; font-size: var(--step--1); line-height: 1.35; letter-spacing: 0; }
.mini-cart__detail h3 a {
	display: inline-block;
	padding-block: var(--space-3xs);
	color: var(--text);
	text-decoration: none;
}
.mini-cart__detail h3 a:hover { color: var(--accent-text); }
.mini-cart__variation { margin: 0; font-size: var(--step--2); color: var(--text-subtle); }
.mini-cart__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2xs); }
.mini-cart__row .price { font-size: var(--step--1); }

.qty--sm { border-radius: var(--radius-full); }
.qty--sm button { width: 30px; min-height: 32px; font-size: var(--step-0); }
.qty--sm input { width: 34px; min-height: 32px; font-size: var(--step--1); }

.mini-cart__remove {
	display: grid; place-items: center;
	width: 32px; height: 32px;
	border: 0; border-radius: 50%;
	background: var(--surface);
	color: var(--text-subtle);
	cursor: pointer;
	transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.mini-cart__remove:hover { background: var(--danger-soft); color: var(--danger); }
.mini-cart__remove .icon { width: 13px; height: 13px; }

.mini-cart__foot {
	flex: none;
	padding: var(--space-m) var(--space-l) calc(var(--space-l) + env(safe-area-inset-bottom));
	border-top: var(--hairline);
	background: var(--surface);
}
.mini-cart__subtotal {
	display: flex; align-items: baseline; justify-content: space-between;
	font-size: var(--step--1);
	color: var(--text-muted);
}
.mini-cart__subtotal strong {
	font-family: var(--font-display);
	font-size: var(--step-1);
	color: var(--text);
	font-variant-numeric: tabular-nums;
}
.mini-cart__note { margin: 0 0 var(--space-s); font-size: var(--step--1); color: var(--text-subtle); }

/* Side by side: stacked full-width buttons pushed the item list down to a
   sliver on short viewports. */
.mini-cart__actions { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: var(--space-2xs); }
.mini-cart__actions .btn { min-height: 48px; padding-inline: var(--space-s); font-size: var(--step--1); }

.mini-cart__trust {
	display: flex;
	flex-wrap: nowrap;
	justify-content: space-between;
	gap: var(--space-2xs);
	margin: var(--space-s) 0 0;
	padding: var(--space-s) 0 0;
	border-top: var(--hairline);
	list-style: none;
}
.mini-cart__trust li {
	display: flex; align-items: center; gap: var(--space-3xs);
	margin: 0;
	font-size: var(--step--2);
	color: var(--text-subtle);
}
.mini-cart__trust .icon { width: 14px; height: 14px; color: var(--accent-text); }

.mini-cart__empty {
	display: grid;
	justify-items: center;
	gap: var(--space-s);
	padding: var(--space-2xl) var(--space-m);
	text-align: center;
}
.mini-cart__empty p { margin: 0; color: var(--text-muted); font-size: var(--step--1); }

/* Busy state while a quantity change is in flight. */
.mini-cart__busy {
	position: absolute;
	inset: 0;
	background: var(--on-ink-55);
	opacity: 0;
	pointer-events: none;
	transition: opacity var(--dur-fast) var(--ease-out);
}
.mini-cart.is-busy .mini-cart__busy { opacity: 1; pointer-events: auto; }

@media (max-width: 480px) {
	.mini-cart { width: 100vw; border-left: 0; }
}

/* ---------- Research areas (bento) ---------------------------------------------- */

.areas {
	display: grid;
	gap: var(--space-m);
	grid-template-columns: 1fr;
}
@media (min-width: 720px) { .areas { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) {
	.areas { grid-template-columns: 1.35fr 1fr 1fr; grid-template-rows: auto auto; }
	.area--lead { grid-column: 1; grid-row: 1 / span 2; }
}

.area {
	position: relative;
	display: flex;
	flex-direction: column;
	padding: var(--space-l);
	border: var(--hairline);
	border-radius: var(--radius-l);
	background: var(--bg);
	text-decoration: none;
	overflow: hidden;
	isolation: isolate;
	transition:
		transform var(--dur-base) var(--ease-out),
		box-shadow var(--dur-base) var(--ease-out),
		border-color var(--dur-base) var(--ease-out);
}
.area:hover { transform: translateY(-4px); box-shadow: var(--shadow-l); border-color: var(--border-strong); }

.area__icon {
	display: grid;
	place-items: center;
	width: 46px; height: 46px;
	border-radius: var(--radius-m);
	background: var(--accent-soft);
	color: var(--accent-text-hover);
}
.area__icon .icon { width: 22px; height: 22px; }

.area__title { margin: var(--space-m) 0 4px; font-size: var(--step-1); }
.area__title a { color: inherit; text-decoration: none; }
.area__count { font-size: var(--step--1); color: var(--text-subtle); font-variant-numeric: tabular-nums; }

/* Compact tiles: icon, name, count — no dead space between them. */
.area--tile { min-height: 0; padding-bottom: var(--space-2xl); color: var(--text); }
.area--tile .area__title { margin-top: var(--space-m); }
.area--tile .area__arrow {
	position: absolute;
	right: var(--space-l);
	bottom: var(--space-m);
	display: grid; place-items: center;
	width: 34px; height: 34px;
	border-radius: 50%;
	border: var(--hairline-strong);
	color: var(--text);
	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-base) var(--ease-out);
}
.area--tile .area__arrow .icon { width: 16px; height: 16px; }
.area--tile:hover .area__arrow { background: var(--ink); border-color: var(--ink); color: var(--white); transform: translateX(3px); }

/* Lead card: the ink one, with its sub-areas as chips */
.area--lead {
	justify-content: flex-start;
	padding: clamp(var(--space-l), 3vw, var(--space-2xl));
	border-color: transparent;
	background-color: var(--ink);
}
.area--lead::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -2;
	background:
		radial-gradient(70% 60% at 90% 0%, var(--veil-accent-md) 0%, transparent 62%),
		var(--gradient-ink);
	transition: transform var(--dur-slow) var(--ease-out);
}
.area--lead::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	opacity: 0.35;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='104' viewBox='0 0 120 104' fill='none' stroke='%2335c97f' stroke-opacity='0.3' stroke-width='1'%3E%3Cpath d='M30 2l28 16v32L30 66 2 50V18z'/%3E%3Cpath d='M90 2l28 16v32L90 66 62 50V18z'/%3E%3Cpath d='M60 54l28 16v32L60 118 32 102V70z'/%3E%3C/svg%3E");
	background-size: 120px 104px;
}
.area--lead:hover::before { transform: scale(1.05); }
.area--lead .area__top { display: flex; align-items: center; justify-content: space-between; gap: var(--space-s); }
.area--lead .area__title { font-size: var(--step-2); }
.area--lead .area__title a:hover { color: var(--accent-lift); }
.area--lead .area__desc { max-width: 34ch; margin: 0; color: var(--on-ink-muted); font-size: var(--step--1); }

.area__chips { display: flex; flex-wrap: wrap; gap: 6px; margin: var(--space-l) 0 0; padding: 0; list-style: none; }
.area__chips li { margin: 0; }
.area__chips a {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 34px;
	padding: 0 12px;
	border: 1px solid var(--on-ink-20);
	border-radius: var(--radius-full);
	color: var(--on-ink);
	font-size: var(--step--2);
	font-weight: 600;
	text-decoration: none;
	transition: border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.area__chips a span { color: var(--on-ink-muted); font-weight: 500; font-variant-numeric: tabular-nums; }
.area__chips a:hover { border-color: var(--accent-lift); color: var(--accent-lift); background: var(--veil-accent-xs); }

.area--all { background: var(--surface); border-style: dashed; }
.area--all:hover { background: var(--bg); }

.area__go {
	display: inline-flex;
	align-items: center;
	/* 24px minimum target height (WCAG 2.5.8); the text alone measured 22px. */
	min-height: 24px;
	gap: var(--space-2xs);
	margin-top: var(--space-l);
	color: var(--accent-lift);
	font-weight: 600;
	font-size: var(--step--1);
	text-decoration: none;
}
.area__go .icon { width: 1em; height: 1em; transition: transform var(--dur-base) var(--ease-out); }
.area__go:hover .icon { transform: translateX(4px); }

/* Two certificates per row on phones — one per row made the library a very
   long scroll for what are essentially thumbnails. */
@media (max-width: 639px) {
	.coa-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-s); }
	.coa-tile { padding: 6px; gap: var(--space-2xs); }
	.coa-tile figcaption { gap: 4px; }
	.coa-tile__label { font-size: var(--step--2); }
	.coa-tile figcaption .badge { padding: var(--space-3xs) var(--space-2xs); font-size: var(--step--3); letter-spacing: 0.03em; }
	.coa-tile__zoom { width: 32px; height: 32px; opacity: 1; transform: none; }
	.coa-tile__zoom .icon { width: 15px; height: 15px; }
}
