/**
 * Kelvin — WooCommerce layer.
 *
 * Catalog, product page, cart drawer, cart and checkout. The shop runs on Woo's
 * classic templates (rendered through the Classic Template block) so the lot,
 * purity and COA data can be placed with PHP hooks — see inc/woocommerce.php.
 */

/* -------------------------------------------------------------------------- *
 * 1. Product card — purity and lot on every card
 * -------------------------------------------------------------------------- */

.woocommerce ul.products,
ul.products {
	display: grid;
	grid-template-columns: repeat(var(--k-columns, 3), 1fr);
	gap: var(--wp--preset--spacing--40);
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce ul.products::before,
.woocommerce ul.products::after { content: none; }

/**
 * The cards are laid out with CSS grid on the <ul>, but woocommerce-layout.css
 * still ships its float grid and targets `.columns-N` — a (0,4,2) selector that
 * outranks a plain `li.product` one no matter which file loads last. Matching its
 * specificity is what keeps each card from collapsing to ~30% of its grid cell.
 */
.woocommerce ul.products li.product,
.woocommerce ul.products[class*="columns-"] li.product,
.woocommerce-page ul.products[class*="columns-"] li.product,
ul.products li.product {
	width: auto;
	float: none;
	clear: none;
	margin: 0;
	padding: 0;
	background: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--card);
	overflow: hidden;
	display: flex;
	flex-direction: column;
	transition: border-color .18s var(--wp--custom--ease), box-shadow .18s var(--wp--custom--ease);
}

.woocommerce ul.products li.product:hover {
	border-color: rgba(47, 95, 208, .45);
	box-shadow: var(--wp--preset--shadow--card);
}

.woocommerce ul.products li.product a.woocommerce-LoopProduct-link {
	display: block;
	text-decoration: none;
	color: inherit;
}

/* `li.product a img` in woocommerce.css is (0,3,3) and adds a 1em bottom margin,
   which would open a gap between the image and the card body. */
.woocommerce ul.products li.product img,
.woocommerce ul.products li.product a img,
ul.products li.product img {
	display: block;
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	margin: 0;
	background: var(--wp--custom--swatch);
	box-shadow: none;
}

/* Everything below the image sits in one padded stack. */
.woocommerce ul.products li.product .k-card__body {
	padding: 1rem;
	display: flex;
	flex-direction: column;
	flex: 1;
}

/* "99.4% · LOT K-2418" — the line that makes the card trustworthy. */
.k-lotline {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .625rem;
	letter-spacing: .02em;
	color: var(--wp--preset--color--accent);
	margin: 0;
	min-height: 1em;
}

.k-lotline--muted { color: var(--wp--preset--color--contrast-3); }

.woocommerce ul.products li.product .woocommerce-loop-product__title {
	font-size: var(--wp--preset--font-size--heading-s);
	font-weight: 500;
	line-height: 1.3;
	letter-spacing: var(--wp--custom--tracking--tight);
	color: var(--wp--preset--color--contrast);
	padding: 0;
	margin: .375rem 0 .75rem;
}

.woocommerce ul.products li.product .k-card__foot {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: .75rem;
	margin-top: auto;
}

.woocommerce ul.products li.product .price,
.woocommerce ul.products li.product .price ins {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .8125rem;
	font-weight: 400;
	color: var(--wp--preset--color--contrast);
	margin: 0;
	text-decoration: none;
}

.woocommerce ul.products li.product .price del {
	color: var(--wp--preset--color--contrast-4);
	font-size: .6875rem;
	margin-right: .375rem;
}

.woocommerce ul.products li.product .button,
.woocommerce ul.products li.product .added_to_cart {
	margin: 0;
	padding: .4375rem .8125rem;
	background: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast);
	border-radius: var(--wp--custom--radius--control);
	color: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--display);
	font-size: .71875rem;
	font-weight: 500;
	line-height: 1.2;
	white-space: nowrap;
	transition: background-color .18s var(--wp--custom--ease), border-color .18s var(--wp--custom--ease);
}

.woocommerce ul.products li.product .button:hover {
	background: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

/* Out of stock reads quieter but stays on the grid — restock date does the work. */
.woocommerce ul.products li.product.outofstock { opacity: .72; }

.woocommerce ul.products li.product.outofstock .button {
	background: transparent;
	color: var(--wp--preset--color--contrast);
	border-color: rgba(14, 17, 19, .25);
}

.woocommerce ul.products li.product .onsale,
.woocommerce span.onsale {
	position: absolute;
	top: .625rem;
	left: .625rem;
	/* Woo pins the badge with `right: 0`. Setting `left` without clearing that
	   leaves both edges anchored, which stretches the badge across the whole
	   card instead of letting it shrink to its label. */
	right: auto;
	bottom: auto;
	width: auto;
	min-height: 0;
	min-width: 0;
	margin: 0;
	padding: .25rem .5rem;
	line-height: 1.3;
	border-radius: var(--wp--custom--radius--control);
	background: var(--wp--preset--color--accent);
	color: #fff;
	font-family: var(--wp--preset--font-family--mono);
	font-size: .5625rem;
	letter-spacing: .06em;
	text-transform: uppercase;
}

.woocommerce ul.products li.product { position: relative; }

/**
 * Responsive columns override `grid-template-columns`, not `--k-columns`.
 *
 * The grid block prints `style="--k-columns:N"` inline on the <ul>, and an inline
 * custom property beats any stylesheet rule — so redefining the variable in a
 * media query silently did nothing and phones kept rendering three ~100px cards
 * side by side. Setting the resolved property instead works, because that one is
 * not inline.
 */
@media (max-width: 900px) {
	.woocommerce ul.products,
	ul.products {
		grid-template-columns: repeat(2, 1fr);
		gap: var(--wp--preset--spacing--20);
	}
}

@media (max-width: 380px) {
	.woocommerce ul.products,
	ul.products { grid-template-columns: 1fr; }
}

/* Tighter card interior on small screens, per the 390 spec in the design doc. */
@media (max-width: 600px) {
	.woocommerce ul.products li.product .k-card__body { padding: .75rem; }

	.k-lotline { font-size: .5625rem; }

	.woocommerce ul.products li.product .woocommerce-loop-product__title {
		font-size: .9375rem;
		margin: .3125rem 0 .4375rem;
	}

	.woocommerce ul.products li.product .k-card__foot {
		flex-direction: column;
		align-items: flex-start;
		gap: .5rem;
	}

	.woocommerce ul.products li.product .price { font-size: .71875rem; }

	.woocommerce ul.products li.product .button,
	.woocommerce ul.products li.product .added_to_cart {
		width: 100%;
		text-align: center;
	}
}

/* -------------------------------------------------------------------------- *
 * 2. Catalog — filters left, grid right
 * -------------------------------------------------------------------------- */

.k-shop {
	background: var(--wp--preset--color--base-2);
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50) var(--wp--preset--spacing--70);
}

.k-shop__inner { max-width: var(--wp--style--global--wide-size); margin-inline: auto; }

.k-shop__head {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 1.5rem;
	flex-wrap: wrap;
	margin-bottom: var(--wp--preset--spacing--40);
}

.k-shop__title {
	font-size: var(--wp--preset--font-size--display-m);
	line-height: 1.05;
	letter-spacing: -.035em;
	margin: 0;
}

.k-shop__count {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--contrast-3);
	margin: .625rem 0 0;
}

.k-shop__layout {
	display: grid;
	grid-template-columns: 220px 1fr;
	gap: 2.25rem;
	align-items: start;
}

.k-filters { display: grid; gap: 1.5rem; position: sticky; top: 5.5rem; }

.k-filters__group + .k-filters__group {
	border-top: 1px solid var(--wp--preset--color--hairline);
	padding-top: 1.25rem;
}

.k-filters__list { list-style: none; margin: .5rem 0 0; padding: 0; }

.k-filters__list li { line-height: 2; }

.k-filters__list a {
	font-size: .78125rem;
	color: var(--wp--preset--color--contrast-2);
	text-decoration: none;
}

.k-filters__list a:hover,
.k-filters__list .current-cat > a { color: var(--wp--preset--color--accent); }

.k-filters__note {
	border-top: 1px solid var(--wp--preset--color--hairline);
	padding-top: 1.25rem;
	font-family: var(--wp--preset--font-family--mono);
	font-size: .6875rem;
	line-height: 1.7;
	color: var(--wp--preset--color--contrast-3);
}

/* Woo's ordering select, restyled to the spec-plate control. */
.woocommerce .woocommerce-ordering { margin: 0; }

.woocommerce .woocommerce-ordering select {
	width: auto;
	padding: .5625rem .875rem;
	font-family: var(--wp--preset--font-family--display);
	font-size: .75rem;
	background: var(--wp--preset--color--base);
	border-color: var(--wp--preset--color--hairline);
}

.woocommerce .woocommerce-result-count { display: none; }

.woocommerce nav.woocommerce-pagination { margin-top: var(--wp--preset--spacing--40); }

.woocommerce nav.woocommerce-pagination ul {
	border: 0;
	display: flex;
	gap: .375rem;
	justify-content: center;
}

.woocommerce nav.woocommerce-pagination ul li { border: 0; margin: 0; overflow: visible; }

.woocommerce nav.woocommerce-pagination ul li a,
.woocommerce nav.woocommerce-pagination ul li span {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .75rem;
	padding: .5rem .75rem;
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--control);
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
}

.woocommerce nav.woocommerce-pagination ul li span.current {
	background: var(--wp--preset--color--contrast);
	border-color: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--base);
}

/**
 * On phones the filter rail becomes rows of chips that scroll sideways.
 *
 * A 220px sidebar stacked above the grid pushes the products off the first
 * screen entirely. Chips keep every facet reachable — nothing is dropped — while
 * costing about one line each.
 */
@media (max-width: 900px) {
	.k-shop__layout { grid-template-columns: 1fr; gap: 1.25rem; }

	.k-filters {
		position: static;
		display: block;
		margin-bottom: .25rem;
	}

	.k-filters__group + .k-filters__group {
		border-top: 0;
		padding-top: 0;
		margin-top: .875rem;
	}

	.k-filters__list {
		display: flex;
		gap: .5rem;
		margin-top: .5rem;
		padding-bottom: .25rem;
		overflow-x: auto;
		overscroll-behavior-inline: contain;
		scrollbar-width: none;
	}

	.k-filters__list::-webkit-scrollbar { display: none; }

	.k-filters__list li { flex: none; line-height: 1; }

	.k-filters__list a {
		display: block;
		padding: .5rem .8125rem;
		border: 1px solid var(--wp--preset--color--hairline);
		border-radius: var(--wp--custom--radius--pill);
		background: var(--wp--preset--color--base);
		font-size: .75rem;
		white-space: nowrap;
	}

	.k-filters__list .current-cat > a {
		background: var(--wp--preset--color--contrast);
		border-color: var(--wp--preset--color--contrast);
		color: var(--wp--preset--color--base);
	}

	/* The price range and the COA note are informational, not controls — they
	   move to the foot of the results rather than eating space above them. */
	.k-filters__note { display: none; }
}

/* -------------------------------------------------------------------------- *
 * 3. Product page — documentation above the fold
 * -------------------------------------------------------------------------- */

.k-pdp { background: var(--wp--preset--color--base-2); }

.k-pdp__band {
	padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--50) var(--wp--preset--spacing--70);
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
}

.woocommerce .woocommerce-breadcrumb {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	color: var(--wp--preset--color--contrast-3);
	margin: 0 0 var(--wp--preset--spacing--40);
}

.woocommerce .woocommerce-breadcrumb a { color: inherit; }
.woocommerce .woocommerce-breadcrumb a:hover { color: var(--wp--preset--color--accent); }

.woocommerce div.product {
	display: grid;
	grid-template-columns: 1.02fr .98fr;
	gap: clamp(1.5rem, 1rem + 2.8vw, 3.25rem);
	align-items: start;
}

.woocommerce div.product .woocommerce-product-gallery { width: 100%; float: none; margin: 0; }

.woocommerce div.product .woocommerce-product-gallery__wrapper { margin: 0; }

.woocommerce div.product .woocommerce-product-gallery img {
	border: 1px solid var(--wp--preset--color--hairline);
	background: var(--wp--custom--swatch);
	aspect-ratio: 1 / 1;
	object-fit: cover;
}

.woocommerce div.product .flex-control-thumbs {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: .625rem;
	margin: .625rem 0 0;
	list-style: none;
	padding: 0;
}

.woocommerce div.product .flex-control-thumbs li { width: auto; float: none; margin: 0; }

.woocommerce div.product .flex-control-thumbs img {
	border: 1px solid var(--wp--preset--color--hairline);
	opacity: 1;
	aspect-ratio: 1 / 1;
}

.woocommerce div.product .flex-control-thumbs img.flex-active,
.woocommerce div.product .flex-control-thumbs img:hover { border-color: var(--wp--preset--color--accent); }

.woocommerce div.product .summary.entry-summary { width: 100%; float: none; margin: 0; }

.k-pdp__eyebrow {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	letter-spacing: var(--wp--custom--tracking--cap);
	text-transform: uppercase;
	color: var(--wp--preset--color--accent);
	margin: 0;
}

.woocommerce div.product .product_title {
	font-size: var(--wp--preset--font-size--display-m);
	font-weight: 600;
	line-height: 1.05;
	letter-spacing: -.035em;
	margin: .875rem 0 .75rem;
	padding: 0;
}

/* "Lot K-2418 · 99.4% HPLC · Lyophilized · Tested 04/2026" */
.k-pdp__specline {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .75rem;
	line-height: 1.7;
	color: var(--wp--preset--color--contrast-3);
	margin: 0;
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
	display: flex;
	align-items: baseline;
	gap: .75rem;
	flex-wrap: wrap;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 1.875rem;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
	margin: 1.5rem 0 .375rem;
}

.woocommerce div.product p.price del {
	font-size: 1.125rem;
	color: var(--wp--preset--color--contrast-4);
	opacity: 1;
}

.woocommerce div.product p.price ins { text-decoration: none; }

.k-pdp__pricenote {
	font-family: var(--wp--preset--font-family--display);
	font-size: .75rem;
	font-weight: 400;
	color: var(--wp--preset--color--contrast-3);
}

.k-pdp__stock {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .71875rem;
	color: var(--wp--preset--color--accent);
	margin: 0 0 1.625rem;
}

.k-pdp__stock--out { color: var(--wp--preset--color--contrast-3); }

.woocommerce div.product form.cart {
	display: flex;
	gap: .625rem;
	align-items: stretch;
	margin: 0 0 .625rem;
}

.woocommerce div.product form.cart .quantity { margin: 0; }

.woocommerce div.product form.cart .button {
	flex: 1;
	padding: 1.0625rem;
	background: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast);
	border-radius: var(--wp--custom--radius--control);
	color: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--display);
	font-size: .875rem;
	font-weight: 500;
	line-height: 1;
	transition: background-color .18s var(--wp--custom--ease), border-color .18s var(--wp--custom--ease);
}

.woocommerce div.product form.cart .button:hover {
	background: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

.woocommerce div.product form.cart .variations { display: block; width: 100%; }

.woocommerce div.product form.cart .variations td,
.woocommerce div.product form.cart .variations th { display: block; padding: 0; text-align: left; }

.woocommerce div.product form.cart .variations label {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	text-transform: uppercase;
	letter-spacing: var(--wp--custom--tracking--cap);
	color: var(--wp--preset--color--contrast-3);
	margin-bottom: .375rem;
	display: block;
}

/* COA download — the second-most-clicked control on the page. */
.k-coa {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: .5rem;
	width: 100%;
	padding: .9375rem;
	border: 1px solid rgba(14, 17, 19, .2);
	border-radius: var(--wp--custom--radius--control);
	background: transparent;
	color: var(--wp--preset--color--contrast);
	font-size: .8125rem;
	font-weight: 500;
	text-decoration: none;
	text-align: center;
	transition: border-color .18s var(--wp--custom--ease), color .18s var(--wp--custom--ease);
}

.k-coa:hover { border-color: var(--wp--preset--color--accent); color: var(--wp--preset--color--accent); }

.k-assurances {
	display: grid;
	gap: .625rem;
	margin: 1.625rem 0 0;
	padding-top: 1.375rem;
	border-top: 1px solid var(--wp--preset--color--hairline);
	list-style: none;
}

.k-assurances li {
	display: flex;
	align-items: center;
	gap: .625rem;
	font-size: .75rem;
	color: var(--wp--preset--color--contrast-2);
}

.k-assurances li::before {
	content: "";
	width: 6px;
	height: 6px;
	background: var(--wp--preset--color--accent);
	flex: none;
}

/* Specs, assays, storage, shipping — disclosure rows on hairlines. */
.k-specs { margin-top: 1.625rem; border-top: 1px solid var(--wp--preset--color--hairline); }

.k-specs details { border-bottom: 1px solid var(--wp--preset--color--hairline); }

.k-specs summary {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 1rem;
	padding: .9375rem 0;
	font-size: .8125rem;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
	cursor: pointer;
	list-style: none;
}

.k-specs summary::-webkit-details-marker { display: none; }

.k-specs summary::after {
	content: "+";
	font-family: var(--wp--preset--font-family--mono);
	color: var(--wp--preset--color--contrast-3);
	font-size: .875rem;
	line-height: 1;
}

.k-specs details[open] > summary::after { content: "–"; }

.k-specs__table {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: .5rem 1.5rem;
	padding: .25rem 0 1rem;
	font-family: var(--wp--preset--font-family--mono);
	font-size: .71875rem;
	line-height: 1.8;
	color: var(--wp--preset--color--contrast-3);
}

.k-specs__table dt { margin: 0; }
.k-specs__table dd { margin: 0; color: var(--wp--preset--color--contrast); }

.k-specs__prose {
	padding: 0 0 1.125rem;
	font-size: .8125rem;
	line-height: 1.75;
	color: var(--wp--preset--color--contrast-2);
}

.woocommerce div.product .woocommerce-tabs,
.woocommerce div.product .related.products > h2 { display: none; }

/* Reviews and cross-sells sit outside the grid, full width. */
.k-pdp__section { grid-column: 1 / -1; }

.woocommerce div.product .up-sells,
.woocommerce div.product .related {
	grid-column: 1 / -1;
	width: 100%;
	margin: 0;
	float: none;
}

@media (max-width: 900px) {
	.woocommerce div.product { grid-template-columns: 1fr; }
}

/* Mobile sticky buy bar — price left, add to cart right. */
.k-buybar {
	position: fixed;
	inset: auto 0 0 0;
	z-index: 70;
	display: none;
	align-items: center;
	justify-content: space-between;
	gap: .75rem;
	padding: .75rem var(--wp--preset--spacing--30);
	background: rgba(255, 255, 255, .97);
	backdrop-filter: saturate(180%) blur(12px);
	border-top: 1px solid var(--wp--preset--color--hairline);
	box-shadow: 0 -2px 14px rgba(14, 17, 19, .08);
}

.k-buybar__price {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .9375rem;
	font-weight: 500;
}

.k-buybar__meta {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .5625rem;
	color: var(--wp--preset--color--accent);
	display: block;
}

.k-buybar .k-btn { padding: .875rem 1.5rem; }

@media (max-width: 782px) {
	body.single-product .k-buybar { display: flex; }
	body.single-product .k-footer { padding-bottom: 5.5rem; }
}

/* -------------------------------------------------------------------------- *
 * 4. Reviews
 * -------------------------------------------------------------------------- */

.woocommerce #reviews #comments > h2,
.woocommerce #reviews .comment-reply-title { display: none; }

.k-reviews__head {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 1rem;
	flex-wrap: wrap;
	margin-bottom: var(--wp--preset--spacing--40);
}

.k-reviews__note {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .71875rem;
	color: var(--wp--preset--color--contrast-3);
}

.woocommerce #reviews ol.commentlist {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--wp--preset--spacing--40);
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce #reviews ol.commentlist li {
	margin: 0;
	padding: 1.125rem 0 0;
	border-top: 2px solid var(--wp--preset--color--accent);
	background: transparent;
}

.woocommerce #reviews ol.commentlist li img.avatar { display: none; }

.woocommerce #reviews ol.commentlist li .comment-text {
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
}

.woocommerce #reviews ol.commentlist li .description p {
	font-size: 1rem;
	line-height: 1.55;
	color: var(--wp--preset--color--contrast);
	margin: 0 0 .875rem;
}

.woocommerce #reviews ol.commentlist li .meta {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-3);
}

.woocommerce #reviews ol.commentlist li .meta strong { font-weight: 400; }

/* Stars stay, but small and quiet — the assay data is the proof, not the rating. */
.woocommerce #reviews .star-rating { font-size: .6875rem; margin-bottom: .5rem; color: var(--wp--preset--color--accent); }

.woocommerce .woocommerce-review__verified {
	display: block;
	color: var(--wp--preset--color--accent);
	font-style: normal;
}

@media (max-width: 900px) { .woocommerce #reviews ol.commentlist { grid-template-columns: 1fr; } }

/* -------------------------------------------------------------------------- *
 * 5. Cart drawer
 * -------------------------------------------------------------------------- */

.k-drawer-backdrop {
	position: fixed;
	inset: 0;
	z-index: 90;
	background: rgba(14, 17, 19, .38);
	opacity: 0;
	visibility: hidden;
	transition: opacity .24s var(--wp--custom--ease), visibility .24s var(--wp--custom--ease);
}

.k-drawer {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	z-index: 100;
	width: min(420px, 100vw);
	display: flex;
	flex-direction: column;
	background: var(--wp--preset--color--base);
	box-shadow: var(--wp--preset--shadow--drawer);
	transform: translateX(100%);
	transition: transform .28s var(--wp--custom--ease);
	overscroll-behavior: contain;
}

/* Fragments swap this node wholesale, so it owns the column layout. */
.k-drawer__contents {
	display: flex;
	flex-direction: column;
	flex: 1;
	min-height: 0;
}

body.k-drawer-open .k-drawer-backdrop { opacity: 1; visibility: visible; }
body.k-drawer-open .k-drawer { transform: translateX(0); }
body.k-drawer-open { overflow: hidden; }

.k-drawer__head {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 1rem;
	padding: 1.125rem 1.25rem;
	border-bottom: 1px solid var(--wp--preset--color--hairline);
}

.k-drawer__title {
	font-size: .9375rem;
	font-weight: 600;
	letter-spacing: var(--wp--custom--tracking--tight);
	margin: 0;
}

/**
 * The dialog moves focus here on open, so this button wears the theme's focus
 * ring more often than any other control in the drawer. With `padding: 0` that
 * ring sat hard against the glyphs; the inset padding and matching radius give
 * it something to trace, and double as the hit target.
 */
.k-drawer__close {
	display: inline-flex;
	align-items: center;
	gap: .375rem;
	margin-right: -.375rem;
	background: none;
	border: 0;
	padding: .375rem .5rem;
	border-radius: var(--wp--custom--radius--control);
	font-family: var(--wp--preset--font-family--mono);
	font-size: .6875rem;
	color: var(--wp--preset--color--contrast-3);
	cursor: pointer;
	transition: background-color .15s var(--wp--custom--ease), color .15s var(--wp--custom--ease);
}

.k-drawer__close:hover {
	background: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--accent);
}

.k-drawer__body { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }

.k-drawer__items {
	list-style: none;
	margin: 0;
	padding: 1.125rem 1.25rem;
	display: grid;
	gap: 1.125rem;
}

.k-drawer__item { display: flex; gap: .875rem; }

.k-drawer__thumb {
	width: 74px;
	height: 74px;
	flex: none;
	border: 1px solid var(--wp--preset--color--hairline);
	background: var(--wp--custom--swatch);
	object-fit: cover;
}

.k-drawer__detail { flex: 1; min-width: 0; }

.k-drawer__name {
	font-size: .875rem;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
	display: block;
}

.k-drawer__name:hover { color: var(--wp--preset--color--accent); }

.k-drawer__lot {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	color: var(--wp--preset--color--accent);
	margin: .25rem 0 .5rem;
}

/* margin-top rather than relying on .k-drawer__lot's bottom margin: not every
   product carries a lot stamp, and without one the stepper collided with the
   product name. */
.k-drawer__row {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: .5rem;
	margin-top: .625rem;
}

/**
 * A real stepper, not three loose glyphs.
 *
 * Bare +/− characters sitting in the flow gave no hit target and no hint that
 * they were controls — the row read as stray punctuation next to the price. The
 * hairline capsule groups them, and each button gets a 26px square so it is
 * actually tappable on a phone.
 */
.k-drawer__qty {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--control);
	background: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--mono);
	font-size: .6875rem;
	color: var(--wp--preset--color--contrast-2);
	overflow: hidden;
}

/* The middle cell holds the count; fixed width keeps the capsule from twitching
   as the number goes 9 → 10. */
.k-drawer__qty > span {
	min-width: 1.75rem;
	text-align: center;
	font-variant-numeric: tabular-nums;
}

.k-drawer__qty button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	background: none;
	border: 0;
	padding: 0;
	color: var(--wp--preset--color--contrast-3);
	font: inherit;
	font-size: .8125rem;
	line-height: 1;
	cursor: pointer;
	transition: background-color .15s var(--wp--custom--ease), color .15s var(--wp--custom--ease);
}

.k-drawer__qty button:hover {
	background: var(--wp--preset--color--base-2);
	color: var(--wp--preset--color--accent);
}

/* The line total is the number the customer is actually checking; it carries a
   little more weight than the stepper beside it. */
.k-drawer__line {
	flex: none;
	font-family: var(--wp--preset--font-family--mono);
	font-size: .8125rem;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
}

/* Free-shipping progress — the one nudge the design allows. */
.k-shipbar {
	padding: 1rem 1.25rem;
	background: var(--wp--preset--color--base-2);
	border-block: 1px solid var(--wp--preset--color--hairline);
}

.k-shipbar__text {
	font-family: var(--wp--preset--font-family--mono);
	font-size: .6875rem;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-3);
	margin: 0;
}

.k-shipbar__track { height: 3px; background: var(--wp--preset--color--hairline); margin-top: .5625rem; }
.k-shipbar__fill { height: 3px; background: var(--wp--preset--color--accent); transition: width .3s var(--wp--custom--ease); }

.k-drawer__foot { padding: 1.125rem 1.25rem; border-top: 1px solid var(--wp--preset--color--hairline); }

.k-totals { display: grid; gap: .5rem; }

.k-totals__row {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	font-size: .78125rem;
	color: var(--wp--preset--color--contrast-2);
}

.k-totals__row span:last-child { font-family: var(--wp--preset--font-family--mono); }

.k-totals__row--total {
	align-items: baseline;
	margin-top: .5rem;
	padding-top: .875rem;
	border-top: 1px solid var(--wp--preset--color--hairline);
	font-size: .9375rem;
	font-weight: 600;
	color: var(--wp--preset--color--contrast);
}

.k-totals__row--total span:last-child { font-size: 1.25rem; font-weight: 500; }

/**
 * The two actions are not peers, and the stack has to say so.
 *
 * Checkout is the commitment and keeps full weight. "Keep shopping" is the way
 * back out, so it drops to a quiet text button rather than a second outlined
 * slab — two bordered blocks the same size read as a choice between equals and
 * made the foot look bottom-heavy. The page-wide .k-btn padding (1rem 2.25rem)
 * is also generous for a 400px drawer, so both are pulled in here.
 */
.k-drawer__actions {
	display: grid;
	gap: .375rem;
	margin-top: 1.125rem;
}

.k-drawer__actions .k-btn { padding-block: .8125rem; }

.k-drawer__actions .k-btn.k-btn--ghost {
	border-color: transparent;
	background: transparent;
	color: var(--wp--preset--color--contrast-3);
	font-size: .78125rem;
	padding-block: .625rem;
}

.k-drawer__actions .k-btn.k-btn--ghost:hover,
.k-drawer__actions .k-btn.k-btn--ghost:focus-visible {
	background: var(--wp--preset--color--base-2);
	border-color: transparent;
	color: var(--wp--preset--color--contrast);
}

.k-drawer__empty {
	padding: 3rem 1.25rem;
	text-align: center;
	font-family: var(--wp--preset--font-family--mono);
	font-size: .75rem;
	line-height: 1.8;
	color: var(--wp--preset--color--contrast-3);
}

.k-drawer.is-loading { opacity: .6; pointer-events: none; }

/* -------------------------------------------------------------------------- *
 * 6. Cart and checkout pages
 * -------------------------------------------------------------------------- */

.woocommerce-cart .k-page,
.woocommerce-checkout .k-page {
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50) var(--wp--preset--spacing--70);
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
}

.woocommerce table.shop_table {
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--card);
	border-collapse: separate;
	font-size: .8125rem;
}

.woocommerce table.shop_table th {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	font-weight: 400;
	letter-spacing: var(--wp--custom--tracking--cap);
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
}

.woocommerce table.shop_table td { border-top: 1px solid var(--wp--preset--color--hairline); }

.woocommerce table.shop_table .product-name a { font-weight: 500; }

.woocommerce .cart_totals h2,
.woocommerce-checkout h3 {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	font-weight: 400;
	letter-spacing: var(--wp--custom--tracking--cap);
	text-transform: uppercase;
	color: var(--wp--preset--color--accent);
	margin: 0 0 .875rem;
}

.woocommerce .cart_totals {
	background: var(--wp--preset--color--base-2);
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--card);
	padding: 1.5rem;
}

.woocommerce #payment,
.woocommerce-checkout #order_review {
	background: var(--wp--preset--color--base-2);
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--card);
	padding: 1.5rem;
}

.woocommerce .checkout .form-row { padding: 0; margin: 0 0 .5625rem; }

.woocommerce form .form-row label {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--cap);
	letter-spacing: .04em;
	color: var(--wp--preset--color--contrast-3);
	margin-bottom: .3125rem;
}

.woocommerce .select2-container .select2-selection--single {
	height: auto;
	padding: .5rem .3125rem;
	border: 1px solid var(--wp--preset--color--hairline);
	border-radius: var(--wp--custom--radius--control);
	font-family: var(--wp--preset--font-family--mono);
	font-size: .75rem;
}

.woocommerce #place_order,
.woocommerce .checkout-button,
.woocommerce button.button.alt,
.woocommerce a.button.alt {
	width: 100%;
	padding: 1.0625rem;
	background: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast);
	border-radius: var(--wp--custom--radius--control);
	color: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--display);
	font-size: .875rem;
	font-weight: 500;
	line-height: 1;
}

.woocommerce #place_order:hover,
.woocommerce .checkout-button:hover,
.woocommerce button.button.alt:hover {
	background: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--base);
}

/* The research-use confirmation that gates the order. */
.k-consent {
	display: flex;
	align-items: flex-start;
	gap: .625rem;
	margin: 1.125rem 0;
	padding: 0;
}

.k-consent input[type="checkbox"] {
	width: 14px;
	height: 14px;
	flex: none;
	margin-top: .1875rem;
	accent-color: var(--wp--preset--color--accent);
}

.k-consent label {
	font-family: var(--wp--preset--font-family--display);
	font-size: .71875rem;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-2);
	text-transform: none;
	letter-spacing: 0;
	margin: 0;
}

.k-checkout-assurances {
	margin-top: 1.375rem;
	padding-top: 1.125rem;
	border-top: 1px solid var(--wp--preset--color--hairline);
	display: grid;
	gap: .5625rem;
	list-style: none;
	font-size: .71875rem;
	color: var(--wp--preset--color--contrast-2);
}

.k-checkout-assurances li { display: flex; gap: .5rem; align-items: center; }

.k-checkout-assurances li::before {
	content: "";
	width: 5px;
	height: 5px;
	background: var(--wp--preset--color--accent);
	flex: none;
}

.woocommerce-message,
.woocommerce-info,
.woocommerce-error {
	border-top: 2px solid var(--wp--preset--color--accent);
	background: var(--wp--preset--color--base-2);
	border-radius: 0;
	font-size: .8125rem;
	padding: 1rem 1.25rem;
}

.woocommerce-message::before,
.woocommerce-info::before,
.woocommerce-error::before { display: none; }

.woocommerce-error { border-top-color: #C2453C; }

.woocommerce .woocommerce-message .button,
.woocommerce .woocommerce-info .button {
	background: transparent;
	border: 1px solid rgba(14, 17, 19, .2);
	color: var(--wp--preset--color--contrast);
	padding: .4375rem .8125rem;
	font-size: .71875rem;
	border-radius: var(--wp--custom--radius--control);
}
